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