@@ -134,6 +134,61 @@ function test_unbounded()
134
134
return
135
135
end
136
136
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
+
137
192
end # TestSandwiching
138
193
139
194
TestSandwiching. run_tests ()
0 commit comments