@@ -51,6 +51,57 @@ function _test_hyperrectangle(T)
5151 return
5252end
5353
54+ function test_dual_objective_value_open_interval_Interval_variable_index ()
55+ inner = MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ())
56+ model = MOI. Utilities. MockOptimizer (
57+ inner;
58+ eval_variable_constraint_dual = false ,
59+ )
60+ # -Inf <= x[1] <= Inf
61+ # -Inf <= x[2] <= 2.1
62+ # -2.2 <= x[3] <= Inf
63+ # -2.3 <= x[4] <= 2.4
64+ x = MOI. add_variables (model, 4 )
65+ set = MOI. Interval .([- Inf , - Inf , - 2.2 , - 2.3 ], [Inf , 2.1 , Inf , 2.4 ])
66+ c = MOI. add_constraint .(model, x, set)
67+ for (dual, obj) in [
68+ [0.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
69+ # d[1]
70+ [- 2.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
71+ [- 1.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
72+ [1.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
73+ [2.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
74+ # d[2]: -(-2.1) = 2.1
75+ [0.0 , - 2.0 , 0.0 , 0.0 ] => - 4.2 ,
76+ [0.0 , - 1.0 , 0.0 , 0.0 ] => - 2.1 ,
77+ [0.0 , 1.0 , 0.0 , 0.0 ] => 2.1 ,
78+ [0.0 , 2.0 , 0.0 , 0.0 ] => 4.2 ,
79+ # d[3]: -(- -2.2) = -2.2
80+ [0.0 , 0.0 , - 2.0 , 0.0 ] => 4.4 ,
81+ [0.0 , 0.0 , - 1.0 , 0.0 ] => 2.2 ,
82+ [0.0 , 0.0 , 1.0 , 0.0 ] => - 2.2 ,
83+ [0.0 , 0.0 , 2.0 , 0.0 ] => - 4.4 ,
84+ # d[4]: -(- -2.3) = -2.3
85+ # d[4]: -(- 2.4) = 2.4
86+ [0.0 , 0.0 , 0.0 , - 2.0 ] => - 4.8 ,
87+ [0.0 , 0.0 , 0.0 , - 1.0 ] => - 2.4 ,
88+ [0.0 , 0.0 , 0.0 , 1.0 ] => - 2.3 ,
89+ [0.0 , 0.0 , 0.0 , 2.0 ] => - 4.6 ,
90+ #
91+ [1.0 , 1.0 , 1.0 , 1.0 ] => - 2.4 ,
92+ [- 1.0 , - 1.0 , - 1.0 , - 1.0 ] => - 2.3 ,
93+ ]
94+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
95+ MOI. set .(model, MOI. ConstraintDual (), c, dual)
96+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
97+ @test isapprox (d, obj)
98+ MOI. set .(model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
99+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
100+ @test isapprox (d, - obj)
101+ end
102+ return
103+ end
104+
54105function test_dual_objective_value_open_interval_Interval ()
55106 inner = MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ())
56107 model = MOI. Utilities. MockOptimizer (inner)
@@ -93,7 +144,58 @@ function test_dual_objective_value_open_interval_Interval()
93144 MOI. set .(model, MOI. ConstraintDual (), c, dual)
94145 d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
95146 @test isapprox (d, obj)
96- MOI. set .(model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
147+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
148+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
149+ @test isapprox (d, - obj)
150+ end
151+ return
152+ end
153+
154+ function test_dual_objective_value_open_interval_Hyperrectangle_variable_index ()
155+ inner = MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ())
156+ model = MOI. Utilities. MockOptimizer (
157+ inner;
158+ eval_variable_constraint_dual = false ,
159+ )
160+ # -Inf <= x[1] <= Inf
161+ # -Inf <= x[2] <= 2.1
162+ # -2.2 <= x[3] <= Inf
163+ # -2.3 <= x[4] <= 2.4
164+ x = MOI. add_variables (model, 4 )
165+ set = MOI. HyperRectangle ([- Inf , - Inf , - 2.2 , - 2.3 ], [Inf , 2.1 , Inf , 2.4 ])
166+ c = MOI. add_constraint (model, MOI. VectorOfVariables (x), set)
167+ for (dual, obj) in [
168+ [0.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
169+ # d[1]
170+ [- 2.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
171+ [- 1.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
172+ [1.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
173+ [2.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
174+ # d[2]: -(-2.1) = 2.1
175+ [0.0 , - 2.0 , 0.0 , 0.0 ] => - 4.2 ,
176+ [0.0 , - 1.0 , 0.0 , 0.0 ] => - 2.1 ,
177+ [0.0 , 1.0 , 0.0 , 0.0 ] => 2.1 ,
178+ [0.0 , 2.0 , 0.0 , 0.0 ] => 4.2 ,
179+ # d[3]: -(- -2.2) = -2.2
180+ [0.0 , 0.0 , - 2.0 , 0.0 ] => 4.4 ,
181+ [0.0 , 0.0 , - 1.0 , 0.0 ] => 2.2 ,
182+ [0.0 , 0.0 , 1.0 , 0.0 ] => - 2.2 ,
183+ [0.0 , 0.0 , 2.0 , 0.0 ] => - 4.4 ,
184+ # d[4]: -(- -2.3) = -2.3
185+ # d[4]: -(- 2.4) = 2.4
186+ [0.0 , 0.0 , 0.0 , - 2.0 ] => - 4.8 ,
187+ [0.0 , 0.0 , 0.0 , - 1.0 ] => - 2.4 ,
188+ [0.0 , 0.0 , 0.0 , 1.0 ] => - 2.3 ,
189+ [0.0 , 0.0 , 0.0 , 2.0 ] => - 4.6 ,
190+ #
191+ [1.0 , 1.0 , 1.0 , 1.0 ] => - 2.4 ,
192+ [- 1.0 , - 1.0 , - 1.0 , - 1.0 ] => - 2.3 ,
193+ ]
194+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
195+ MOI. set (model, MOI. ConstraintDual (), c, dual)
196+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
197+ @test isapprox (d, obj)
198+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
97199 d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
98200 @test isapprox (d, - obj)
99201 end
0 commit comments