@@ -198,6 +198,49 @@ function test_knapsack_time_limit()
198198 return
199199end
200200
201+ function test_knapsack_5_objectives ()
202+ P = Float64[1 0 0 0 ; 0 1 0 0 ; 0 0 1 0 ; 0 0 0 1 ; 1 1 1 1 ]
203+ model = MOA. Optimizer (HiGHS. Optimizer)
204+ MOI. set (model, MOA. Algorithm (), MOA. Lexicographic ())
205+ MOI. set (model, MOI. Silent (), true )
206+ x = MOI. add_variables (model, 4 )
207+ MOI. add_constraint .(model, x, MOI. GreaterThan (0.0 ))
208+ MOI. add_constraint .(model, x, MOI. LessThan (1.0 ))
209+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
210+ f = MOI. Utilities. operate (vcat, Float64, P * x... )
211+ MOI. set (model, MOI. ObjectiveFunction {typeof(f)} (), f)
212+ MOI. add_constraint (model, sum (1.0 * x[i] for i in 1 : 4 ), MOI. LessThan (2.0 ))
213+ @test_logs (:warn ,) MOI. optimize! (model)
214+ @test MOI. get (model, MOI. ResultCount ()) == 6
215+ results = [
216+ [0 , 0 , 1 , 1 , 2 ] => [0 , 0 , 1 , 1 ],
217+ [0 , 1 , 0 , 1 , 2 ] => [0 , 1 , 0 , 1 ],
218+ [0 , 1 , 1 , 0 , 2 ] => [0 , 1 , 1 , 0 ],
219+ [1 , 0 , 0 , 1 , 2 ] => [1 , 0 , 0 , 1 ],
220+ [1 , 0 , 1 , 0 , 2 ] => [1 , 0 , 1 , 0 ],
221+ [1 , 1 , 0 , 0 , 2 ] => [1 , 1 , 0 , 0 ],
222+ ]
223+ for i in 1 : MOI. get (model, MOI. ResultCount ())
224+ X = round .(Int, MOI. get (model, MOI. VariablePrimal (i), x))
225+ Y = round .(Int, MOI. get (model, MOI. ObjectiveValue (i)))
226+ @test results[i] == (Y => X)
227+ end
228+ MOI. set (model, MOA. LexicographicAllPermutations (), true )
229+ @test_nowarn MOI. optimize! (model)
230+ for i in 1 : MOI. get (model, MOI. ResultCount ())
231+ X = round .(Int, MOI. get (model, MOI. VariablePrimal (i), x))
232+ Y = round .(Int, MOI. get (model, MOI. ObjectiveValue (i)))
233+ @test results[i] == (Y => X)
234+ end
235+ MOI. set (model, MOA. LexicographicAllPermutations (), false )
236+ @test_nowarn MOI. optimize! (model)
237+ @test MOI. get (model, MOI. ResultCount ()) == 1
238+ X = round .(Int, MOI. get (model, MOI. VariablePrimal (1 ), x))
239+ Y = round .(Int, MOI. get (model, MOI. ObjectiveValue (1 )))
240+ @test ([1 , 1 , 0 , 0 , 2 ] => [1 , 1 , 0 , 0 ]) == (Y => X)
241+ return
242+ end
243+
201244end # module TestLexicographic
202245
203246TestLexicographic. run_tests ()
0 commit comments