@@ -12,6 +12,8 @@ import Ipopt
12
12
import MultiObjectiveAlgorithms as MOA
13
13
import MultiObjectiveAlgorithms: MOI
14
14
15
+ include (joinpath (dirname (@__DIR__ ), " mock_optimizer.jl" ))
16
+
15
17
function run_tests ()
16
18
for name in names (@__MODULE__ ; all = true )
17
19
if startswith (" $name " , " test_" )
@@ -407,6 +409,34 @@ function test_vector_of_variables_objective()
407
409
return
408
410
end
409
411
412
+ function test_solve_failures ()
413
+ m, n = 2 , 10
414
+ p1 = [5.0 1 10 8 3 5 3 3 7 2 ; 10 6 1 6 8 3 2 10 6 1 ]
415
+ p2 = [4.0 6 4 3 1 6 8 2 9 7 ; 8 8 8 2 4 8 8 1 10 1 ]
416
+ w = [5.0 9 3 5 10 5 7 10 7 8 ; 4 8 8 6 10 8 10 7 5 1 ]
417
+ b = [34.0 , 33.0 ]
418
+ for fail_after in 0 : 3
419
+ model = MOA. Optimizer (mock_optimizer (fail_after))
420
+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
421
+ x_ = MOI. add_variables (model, m * n)
422
+ x = reshape (x_, m, n)
423
+ MOI. add_constraint .(model, x, MOI. Interval (0.0 , 1.0 ))
424
+ f = MOI. Utilities. operate (vcat, Float64, sum (p1 .* x), sum (p2 .* x))
425
+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
426
+ MOI. set (model, MOI. ObjectiveFunction {typeof(f)} (), f)
427
+ for i in 1 : m
428
+ f_i = sum (w[i, j] * x[i, j] for j in 1 : n)
429
+ MOI. add_constraint (model, f_i, MOI. LessThan (b[i]))
430
+ end
431
+ for j in 1 : n
432
+ MOI. add_constraint (model, sum (1.0 .* x[:, j]), MOI. EqualTo (1.0 ))
433
+ end
434
+ MOI. optimize! (model)
435
+ @test MOI. get (model, MOI. TerminationStatus ()) == MOI. NUMERICAL_ERROR
436
+ end
437
+ return
438
+ end
439
+
410
440
end # module TestDichotomy
411
441
412
442
TestDichotomy. run_tests ()
0 commit comments