@@ -11,6 +11,7 @@ import HiGHS
1111import MultiObjectiveAlgorithms as MOA
1212import MultiObjectiveAlgorithms: MOI
1313
14+ include (joinpath (dirname (@__DIR__ ), " mock_optimizer.jl" ))
1415include (joinpath (dirname (@__DIR__ ), " problems.jl" ))
1516include (joinpath (dirname (@__DIR__ ), " vOptLib.jl" ))
1617
@@ -146,6 +147,36 @@ function test_vector_of_variables_objective()
146147 return
147148end
148149
150+ function test_solve_failures ()
151+ m, n = 2 , 10
152+ p1 = [5.0 1 10 8 3 5 3 3 7 2 ; 10 6 1 6 8 3 2 10 6 1 ]
153+ p2 = [4.0 6 4 3 1 6 8 2 9 7 ; 8 8 8 2 4 8 8 1 10 1 ]
154+ w = [5.0 9 3 5 10 5 7 10 7 8 ; 4 8 8 6 10 8 10 7 5 1 ]
155+ b = [34.0 , 33.0 ]
156+ for fail_after in 0 : 5
157+ model = MOA. Optimizer (mock_optimizer (fail_after))
158+ MOI. set (model, MOA. Algorithm (), MOA. KirlikSayin ())
159+ x_ = MOI. add_variables (model, m * n)
160+ x = reshape (x_, m, n)
161+ MOI. add_constraint .(model, x, MOI. Interval (0.0 , 1.0 ))
162+ f = MOI. Utilities. operate (vcat, Float64, sum (p1 .* x), sum (p2 .* x))
163+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
164+ MOI. set (model, MOI. ObjectiveFunction {typeof(f)} (), f)
165+ for i in 1 : m
166+ f_i = sum (w[i, j] * x[i, j] for j in 1 : n)
167+ MOI. add_constraint (model, f_i, MOI. LessThan (b[i]))
168+ end
169+ for j in 1 : n
170+ MOI. add_constraint (model, sum (1.0 .* x[:, j]), MOI. EqualTo (1.0 ))
171+ end
172+ MOI. optimize! (model)
173+ @test MOI. get (model, MOI. TerminationStatus ()) ==
174+ (fail_after <= 3 ? MOI. NUMERICAL_ERROR : MOI. OPTIMAL)
175+ @test MOI. get (model, MOI. ResultCount ()) == 0
176+ end
177+ return
178+ end
179+
149180end # TestKirlikSayin
150181
151182TestKirlikSayin. run_tests ()
0 commit comments