Skip to content

Commit 99dbc12

Browse files
committed
Added tests for no bounding box and time limit
1 parent d8f6bf7 commit 99dbc12

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

test/algorithms/Sandwiching.jl

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,61 @@ function test_unbounded()
134134
return
135135
end
136136

137+
function test_no_bounding_box()
138+
model = MOA.Optimizer(HiGHS.Optimizer)
139+
MOI.set(model, MOA.Algorithm(), MOA.Sandwiching(0.0))
140+
MOI.set(model, MOI.Silent(), true)
141+
x = MOI.add_variables(model, 2)
142+
MOI.add_constraint.(model, x, MOI.GreaterThan(0.0))
143+
f = MOI.Utilities.operate(vcat, Float64, 1.0 .* x...)
144+
MOI.set(model, MOI.ObjectiveFunction{typeof(f)}(), f)
145+
MOI.set(model, MOI.ObjectiveSense(), MOI.MIN_SENSE)
146+
@test_logs (:warn,) MOI.optimize!(model)
147+
@test MOI.get(model, MOI.TerminationStatus()) == MOI.DUAL_INFEASIBLE
148+
@test MOI.get(model, MOI.PrimalStatus()) == MOI.NO_SOLUTION
149+
@test MOI.get(model, MOI.DualStatus()) == MOI.NO_SOLUTION
150+
return
151+
end
152+
153+
function test_time_limit()
154+
p = 3
155+
n = 10
156+
W = 2137.0
157+
C = Float64[
158+
566 611 506 180 817 184 585 423 26 317
159+
62 84 977 979 874 54 269 93 881 563
160+
664 982 962 140 224 215 12 869 332 537
161+
]
162+
w = Float64[557, 898, 148, 63, 78, 964, 246, 662, 386, 272]
163+
model = MOA.Optimizer(HiGHS.Optimizer)
164+
MOI.set(model, MOA.Algorithm(), MOA.Sandwiching(0.0))
165+
MOI.set(model, MOI.TimeLimitSec(), 0.0)
166+
MOI.set(model, MOI.Silent(), true)
167+
x = MOI.add_variables(model, n)
168+
MOI.add_constraint.(model, x, MOI.ZeroOne())
169+
MOI.add_constraint(
170+
model,
171+
MOI.ScalarAffineFunction(
172+
[MOI.ScalarAffineTerm(w[j], x[j]) for j in 1:n],
173+
0.0,
174+
),
175+
MOI.LessThan(W),
176+
)
177+
f = MOI.VectorAffineFunction(
178+
[
179+
MOI.VectorAffineTerm(i, MOI.ScalarAffineTerm(-C[i, j], x[j]))
180+
for i in 1:p for j in 1:n
181+
],
182+
fill(0.0, p),
183+
)
184+
MOI.set(model, MOI.ObjectiveSense(), MOI.MIN_SENSE)
185+
MOI.set(model, MOI.ObjectiveFunction{typeof(f)}(), f)
186+
MOI.optimize!(model)
187+
@test MOI.get(model, MOI.TerminationStatus()) == MOI.TIME_LIMIT
188+
@test MOI.get(model, MOI.ResultCount()) == size(C, 1) # anchor points are already computed when the time limit is checked
189+
return
190+
end
191+
137192
end # TestSandwiching
138193

139194
TestSandwiching.run_tests()

0 commit comments

Comments
 (0)