@@ -67,13 +67,7 @@ function test_modificationtest()
6767end
6868
6969function test_contlineartest ()
70- MOIT. contlineartest (BRIDGED_OPTIMIZER, CONFIG, [
71- # TODO (odow): This test requests the infeasibility certificate of a
72- # variable bound.
73- " linear12"
74- ])
75-
76- MOIT. linear12test (OPTIMIZER, MOIT. TestConfig (infeas_certificates= false ))
70+ MOIT. contlineartest (BRIDGED_OPTIMIZER, CONFIG)
7771end
7872
7973function test_intlineartest ()
@@ -542,6 +536,196 @@ function test_ZeroOne_INTERVAL()
542536 @test tmp[] == 2.0
543537end
544538
539+ function test_farkas_dual_min ()
540+ model = CPLEX. Optimizer ()
541+ MOI. set (model, MOI. Silent (), true )
542+ MOI. set (model, MOI. RawParameter (" CPX_PARAM_REDUCE" ), 0 )
543+ x = MOI. add_variables (model, 2 )
544+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
545+ MOI. set (
546+ model,
547+ MOI. ObjectiveFunction {MOI.SingleVariable} (),
548+ MOI. SingleVariable (x[1 ]),
549+ )
550+ clb = MOI. add_constraint .(
551+ model, MOI. SingleVariable .(x), MOI. GreaterThan (0.0 )
552+ )
553+ c = MOI. add_constraint (
554+ model,
555+ MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([2.0 , 1.0 ], x), 0.0 ),
556+ MOI. LessThan (- 1.0 ),
557+ )
558+ MOI. optimize! (model)
559+ @test MOI. get (model, MOI. TerminationStatus ()) == MOI. INFEASIBLE
560+ @test MOI. get (model, MOI. DualStatus ()) == MOI. INFEASIBILITY_CERTIFICATE
561+ clb_dual = MOI. get .(model, MOI. ConstraintDual (), clb)
562+ c_dual = MOI. get (model, MOI. ConstraintDual (), c)
563+ @show clb_dual, c_dual
564+ @test clb_dual[1 ] > 1e-6
565+ @test clb_dual[2 ] > 1e-6
566+ @test c_dual[1 ] < - 1e-6
567+ @test clb_dual[1 ] ≈ - 2 * c_dual atol = 1e-6
568+ @test clb_dual[2 ] ≈ - c_dual atol = 1e-6
569+ end
570+
571+ function test_farkas_dual_min_interval ()
572+ model = CPLEX. Optimizer ()
573+ MOI. set (model, MOI. Silent (), true )
574+ MOI. set (model, MOI. RawParameter (" CPX_PARAM_REDUCE" ), 0 )
575+ x = MOI. add_variables (model, 2 )
576+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
577+ MOI. set (
578+ model,
579+ MOI. ObjectiveFunction {MOI.SingleVariable} (),
580+ MOI. SingleVariable (x[1 ]),
581+ )
582+ clb = MOI. add_constraint .(
583+ model, MOI. SingleVariable .(x), MOI. Interval (0.0 , 10.0 )
584+ )
585+ c = MOI. add_constraint (
586+ model,
587+ MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([2.0 , 1.0 ], x), 0.0 ),
588+ MOI. LessThan (- 1.0 ),
589+ )
590+ MOI. optimize! (model)
591+ @test MOI. get (model, MOI. TerminationStatus ()) == MOI. INFEASIBLE
592+ @test MOI. get (model, MOI. DualStatus ()) == MOI. INFEASIBILITY_CERTIFICATE
593+ clb_dual = MOI. get .(model, MOI. ConstraintDual (), clb)
594+ c_dual = MOI. get (model, MOI. ConstraintDual (), c)
595+ @show clb_dual, c_dual
596+ @test clb_dual[1 ] > 1e-6
597+ @test clb_dual[2 ] > 1e-6
598+ @test c_dual[1 ] < - 1e-6
599+ @test clb_dual[1 ] ≈ - 2 * c_dual atol = 1e-6
600+ @test clb_dual[2 ] ≈ - c_dual atol = 1e-6
601+ end
602+
603+ function test_farkas_dual_min_equalto ()
604+ model = CPLEX. Optimizer ()
605+ MOI. set (model, MOI. Silent (), true )
606+ MOI. set (model, MOI. RawParameter (" CPX_PARAM_REDUCE" ), 0 )
607+ x = MOI. add_variables (model, 2 )
608+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
609+ MOI. set (
610+ model,
611+ MOI. ObjectiveFunction {MOI.SingleVariable} (),
612+ MOI. SingleVariable (x[1 ]),
613+ )
614+ clb = MOI. add_constraint .(model, MOI. SingleVariable .(x), MOI. EqualTo (0.0 ))
615+ c = MOI. add_constraint (
616+ model,
617+ MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([2.0 , 1.0 ], x), 0.0 ),
618+ MOI. LessThan (- 1.0 ),
619+ )
620+ MOI. optimize! (model)
621+ @test MOI. get (model, MOI. TerminationStatus ()) == MOI. INFEASIBLE
622+ @test MOI. get (model, MOI. DualStatus ()) == MOI. INFEASIBILITY_CERTIFICATE
623+ clb_dual = MOI. get .(model, MOI. ConstraintDual (), clb)
624+ c_dual = MOI. get (model, MOI. ConstraintDual (), c)
625+ @show clb_dual, c_dual
626+ @test clb_dual[1 ] > 1e-6
627+ @test clb_dual[2 ] > 1e-6
628+ @test c_dual[1 ] < - 1e-6
629+ @test clb_dual[1 ] ≈ - 2 * c_dual atol = 1e-6
630+ @test clb_dual[2 ] ≈ - c_dual atol = 1e-6
631+ end
632+
633+ function test_farkas_dual_min_ii ()
634+ model = CPLEX. Optimizer ()
635+ MOI. set (model, MOI. Silent (), true )
636+ MOI. set (model, MOI. RawParameter (" CPX_PARAM_REDUCE" ), 0 )
637+ x = MOI. add_variables (model, 2 )
638+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
639+ MOI. set (
640+ model,
641+ MOI. ObjectiveFunction {MOI.ScalarAffineFunction{Float64}} (),
642+ MOI. ScalarAffineFunction ([MOI. ScalarAffineTerm (- 1.0 , x[1 ])], 0.0 ),
643+ )
644+ clb = MOI. add_constraint .(
645+ model, MOI. SingleVariable .(x), MOI. LessThan (0.0 )
646+ )
647+ c = MOI. add_constraint (
648+ model,
649+ MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([- 2.0 , - 1.0 ], x), 0.0 ),
650+ MOI. LessThan (- 1.0 ),
651+ )
652+ MOI. optimize! (model)
653+ @test MOI. get (model, MOI. TerminationStatus ()) == MOI. INFEASIBLE
654+ @test MOI. get (model, MOI. DualStatus ()) == MOI. INFEASIBILITY_CERTIFICATE
655+ clb_dual = MOI. get .(model, MOI. ConstraintDual (), clb)
656+ c_dual = MOI. get (model, MOI. ConstraintDual (), c)
657+ @show clb_dual, c_dual
658+ @test clb_dual[1 ] < - 1e-6
659+ @test clb_dual[2 ] < - 1e-6
660+ @test c_dual[1 ] < - 1e-6
661+ @test clb_dual[1 ] ≈ 2 * c_dual atol = 1e-6
662+ @test clb_dual[2 ] ≈ c_dual atol = 1e-6
663+ end
664+
665+ function test_farkas_dual_max ()
666+ model = CPLEX. Optimizer ()
667+ MOI. set (model, MOI. Silent (), true )
668+ MOI. set (model, MOI. RawParameter (" CPX_PARAM_REDUCE" ), 0 )
669+ x = MOI. add_variables (model, 2 )
670+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
671+ MOI. set (
672+ model,
673+ MOI. ObjectiveFunction {MOI.SingleVariable} (),
674+ MOI. SingleVariable (x[1 ]),
675+ )
676+ clb = MOI. add_constraint .(
677+ model, MOI. SingleVariable .(x), MOI. GreaterThan (0.0 )
678+ )
679+ c = MOI. add_constraint (
680+ model,
681+ MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([2.0 , 1.0 ], x), 0.0 ),
682+ MOI. LessThan (- 1.0 ),
683+ )
684+ MOI. optimize! (model)
685+ @test MOI. get (model, MOI. TerminationStatus ()) == MOI. INFEASIBLE
686+ @test MOI. get (model, MOI. DualStatus ()) == MOI. INFEASIBILITY_CERTIFICATE
687+ clb_dual = MOI. get .(model, MOI. ConstraintDual (), clb)
688+ c_dual = MOI. get (model, MOI. ConstraintDual (), c)
689+ @show clb_dual, c_dual
690+ @test clb_dual[1 ] > 1e-6
691+ @test clb_dual[2 ] > 1e-6
692+ @test c_dual[1 ] < - 1e-6
693+ @test clb_dual[1 ] ≈ - 2 * c_dual atol = 1e-6
694+ @test clb_dual[2 ] ≈ - c_dual atol = 1e-6
695+ end
696+
697+ function test_farkas_dual_max_ii ()
698+ model = CPLEX. Optimizer ()
699+ MOI. set (model, MOI. Silent (), true )
700+ MOI. set (model, MOI. RawParameter (" CPX_PARAM_REDUCE" ), 0 )
701+ x = MOI. add_variables (model, 2 )
702+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
703+ MOI. set (
704+ model,
705+ MOI. ObjectiveFunction {MOI.ScalarAffineFunction{Float64}} (),
706+ MOI. ScalarAffineFunction ([MOI. ScalarAffineTerm (- 1.0 , x[1 ])], 0.0 ),
707+ )
708+ clb = MOI. add_constraint .(
709+ model, MOI. SingleVariable .(x), MOI. LessThan (0.0 )
710+ )
711+ c = MOI. add_constraint (
712+ model,
713+ MOI. ScalarAffineFunction (MOI. ScalarAffineTerm .([- 2.0 , - 1.0 ], x), 0.0 ),
714+ MOI. LessThan (- 1.0 ),
715+ )
716+ MOI. optimize! (model)
717+ @test MOI. get (model, MOI. TerminationStatus ()) == MOI. INFEASIBLE
718+ @test MOI. get (model, MOI. DualStatus ()) == MOI. INFEASIBILITY_CERTIFICATE
719+ clb_dual = MOI. get .(model, MOI. ConstraintDual (), clb)
720+ c_dual = MOI. get (model, MOI. ConstraintDual (), c)
721+ @show clb_dual, c_dual
722+ @test clb_dual[1 ] < - 1e-6
723+ @test clb_dual[2 ] < - 1e-6
724+ @test c_dual[1 ] < - 1e-6
725+ @test clb_dual[1 ] ≈ 2 * c_dual atol = 1e-6
726+ @test clb_dual[2 ] ≈ c_dual atol = 1e-6
727+ end
728+
545729end # module TestMOIwrapper
546730
547731runtests (TestMOIwrapper)
0 commit comments