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