560 {
562 CHECK_EQ(n, num_of_variables_) << "No. of variables wrong in eval_jac_g. n : " << n;
563 CHECK_EQ(m, num_of_constraints_) << "No. of constraints wrong in eval_jac_g. n : " << m;
564
565 if (values == nullptr) {
566 int nz_index = 0;
567 int constraint_index = 0;
568 int state_index = state_start_index_;
569 int control_index = control_start_index_;
570 int time_index = time_start_index_;
571
572
573 for (int i = 0; i < horizon_; ++i) {
574
575 iRow[nz_index] = state_index;
576 jCol[nz_index] = state_index;
577 ++nz_index;
578
579 iRow[nz_index] = state_index;
580 jCol[nz_index] = state_index + 2;
581 ++nz_index;
582
583 iRow[nz_index] = state_index;
584 jCol[nz_index] = state_index + 3;
585 ++nz_index;
586
587 iRow[nz_index] = state_index;
588 jCol[nz_index] = state_index + 4;
589 ++nz_index;
590
591
592 iRow[nz_index] = state_index;
593 jCol[nz_index] = control_index;
594 ++nz_index;
595
596 iRow[nz_index] = state_index;
597 jCol[nz_index] = control_index + 1;
598 ++nz_index;
599
600
601 iRow[nz_index] = state_index;
602 jCol[nz_index] = time_index;
603 ++nz_index;
604
605
606 iRow[nz_index] = state_index + 1;
607 jCol[nz_index] = state_index + 1;
608 ++nz_index;
609
610 iRow[nz_index] = state_index + 1;
611 jCol[nz_index] = state_index + 2;
612 ++nz_index;
613
614 iRow[nz_index] = state_index + 1;
615 jCol[nz_index] = state_index + 3;
616 ++nz_index;
617
618 iRow[nz_index] = state_index + 1;
619 jCol[nz_index] = state_index + 5;
620 ++nz_index;
621
622
623 iRow[nz_index] = state_index + 1;
624 jCol[nz_index] = control_index;
625 ++nz_index;
626
627 iRow[nz_index] = state_index + 1;
628 jCol[nz_index] = control_index + 1;
629 ++nz_index;
630
631
632 iRow[nz_index] = state_index + 1;
633 jCol[nz_index] = time_index;
634 ++nz_index;
635
636
637 iRow[nz_index] = state_index + 2;
638 jCol[nz_index] = state_index + 2;
639 ++nz_index;
640
641 iRow[nz_index] = state_index + 2;
642 jCol[nz_index] = state_index + 3;
643 ++nz_index;
644
645 iRow[nz_index] = state_index + 2;
646 jCol[nz_index] = state_index + 6;
647 ++nz_index;
648
649
650 iRow[nz_index] = state_index + 2;
651 jCol[nz_index] = control_index;
652 ++nz_index;
653
654 iRow[nz_index] = state_index + 2;
655 jCol[nz_index] = control_index + 1;
656 ++nz_index;
657
658
659 iRow[nz_index] = state_index + 2;
660 jCol[nz_index] = time_index;
661 ++nz_index;
662
663
664 iRow[nz_index] = state_index + 3;
665 jCol[nz_index] = state_index + 3;
666 ++nz_index;
667
668 iRow[nz_index] = state_index + 3;
669 jCol[nz_index] = state_index + 7;
670 ++nz_index;
671
672
673 iRow[nz_index] = state_index + 3;
674 jCol[nz_index] = control_index + 1;
675 ++nz_index;
676
677
678 iRow[nz_index] = state_index + 3;
679 jCol[nz_index] = time_index;
680 ++nz_index;
681
682 state_index += 4;
683 control_index += 2;
684 time_index++;
685 constraint_index += 4;
686 }
687
688
689 control_index = control_start_index_;
690 state_index = state_start_index_;
691 time_index = time_start_index_;
692
693
694 iRow[nz_index] = constraint_index;
695 jCol[nz_index] = control_index;
696 ++nz_index;
697
698
699 iRow[nz_index] = constraint_index;
700 jCol[nz_index] = time_index;
701 ++nz_index;
702
703 control_index += 2;
704 time_index++;
705 constraint_index++;
706
707 for (int i = 1; i < horizon_; ++i) {
708
709 iRow[nz_index] = constraint_index;
710 jCol[nz_index] = control_index - 2;
711 ++nz_index;
712
713
714 iRow[nz_index] = constraint_index;
715 jCol[nz_index] = control_index;
716 ++nz_index;
717
718
719 iRow[nz_index] = constraint_index;
720 jCol[nz_index] = time_index;
721 ++nz_index;
722
723
724 control_index += 2;
725 constraint_index++;
726 time_index++;
727 }
728
729
730 time_index = time_start_index_;
731
732 for (int i = 0; i < horizon_; ++i) {
733
734 iRow[nz_index] = constraint_index;
735 jCol[nz_index] = time_index;
736 ++nz_index;
737
738
739 iRow[nz_index] = constraint_index;
740 jCol[nz_index] = time_index + 1;
741 ++nz_index;
742
743 time_index++;
744 constraint_index++;
745 }
746
747
748
749 state_index = state_start_index_;
750 int l_index = l_start_index_;
751 int n_index = n_start_index_;
752 for (int i = 0; i < horizon_ + 1; ++i) {
753 for (int j = 0; j < obstacles_num_; ++j) {
754 int current_edges_num = obstacles_edges_num_(j, 0);
755
756
757 for (int k = 0; k < current_edges_num; ++k) {
758
759 iRow[nz_index] = constraint_index;
760 jCol[nz_index] = l_index + k;
761 ++nz_index;
762 }
763
764
765
766 iRow[nz_index] = constraint_index + 1;
767 jCol[nz_index] = state_index + 2;
768 ++nz_index;
769
770
771 for (int k = 0; k < current_edges_num; ++k) {
772 iRow[nz_index] = constraint_index + 1;
773 jCol[nz_index] = l_index + k;
774 ++nz_index;
775 }
776
777
778 iRow[nz_index] = constraint_index + 1;
779 jCol[nz_index] = n_index;
780 ++nz_index;
781
782 iRow[nz_index] = constraint_index + 1;
783 jCol[nz_index] = n_index + 2;
784 ++nz_index;
785
786
787
788 iRow[nz_index] = constraint_index + 2;
789 jCol[nz_index] = state_index + 2;
790 ++nz_index;
791
792
793 for (int k = 0; k < current_edges_num; ++k) {
794 iRow[nz_index] = constraint_index + 2;
795 jCol[nz_index] = l_index + k;
796 ++nz_index;
797 }
798
799
800 iRow[nz_index] = constraint_index + 2;
801 jCol[nz_index] = n_index + 1;
802 ++nz_index;
803
804 iRow[nz_index] = constraint_index + 2;
805 jCol[nz_index] = n_index + 3;
806 ++nz_index;
807
808
809
810 iRow[nz_index] = constraint_index + 3;
811 jCol[nz_index] = state_index;
812 ++nz_index;
813
814 iRow[nz_index] = constraint_index + 3;
815 jCol[nz_index] = state_index + 1;
816 ++nz_index;
817
818 iRow[nz_index] = constraint_index + 3;
819 jCol[nz_index] = state_index + 2;
820 ++nz_index;
821
822
823 for (int k = 0; k < current_edges_num; ++k) {
824 iRow[nz_index] = constraint_index + 3;
825 jCol[nz_index] = l_index + k;
826 ++nz_index;
827 }
828
829
830 for (int k = 0; k < 4; ++k) {
831 iRow[nz_index] = constraint_index + 3;
832 jCol[nz_index] = n_index + k;
833 ++nz_index;
834 }
835
836
837 l_index += current_edges_num;
838 n_index += 4;
839 constraint_index += 4;
840 }
841 state_index += 4;
842 }
843
844
845 state_index = state_start_index_;
846 control_index = control_start_index_;
847 time_index = time_start_index_;
848 l_index = l_start_index_;
849 n_index = n_start_index_;
850
851
852 iRow[nz_index] = constraint_index;
853 jCol[nz_index] = state_index;
854 nz_index++;
855 iRow[nz_index] = constraint_index + 1;
856 jCol[nz_index] = state_index + 1;
857 nz_index++;
858 iRow[nz_index] = constraint_index + 2;
859 jCol[nz_index] = state_index + 2;
860 nz_index++;
861 iRow[nz_index] = constraint_index + 3;
862 jCol[nz_index] = state_index + 3;
863 nz_index++;
864 constraint_index += 4;
865 state_index += 4;
866
867 for (int i = 1; i < horizon_; ++i) {
868 iRow[nz_index] = constraint_index;
869 jCol[nz_index] = state_index;
870 nz_index++;
871 iRow[nz_index] = constraint_index + 1;
872 jCol[nz_index] = state_index + 1;
873 nz_index++;
874 iRow[nz_index] = constraint_index + 2;
875 jCol[nz_index] = state_index + 3;
876 nz_index++;
877 constraint_index += 3;
878 state_index += 4;
879 }
880
881
882 iRow[nz_index] = constraint_index;
883 jCol[nz_index] = state_index;
884 nz_index++;
885 iRow[nz_index] = constraint_index + 1;
886 jCol[nz_index] = state_index + 1;
887 nz_index++;
888 iRow[nz_index] = constraint_index + 2;
889 jCol[nz_index] = state_index + 2;
890 nz_index++;
891 iRow[nz_index] = constraint_index + 3;
892 jCol[nz_index] = state_index + 3;
893 nz_index++;
894 constraint_index += 4;
895 state_index += 4;
896
897 for (int i = 0; i < horizon_; ++i) {
898 iRow[nz_index] = constraint_index;
899 jCol[nz_index] = control_index;
900 nz_index++;
901 iRow[nz_index] = constraint_index + 1;
902 jCol[nz_index] = control_index + 1;
903 nz_index++;
904 constraint_index += 2;
905 control_index += 2;
906 }
907
908 for (int i = 0; i < horizon_ + 1; ++i) {
909 iRow[nz_index] = constraint_index;
910 jCol[nz_index] = time_index;
911 nz_index++;
912 constraint_index++;
913 time_index++;
914 }
915
916 for (int i = 0; i < lambda_horizon_; ++i) {
917 iRow[nz_index] = constraint_index;
918 jCol[nz_index] = l_index;
919 nz_index++;
920 constraint_index++;
921 l_index++;
922 }
923
924 for (int i = 0; i < miu_horizon_; ++i) {
925 iRow[nz_index] = constraint_index;
926 jCol[nz_index] = n_index;
927 nz_index++;
928 constraint_index++;
929 n_index++;
930 }
931
932 CHECK_EQ(nz_index, static_cast<int>(nele_jac));
933 CHECK_EQ(constraint_index, static_cast<int>(m));
934 } else {
935 std::fill(values, values + nele_jac, 0.0);
936 int nz_index = 0;
937
938 int time_index = time_start_index_;
939 int state_index = state_start_index_;
940 int control_index = control_start_index_;
941
942
943
944
945 for (int i = 0; i < horizon_; ++i) {
946 values[nz_index] = -1.0;
947 ++nz_index;
948
949 values[nz_index] = x[time_index] * ts_
950 * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
951 * std::sin(x[state_index + 2]
952 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
953 / wheelbase_);
954 ++nz_index;
955
956 values[nz_index] = -1.0
957 * (x[time_index] * ts_
958 * std::cos(
959 x[state_index + 2]
960 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
961 / wheelbase_)
962 + x[time_index] * ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
963 * (-1) * x[time_index] * ts_ * 0.5 * std::tan(x[control_index]) / wheelbase_
964 * std::sin(
965 x[state_index + 2]
966 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
967 / wheelbase_));
968 ++nz_index;
969
970 values[nz_index] = 1.0;
971 ++nz_index;
972
973 values[nz_index] = x[time_index] * ts_
974 * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
975 * std::sin(x[state_index + 2]
976 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
977 / wheelbase_)
978 * x[time_index] * ts_ * 0.5 * x[state_index + 3]
979 / (std::cos(x[control_index]) * std::cos(x[control_index])) / wheelbase_;
980 ++nz_index;
981
982 values[nz_index] = -1.0
983 * (x[time_index] * ts_ * x[time_index] * ts_ * 0.5
984 * std::cos(
985 x[state_index + 2]
986 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
987 / wheelbase_));
988 ++nz_index;
989
990 values[nz_index] = -1.0
991 * (ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
992 * std::cos(
993 x[state_index + 2]
994 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
995 / wheelbase_)
996 + x[time_index] * ts_ * ts_ * 0.5 * x[control_index + 1]
997 * std::cos(
998 x[state_index + 2]
999 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1000 / wheelbase_)
1001 - x[time_index] * ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1002 * x[state_index + 3] * ts_ * 0.5 * std::tan(x[control_index]) / wheelbase_
1003 * std::sin(
1004 x[state_index + 2]
1005 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1006 / wheelbase_));
1007 ++nz_index;
1008
1009 values[nz_index] = -1.0;
1010 ++nz_index;
1011
1012 values[nz_index] = -1.0
1013 * (x[time_index] * ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1014 * std::cos(
1015 x[state_index + 2]
1016 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1017 / wheelbase_));
1018 ++nz_index;
1019
1020 values[nz_index] = -1.0
1021 * (x[time_index] * ts_
1022 * std::sin(
1023 x[state_index + 2]
1024 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1025 / wheelbase_)
1026 + x[time_index] * ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1027 * x[time_index] * ts_ * 0.5 * std::tan(x[control_index]) / wheelbase_
1028 * std::cos(
1029 x[state_index + 2]
1030 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1031 / wheelbase_));
1032 ++nz_index;
1033
1034 values[nz_index] = 1.0;
1035 ++nz_index;
1036
1037 values[nz_index] = -1.0
1038 * (x[time_index] * ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1039 * std::cos(
1040 x[state_index + 2]
1041 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1042 / wheelbase_)
1043 * x[time_index] * ts_ * 0.5 * x[state_index + 3]
1044 / (std::cos(x[control_index]) * std::cos(x[control_index])) / wheelbase_);
1045 ++nz_index;
1046
1047 values[nz_index] = -1.0
1048 * (x[time_index] * ts_ * x[time_index] * ts_ * 0.5
1049 * std::sin(
1050 x[state_index + 2]
1051 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1052 / wheelbase_));
1053 ++nz_index;
1054
1055 values[nz_index] = -1.0
1056 * (ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1057 * std::sin(
1058 x[state_index + 2]
1059 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1060 / wheelbase_)
1061 + x[time_index] * ts_ * ts_ * 0.5 * x[control_index + 1]
1062 * std::sin(
1063 x[state_index + 2]
1064 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1065 / wheelbase_)
1066 + x[time_index] * ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1067 * x[state_index + 3] * ts_ * 0.5 * std::tan(x[control_index]) / wheelbase_
1068 * std::cos(
1069 x[state_index + 2]
1070 + x[time_index] * ts_ * 0.5 * x[state_index + 3] * std::tan(x[control_index])
1071 / wheelbase_));
1072 ++nz_index;
1073
1074 values[nz_index] = -1.0;
1075 ++nz_index;
1076
1077 values[nz_index] = -1.0 * x[time_index] * ts_ * std::tan(x[control_index]) / wheelbase_;
1078 ++nz_index;
1079
1080 values[nz_index] = 1.0;
1081 ++nz_index;
1082
1083 values[nz_index] = -1.0
1084 * (x[time_index] * ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1085 / (std::cos(x[control_index]) * std::cos(x[control_index])) / wheelbase_);
1086 ++nz_index;
1087
1088 values[nz_index] = -1.0
1089 * (x[time_index] * ts_ * x[time_index] * ts_ * 0.5 * std::tan(x[control_index])
1090 / wheelbase_);
1091 ++nz_index;
1092
1093 values[nz_index] = -1.0
1094 * (ts_ * (x[state_index + 3] + x[time_index] * ts_ * 0.5 * x[control_index + 1])
1095 * std::tan(x[control_index]) / wheelbase_
1096 + x[time_index] * ts_ * ts_ * 0.5 * x[control_index + 1] * std::tan(x[control_index])
1097 / wheelbase_);
1098 ++nz_index;
1099
1100 values[nz_index] = -1.0;
1101 ++nz_index;
1102
1103 values[nz_index] = 1.0;
1104 ++nz_index;
1105
1106 values[nz_index] = -1.0 * ts_ * x[time_index];
1107 ++nz_index;
1108
1109 values[nz_index] = -1.0 * ts_ * x[control_index + 1];
1110 ++nz_index;
1111
1112 state_index += 4;
1113 control_index += 2;
1114 time_index++;
1115 }
1116
1117
1118 control_index = control_start_index_;
1119 state_index = state_start_index_;
1120 time_index = time_start_index_;
1121
1122
1123
1124
1125 values[nz_index] = 1.0 / x[time_index] / ts_;
1126 ++nz_index;
1127
1128
1129 values[nz_index] = -1.0 * (x[control_index] - last_time_u_(0, 0)) / x[time_index] / x[time_index] / ts_;
1130 ++nz_index;
1131 time_index++;
1132 control_index += 2;
1133
1134 for (int i = 1; i < horizon_; ++i) {
1135
1136
1137 values[nz_index] = -1.0 / x[time_index] / ts_;
1138 ++nz_index;
1139
1140
1141 values[nz_index] = 1.0 / x[time_index] / ts_;
1142 ++nz_index;
1143
1144
1145 values[nz_index] = -1.0 * (x[control_index] - x[control_index - 2]) / x[time_index] / x[time_index] / ts_;
1146 ++nz_index;
1147
1148 control_index += 2;
1149 time_index++;
1150 }
1151
1152 ADEBUG <<
"After fulfilled control rate constraints derivative, nz_index : " << nz_index
1153 << " nele_jac : " << nele_jac;
1154
1155
1156 time_index = time_start_index_;
1157 for (int i = 0; i < horizon_; ++i) {
1158
1159 values[nz_index] = -1.0;
1160 ++nz_index;
1161
1162
1163 values[nz_index] = 1.0;
1164 ++nz_index;
1165
1166 time_index++;
1167 }
1168
1169 ADEBUG <<
"After fulfilled time constraints derivative, nz_index : " << nz_index <<
" nele_jac : " << nele_jac;
1170
1171
1172
1173
1174 state_index = state_start_index_;
1175 int l_index = l_start_index_;
1176 int n_index = n_start_index_;
1177
1178 for (int i = 0; i < horizon_ + 1; ++i) {
1179 int edges_counter = 0;
1180 for (int j = 0; j < obstacles_num_; ++j) {
1181 int current_edges_num = obstacles_edges_num_(j, 0);
1182 Eigen::MatrixXd Aj = obstacles_A_.block(edges_counter, 0, current_edges_num, 2);
1183 Eigen::MatrixXd bj = obstacles_b_.block(edges_counter, 0, current_edges_num, 1);
1184
1185
1186 double tmp1 = 0;
1187 double tmp2 = 0;
1188 for (int k = 0; k < current_edges_num; ++k) {
1189
1190 tmp1 += Aj(k, 0) * x[l_index + k];
1191 tmp2 += Aj(k, 1) * x[l_index + k];
1192 }
1193
1194
1195 for (int k = 0; k < current_edges_num; ++k) {
1196
1197 values[nz_index] = 2 * tmp1 * Aj(k, 0) + 2 * tmp2 * Aj(k, 1);
1198 ++nz_index;
1199 }
1200
1201
1202
1203 values[nz_index] = -std::sin(x[state_index + 2]) * tmp1 + std::cos(x[state_index + 2]) * tmp2;
1204 ++nz_index;
1205
1206
1207 for (int k = 0; k < current_edges_num; ++k) {
1208 values[nz_index] = std::cos(x[state_index + 2]) * Aj(k, 0)
1209 + std::sin(x[state_index + 2]) * Aj(k, 1);
1210 ++nz_index;
1211 }
1212
1213
1214 values[nz_index] = 1.0;
1215 ++nz_index;
1216
1217 values[nz_index] = -1.0;
1218 ++nz_index;
1219
1220
1221
1222 values[nz_index] = -std::cos(x[state_index + 2]) * tmp1 - std::sin(x[state_index + 2]) * tmp2;
1223 ++nz_index;
1224
1225
1226 for (int k = 0; k < current_edges_num; ++k) {
1227 values[nz_index] = -std::sin(x[state_index + 2]) * Aj(k, 0)
1228 + std::cos(x[state_index + 2]) * Aj(k, 1);
1229 ++nz_index;
1230 }
1231
1232
1233 values[nz_index] = 1.0;
1234 ++nz_index;
1235
1236 values[nz_index] = -1.0;
1237 ++nz_index;
1238
1239
1240 double tmp3 = 0.0;
1241 double tmp4 = 0.0;
1242 for (int k = 0; k < 4; ++k) {
1243 tmp3 += -g_[k] * x[n_index + k];
1244 }
1245
1246 for (int k = 0; k < current_edges_num; ++k) {
1247 tmp4 += bj(k, 0) * x[l_index + k];
1248 }
1249
1250
1251 values[nz_index] = tmp1;
1252 ++nz_index;
1253
1254 values[nz_index] = tmp2;
1255 ++nz_index;
1256
1257 values[nz_index] = -std::sin(x[state_index + 2]) * offset_ * tmp1
1258 + std::cos(x[state_index + 2]) * offset_ * tmp2;
1259 ++nz_index;
1260
1261
1262 for (int k = 0; k < current_edges_num; ++k) {
1263 values[nz_index] = (x[state_index] + std::cos(x[state_index + 2]) * offset_) * Aj(k, 0)
1264 + (x[state_index + 1] + std::sin(x[state_index + 2]) * offset_) * Aj(k, 1)
1265 - bj(k, 0);
1266 ++nz_index;
1267 }
1268
1269
1270 for (int k = 0; k < 4; ++k) {
1271 values[nz_index] = -g_[k];
1272 ++nz_index;
1273 }
1274
1275
1276 edges_counter += current_edges_num;
1277 l_index += current_edges_num;
1278 n_index += 4;
1279 }
1280 state_index += 4;
1281 }
1282
1283
1284 state_index = state_start_index_;
1285 control_index = control_start_index_;
1286 time_index = time_start_index_;
1287 l_index = l_start_index_;
1288 n_index = n_start_index_;
1289
1290
1291 values[nz_index] = 1.0;
1292 nz_index++;
1293 values[nz_index] = 1.0;
1294 nz_index++;
1295 values[nz_index] = 1.0;
1296 nz_index++;
1297 values[nz_index] = 1.0;
1298 nz_index++;
1299
1300 for (int i = 1; i < horizon_; ++i) {
1301 values[nz_index] = 1.0;
1302 nz_index++;
1303 values[nz_index] = 1.0;
1304 nz_index++;
1305 values[nz_index] = 1.0;
1306 nz_index++;
1307 }
1308
1309
1310 values[nz_index] = 1.0;
1311 nz_index++;
1312 values[nz_index] = 1.0;
1313 nz_index++;
1314 values[nz_index] = 1.0;
1315 nz_index++;
1316 values[nz_index] = 1.0;
1317 nz_index++;
1318
1319 for (int i = 0; i < horizon_; ++i) {
1320 values[nz_index] = 1.0;
1321 nz_index++;
1322 values[nz_index] = 1.0;
1323 nz_index++;
1324 }
1325
1326 for (int i = 0; i < horizon_ + 1; ++i) {
1327 values[nz_index] = 1.0;
1328 nz_index++;
1329 }
1330
1331 for (int i = 0; i < lambda_horizon_; ++i) {
1332 values[nz_index] = 1.0;
1333 nz_index++;
1334 }
1335
1336 for (int i = 0; i < miu_horizon_; ++i) {
1337 values[nz_index] = 1.0;
1338 nz_index++;
1339 }
1340
1341 ADEBUG <<
"eval_jac_g, fulfilled obstacle constraint values";
1342 CHECK_EQ(nz_index, static_cast<int>(nele_jac));
1343 }
1344
1345 ADEBUG <<
"eval_jac_g done";
1346 return true;
1347}