30 lines
1.8 KiB
MiniZinc
30 lines
1.8 KiB
MiniZinc
array [1..40] of int: A = [1, 70, 0, 0, 200, 1, 100, 0, 0, 250, 1, 150, 0, 0, 350, 2, -30, 500, 0, 140, 2, -50, 800, 0, 300, 3, -20, 0, 250, 20, 3, -25, 0, 300, 25, 3, -30, 0, 400, 30];
|
|
array [1..5] of int: lower_bound = [0, 0, 700, 800, 0];
|
|
array [1..3] of int: max_number_used = [1, 3, 3];
|
|
array [1..3] of int: min_number_used = [1, 1, 1];
|
|
array [1..5] of int: unit_cost = [0, 0, 0, 0, 1];
|
|
var int: INT____00001 :: is_defined_var :: var_is_introduced;
|
|
var int: total_weight :: output_var = INT____00001;
|
|
array [1..8] of var int: x :: output_array([1..8]);
|
|
constraint int_le(0, x[1]);
|
|
constraint int_le(0, x[2]);
|
|
constraint int_le(0, x[3]);
|
|
constraint int_le(0, x[4]);
|
|
constraint int_le(0, x[5]);
|
|
constraint int_le(0, x[6]);
|
|
constraint int_le(0, x[7]);
|
|
constraint int_le(0, x[8]);
|
|
constraint int_lin_eq([-1, 200, 250, 350, 140, 300, 20, 25, 30], [INT____00001, x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8]], 0) :: defines_var(INT____00001);
|
|
constraint int_lin_le([-500, -800], [x[4], x[5]], -700);
|
|
constraint int_lin_le([-1, -1], [x[4], x[5]], -1);
|
|
constraint int_lin_le([1, 1], [x[4], x[5]], 3);
|
|
constraint int_lin_le([-250, -300, -400], [x[6], x[7], x[8]], -800);
|
|
constraint int_lin_le([-1, -1, -1], [x[1], x[2], x[3]], -1);
|
|
constraint int_lin_le([-1, -1, -1], [x[6], x[7], x[8]], -1);
|
|
constraint int_lin_le([1, 1, 1], [x[1], x[2], x[3]], 1);
|
|
constraint int_lin_le([1, 1, 1], [x[6], x[7], x[8]], 3);
|
|
constraint int_lin_le([-200, -250, -350, -140, -300, -20, -25, -30], [x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8]], 0);
|
|
constraint int_lin_le([-70, -100, -150, 30, 50, 20, 25, 30], [x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8]], 0);
|
|
constraint int_lin_le([-1, -1, -1, -2, -2, -3, -3, -3], [x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8]], 0);
|
|
solve :: int_search(x, first_fail, indomain, complete) minimize INT____00001;
|