@@ -220,3 +220,175 @@ function setup_test(
220
220
)
221
221
return
222
222
end
223
+
224
+ """
225
+ test_cpsat_BinPacking(model::MOI.ModelLike, config::Config)
226
+
227
+ Add a VectorOfVariables-in-BinPacking constraint.
228
+ """
229
+ function test_cpsat_BinPacking (
230
+ model:: MOI.ModelLike ,
231
+ config:: Config{T} ,
232
+ ) where {T}
233
+ @requires MOI. supports_constraint (
234
+ model,
235
+ MOI. VectorOfVariables,
236
+ MOI. BinPacking{T},
237
+ )
238
+ @requires MOI. supports_add_constrained_variable (model, MOI. Integer)
239
+ @requires _supports (config, MOI. optimize!)
240
+ x = [MOI. add_constrained_variable (model, MOI. Integer ())[1 ] for _ in 1 : 3 ]
241
+ MOI. add_constraint (
242
+ model,
243
+ MOI. VectorOfVariables (x),
244
+ MOI. BinPacking (T (2 ), T[1 , 2 ]),
245
+ )
246
+ MOI. optimize! (model)
247
+ x_val = round .(Int, MOI. get .(model, MOI. VariablePrimal (), x))
248
+ @test 1 * x_val[1 ] + 2 * x_val[2 ] <= T (2 )
249
+ return
250
+ end
251
+
252
+ function setup_test (
253
+ :: typeof (test_cpsat_BinPacking),
254
+ model:: MOIU.MockOptimizer ,
255
+ :: Config{T} ,
256
+ ) where {T}
257
+ MOIU. set_mock_optimize! (
258
+ model,
259
+ (mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
260
+ mock,
261
+ MOI. OPTIMAL,
262
+ (MOI. FEASIBLE_POINT, T[2 , 0 ]),
263
+ ),
264
+ )
265
+ return
266
+ end
267
+
268
+ """
269
+ test_cpsat_Cumulative(model::MOI.ModelLike, config::Config)
270
+
271
+ Add a VectorOfVariables-in-Cumulative constraint.
272
+ """
273
+ function test_cpsat_Cumulative (
274
+ model:: MOI.ModelLike ,
275
+ config:: Config{T} ,
276
+ ) where {T}
277
+ @requires MOI. supports_constraint (
278
+ model,
279
+ MOI. VectorOfVariables,
280
+ MOI. Cumulative,
281
+ )
282
+ @requires MOI. supports_add_constrained_variable (model, MOI. Integer)
283
+ @requires _supports (config, MOI. optimize!)
284
+ s = [MOI. add_constrained_variable (model, MOI. Integer ())[1 ] for _ in 1 : 3 ]
285
+ d = [MOI. add_constrained_variable (model, MOI. Integer ())[1 ] for _ in 1 : 3 ]
286
+ r = [MOI. add_constrained_variable (model, MOI. Integer ())[1 ] for _ in 1 : 3 ]
287
+ b, _ = MOI. add_constrained_variable (model, MOI. Integer ())
288
+ MOI. add_constraint (
289
+ model,
290
+ MOI. VectorOfVariables ([s; d; r; b]),
291
+ MOI. Cumulative (10 ),
292
+ )
293
+ MOI. optimize! (model)
294
+ s_val = round .(Int, MOI. get .(model, MOI. VariablePrimal (), s))
295
+ d_val = round .(Int, MOI. get .(model, MOI. VariablePrimal (), d))
296
+ r_val = round .(Int, MOI. get .(model, MOI. VariablePrimal (), r))
297
+ b_val = round (Int, MOI. get (model, MOI. VariablePrimal (), b))
298
+ times = zeros (maximum (s_val) + maximum (d_val))
299
+ for i in 1 : 3
300
+ for j in 0 : (d_val[i]- 1 )
301
+ t = s_val[i] + j
302
+ times[t] += r_val[i]
303
+ end
304
+ end
305
+ @test all (times .<= b_val)
306
+ return
307
+ end
308
+
309
+ function setup_test (
310
+ :: typeof (test_cpsat_Cumulative),
311
+ model:: MOIU.MockOptimizer ,
312
+ :: Config{T} ,
313
+ ) where {T}
314
+ MOIU. set_mock_optimize! (
315
+ model,
316
+ (mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
317
+ mock,
318
+ MOI. OPTIMAL,
319
+ (MOI. FEASIBLE_POINT, T[0 , 1 , 2 , 2 , 2 , 2 , 3 , 2 , 1 , 5 ]),
320
+ ),
321
+ )
322
+ return
323
+ end
324
+
325
+ """
326
+ test_cpsat_Table(model::MOI.ModelLike, config::Config)
327
+
328
+ Add a VectorOfVariables-in-Table constraint.
329
+ """
330
+ function test_cpsat_Table (model:: MOI.ModelLike , config:: Config{T} ) where {T}
331
+ @requires MOI. supports_constraint (
332
+ model,
333
+ MOI. VectorOfVariables,
334
+ MOI. Table{T},
335
+ )
336
+ @requires MOI. supports_add_constrained_variable (model, MOI. Integer)
337
+ @requires _supports (config, MOI. optimize!)
338
+ x = [MOI. add_constrained_variable (model, MOI. Integer ())[1 ] for _ in 1 : 3 ]
339
+ table = T[1 1 0 ; 0 1 1 ]
340
+ MOI. add_constraint (model, MOI. VectorOfVariables (x), MOI. Table (table))
341
+ MOI. optimize! (model)
342
+ x_val = round .(Int, MOI. get .(model, MOI. VariablePrimal (), x))
343
+ @test x_val == [1 , 1 , 0 ] || x_val == [0 , 1 , 1 ]
344
+ return
345
+ end
346
+
347
+ function setup_test (
348
+ :: typeof (test_cpsat_Table),
349
+ model:: MOIU.MockOptimizer ,
350
+ :: Config{T} ,
351
+ ) where {T}
352
+ MOIU. set_mock_optimize! (
353
+ model,
354
+ (mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
355
+ mock,
356
+ MOI. OPTIMAL,
357
+ (MOI. FEASIBLE_POINT, T[1 , 1 , 0 ]),
358
+ ),
359
+ )
360
+ return
361
+ end
362
+
363
+ """
364
+ test_cpsat_Circuit(model::MOI.ModelLike, config::Config)
365
+
366
+ Add a VectorOfVariables-in-Circuit constraint.
367
+ """
368
+ function test_cpsat_Circuit (model:: MOI.ModelLike , config:: Config{T} ) where {T}
369
+ @requires MOI. supports_constraint (model, MOI. VectorOfVariables, MOI. Circuit)
370
+ @requires MOI. supports_add_constrained_variable (model, MOI. Integer)
371
+ @requires _supports (config, MOI. optimize!)
372
+ x = [MOI. add_constrained_variable (model, MOI. Integer ())[1 ] for _ in 1 : 3 ]
373
+ MOI. add_constraint (model, MOI. VectorOfVariables (x), MOI. Circuit (3 ))
374
+ MOI. optimize! (model)
375
+ x_val = round .(Int, MOI. get .(model, MOI. VariablePrimal (), x))
376
+ @test x_val == [3 , 1 , 2 ] || x_val == [2 , 3 , 1 ]
377
+ return
378
+ end
379
+
380
+ function setup_test (
381
+ :: typeof (test_cpsat_Circuit),
382
+ model:: MOIU.MockOptimizer ,
383
+ :: Config{T} ,
384
+ ) where {T}
385
+ MOIU. set_mock_optimize! (
386
+ model,
387
+ (mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
388
+ mock,
389
+ MOI. OPTIMAL,
390
+ (MOI. FEASIBLE_POINT, T[3 , 1 , 2 ]),
391
+ ),
392
+ )
393
+ return
394
+ end
0 commit comments