33# v.2.0. If a copy of the MPL was not distributed with this file, You can
44# obtain one at http://mozilla.org/MPL/2.0/.
55
6- module TestNISE
6+ module TestDichotomy
77
88using Test
99
@@ -23,9 +23,11 @@ function run_tests()
2323 return
2424end
2525
26- function test_NISE_SolutionLimit ()
26+ function test_Dichotomy_SolutionLimit ()
2727 model = MOA. Optimizer (HiGHS. Optimizer)
28- MOI. set (model, MOA. Algorithm (), MOA. NISE ())
28+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
29+ @test MOI. supports (MOA. Dichotomy (), MOA. SolutionLimit ())
30+ @test MOI. supports (model, MOA. SolutionLimit ())
2931 @test MOI. get (model, MOA. SolutionLimit ()) ==
3032 MOA. default (MOA. SolutionLimit ())
3133 MOI. set (model, MOA. SolutionLimit (), 1 )
3638function test_moi_bolp_1 ()
3739 f = MOI. OptimizerWithAttributes (
3840 () -> MOA. Optimizer (HiGHS. Optimizer),
39- MOA. Algorithm () => MOA. NISE (),
41+ MOA. Algorithm () => MOA. Dichotomy (),
4042 )
4143 model = MOI. instantiate (f)
4244 MOI. set (model, MOI. Silent (), true )
7274function test_moi_bolp_1_maximize ()
7375 f = MOI. OptimizerWithAttributes (
7476 () -> MOA. Optimizer (HiGHS. Optimizer),
75- MOA. Algorithm () => MOA. NISE (),
77+ MOA. Algorithm () => MOA. Dichotomy (),
7678 )
7779 model = MOI. instantiate (f)
7880 MOI. set (model, MOI. Silent (), true )
108110function test_moi_bolp_1_reversed ()
109111 f = MOI. OptimizerWithAttributes (
110112 () -> MOA. Optimizer (HiGHS. Optimizer),
111- MOA. Algorithm () => MOA. NISE (),
113+ MOA. Algorithm () => MOA. Dichotomy (),
112114 )
113115 model = MOI. instantiate (f)
114116 MOI. set (model, MOI. Silent (), true )
144146function test_moi_bolp_1_scalar ()
145147 f = MOI. OptimizerWithAttributes (
146148 () -> MOA. Optimizer (HiGHS. Optimizer),
147- MOA. Algorithm () => MOA. NISE (),
149+ MOA. Algorithm () => MOA. Dichotomy (),
148150 )
149151 model = MOI. instantiate (f)
150152 MOI. set (model, MOI. Silent (), true )
@@ -198,7 +200,7 @@ function test_biobjective_knapsack()
198200 w = [80 , 87 , 68 , 72 , 66 , 77 , 99 , 85 , 70 , 93 , 98 , 72 , 100 , 89 , 67 , 86 , 91 ]
199201 f = MOI. OptimizerWithAttributes (
200202 () -> MOA. Optimizer (HiGHS. Optimizer),
201- MOA. Algorithm () => MOA. NISE (),
203+ MOA. Algorithm () => MOA. Dichotomy (),
202204 )
203205 model = MOI. instantiate (f)
204206 MOI. set (model, MOI. Silent (), true )
234236
235237function test_infeasible ()
236238 model = MOA. Optimizer (HiGHS. Optimizer)
237- MOI. set (model, MOA. Algorithm (), MOA. NISE ())
239+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
238240 MOI. set (model, MOI. Silent (), true )
239241 x = MOI. add_variables (model, 2 )
240242 MOI. add_constraint .(model, x, MOI. GreaterThan (0.0 ))
250252
251253function test_unbounded ()
252254 model = MOA. Optimizer (HiGHS. Optimizer)
253- MOI. set (model, MOA. Algorithm (), MOA. NISE ())
255+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
254256 MOI. set (model, MOI. Silent (), true )
255257 x = MOI. add_variables (model, 2 )
256258 MOI. add_constraint .(model, x, MOI. GreaterThan (0.0 ))
@@ -264,6 +266,73 @@ function test_unbounded()
264266 return
265267end
266268
269+ function test_bicriteria_transportation_nise ()
270+ m, n = 3 , 4
271+ c = Float64[1 2 7 7 ; 1 9 3 4 ; 8 9 4 6 ]
272+ d = Float64[4 4 3 4 ; 5 8 9 10 ; 6 2 5 1 ]
273+ a = Float64[11 , 3 , 14 , 16 ]
274+ b = Float64[8 , 19 , 17 ]
275+ model = MOA. Optimizer (HiGHS. Optimizer)
276+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
277+ MOI. set (model, MOI. Silent (), true )
278+ x = [MOI. add_variable (model) for i in 1 : m, j in 1 : n]
279+ MOI. add_constraint .(model, x, MOI. GreaterThan (0.0 ))
280+ for j in 1 : n
281+ terms = [MOI. ScalarAffineTerm (1.0 , x[i, j]) for i in 1 : m]
282+ MOI. add_constraint (
283+ model,
284+ MOI. ScalarAffineFunction (terms, 0.0 ),
285+ MOI. EqualTo (a[j]),
286+ )
287+ end
288+ for i in 1 : m
289+ terms = [MOI. ScalarAffineTerm (1.0 , x[i, j]) for j in 1 : n]
290+ MOI. add_constraint (
291+ model,
292+ MOI. ScalarAffineFunction (terms, 0.0 ),
293+ MOI. EqualTo (b[i]),
294+ )
295+ end
296+ f = MOI. Utilities. vectorize ([
297+ sum (c[i, j] * x[i, j] for i in 1 : m, j in 1 : n),
298+ sum (d[i, j] * x[i, j] for i in 1 : m, j in 1 : n),
299+ ])
300+ MOI. set (model, MOI. ObjectiveFunction {typeof(f)} (), f)
301+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
302+ MOI. optimize! (model)
303+ N = MOI. get (model, MOI. ResultCount ())
304+ y_sol = hcat (MOI. get .(model, MOI. ObjectiveValue .(1 : N))... )
305+ Y_N = Float64[143 156 176 186 208 ; 265 200 175 171 167 ]
306+ @test isapprox (y_sol, Y_N; atol = 1e-6 )
307+ return
308+ end
309+
310+ function test_deprecated ()
311+ nise = MOA. NISE ()
312+ dichotomy = MOA. Dichotomy ()
313+ @test nise isa typeof (dichotomy)
314+ @test nise. solution_limit === dichotomy. solution_limit
315+ return
316+ end
317+
318+ function test_three_objective ()
319+ model = MOA. Optimizer (HiGHS. Optimizer)
320+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
321+ MOI. set (model, MOI. Silent (), true )
322+ MOI. Utilities. loadfromstring! (
323+ model,
324+ """
325+ variables: x
326+ maxobjective: [1.0 * x, -1.0 * x, 2.0 * x + 2.0]
327+ """ ,
328+ )
329+ @test_throws (
330+ ErrorException (" Only scalar or bi-objective problems supported." ),
331+ MOI. optimize! (model),
332+ )
333+ return
334+ end
335+
267336end
268337
269- TestNISE . run_tests ()
338+ TestDichotomy . run_tests ()
0 commit comments