-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy patht_opt_model.m
More file actions
2159 lines (1928 loc) · 85.8 KB
/
t_opt_model.m
File metadata and controls
2159 lines (1928 loc) · 85.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
function t_opt_model(quiet)
% t_opt_model - Tests for opt_model.
% MP-Opt-Model
% Copyright (c) 2012-2025, Power Systems Engineering Research Center (PSERC)
% by Ray Zimmerman, PSERC Cornell
%
% This file is part of MP-Opt-Model.
% Covered by the 3-clause BSD License (see LICENSE file for details).
% See https://github.com/MATPOWER/mp-opt-model for more info.
if nargin < 1
quiet = 0;
end
num_tests = 811;
t_begin(num_tests, quiet);
%%----- opt_model -----
t = 'constructor';
om = opt_model;
t_ok(isa(om, 'opt_model'), t);
%%----- add_var -----
t = 'add_var';
vN = 0;
vNS = 0;
om.init_set_types();
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''Va'', 4)';
nVa = 4;
om = opt_model;
om.add_var('Va', nVa);
vNS = vNS + 1; vN = vN + nVa;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''Pg'', 3, Pg0, Pgmin, Pgmax)';
nPg = 3;
om.add_var('Pg', nPg, [2;4;6], [1;2;3], [10;20;30]);
vNS = vNS + 1; vN = vN + nPg;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''Vm1'', 5, V0, Vmin, Vmax, ''I'')';
V0 = 1; %% should get expanded to ones(5, 1)
Vmin = 0; %% should get expanded to zeros(5, 1)
Vmax = 1 + 0.01*(1:5)';
vt = 'I';
om.add_var('Vm1', 5, V0, Vmin, Vmax, vt);
vNS = vNS + 1; vN = vN + 5;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''Vm2'', 5, V0, Vmin, Vmax, ''CIBIC'')';
nVm2 = 5;
vt = 'CIBIC';
om.add_var('Vm2', nVm2, V0, Vmin, Vmax, vt);
vNS = vNS + 1; vN = vN + nVm2;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.init_indexed_name(''var'', ''x'', dims)';
om.init_indexed_name('var', 'x', {2,2});
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''x'', {1,1}, 2)';
om.add_var('x', {1,1}, 2);
vNS = vNS + 1; vN = vN + 2;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''x'', {1,2}, 2, x0(1,2))';
om.add_var('x', {1,2}, 2, [-1;-2]);
vNS = vNS + 1; vN = vN + 2;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''x'', {2,1}, 3)';
om.add_var('x', {2,1}, 3);
vNS = vNS + 1; vN = vN + 3;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.add_var(''x'', {2,2}, 2, x0(2,2), xmin(2,2), xmax(2,2))';
om.add_var('x', {2,2}, 2, [1;0],[0;-1],[2;1]);
vNS = vNS + 1; vN = vN + 2;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
t = 'om.init_indexed_name(''var'', ''y'', {2,3,4})';
om.init_indexed_name('var', 'y', {2,3,4});
vt0 = {'C', 'I', 'B'};
for i = 1:2
for j = 1:3
for k = 1:4
n = i+j+k;
if i == 1
vt = vt0{j};
else
vt = char(vt0{j} * ones(1, n));
vt(j+1) = vt0{1+rem(j,3)};
end
% fprintf('%d %d %d : %s\n', i, j, k, vt);
t = sprintf('om.add_var(''y'', {%d,%d,%d}, y0, ymin, ymax, vt)', i,j,k);
om.add_var('y', {i,j,k}, n, 10*(n:-1:1)', -1*(n:-1:1)', 100+(n:-1:1)', vt);
vNS = vNS + 1; vN = vN + n;
t_ok(om.getN('var') == vN, sprintf('%s : var.N = %d', t, vN));
t_ok(om.get('var', 'NS') == vNS, sprintf('%s : var.NS = %d', t, vNS));
end
end
end
%%----- getN -----
t = 'om.getN(''var'', ''Pg'') == 3';
t_ok(om.getN('var', 'Pg') == 3, t);
t = 'size(om.getN(''var'', ''x'')) == [2 2]';
t_is(size(om.getN('var', 'x')), [2,2], 14, t);
t = 'om.getN(''var'', ''x'')(1,2) == 2';
N = om.getN('var', 'x');
t_is(N(1,2), 2, 14, t);
t = 'om.getN(''var'', ''x'', {2,1}) == 3';
t_is(om.getN('var', 'x', {2,1}), 3, 14, t);
t = 'om.getN(''var'', ''y'', {2,1,3}) == 6';
t_is(om.getN('var', 'y', {2,1,3}), 6, 14, t);
t = 'om.getN(''var'')';
t_is(om.getN('var'), vN, 14, t);
%%----- get_idx -----
t = 'get_idx : var';
vv = om.get_idx();
t_is([vv.i1.Pg vv.iN.Pg vv.N.Pg], [5 7 3], 14, [t ' : Pg']);
t_is(size(vv.i1.x), [2, 2], 14, [t ' : size(vv.i1.x)']);
t_is([vv.i1.x(2,1) vv.iN.x(2,1) vv.N.x(2,1)], [22 24 3], 14, [t ' : x(2,1)']);
t_is(size(vv.i1.y), [2, 3, 4], 14, [t ' : size(vv.i1.y)']);
t_is([vv.i1.y(2,2,4) vv.iN.y(2,2,4) vv.N.y(2,2,4)], [133 140 8], 14, [t ' : y(2,2,4)']);
t = 'get_idx(''var'')';
vv = om.get_idx('var');
t_is([vv.i1.Pg vv.iN.Pg vv.N.Pg], [5 7 3], 14, [t ' : Pg']);
t_is(size(vv.i1.x), [2, 2], 14, [t ' : size(vv.i1.x)']);
t_is([vv.i1.x(2,1) vv.iN.x(2,1) vv.N.x(2,1)], [22 24 3], 14, [t ' : x(2,1)']);
t_is(size(vv.i1.y), [2, 3, 4], 14, [t ' : size(vv.i1.y)']);
t_is([vv.i1.y(2,2,4) vv.iN.y(2,2,4) vv.N.y(2,2,4)], [133 140 8], 14, [t ' : y(2,2,4)']);
%%----- params_var -----
t = 'om.params_var(''Va'')';
[v0, vl, vu] = om.params_var('Va');
t_ok(~any(v0), [t ' : v0']);
t_ok(all(isinf(vl) & vl < 0), [t ' : vl']);
t_ok(all(isinf(vu) & vu > 0), [t ' : vu']);
t = 'om.params_var(''Pg'')';
[v0, vl, vu] = om.params_var('Pg');
t_is(v0, [2;4;6], 14, [t ' : v0']);
t_is(vl, [1;2;3], 14, [t ' : vl']);
t_is(vu, [10;20;30], 14, [t ' : vu']);
t = 'om.params_var(''Vm1'')';
[v0, vl, vu, vt] = om.params_var('Vm1');
t_is(double(vt), double('I'), 14, [t ' : vt']);
t = 'om.params_var(''Vm2'')';
[v0, vl, vu, vt] = om.params_var('Vm2');
t_is(double(vt), double('CIBIC'), 14, [t ' : vt']);
t = 'om.params_var(''x'')';
[v0, vl, vu, vt] = om.params_var('x');
t_is(size(v0), [2,2], 14, [t ' : size(v0)']);
t_is(v0{2,2}, [1;0], 14, [t ' : v0{2,2}']);
t_is(vl{2,2}, [0;-1], 14, [t ' : vl{2,2}']);
t_is(vu{2,2}, [2;1], 14, [t ' : vu{2,2}']);
t_is(double(vt{2,2}), double('C'), 14, [t ' : vt{2,2}']);
for i = 1:2
for j = 1:3
for k = 1:4
n = i+j+k;
if i == 1
vt = vt0{j};
else
vt = char(vt0{j} * ones(1, n));
vt(j+1) = vt0{1+rem(j,3)};
end
t = sprintf('om.params_var(''y'', {%d,%d,%d})', i, j, k);
[v0, vl, vu, gvt] = om.params_var('y', {i,j,k});
t_is(v0, 10*(n:-1:1)', 14, [t ' : v0']);
t_is(vl, -1*(n:-1:1)', 14, [t ' : vl']);
t_is(vu, 100+(n:-1:1)', 14, [t ' : vu']);
t_is(gvt, vt, 14, [t ' : vt']);
end
end
end
t = 'om.params_var()';
[v0, vl, vu, vt] = om.params_var();
t_ok(length(v0) == om.getN('var'), [t ' : length(v0)']);
t_ok(length(vl) == om.getN('var'), [t ' : length(vl)']);
t_ok(length(vu) == om.getN('var'), [t ' : length(vu)']);
t_is(v0(vv.i1.x(2,2):vv.iN.x(2,2)), [1;0], 14, [t ' : v0(vv.i1.x(2,2):vv.iN.x(2,2))']);
t_is(vl(vv.i1.x(2,2):vv.iN.x(2,2)), [0;-1], 14, [t ' : vl(vv.i1.x(2,2):vv.iN.x(2,2))']);
t_is(vu(vv.i1.x(2,2):vv.iN.x(2,2)), [2;1], 14, [t ' : vu(vv.i1.x(2,2):vv.iN.x(2,2))']);
t_is(vt(vv.i1.x(2,2):vv.iN.x(2,2)), 'C', 14, [t ' : vt(vv.i1.x(2,2):vv.iN.x(2,2))']);
n = 8;
t_is(v0(vv.i1.y(2,2,4):vv.iN.y(2,2,4)), 10*(n:-1:1)', 14, [t ' : v0(vv.i1.y(2,2,4):vv.iN.y(2,2,4))']);
t_is(vl(vv.i1.y(2,2,4):vv.iN.y(2,2,4)), -1*(n:-1:1)', 14, [t ' : vl(vv.i1.y(2,2,4):vv.iN.y(2,2,4))']);
t_is(vu(vv.i1.y(2,2,4):vv.iN.y(2,2,4)), 100+(n:-1:1)', 14, [t ' : vu(vv.i1.y(2,2,4):vv.iN.y(2,2,4))']);
t_is(vt(vv.i1.y(2,2,4):vv.iN.y(2,2,4)), 'IIBIIIII', 14, [t ' : vt(vv.i1.y(2,2,4):vv.iN.y(2,2,4))']);
vt0 = 'CCCCCCCIIIIICIBICCCCCCCCCCCCCCCCCCCCCCCCCCCCIIIIIIIIIIIIIIIIIIIIIIBBBBBBBBBBBBBBBBBBBBBBBBBBCICCCICCCCICCCCCICCCCCIIBIIIIBIIIIIBIIIIIIBIIIIIBBBCBBBBBCBBBBBBCBBBBBBBCBBBBB';
t_is(vt, vt0, 14, [t ' : vt']);
%%----- varsets_len -----
t = 'om.varsets_len(vs) : ';
vs = om.varsets_cell2struct({'Pg'});
t_is(om.varsets_len(vs), 3, 14, [t '{''Pg''}']);
vs = om.varsets_cell2struct({'Pg', 'Va'});
t_is(om.varsets_len(vs), 7, 14, [t '{''Pg'', ''Va''}']);
vs = struct('name', 'x', 'idx', {{1,1},{2,1}});
t_is(om.varsets_len(vs), 5, 14, [t '''x'', {{1,1},{2,1}}']);
vs = om.varsets_cell2struct({'x'});
t_is(om.varsets_len(vs), 9, 14, [t '{''x''}']);
vs = om.varsets_cell2struct({'x', 'y', 'Pg'});
t_is(om.varsets_len(vs), 156, 14, [t '{''x'', ''y'', ''Pg''}']);
vs = om.varsets_cell2struct({});
t_is(om.varsets_len(vs), om.var.N, 14, [t '<all>']);
%%----- varsets_idx -----
t = 'om.varsets_idx(vs) : ';
vv = om.get_idx('var');
vs = om.varsets_cell2struct({'Pg'});
t_is(om.varsets_idx(vs), [vv.i1.Pg:vv.iN.Pg], 14, [t '{''Pg''}']);
vs = om.varsets_cell2struct({'Pg', 'Va'});
t_is(om.varsets_idx(vs), [vv.i1.Pg:vv.iN.Pg vv.i1.Va:vv.iN.Va], 14, [t '{''Pg'', ''Va''}']);
vs = struct('name', 'x', 'idx', {{1,1},{2,1}});
t_is(om.varsets_idx(vs), [vv.i1.x(1,1):vv.iN.x(1,1) vv.i1.x(2,1):vv.iN.x(2,1)], 14, [t '''x'', {{1,1},{2,1}}']);
vs = om.varsets_cell2struct({'x'});
t_is(om.varsets_idx(vs), [vv.i1.x(1,1):vv.iN.x(1,1) vv.i1.x(1,2):vv.iN.x(1,2) vv.i1.x(2,1):vv.iN.x(2,1) vv.i1.x(2,2):vv.iN.x(2,2)], 14, [t '{''x''}']);
vs = om.varsets_cell2struct({});
t_is(om.varsets_idx(vs), 1:om.var.N, 14, [t '<all>']);
%%----- varsets_x -----
t = 'varsets_x(x, vs) : ';
x = (1:om.var.N)';
vs = om.varsets_cell2struct({'Pg'});
xx = om.varsets_x(x, vs);
t_is(length(xx), 1, 14, [t '{''Pg''} : length']);
t_is(xx{1}, [vv.i1.Pg:vv.iN.Pg]', 14, [t '{''Pg''} : 1']);
vs = om.varsets_cell2struct({'Pg', 'Va'});
xx = om.varsets_x(x, vs);
t_is(length(xx), 2, 14, [t '{''Pg'', ''Va''} : length']);
t_is(xx{1}, [vv.i1.Pg:vv.iN.Pg]', 14, [t '{''Pg'', ''Va''} : 1']);
t_is(xx{2}, [vv.i1.Va:vv.iN.Va]', 14, [t '{''Pg'', ''Va''} : 2']);
vs = struct('name', 'x', 'idx', {{1,1},{2,1}});
xx = om.varsets_x(x, vs);
t_is(length(xx), 2, 14, [t '''x'', {{1,1},{2,1}} : length']);
t_is(xx{1}, [vv.i1.x(1,1):vv.iN.x(1,1)]', 14, [t '''x'', {{1,1},{2,1}} : 1']);
t_is(xx{2}, [vv.i1.x(2,1):vv.iN.x(2,1)]', 14, [t '''x'', {{1,1},{2,1}} : 2']);
vs = om.varsets_cell2struct({'x'});
xx = om.varsets_x(x, vs);
t_is(length(xx), 4, 14, [t '{''x''} : length']);
t_is(xx{1}, [vv.i1.x(1,1):vv.iN.x(1,1)]', 14, [t '{''x''} : 1']);
t_is(xx{2}, [vv.i1.x(1,2):vv.iN.x(1,2)]', 14, [t '{''x''} : 2']);
t_is(xx{3}, [vv.i1.x(2,1):vv.iN.x(2,1)]', 14, [t '{''x''} : 3']);
t_is(xx{4}, [vv.i1.x(2,2):vv.iN.x(2,2)]', 14, [t '{''x''} : 4']);
vs = om.varsets_cell2struct({'x', 'y', 'Pg'});
xx = om.varsets_x(x, vs);
t_is(length(xx), 29, 14, [t '{''x'', ''y'', ''Pg''} : length']);
t_is(xx{ 1}, [vv.i1.x(1,1):vv.iN.x(1,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 1']);
t_is(xx{ 2}, [vv.i1.x(1,2):vv.iN.x(1,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 2']);
t_is(xx{ 3}, [vv.i1.x(2,1):vv.iN.x(2,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 3']);
t_is(xx{ 4}, [vv.i1.x(2,2):vv.iN.x(2,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 4']);
t_is(xx{ 5}, [vv.i1.y(1,1,1):vv.iN.y(1,1,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 5']);
t_is(xx{ 6}, [vv.i1.y(1,1,2):vv.iN.y(1,1,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 6']);
t_is(xx{ 7}, [vv.i1.y(1,1,3):vv.iN.y(1,1,3)]', 14, [t '{''x'', ''y'', ''Pg''} : 7']);
t_is(xx{ 8}, [vv.i1.y(1,1,4):vv.iN.y(1,1,4)]', 14, [t '{''x'', ''y'', ''Pg''} : 8']);
t_is(xx{ 9}, [vv.i1.y(1,2,1):vv.iN.y(1,2,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 9']);
t_is(xx{10}, [vv.i1.y(1,2,2):vv.iN.y(1,2,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 10']);
t_is(xx{11}, [vv.i1.y(1,2,3):vv.iN.y(1,2,3)]', 14, [t '{''x'', ''y'', ''Pg''} : 11']);
t_is(xx{12}, [vv.i1.y(1,2,4):vv.iN.y(1,2,4)]', 14, [t '{''x'', ''y'', ''Pg''} : 12']);
t_is(xx{13}, [vv.i1.y(1,3,1):vv.iN.y(1,3,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 13']);
t_is(xx{14}, [vv.i1.y(1,3,2):vv.iN.y(1,3,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 14']);
t_is(xx{15}, [vv.i1.y(1,3,3):vv.iN.y(1,3,3)]', 14, [t '{''x'', ''y'', ''Pg''} : 15']);
t_is(xx{16}, [vv.i1.y(1,3,4):vv.iN.y(1,3,4)]', 14, [t '{''x'', ''y'', ''Pg''} : 16']);
t_is(xx{17}, [vv.i1.y(2,1,1):vv.iN.y(2,1,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 17']);
t_is(xx{18}, [vv.i1.y(2,1,2):vv.iN.y(2,1,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 18']);
t_is(xx{19}, [vv.i1.y(2,1,3):vv.iN.y(2,1,3)]', 14, [t '{''x'', ''y'', ''Pg''} : 19']);
t_is(xx{20}, [vv.i1.y(2,1,4):vv.iN.y(2,1,4)]', 14, [t '{''x'', ''y'', ''Pg''} : 20']);
t_is(xx{21}, [vv.i1.y(2,2,1):vv.iN.y(2,2,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 21']);
t_is(xx{22}, [vv.i1.y(2,2,2):vv.iN.y(2,2,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 22']);
t_is(xx{23}, [vv.i1.y(2,2,3):vv.iN.y(2,2,3)]', 14, [t '{''x'', ''y'', ''Pg''} : 23']);
t_is(xx{24}, [vv.i1.y(2,2,4):vv.iN.y(2,2,4)]', 14, [t '{''x'', ''y'', ''Pg''} : 24']);
t_is(xx{25}, [vv.i1.y(2,3,1):vv.iN.y(2,3,1)]', 14, [t '{''x'', ''y'', ''Pg''} : 25']);
t_is(xx{26}, [vv.i1.y(2,3,2):vv.iN.y(2,3,2)]', 14, [t '{''x'', ''y'', ''Pg''} : 26']);
t_is(xx{27}, [vv.i1.y(2,3,3):vv.iN.y(2,3,3)]', 14, [t '{''x'', ''y'', ''Pg''} : 27']);
t_is(xx{28}, [vv.i1.y(2,3,4):vv.iN.y(2,3,4)]', 14, [t '{''x'', ''y'', ''Pg''} : 28']);
t_is(xx{29}, [vv.i1.Pg:vv.iN.Pg]', 14, [t '{''x'', ''y'', ''Pg''} : 29']);
vs = om.varsets_cell2struct({});
xx = om.varsets_x(x, vs);
t_is(length(xx), om.var.N, 14, [t '<all> : length']);
t_is(xx, [1:om.var.N]', 14, [t '<all>']);
t = 'varsets_x(x, vs, ''vector'') : ';
vs = om.varsets_cell2struct({'Pg'});
xx = om.varsets_x(x, vs, 'vector');
t_is(length(xx), vv.N.Pg, 14, [t '{''Pg''} : length']);
t_is(xx, [vv.i1.Pg:vv.iN.Pg]', 14, [t '{''Pg''}']);
vs = om.varsets_cell2struct({'Pg', 'Va'});
xx = om.varsets_x(x, vs, 'vector');
t_is(length(xx), vv.N.Va + vv.N.Pg, 14, [t '{''Pg'', ''Va''} : length']);
t_is(xx, [vv.i1.Pg:vv.iN.Pg vv.i1.Va:vv.iN.Va]', 14, [t '{''Pg'', ''Va''}']);
vs = struct('name', 'x', 'idx', {{1,1},{2,1}});
xx = om.varsets_x(x, vs, 'vector');
t_is(length(xx), vv.N.x(1,1) + vv.N.x(2,1), 14, [t '''x'', {{1,1},{2,1}} : length']);
t_is(xx, [vv.i1.x(1,1):vv.iN.x(1,1) vv.i1.x(2,1):vv.iN.x(2,1)]', 14, [t '''x'', {{1,1},{2,1}}']);
vs = om.varsets_cell2struct({'x'});
xx = om.varsets_x(x, vs, 'vector');
t_is(length(xx), sum(vv.N.x(:)), 14, [t '{''x''} : length']);
t_is(xx, [vv.i1.x(1,1):vv.iN.x(1,1) vv.i1.x(1,2):vv.iN.x(1,2) vv.i1.x(2,1):vv.iN.x(2,1) vv.i1.x(2,2):vv.iN.x(2,2)]', 14, [t '{''x''}']);
vs = om.varsets_cell2struct({'x', 'y', 'Pg'});
xx = om.varsets_x(x, vs, 'vector');
t_is(length(xx), sum(vv.N.x(:))+sum(vv.N.y(:))+vv.N.Pg, 14, [t '{''x'', ''y'', ''Pg''} : length']);
t_is(xx, [ vv.i1.x(1,1):vv.iN.x(1,1) vv.i1.x(1,2):vv.iN.x(1,2) ...
vv.i1.x(2,1):vv.iN.x(2,1) vv.i1.x(2,2):vv.iN.x(2,2) ...
vv.i1.y(1,1,1):vv.iN.y(1,1,1) vv.i1.y(1,1,2):vv.iN.y(1,1,2) ...
vv.i1.y(1,1,3):vv.iN.y(1,1,3) vv.i1.y(1,1,4):vv.iN.y(1,1,4) ...
vv.i1.y(1,2,1):vv.iN.y(1,2,1) vv.i1.y(1,2,2):vv.iN.y(1,2,2) ...
vv.i1.y(1,2,3):vv.iN.y(1,2,3) vv.i1.y(1,2,4):vv.iN.y(1,2,4) ...
vv.i1.y(1,3,1):vv.iN.y(1,3,1) vv.i1.y(1,3,2):vv.iN.y(1,3,2) ...
vv.i1.y(1,3,3):vv.iN.y(1,3,3) vv.i1.y(1,3,4):vv.iN.y(1,3,4) ...
vv.i1.y(2,1,1):vv.iN.y(2,1,1) vv.i1.y(2,1,2):vv.iN.y(2,1,2) ...
vv.i1.y(2,1,3):vv.iN.y(2,1,3) vv.i1.y(2,1,4):vv.iN.y(2,1,4) ...
vv.i1.y(2,2,1):vv.iN.y(2,2,1) vv.i1.y(2,2,2):vv.iN.y(2,2,2) ...
vv.i1.y(2,2,3):vv.iN.y(2,2,3) vv.i1.y(2,2,4):vv.iN.y(2,2,4) ...
vv.i1.y(2,3,1):vv.iN.y(2,3,1) vv.i1.y(2,3,2):vv.iN.y(2,3,2) ...
vv.i1.y(2,3,3):vv.iN.y(2,3,3) vv.i1.y(2,3,4):vv.iN.y(2,3,4) ...
vv.i1.Pg:vv.iN.Pg]', 14, [t '{''x'', ''y'', ''Pg''}']);
vs = om.varsets_cell2struct({});
xx = om.varsets_x(x, vs, 'vector');
t_is(length(xx), om.var.N, 14, [t '<all> : length']);
t_is(xx, [1:om.var.N]', 14, [t '<all>']);
%%----- add_lin_constraint -----
t = 'add_lin_constraint';
lN = 0;
lNS = 0;
t_ok(om.getN('lin') == lN, sprintf('%s : lin.N = %d', t, lN));
t_ok(om.get('lin', 'NS') == lNS, sprintf('%s : lin.NS = %d', t, lNS));
t = 'om.add_lin_constraint(''Pmis'', A, l, u, {''Va'', ''Pg''})';
A1 = sparse([1:3 1:3 1:3]', [1:3 4:6 7 7 7]', [1 1 1 -1 -1 -1 2 3 4]', 3, 7);
l1 = -(1:3)'; u1 = (1:3)';
om.add_lin_constraint('Pmis', A1, l1, u1, {'Va', 'Pg'});
lNS = lNS + 1; lN = lN + 3;
t_ok(om.getN('lin') == lN, sprintf('%s : lin.N = %d', t, lN));
t_ok(om.get('lin', 'NS') == lNS, sprintf('%s : lin.NS = %d', t, lNS));
t = 'om.add_lin_constraint(''Qmis'', A, l, u)';
A2 = sparse([1:3 1:3 1:3]', [1:3 4:6 7 7 7]', [1 1 1 -1 -1 -1 2 3 4]', 3, vN);
om.add_lin_constraint('Qmis', A2, l1, u1);
lNS = lNS + 1; lN = lN + 3;
t_ok(om.getN('lin') == lN, sprintf('%s : lin.N = %d', t, lN));
t_ok(om.get('lin', 'NS') == lNS, sprintf('%s : lin.NS = %d', t, lNS));
t = 'om.init_indexed_name(''lin'', ''mylin'', {2, 2})';
om.init_indexed_name('lin', 'mylin', {2, 2});
t_ok(om.getN('lin') == lN, sprintf('%s : lin.N = %d', t, lN));
t_ok(om.get('lin', 'NS') == lNS, sprintf('%s : lin.NS = %d', t, lNS));
for i = 1:2
for j = 1:2
t = sprintf('om.add_lin_constraint(''mylin'', {%d,%d}, A, l, u, vs)', i,j);
A = sparse([1:(i+j) 1:(i+j)]', [1:(i+j) 5*ones(1,i+j)]', ...
[ones(i+j,1);-ones(i+j,1)], i+j, 3+2+(i==2 && j==1));
l = -1; u = [];
vs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
om.add_lin_constraint('mylin', {i, j}, A', l, u, vs, 1);
lNS = lNS + 1; lN = lN + i+j;
t_ok(om.getN('lin') == lN, sprintf('%s : lin.N = %d', t, lN));
t_ok(om.get('lin', 'NS') == lNS, sprintf('%s : lin.NS = %d', t, lNS));
end
end
t = 'om.add_lin_constraint(''onerow'', A, l, u)';
A4 = sparse([1 1 1]', [1:3]', [-1 -2 -3]', 1, vN);
om.add_lin_constraint('onerow', A4, 0, Inf);
lNS = lNS + 1; lN = lN + 1;
t_ok(om.getN('lin') == lN, sprintf('%s : lin.N = %d', t, lN));
t_ok(om.get('lin', 'NS') == lNS, sprintf('%s : lin.NS = %d', t, lNS));
%%----- om.qcn.add (quadratic constraints) -----
t = 'om.qcn.add';
qN = 0;
qNS = 0;
t_ok(om.getN('qcn') == qN, sprintf('%s : qcn.N = %d', t, qN));
t_ok(om.get('qcn', 'NS') == qNS, sprintf('%s : qcn.NS = %d', t, qNS));
t = 'om.qcn.add(om.var,''Pmis'', Q, B, lq, uq, {''Va'', ''Pg''})';
Q1 = repmat({sparse([1:6 1:6], [1:3 1:3 4:6 4:6], [ones(1,6) -ones(1,6)], 7, 7)}, 3, 1);
B1 = sparse([1:3 1:3 1:3]', [1:3 4:6 7 7 7]', [1 1 1 -1 -1 -1 2 3 4]', 3, 7);
lq1 = -(1:3)'; uq1 = (1:3)';
om.qcn.add(om.var, 'Pmis', Q1, B1, lq1, uq1, {'Va', 'Pg'});
qNS = qNS + 1; qN = qN + 3;
t_ok(om.getN('qcn') == qN, sprintf('%s : qcn.N = %d', t, qN));
t_ok(om.get('qcn', 'NS') == qNS, sprintf('%s : qcn.NS = %d', t, qNS));
t = 'om.qcn.add(om.var,''Qmis'', Q, B, lq, uq)';
Q2 = repmat({sparse([1:6 1:6], [1:3 1:3 4:6 4:6], [ones(1,6) -ones(1,6)], vN, vN)}, 3, 1);
B2 = sparse([1:3 1:3 1:3]', [1:3 4:6 7 7 7]', [1 1 1 -1 -1 -1 2 3 4]', 3, vN);
om.qcn.add(om.var, 'Qmis', Q2, B2, lq1, uq1);
qNS = qNS + 1; qN = qN + 3;
t_ok(om.getN('qcn') == qN, sprintf('%s : qcn.N = %d', t, qN));
t_ok(om.get('qcn', 'NS') == qNS, sprintf('%s : qcn.NS = %d', t, qNS));
t = 'om.init_indexed_name(''qcn'', ''myqcn'', {2, 2})';
om.init_indexed_name('qcn', 'myqcn', {2,2});
t_ok(om.getN('qcn') == qN, sprintf('%s : qcn.N = %d', t, qN));
t_ok(om.get('qcn', 'NS') == qNS, sprintf('%s : qcn.NS = %d', t, qNS));
for i = 1:2
for j = 1:2
t = sprintf('om.qcn.add(om.var, ''myqcn'', {%d,%d}, B, lq, uq, vs)', i,j);
Q3 = repmat({sparse([1:(i+j) (i+j)+1], [1:(i+j) (i+j)+1], [ones(1,i+j) -1] , 3+2+(i==2 && j==1), 3+2+(i==2 && j==1))}, i+j, 1);
B3 = sparse([1:(i+j) 1:(i+j)]', [1:(i+j) 5*ones(1,i+j)]', ...
[ones(i+j,1);-ones(i+j,1)], i+j, 3+2+(i==2 && j==1));
lq3 = -1; uq3 = [];
vs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
om.qcn.add(om.var, 'myqcn', {i,j}, Q3, B3, lq3, uq3, vs);
qNS = qNS + 1; qN = qN + i+j;
t_ok(om.getN('qcn') == qN, sprintf('%s : qcn.N = %d', t, qN));
t_ok(om.get('qcn', 'NS') == qNS, sprintf('%s : qcn.NS = %d', t, qNS));
end
end
t = 'om.qcn.add(om.var, ''onerow'', Q, B, lq, uq)';
Q4 = {sparse([1 2 3], [1 2 3], [-3 -2 -1], vN, vN)};
B4 = sparse([1 1 1], [1:3], [-1 -2 -3], 1, vN);
om.qcn.add(om.var, 'onerow', Q4, B4, 0, Inf);
qNS = qNS + 1; qN = qN + 1;
t_ok(om.getN('qcn') == qN, sprintf('%s : qcn.N = %d', t, qN));
t_ok(om.get('qcn', 'NS') == qNS, sprintf('%s : qcn.NS = %d', t, qNS));
%%----- add_nln_constraint (equality) -----
t = 'add_nln_constraint (equality)';
neN = 0;
neNS = 0;
t_ok(om.getN('nle') == neN, sprintf('%s : nle.N = %d', t, neN));
t_ok(om.get('nle', 'NS') == neNS, sprintf('%s : nle.NS = %d', t, neNS));
t = 'om.add_nln_constraint(''Pmise'', N, 1, fcn, hess, {''Pg'', ''Va''})';
N = 4;
fcn = @(x)my_fcn(x, N, 2);
hess = @(x, lam)my_hess(x, lam, 10);
om.add_nln_constraint('Pmise', N, 1, fcn, hess, {'Pg', 'Va'});
neNS = neNS + 1; neN = neN + N;
t_ok(om.getN('nle') == neN, sprintf('%s : nle.N = %d', t, neN));
t_ok(om.get('nle', 'NS') == neNS, sprintf('%s : nle.NS = %d', t, neNS));
t = 'om.add_nln_constraint(''Qmise'', N, 1, fcn, hess)';
N = 3;
fcn = @(x)my_fcn(x, N, 2);
hess = @(x, lam)my_hess(x, lam, 10);
om.add_nln_constraint('Qmise', N, 1, fcn, hess);
neNS = neNS + 1; neN = neN + N;
t_ok(om.getN('nle') == neN, sprintf('%s : nle.N = %d', t, neN));
t_ok(om.get('nle', 'NS') == neNS, sprintf('%s : nle.NS = %d', t, neNS));
t = 'om.add_nln_constraint({''P'',''Q'',''R''}, [3;2;1], 1, fcn, hess, {''Pg'', ''Va''})';
N = [3;2;1];
fcn = @(x)my_fcn(x, sum(N), 2);
hess = @(x, lam)my_hess(x, lam, 10);
om.add_nln_constraint({'P', 'Q', 'R'}, N, 1, fcn, hess, {'Pg', 'Va'});
neNS = neNS + length(N); neN = neN + sum(N);
t_ok(om.getN('nle') == neN, sprintf('%s : nle.N = %d', t, neN));
t_ok(om.get('nle', 'NS') == neNS, sprintf('%s : nle.NS = %d', t, neNS));
t = 'om.init_indexed_name(''nle'', ''mynle'', {2, 2})';
om.init_indexed_name('nle', 'mynle', {2, 2});
t_ok(om.getN('nle') == neN, sprintf('%s : nle.N = %d', t, neN));
t_ok(om.get('nle', 'NS') == neNS, sprintf('%s : nle.NS = %d', t, neNS));
for i = 1:2
for j = 1:2
t = sprintf('om.add_nln_constraint(''mynle'', {%d,%d}, N, 1, fcn, hess, vs)', i,j);
N = i+j;
fcn = @(x)my_fcn(x, N, i);
hess = @(x, lam)my_hess(x, lam, j);
vs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
om.add_nln_constraint('mynle', {i, j}, N, 1, fcn, hess, vs);
neNS = neNS + 1; neN = neN + N;
t_ok(om.getN('nle') == neN, sprintf('%s : nle.N = %d', t, neN));
t_ok(om.get('nle', 'NS') == neNS, sprintf('%s : nle.NS = %d', t, neNS));
end
end
%%----- add_nln_constraint (inequality) -----
t = 'add_nln_constraint (inequality)';
niN = 0;
niNS = 0;
t_ok(om.getN('nli') == niN, sprintf('%s : nli.N = %d', t, niN));
t_ok(om.get('nli', 'NS') == niNS, sprintf('%s : nli.NS = %d', t, niNS));
t = 'om.add_nln_constraint(''Pmisi'', N, 0, fcn, hess, {''Pg'', ''Va''})';
N = 3;
fcn = @(x)my_fcn(x, N, -2);
hess = @(x, lam)my_hess(x, lam, -10);
om.add_nln_constraint('Pmisi', N, 0, fcn, hess, {'Pg', 'Va'});
niNS = niNS + 1; niN = niN + N;
t_ok(om.getN('nli') == niN, sprintf('%s : nli.N = %d', t, niN));
t_ok(om.get('nli', 'NS') == niNS, sprintf('%s : nli.NS = %d', t, niNS));
t = 'om.add_nln_constraint(''Qmisi'', N, 0, fcn, hess)';
N = 2;
fcn = @(x)my_fcn(x, N, -2);
hess = @(x, lam)my_hess(x, lam, -10);
om.add_nln_constraint('Qmisi', N, 0, fcn, hess);
niNS = niNS + 1; niN = niN + N;
t_ok(om.getN('nli') == niN, sprintf('%s : nli.N = %d', t, niN));
t_ok(om.get('nli', 'NS') == niNS, sprintf('%s : nli.NS = %d', t, niNS));
t = 'om.init_indexed_name(''nli'', ''mynli'', {2, 2})';
om.init_indexed_name('nli', 'mynli', {2, 2});
t_ok(om.getN('nli') == niN, sprintf('%s : nli.N = %d', t, niN));
t_ok(om.get('nli', 'NS') == niNS, sprintf('%s : nli.NS = %d', t, niNS));
for i = 1:2
for j = 1:2
t = sprintf('om.add_nln_constraint(''mynli'', {%d,%d}, N, 0, fcn, hess, vs)', i,j);
N = i+j-1;
fcn = @(x)my_fcn(x, N, i);
hess = @(x, lam)my_hess(x, lam, j);
vs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
om.add_nln_constraint('mynli', {i, j}, N, 0, fcn, hess, vs);
niNS = niNS + 1; niN = niN + N;
t_ok(om.getN('nli') == niN, sprintf('%s : nli.N = %d', t, niN));
t_ok(om.get('nli', 'NS') == niNS, sprintf('%s : nli.NS = %d', t, niNS));
end
end
%%----- get_idx -----
t = 'get_idx : lin';
[vv, ll] = om.get_idx();
t_is([ll.i1.Qmis ll.iN.Qmis ll.N.Qmis], [4 6 3], 14, [t ' : Qmis']);
t_is(size(ll.i1.mylin), [2, 2], 14, [t ' : size(ll.i1.mylin)']);
t_is([ll.i1.mylin(2,1) ll.iN.mylin(2,1) ll.N.mylin(2,1)], [12 14 3], 14, [t ' : mylin(2,1)']);
t = 'get_idx(''lin'')';
ll = om.get_idx('lin');
t_is([ll.i1.Qmis ll.iN.Qmis ll.N.Qmis], [4 6 3], 14, [t ' : Qmis']);
t_is(size(ll.i1.mylin), [2, 2], 14, [t ' : size(ll.i1.mylin)']);
t_is([ll.i1.mylin(2,1) ll.iN.mylin(2,1) ll.N.mylin(2,1)], [12 14 3], 14, [t ' : mylin(2,1)']);
%%----- params_lin_constraint -----
t = 'om.params_lin_constraint(''Pmis'')';
[A, l, u, vs] = om.params_lin_constraint('Pmis');
t_is(A, A1, 14, [t, ' : A']);
t_is(l, l1, 14, [t, ' : l']);
t_is(u, u1, 14, [t, ' : u']);
vs1 = struct('name', {'Va', 'Pg'}, 'idx', {{}, {}});
t_ok(isequal(vs, vs1), [t, ' : vs']);
t = 'om.params_lin_constraint(''Qmis'')';
[A, l, u, vs] = om.params_lin_constraint('Qmis');
t_is(A, A2, 14, [t, ' : A']);
t_is(l, l1, 14, [t, ' : l']);
t_is(u, u1, 14, [t, ' : u']);
t_ok(isequal(vs, {}), [t, ' : vs']);
for i = 1:2
for j = 1:2
t = sprintf('om.params_lin_constraint(''mylin'', {%d,%d})', i,j);
A3 = sparse([1:(i+j) 1:(i+j)]', [1:(i+j) 5*ones(1,i+j)]', ...
[ones(i+j,1);-ones(i+j,1)], i+j, 3+2+(i==2 && j==1));
l3 = -ones(i+j, 1); u = [];
vvs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
[A, l, u, vs] = om.params_lin_constraint('mylin', {i,j});
t_is(A', A3, 14, [t, ' : A']);
t_is(l, l3, 14, [t, ' : l']);
t_ok(all(isinf(u)) & all(u > 0), [t, ' : u']);
t_ok(isequal(vs, vvs), [t, ' : vs']);
end
end
t = 'om.params_lin_constraint(''onerow'')';
[A, l, u, vs] = om.params_lin_constraint('onerow');
t_is(A, A4, 14, [t, ' : A']);
t_is(l, 0, 14, [t, ' : l']);
t_ok(all(isinf(u)) & all(u > 0), [t, ' : u']);
t_ok(isequal(vs, {}), [t, ' : vs']);
t = 'om.params_lin_constraint()';
[A, l, u] = om.params_lin_constraint();
t_ok(issparse(A), [t ' : issparse(A)']);
t_is(size(A), [lN, vN], 14, [t ' : size(A)']);
t_is(length(l), lN, 14, [t ' : length(l)']);
t_is(length(u), lN, 14, [t ' : length(u)']);
AA = sparse([1:3 1:3 1:3]', [1:3 4:6 7 7 7]', [1 1 1 -1 -1 -1 2 3 4]', 3, vN);
t_is(full(A(ll.i1.Qmis:ll.iN.Qmis, :)), full(AA), 14, [t ' : A(<Qmis>,:)']);
t_is(full(A(ll.i1.mylin(2,1):ll.iN.mylin(2,1), vv.i1.Pg:vv.iN.Pg)), eye(3,3), 14, [t ' : A(<mylin(2,1)>,<Pg>)']);
t_is(full(A(ll.i1.mylin(2,1):ll.iN.mylin(2,1), vv.i1.x(2,1):vv.iN.x(2,1))), [0 -1 0;0 -1 0;0 -1 0], 14, [t ' : A(<mylin(2,1)>,<x(2,1)>)']);
%%----- eval_lin_constraint -----
t = '[Ax_u, l_Ax, A] = om.eval_lin_constraint(x)';
x = (1:om.var.N)';
[Ax_u, l_Ax, AA] = om.eval_lin_constraint(x);
t_is(Ax_u, A*x-u, 14, [t ' : Ax_u']);
t_is(l_Ax, l-A*x, 14, [t ' : l_Ax']);
t_is(AA, A, 14, [t ' : A']);
t = 'Ax_u = om.eval_lin_constraint(x, ''Pmis'')';
vs = om.varsets_cell2struct({'Va', 'Pg'});
xx = om.varsets_x(x, vs, 'vector');
Ax_u = om.eval_lin_constraint(x, 'Pmis');
t_is(Ax_u, A1*xx-u1, 14, [t ' : Ax_u']);
t = '[Ax_u, l_Ax] = om.eval_lin_constraint(x, ''Pmis'')';
[Ax_u, l_Ax, A] = om.eval_lin_constraint(x, 'Pmis');
t_is(Ax_u, A1*xx-u1, 14, [t ' : Ax_u']);
t_is(l_Ax, l1-A1*xx, 14, [t ' : l_Ax']);
t = '[Ax_u, l_Ax, A] = om.eval_lin_constraint(x, ''Pmis'')';
[Ax_u, l_Ax, A] = om.eval_lin_constraint(x, 'Pmis');
t_is(Ax_u, A1*xx-u1, 14, [t ' : Ax_u']);
t_is(l_Ax, l1-A1*xx, 14, [t ' : l_Ax']);
t_is(A, A1, 14, [t ' : A']);
t = '[Ax_u, l_Ax, A] = om.eval_lin_constraint(x, ''Qmis'')';
vs = om.varsets_cell2struct({'Va', 'Pg'});
xx = om.varsets_x(x, vs, 'vector');
[Ax_u, l_Ax, A] = om.eval_lin_constraint(x, 'Qmis');
t_is(Ax_u, A2*x-u1, 14, [t ' : Ax_u']);
t_is(l_Ax, l1-A2*x, 14, [t ' : l_Ax']);
t_is(A, A2, 14, [t ' : A']);
for i = 1:2
for j = 1:2
t = sprintf('om.eval_lin_constraint(''mylin'', {%d,%d})', i,j);
A3 = sparse([1:(i+j) 1:(i+j)]', [1:(i+j) 5*ones(1,i+j)]', ...
[ones(i+j,1);-ones(i+j,1)], i+j, 3+2+(i==2 && j==1));
l3 = -ones(i+j, 1); u = [];
vs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
xx = om.varsets_x(x, vs, 'vector');
[Ax_u, l_Ax, A] = om.eval_lin_constraint(x, 'mylin', {i,j});
t_ok(all(isinf(Ax_u)) & all(Ax_u < 0), [t ' : Ax_u']);
t_is(l_Ax, l3-A3*xx, 14, [t ' : l_Ax']);
t_is(A, A3, 14, [t ' : A']);
end
end
%%----- om.qcn.params (quadratic constraints) -----
t = 'om.qcn.params(om.var, ''Pmis'')';
[Qblk, B, lq, uq, vs] = om.qcn.params(om.var, 'Pmis', [], 1);
t_is(Qblk, blkdiag(Q1{:}), 14, [t, ' : Qblk']);
t_is(B, B1, 14, [t, ' : B']);
t_is(lq, lq1, 14, [t, ' : lq']);
t_is(uq, uq1, 14, [t, ' : uq']);
vs1 = struct('name', {'Va', 'Pg'}, 'idx', {{}, {}});
t_ok(isequal(vs, vs1), [t, ' : vs']);
t = 'om.qcn.params(om.var, ''Qmis'')';
[Qblk, B, lq, uq, vs] = om.qcn.params(om.var, 'Qmis', [], 1);
t_is(Qblk, blkdiag(Q2{:}), 14, [t, ' : Qblk']);
t_is(B, B2, 14, [t, ' : B']);
t_is(lq, lq1, 14, [t, ' : lq']);
t_is(uq, uq1, 14, [t, ' : uq']);
t_ok(isequal(vs, {}), [t, ' : vs']);
for i = 1:2
for j = 1:2
t = sprintf('om.qcn.params(om.var, ''myqcn'', {%d,%d})', i,j);
Q3 = repmat({sparse([1:(i+j) (i+j)+1], [1:(i+j) (i+j)+1], [ones(1,i+j) -1], 3+2+(i==2 && j==1), 3+2+(i==2 && j==1))}, i+j, 1);
B3 = sparse([1:(i+j) 1:(i+j)]', [1:(i+j) 5*ones(1,i+j)]', ...
[ones(i+j,1);-ones(i+j,1)], i+j, 3+2+(i==2 && j==1));
lq3 = -ones(i+j, 1);
vvs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
[Qblk, B, lq, uq, vs] = om.qcn.params(om.var, 'myqcn', {i,j}, 1);
t_is(Qblk, blkdiag(Q3{:}), 14, [t, ' : Qblk']);
t_is(B, B3, 14, [t, ' : B']);
t_is(lq, lq3, 14, [t, ' : lq']);
t_ok(all(isinf(uq)) & all(uq > 0), [t, ' : uq']);
t_ok(isequal(vs, vvs), [t, ' : vs']);
end
end
t = 'om.qcn.params(om.var, ''onerow'')';
[Qblk, B, lq, uq, vs] = om.qcn.params(om.var, 'onerow', [], 1);
t_is(Qblk, blkdiag(Q4{:}), 14, [t, ' : Qblk']);
t_is(B, B4, 14, [t, ' : B']);
t_is(lq, 0, 14, [t, ' : lq']);
t_ok(all(isinf(uq)) & all(uq > 0), [t, ' : uq']);
t_ok(isequal(vs, {}), [t, ' : vs']);
t = 'om.qcn.params(om.var)';
[Q, B, lq, uq] = om.qcn.params(om.var);
t_ok(iscell(Q), [t ' : iscell(Q)']);
t_ok(issparse(Q{1}), [t ' : issparse(Q{i})']);
t_is(size(Q), [qN 1], 14, [t ' : size(Q)']);
t_is(size(Q{1}), [vN vN], 14, [t ' : size(Q{i})']);
t_is(size(B), [qN, vN], 14, [t ' : size(B)']);
t_is(length(lq), qN, 14, [t ' : length(lq)']);
t_is(length(uq), qN, 14, [t ' : length(uq)']);
vv = om.get_idx('var'); qqcn = om.get_idx('qcn'); %% To be moved to get_idx tests (see line )
Q2 = {sparse([1:6 1:6], [1:3 1:3 4:6 4:6], [ones(1,6) -ones(1,6)], vN, vN)};
Q2_Qmis = repmat(Q2, qqcn.N.Qmis, 1);
Q2_Qmis_blk = blkdiag(Q2_Qmis{:});
Q_Qmis = Q(qqcn.i1.Qmis:qqcn.iN.Qmis);
Q_Qmis_blk = blkdiag(Q_Qmis{:});
t_is(full(Q_Qmis_blk), full(Q2_Qmis_blk), 14, [t ' : Q{<Qmis>(:,:)}'])
Q3_myqcn21 = sparse((1:6), (1:6), [1 1 1 -1 0 0]);
Q3_myqcn21_Pg = repmat({Q3_myqcn21(1:vv.N.Pg, 1:vv.N.Pg)}, qqcn.N.myqcn(2,1), 1);
Q3_myqcn21_Pg_blk = blkdiag(Q3_myqcn21_Pg{:});
Q_myqcn21 = Q(qqcn.i1.myqcn(2,1):qqcn.iN.myqcn(2,1));
Q_myqnc21_Pg = cellfun(@(x)(x(vv.i1.Pg:vv.iN.Pg, vv.i1.Pg:vv.iN.Pg)), Q_myqcn21, 'UniformOutput', false);
Q_myqnc21_Pg_blk = blkdiag(Q_myqnc21_Pg{:});
t_is(full(Q_myqnc21_Pg_blk), full(Q3_myqcn21_Pg_blk), 14, [t ' : Q{<myqcn(2,1)>(Pg,Pg)}'])
Q3_myqcn21_x21 = repmat({Q3_myqcn21(vv.N.Pg+1:vv.N.Pg+vv.N.x(2,1), vv.N.Pg+1:vv.N.Pg+vv.N.x(2,1))}, qqcn.N.myqcn(2,1), 1);
Q3_myqcn21_x21_blk = blkdiag(Q3_myqcn21_x21{:});
Q_myqnc21_x21 = cellfun(@(x)(x(vv.i1.x(2,1):vv.iN.x(2,1), vv.i1.x(2,1):vv.iN.x(2,1))), Q_myqcn21, 'UniformOutput', false);
Q_myqnc21_x21_blk = blkdiag(Q_myqnc21_x21{:});
t_is(full(Q_myqnc21_x21_blk), full(Q3_myqcn21_x21_blk), 14, [t ' : Q{<myqcn(2,1)>(x(2,1),x(2,1))}'])
B2 = sparse([1:3 1:3 1:3]', [1:3 4:6 7 7 7]', [1 1 1 -1 -1 -1 2 3 4]', 3, vN);
t_is(full(B(qqcn.i1.Qmis:qqcn.iN.Qmis, :)), full(B2), 14, [t ' : B(<Qmis>,:)']);
t_is(full(B(qqcn.i1.myqcn(2,1):qqcn.iN.myqcn(2,1), vv.i1.Pg:vv.iN.Pg)), Q3_myqcn21(1:vv.N.Pg,1:vv.N.Pg), 14, [t ' : B(<myqcn(2,1)>,<Pg>)']);
t_is(full(B(qqcn.i1.myqcn(2,1):qqcn.iN.myqcn(2,1), vv.i1.x(2,1):vv.iN.x(2,1))), [0 -1 0;0 -1 0;0 -1 0], 14, [t ' : B(<myqcn(2,1)>,<x(2,1)>)']);
%%----- om.qcn.eval (quadratic constraints) -----
t = '[g_u, J, g, l_g] = om.qcn.eval(om.var, x)';
x = (1:om.var.N)';
Nq = om.qcn.N;
xx = mat2cell(repmat(sparse(x'), Nq, 1), ones(Nq,1));
blkx = blkdiag(xx{:});
Qblk = blkdiag(Q{:});
[g_u, J, g, l_g] = om.qcn.eval(om.var, x);
Jqcn = zeros(Nq, vN);
for q = 1:Nq
Jqcn(q,:) = x'*Q{q};
end
t_is(J, Jqcn+B, 14, [t ' : J']);
t_is(g_u, 0.5*diag(blkx*Qblk*blkx')+B*x-uq, 14, [t ' : g_u']);
t_is(g, 0.5*diag(blkx*Qblk*blkx')+B*x, 14, [t ' : g']);
t_is(l_g, lq-(0.5*diag(blkx*Qblk*blkx')+B*x), 14, [t ' : l_g']);
t = 'g_u = om.qcn.eval(om.var, x, ''Pmis'')';
vs = om.varsets_cell2struct({'Va', 'Pg'});
X = om.varsets_x(x, vs, 'vector');
Nq = om.qcn.idx.N.Pmis;
xx = mat2cell(repmat(sparse(X'), Nq, 1), ones(Nq,1));
g_u = om.qcn.eval(om.var, x, 'Pmis');
blkx = blkdiag(xx{:});
Qblk = blkdiag(Q1{:});
t_is(g_u, 0.5*diag(blkx*Qblk*blkx')+B1*X-uq1, 14, [t ' : g_u']);
t = '[g_u, J] = om.qcn.eval(om.var, x, ''Pmis'')';
[g_u, J] = om.qcn.eval(om.var, x, 'Pmis');
t_is(g_u, 0.5*diag(blkx*Qblk*blkx')+B1*X-uq1, 14, [t ' : g_u']);
Jqcn = zeros(Nq, length(X));
for q = 1:Nq
Jqcn(q,:) = X'*Q1{q};
end
t_is(J, Jqcn+B1, 14, [t ' : J']);
t = '[g_u, J, g] = om.qcn.eval(om.var, x, ''Pmis'')';
[g_u, J, g] = om.qcn.eval(om.var, x, 'Pmis');
t_is(g_u, 0.5*diag(blkx*Qblk*blkx')+B1*X-uq1, 14, [t ' : g_u']);
Jqcn = zeros(Nq, length(X));
for q = 1:Nq
Jqcn(q,:) = X'*Q1{q};
end
t_is(J, Jqcn+B1, 14, [t ' : J']);
t_is(g, 0.5*diag(blkx*Qblk*blkx')+B1*X, 14, [t ' : g']);
t = '[g_u, J, g, l_g] = om.qcn.eval(om.var, x, ''Pmis'')';
[g_u, J, g, l_g] = om.qcn.eval(om.var, x, 'Pmis');
t_is(g_u, 0.5*diag(blkx*Qblk*blkx')+B1*X-uq1, 14, [t ' : g_u']);
Jqcn = zeros(Nq, length(X));
for q = 1:Nq
Jqcn(q,:) = X'*Q1{q};
end
t_is(J, Jqcn+B1, 14, [t ' : J']);
t_is(g, 0.5*diag(blkx*Qblk*blkx')+B1*X, 14, [t ' : g']);
t_is(l_g, lq1-(0.5*diag(blkx*Qblk*blkx')+B1*X), 14, [t ' : l_g']);
for i = 1:2
for j = 1:2
t = sprintf('om.qcn.eval(om.var, ''myqcn'', {%d,%d})', i,j);
Q3 = repmat({sparse([1:(i+j) (i+j)+1], [1:(i+j) (i+j)+1], [ones(1,i+j) -1] , 3+2+(i==2 && j==1), 3+2+(i==2 && j==1))}, i+j, 1);
B3 = sparse([1:(i+j) 1:(i+j)]', [1:(i+j) 5*ones(1,i+j)]', ...
[ones(i+j,1);-ones(i+j,1)], i+j, 3+2+(i==2 && j==1));
lq3 = -1;
vs = struct('name', {'Pg', 'x'}, 'idx', {{}, {i,j}});
X = om.varsets_x(x, vs, 'vector');
Nq = om.qcn.idx.N.myqcn(i,j);
xx = mat2cell(repmat(sparse(X'), Nq, 1), ones(Nq,1));
blkx = blkdiag(xx{:});
Qblk = blkdiag(Q3{:});
[g_u, J, g, l_g] = om.qcn.eval(om.var, x, 'myqcn', {i,j});
t_ok(all(isinf(g_u)) & all(g_u < 0), [t ' : g_u']);
Jqcn = zeros(Nq, length(X));
for q = 1:Nq
Jqcn(q,:) = X'*Q3{q};
end
t_is(J, Jqcn+B3, 14, [t ' : J']);
t_is(g, 0.5*diag(blkx*Qblk*blkx')+B3*X, 14, [t ' : g']);
t_is(l_g, lq3-(0.5*diag(blkx*Qblk*blkx')+B3*X), 14, [t ' : l_g']);
end
end
%%----- params_nln_constraint -----
t = 'om.params_nln_constraint(1, ''Pmise'')';
N = om.params_nln_constraint(1, 'Pmise');
t_is(N, 4, 14, [t, ' : N']);
[N, fcn] = om.params_nln_constraint(1, 'Pmise');
t_is(N, 4, 14, [t, ' : N']);
t_ok(isa(fcn, 'function_handle'), [t, ' : fcn']);
[N, fcn, hess] = om.params_nln_constraint(1, 'Pmise');
t_is(N, 4, 14, [t, ' : N']);
t_ok(isa(fcn, 'function_handle'), [t, ' : fcn']);
t_ok(isa(hess, 'function_handle'), [t, ' : hess']);
[N, fcn, hess, vs] = om.params_nln_constraint(1, 'Pmise');
t_is(N, 4, 14, [t, ' : N']);
t_ok(isa(fcn, 'function_handle'), [t, ' : fcn']);
t_ok(isa(hess, 'function_handle'), [t, ' : hess']);
t_ok(isstruct(vs), [t, ' : isstruct(vs)']);
t_is(length(vs), 2, 14, [t, ' : length(vs)']);
t_str_match(vs(1).name, 'Pg', [t, ' : vs(1).name']);
t_str_match(vs(2).name, 'Va', [t, ' : vs(2).name']);
t_ok(isempty(vs(1).idx), [t, ' : vs(1).idx']);
t_ok(isempty(vs(2).idx), [t, ' : vs(2).idx']);
[N, fcn, hess, vs, include] = om.params_nln_constraint(1, 'Pmise');
t_str_match(include, '', [t, ' : include']);
t = 'om.params_nln_constraint(1, ''P'')';
[N, fcn, hess, vs, include] = om.params_nln_constraint(1, 'P');
t_is(N, 3, 14, [t, ' : N']);
t_ok(isa(fcn, 'function_handle'), [t, ' : fcn']);
t_ok(isa(hess, 'function_handle'), [t, ' : hess']);
t_ok(isstruct(vs), [t, ' : isstruct(vs)']);
t_is(length(vs), 2, 14, [t, ' : length(vs)']);
t_str_match(vs(1).name, 'Pg', [t, ' : vs(1).name']);
t_str_match(vs(2).name, 'Va', [t, ' : vs(2).name']);
t_ok(isempty(vs(1).idx), [t, ' : vs(1).idx']);
t_ok(isempty(vs(2).idx), [t, ' : vs(2).idx']);
t_ok(isstruct(include), [t, ' : istruct(include)']);
t_is(length(include.name), 2, 14, [t, ' : length(include.name)']);
t_is(length(include.N), 2, 14, [t, ' : length(include.N)']);
t_str_match(include.name{1}, 'Q', [t, ' : include.name{1}']);
t_str_match(include.name{2}, 'R', [t, ' : include.name{2}']);
t_is(include.N, [2 1], 14, [t, ' : include.N']);
t = 'om.params_nln_constraint(1, ''mynle'') : error';
try
[N, fcn] = om.params_nln_constraint(1, 'mynle')
t_ok(0, t);
catch me
t_ok(strfind(me.message, 'nonlinear constraint set ''mynle'' requires an IDX_LIST arg'), t);
end
t = 'om.params_nln_constraint(0, ''mynli'', {1,2})';
[N, fcn, hess, vs] = om.params_nln_constraint(0, 'mynli', {1,2});
t_is(N, 2, 14, [t, ' : N']);
t_ok(isa(fcn, 'function_handle'), [t, ' : fcn']);
t_ok(isa(hess, 'function_handle'), [t, ' : hess']);
t_ok(isstruct(vs), [t, ' : isstruct(vs)']);
t_is(length(vs), 2, 14, [t, ' : length(vs)']);
t_str_match(vs(1).name, 'Pg', [t, ' : vs(1).name']);
t_str_match(vs(2).name, 'x', [t, ' : vs(2).name']);
t_ok(isempty(vs(1).idx), [t, ' : vs(1).idx']);
t_is(length(vs(2).idx), 2, 14, [t, ' : length(vs(2).idx)']);
t_is(vs(2).idx{1}, 1, 14, [t, ' : vs(2).idx{1}']);
t_is(vs(2).idx{2}, 2, 14, [t, ' : vs(2).idx{2}']);
t = 'om.params_nln_constraint(0, ''mynli'', {2,2})';
[N, fcn, hess, vs] = om.params_nln_constraint(0, 'mynli', {2,2});
t_is(N, 3, 14, [t, ' : N']);
t_ok(isa(fcn, 'function_handle'), [t, ' : fcn']);
t_ok(isa(hess, 'function_handle'), [t, ' : hess']);
t_ok(isstruct(vs), [t, ' : isstruct(vs)']);
t_is(length(vs), 2, 14, [t, ' : length(vs)']);
t_str_match(vs(1).name, 'Pg', [t, ' : vs(1).name']);
t_str_match(vs(2).name, 'x', [t, ' : vs(2).name']);
t_ok(isempty(vs(1).idx), [t, ' : vs(1).idx']);
t_is(length(vs(2).idx), 2, 14, [t, ' : length(vs(2).idx)']);
t_is(vs(2).idx{1}, 2, 14, [t, ' : vs(2).idx{1}']);
t_is(vs(2).idx{2}, 2, 14, [t, ' : vs(2).idx{2}']);
%%----- eval_nln_constraint -----
t = 'g = om.eval_nln_constraint';
x = (1:om.var.N)';
[g, dg] = om.eval_nln_constraint(x, 1);
t_is(length(g), neN, 14, [t ' : length(g)']);
eg = [7 8 9 3 3 4 5 7 8 9 3 4 5 6 7 6 7 8 7 8 9 7 8 9 27]';
t_is(g, eg, 14, [t ' : g']);
t = 'g = om.eval_nln_constraint(x, 1, ''Qmise'')';
x = (1:om.var.N)';
[g, dg] = om.eval_nln_constraint(x, 1, 'Qmise');
t_is(length(g), 3, 14, [t ' : length(g)']);
t_is(g, eg([5:7]), 14, [t ' : g']);
t = 'g = om.eval_nln_constraint(x, 1, ''mynle'', {1,2})';
x = (1:om.var.N)';
[g, dg] = om.eval_nln_constraint(x, 1, 'mynle', {1,2});
t_is(length(g), 3, 14, [t ' : length(g)']);
t_is(g, eg(16:18), 14, [t ' : g']);
t = '[g, dg] = om.eval_nln_constraint';
x = (1:om.var.N)';
[g, dg] = om.eval_nln_constraint(x, 1);
t_is(length(g), neN, 14, [t ' : length(g)']);
t_ok(issparse(dg), [t ' : issparse(dg)']);
t_is(size(dg), [neN, vN], 14, [t ' : size(dg)']);
t_is(g, eg, 14, [t ' : g']);
ePmise = [[ 1 2 3 4 7 6 7;
0 0 0 0 0 2 0;
0 0 0 0 0 0 2;
2 0 0 0 0 0 0 ] zeros(4, vN-7) ];
t_is(full(dg(1:4, :)), ePmise, 14, [t ' : dg(1:4, :) [Pmise]']);
eQmise = [[3 2:vN]; [0 2 0 zeros(1, vN-3)]; [0 0 2 zeros(1, vN-3)]];
t_is(full(dg(5:7, :)), eQmise, 14, [t ' : dg(5:7, :) [Qmise]']);
e = [[ 1 2 3 4 7 6 7;
0 0 0 0 0 2 0;
0 0 0 0 0 0 2;
2 0 0 0 0 0 0;
0 2 0 0 0 0 0;
0 0 2 0 0 0 0 ] zeros(6, vN-7) ];
t_is(full(dg(8:13, :)), e, 14, [t ' : dg(8:13, :) [mynle(1,1)]']);
e = [[0 0 0 0 6 6 7; 0 0 0 0 0 1 0] zeros(2, 10) [18 19; 0 0] zeros(2, vN-19)];
t_is(full(dg(14:15, :)), e, 14, [t ' : dg(14:15, :) [mynle(1,1)]']);
emynle12 = [[0 0 0 0 6 6 7; 0 0 0 0 0 1 0; 0 0 0 0 0 0 1] zeros(3, 12) [20 21; 0 0; 0 0] zeros(3, vN-21)];
t_is(full(dg(16:18, :)), emynle12, 14, [t ' : dg(16:18, :) [mynle(1,2)]']);
e = [[0 0 0 0 7 6 7; 0 0 0 0 0 2 0; 0 0 0 0 0 0 2] zeros(3, 14) [22 23 24; 0 0 0; 0 0 0] zeros(3, vN-24)];
t_is(full(dg(19:21, :)), e, 14, [t ' : dg(19:21, :) [mynle(2,1)]']);
e = [[0 0 0 0 7 6 7; 0 0 0 0 0 2 0; 0 0 0 0 0 0 2; 0 0 0 0 0 0 0] zeros(4, 17) [25 26; 0 0; 0 0; 2 0] zeros(4, vN-26)];
t_is(full(dg(22:25, :)), e, 14, [t ' : dg(22:25, :) [mynle(2,2)]']);
t = '[g, dg] = om.eval_nln_constraint(x, 1, ''Pmise'')';
x = (1:om.var.N)';
[g, dg] = om.eval_nln_constraint(x, 1, 'Pmise');
t_is(length(g), 4, 14, [t ' : length(g)']);
t_is(g, eg([1:4]), 14, [t ' : g']);
t_is(full(dg), ePmise(:, [5:7 1:4]), 14, [t ' : dg']);
t = '[g, dg] = om.eval_nln_constraint(x, 1, ''Qmise'')';
x = (1:om.var.N)';
[g, dg] = om.eval_nln_constraint(x, 1, 'Qmise');
t_is(length(g), 3, 14, [t ' : length(g)']);
t_is(g, eg([5:7]), 14, [t ' : g']);
t_is(full(dg), eQmise, 14, [t ' : dg']);
t = '[g, dg] = om.eval_nln_constraint(x, 1, ''mynle'', {1,2})';
x = (1:om.var.N)';
[g, dg] = om.eval_nln_constraint(x, 1, 'mynle', {1,2});
t_is(length(g), 3, 14, [t ' : length(g)']);
t_is(g, eg(16:18), 14, [t ' : g']);
t_is(full(dg), emynle12(:, [5:7 20:21]), 14, [t ' : dg']);
% g
% full(dg)
% full(dg)'
t = 'h = om.eval_nln_constraint';
h = om.eval_nln_constraint(x, 0);
t_is(length(h), niN, 14, [t ' : length(h)']);
t_is(h, [3 4 5 -1 0 6 6 7 7 8 7 8 9]', 14, [t ' : h']);
t = '[h, dh] = om.eval_nln_constraint';
[h, dh] = om.eval_nln_constraint(x, 0);
t_is(length(h), niN, 14, [t ' : length(h)']);
t_ok(issparse(dh), [t ' : issparse(dh)']);
t_is(size(dh), [niN, vN], 14, [t ' : size(dh)']);
eh = [3 4 5 -1 0 6 6 7 7 8 7 8 9]';
t_is(h, eh, 14, [t ' : h']);
ePmisi = [[ 1 2 3 4 3 6 7;