3
3
# v.2.0. If a copy of the MPL was not distributed with this file, You can
4
4
# obtain one at http://mozilla.org/MPL/2.0/.
5
5
6
- module TestNISE
6
+ module TestDichotomy
7
7
8
8
using Test
9
9
@@ -23,9 +23,11 @@ function run_tests()
23
23
return
24
24
end
25
25
26
- function test_NISE_SolutionLimit ()
26
+ function test_Dichotomy_SolutionLimit ()
27
27
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 ())
29
31
@test MOI. get (model, MOA. SolutionLimit ()) ==
30
32
MOA. default (MOA. SolutionLimit ())
31
33
MOI. set (model, MOA. SolutionLimit (), 1 )
36
38
function test_moi_bolp_1 ()
37
39
f = MOI. OptimizerWithAttributes (
38
40
() -> MOA. Optimizer (HiGHS. Optimizer),
39
- MOA. Algorithm () => MOA. NISE (),
41
+ MOA. Algorithm () => MOA. Dichotomy (),
40
42
)
41
43
model = MOI. instantiate (f)
42
44
MOI. set (model, MOI. Silent (), true )
72
74
function test_moi_bolp_1_maximize ()
73
75
f = MOI. OptimizerWithAttributes (
74
76
() -> MOA. Optimizer (HiGHS. Optimizer),
75
- MOA. Algorithm () => MOA. NISE (),
77
+ MOA. Algorithm () => MOA. Dichotomy (),
76
78
)
77
79
model = MOI. instantiate (f)
78
80
MOI. set (model, MOI. Silent (), true )
108
110
function test_moi_bolp_1_reversed ()
109
111
f = MOI. OptimizerWithAttributes (
110
112
() -> MOA. Optimizer (HiGHS. Optimizer),
111
- MOA. Algorithm () => MOA. NISE (),
113
+ MOA. Algorithm () => MOA. Dichotomy (),
112
114
)
113
115
model = MOI. instantiate (f)
114
116
MOI. set (model, MOI. Silent (), true )
144
146
function test_moi_bolp_1_scalar ()
145
147
f = MOI. OptimizerWithAttributes (
146
148
() -> MOA. Optimizer (HiGHS. Optimizer),
147
- MOA. Algorithm () => MOA. NISE (),
149
+ MOA. Algorithm () => MOA. Dichotomy (),
148
150
)
149
151
model = MOI. instantiate (f)
150
152
MOI. set (model, MOI. Silent (), true )
@@ -198,7 +200,7 @@ function test_biobjective_knapsack()
198
200
w = [80 , 87 , 68 , 72 , 66 , 77 , 99 , 85 , 70 , 93 , 98 , 72 , 100 , 89 , 67 , 86 , 91 ]
199
201
f = MOI. OptimizerWithAttributes (
200
202
() -> MOA. Optimizer (HiGHS. Optimizer),
201
- MOA. Algorithm () => MOA. NISE (),
203
+ MOA. Algorithm () => MOA. Dichotomy (),
202
204
)
203
205
model = MOI. instantiate (f)
204
206
MOI. set (model, MOI. Silent (), true )
234
236
235
237
function test_infeasible ()
236
238
model = MOA. Optimizer (HiGHS. Optimizer)
237
- MOI. set (model, MOA. Algorithm (), MOA. NISE ())
239
+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
238
240
MOI. set (model, MOI. Silent (), true )
239
241
x = MOI. add_variables (model, 2 )
240
242
MOI. add_constraint .(model, x, MOI. GreaterThan (0.0 ))
250
252
251
253
function test_unbounded ()
252
254
model = MOA. Optimizer (HiGHS. Optimizer)
253
- MOI. set (model, MOA. Algorithm (), MOA. NISE ())
255
+ MOI. set (model, MOA. Algorithm (), MOA. Dichotomy ())
254
256
MOI. set (model, MOI. Silent (), true )
255
257
x = MOI. add_variables (model, 2 )
256
258
MOI. add_constraint .(model, x, MOI. GreaterThan (0.0 ))
@@ -264,6 +266,73 @@ function test_unbounded()
264
266
return
265
267
end
266
268
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
+
267
336
end
268
337
269
- TestNISE . run_tests ()
338
+ TestDichotomy . run_tests ()
0 commit comments