Skip to content

Commit 4dd6e7c

Browse files
committed
Update
1 parent e929d24 commit 4dd6e7c

1 file changed

Lines changed: 103 additions & 1 deletion

File tree

test/Utilities/results.jl

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,57 @@ function _test_hyperrectangle(T)
5151
return
5252
end
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+
54105
function 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

Comments
 (0)