@@ -303,287 +303,7 @@ function test_conic_NormInfinityCone_3()
303
303
return
304
304
end
305
305
306
- function test_NormOne ()
307
- mock = MOI. Utilities. MockOptimizer (
308
- MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ()),
309
- )
310
- config = MOI. Test. Config ()
311
- bridged_mock = MOI. Bridges. Constraint. NormOne {Float64} (mock)
312
- MOI. Test. runtests (
313
- bridged_mock,
314
- config,
315
- include = [
316
- " test_basic_VectorOfVariables_NormOneCone" ,
317
- " test_basic_VectorAffineFunction_NormOneCone" ,
318
- " test_basic_VectorQuadraticFunction_NormOneCone" ,
319
- ],
320
- )
321
- return
322
- end
323
-
324
- function test_conic_NormOneCone_VectorOfVariables ()
325
- mock = MOI. Utilities. MockOptimizer (
326
- MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ()),
327
- )
328
- config = MOI. Test. Config ()
329
- bridged_mock = MOI. Bridges. Constraint. NormOne {Float64} (mock)
330
- mock. optimize! =
331
- (mock:: MOI.Utilities.MockOptimizer ) -> MOI. Utilities. mock_optimize! (
332
- mock,
333
- [1.0 , 0.5 , 0.5 , 0.5 , 0.5 ],
334
- (MOI. VectorAffineFunction{Float64}, MOI. Nonnegatives) =>
335
- [[1.0 , 1.0 , 1.0 , 0.0 , 0.0 ]],
336
- (MOI. VectorAffineFunction{Float64}, MOI. Zeros) => [[- 1 ], [0 ]],
337
- )
338
- MOI. Test. test_conic_NormOneCone_VectorOfVariables (bridged_mock, config)
339
- MOI. empty! (bridged_mock)
340
- MOI. Test. test_conic_NormOneCone_VectorAffineFunction (bridged_mock, config)
341
- var_names = [" x" , " y" , " z" ]
342
- MOI. set (
343
- bridged_mock,
344
- MOI. VariableName (),
345
- MOI. get (bridged_mock, MOI. ListOfVariableIndices ()),
346
- var_names,
347
- )
348
- nonneg = MOI. get (
349
- mock,
350
- MOI. ListOfConstraintIndices{
351
- MOI. VectorAffineFunction{Float64},
352
- MOI. Nonnegatives,
353
- }(),
354
- )
355
- u, v = MOI. get (mock, MOI. ListOfVariableIndices ())[4 : 5 ]
356
- MOI. set (mock, MOI. VariableName (), u, " u" )
357
- MOI. set (mock, MOI. VariableName (), v, " v" )
358
- @test length (nonneg) == 1
359
- MOI. set (mock, MOI. ConstraintName (), nonneg[1 ], " nonneg" )
360
- zeros = MOI. get (
361
- mock,
362
- MOI. ListOfConstraintIndices{
363
- MOI. VectorAffineFunction{Float64},
364
- MOI. Zeros,
365
- }(),
366
- )
367
- @test length (zeros) == 2
368
- MOI. set (mock, MOI. ConstraintName (), zeros[1 ], " x_eq" )
369
- MOI. set (mock, MOI. ConstraintName (), zeros[2 ], " y_eq" )
370
-
371
- s = """
372
- variables: x, y, z, u, v
373
- nonneg: [x + -1.0u + -1.0v, u + -1.0y, v + -1.0z, u + y, v + z] in Nonnegatives(5)
374
- x_eq: [-1.0 + x] in Zeros(1)
375
- y_eq: [-0.5 + y] in Zeros(1)
376
- maxobjective: y + z
377
- """
378
- model = MOI. Utilities. Model {Float64} ()
379
- MOI. Utilities. loadfromstring! (model, s)
380
- MOI. Test. util_test_models_equal (
381
- mock,
382
- model,
383
- [var_names; " u" ; " v" ],
384
- [" nonneg" , " x_eq" , " y_eq" ],
385
- )
386
- normone = MOI. get (
387
- bridged_mock,
388
- MOI. ListOfConstraintIndices{
389
- MOI. VectorAffineFunction{Float64},
390
- MOI. NormOneCone,
391
- }(),
392
- )
393
- @test length (normone) == 1
394
- MOI. set (bridged_mock, MOI. ConstraintName (), normone[1 ], " normone" )
395
- zeros = MOI. get (
396
- bridged_mock,
397
- MOI. ListOfConstraintIndices{
398
- MOI. VectorAffineFunction{Float64},
399
- MOI. Zeros,
400
- }(),
401
- )
402
- @test length (zeros) == 2
403
- MOI. set (bridged_mock, MOI. ConstraintName (), zeros[1 ], " x_eq" )
404
- MOI. set (bridged_mock, MOI. ConstraintName (), zeros[2 ], " y_eq" )
405
-
406
- s = """
407
- variables: x, y, z
408
- normone: [1.0x, y, z] in NormOneCone(3)
409
- x_eq: [-1.0 + x] in Zeros(1)
410
- y_eq: [-0.5 + y] in Zeros(1)
411
- maxobjective: y + z
412
- """
413
- model = MOI. Utilities. Model {Float64} ()
414
- MOI. Utilities. loadfromstring! (model, s)
415
- MOI. Test. util_test_models_equal (
416
- bridged_mock,
417
- model,
418
- var_names,
419
- [" normone" , " x_eq" , " y_eq" ],
420
- )
421
- ci = first (
422
- MOI. get (
423
- bridged_mock,
424
- MOI. ListOfConstraintIndices{
425
- MOI. VectorAffineFunction{Float64},
426
- MOI. NormOneCone,
427
- }(),
428
- ),
429
- )
430
- for attr in [MOI. ConstraintPrimalStart (), MOI. ConstraintDualStart ()]
431
- @test MOI. supports (bridged_mock, attr, typeof (ci))
432
- value = [4.0 , 1.0 , - 2.0 ]
433
- MOI. set (bridged_mock, attr, ci, value)
434
- @test MOI. get (bridged_mock, attr, ci) ≈ value
435
- if attr isa MOI. ConstraintPrimalStart
436
- @test MOI. get (mock, MOI. VariablePrimalStart (), u) == 1
437
- @test MOI. get (mock, MOI. VariablePrimalStart (), v) == 2
438
- @test MOI. get (mock, attr, nonneg[1 ]) == Float64[1 , 0 , 4 , 2 , 0 ]
439
- else
440
- @test MOI. get (mock, attr, nonneg[1 ]) == Float64[4 , 0 , 2 , 1 , 0 ]
441
- end
442
- end
443
- _test_delete_bridge (
444
- bridged_mock,
445
- ci,
446
- 3 ,
447
- ((MOI. VectorAffineFunction{Float64}, MOI. Nonnegatives, 0 ),),
448
- )
449
- return
450
- end
451
-
452
- function test_conic_NormOneCone ()
453
- mock = MOI. Utilities. MockOptimizer (
454
- MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ()),
455
- )
456
- config = MOI. Test. Config ()
457
- bridged_mock = MOI. Bridges. Constraint. NormOne {Float64} (mock)
458
- mock. optimize! =
459
- (mock:: MOI.Utilities.MockOptimizer ) -> MOI. Utilities. mock_optimize! (
460
- mock,
461
- [4 , - 1 , - 1 , - 1 , 1 , 1 , 1 ],
462
- (MOI. VectorAffineFunction{Float64}, MOI. Nonnegatives) =>
463
- [vcat (ones (4 ), zeros (3 )), ones (3 )],
464
- )
465
- MOI. Test. test_conic_NormOneCone (bridged_mock, config)
466
- var_names = [" x" , " y1" , " y2" , " y3" ]
467
- var_names_all = vcat (var_names, " z1" , " z2" , " z3" )
468
- MOI. set (
469
- mock,
470
- MOI. VariableName (),
471
- MOI. get (mock, MOI. ListOfVariableIndices ()),
472
- var_names_all,
473
- )
474
- nonneg = MOI. get (
475
- mock,
476
- MOI. ListOfConstraintIndices{
477
- MOI. VectorAffineFunction{Float64},
478
- MOI. Nonnegatives,
479
- }(),
480
- )
481
- @test length (nonneg) == 2
482
- MOI. set (mock, MOI. ConstraintName (), nonneg[1 ], " nonneg1" )
483
- MOI. set (mock, MOI. ConstraintName (), nonneg[2 ], " nonneg2" )
484
- s = """
485
- variables: x, y1, y2, y3, z1, z2, z3
486
- nonneg1: [x + -1.0 + -1.0z1 + -1.0z2 + -1.0z3, z1 + -1.0y1 + -2.0, z2 + -1.0y2 + -2.0, z3 + -1.0y3 + -2.0, z1 + y1 + 2.0, z2 + y2 + 2.0, z3 + y3 + 2.0] in Nonnegatives(7)
487
- nonneg2: [y1 + 1.0, y2 + 1.0, y3 + 1.0] in Nonnegatives(3)
488
- minobjective: x
489
- """
490
- model = MOI. Utilities. Model {Float64} ()
491
- MOI. Utilities. loadfromstring! (model, s)
492
- MOI. Test. util_test_models_equal (
493
- mock,
494
- model,
495
- var_names_all,
496
- [" nonneg1" , " nonneg2" ],
497
- )
498
- MOI. set (
499
- bridged_mock,
500
- MOI. VariableName (),
501
- MOI. get (bridged_mock, MOI. ListOfVariableIndices ()),
502
- var_names,
503
- )
504
- normone = MOI. get (
505
- bridged_mock,
506
- MOI. ListOfConstraintIndices{
507
- MOI. VectorAffineFunction{Float64},
508
- MOI. NormOneCone,
509
- }(),
510
- )
511
- @test length (normone) == 1
512
- MOI. set (bridged_mock, MOI. ConstraintName (), normone[1 ], " normone" )
513
- nonneg = MOI. get (
514
- bridged_mock,
515
- MOI. ListOfConstraintIndices{
516
- MOI. VectorAffineFunction{Float64},
517
- MOI. Nonnegatives,
518
- }(),
519
- )
520
- @test length (nonneg) == 1
521
- MOI. set (bridged_mock, MOI. ConstraintName (), nonneg[1 ], " nonneg" )
522
- s = """
523
- variables: x, y1, y2, y3
524
- normone: [x + -1.0, y1 + 2.0, y2 + 2.0, y3 + 2.0] in NormOneCone(4)
525
- nonneg: [y1 + 1.0, y2 + 1.0, y3 + 1.0] in Nonnegatives(3)
526
- minobjective: x
527
- """
528
- model = MOI. Utilities. Model {Float64} ()
529
- MOI. Utilities. loadfromstring! (model, s)
530
- MOI. Test. util_test_models_equal (
531
- bridged_mock,
532
- model,
533
- var_names,
534
- [" normone" , " nonneg" ],
535
- )
536
- ci = first (
537
- MOI. get (
538
- bridged_mock,
539
- MOI. ListOfConstraintIndices{
540
- MOI. VectorAffineFunction{Float64},
541
- MOI. NormOneCone,
542
- }(),
543
- ),
544
- )
545
- nonneg = MOI. get (
546
- mock,
547
- MOI. ListOfConstraintIndices{
548
- MOI. VectorAffineFunction{Float64},
549
- MOI. Nonnegatives,
550
- }(),
551
- )
552
- for attr in [MOI. ConstraintPrimalStart (), MOI. ConstraintDualStart ()]
553
- @test MOI. supports (bridged_mock, attr, typeof (ci))
554
- value = (
555
- attr isa MOI. ConstraintPrimalStart ? vcat (3 , ones (3 )) :
556
- vcat (1 , fill (- 1 , 3 ))
557
- )
558
- MOI. set (bridged_mock, attr, ci, value)
559
- @test MOI. get (bridged_mock, attr, ci) ≈ value
560
- nonneg_value = (
561
- attr isa MOI. ConstraintPrimalStart ?
562
- vcat (zeros (4 ), fill (2.0 , 3 )) : vcat (ones (4 ), zeros (3 ))
563
- )
564
- @test MOI. get (mock, attr, nonneg[1 ]) ≈ nonneg_value
565
- end
566
- _test_delete_bridge (
567
- bridged_mock,
568
- ci,
569
- 4 ,
570
- ((MOI. VectorAffineFunction{Float64}, MOI. Nonnegatives, 1 ),),
571
- )
572
- return
573
- end
574
-
575
306
function test_runtests_vector_of_variables ()
576
- MOI. Bridges. runtests (
577
- MOI. Bridges. Constraint. NormOneBridge,
578
- """
579
- variables: t, x
580
- [t, x] in NormOneCone(2)
581
- """ ,
582
- """
583
- variables: t, x, y
584
- [t + -1.0 * y, y + -1.0 * x, y + x] in Nonnegatives(3)
585
- """ ,
586
- )
587
307
MOI. Bridges. runtests (
588
308
MOI. Bridges. Constraint. NormInfinityBridge,
589
309
"""
@@ -599,17 +319,6 @@ function test_runtests_vector_of_variables()
599
319
end
600
320
601
321
function test_runtests_vector_affine_function ()
602
- MOI. Bridges. runtests (
603
- MOI. Bridges. Constraint. NormOneBridge,
604
- """
605
- variables: t, x
606
- [t, 2.0 * x + 1.0] in NormOneCone(2)
607
- """ ,
608
- """
609
- variables: t, x, y
610
- [t + -1.0 * y, y + -2.0 * x + -1.0, y + 2.0 * x + 1.0] in Nonnegatives(3)
611
- """ ,
612
- )
613
322
MOI. Bridges. runtests (
614
323
MOI. Bridges. Constraint. NormInfinityBridge,
615
324
"""
@@ -669,40 +378,6 @@ function test_NormInfinity_VectorNonlinearFunction()
669
378
return
670
379
end
671
380
672
- function test_NormOne_VectorNonlinearFunction ()
673
- # We can't use the standard runtests because ScalarNonlinearFunction does
674
- # not preserve f(x) ≈ (f(x) - g(x)) + g(x)
675
- inner = MOI. Utilities. Model {Float64} ()
676
- model = MOI. Bridges. Constraint. NormOne {Float64} (inner)
677
- t = MOI. add_variable (model)
678
- x = MOI. add_variable (model)
679
- f = MOI. VectorNonlinearFunction ([
680
- MOI. ScalarNonlinearFunction (:+ , Any[t]),
681
- MOI. ScalarNonlinearFunction (:sin , Any[x]),
682
- ])
683
- c = MOI. add_constraint (model, f, MOI. NormOneCone (2 ))
684
- F, S = MOI. VectorNonlinearFunction, MOI. Nonnegatives
685
- indices = MOI. get (inner, MOI. ListOfConstraintIndices {F,S} ())
686
- @test length (indices) == 1
687
- inner_variables = MOI. get (inner, MOI. ListOfVariableIndices ())
688
- @test length (inner_variables) == 3
689
- u, v, w = inner_variables
690
- v_sin = MOI. ScalarNonlinearFunction (:sin , Any[v])
691
- g = MOI. VectorNonlinearFunction ([
692
- MOI. ScalarNonlinearFunction (
693
- :- ,
694
- Any[MOI. ScalarNonlinearFunction (:+ , Any[u]), 0.0 + 1.0 * w],
695
- ),
696
- MOI. ScalarNonlinearFunction (
697
- :+ ,
698
- Any[MOI. ScalarNonlinearFunction (:- , Any[v_sin]), w],
699
- ),
700
- MOI. ScalarNonlinearFunction (:+ , Any[v_sin, w]),
701
- ])
702
- @test ≈ (MOI. get (inner, MOI. ConstraintFunction (), indices[1 ]), g)
703
- return
704
- end
705
-
706
381
end # module
707
382
708
383
TestConstraintNormInfinity. runtests ()
0 commit comments