@@ -12,6 +12,8 @@ import Ipopt
1212import MultiObjectiveAlgorithms as MOA
1313import MultiObjectiveAlgorithms: MOI
1414
15+ include (joinpath (dirname (@__DIR__ ), " mock_optimizer.jl" ))
16+
1517function run_tests ()
1618 for name in names (@__MODULE__ ; all = true )
1719 if startswith (" $name " , " test_" )
@@ -407,6 +409,34 @@ function test_vector_of_variables_objective()
407409 return
408410end
409411
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+
410440end # module TestDichotomy
411441
412442TestDichotomy. run_tests ()
0 commit comments