Files
ortools-clone/examples/flatzinc/or_seating.fzn

119 lines
9.2 KiB
MiniZinc
Raw Permalink Normal View History

predicate fzn_all_different_int(array [int] of var int: x);
2012-09-05 15:50:45 +00:00
predicate count_eq(array [int] of var int: x, var int: y, var int: c);
predicate count_reif(array [int] of var int: x, var int: y, var int: c, var bool: b);
predicate fixed_fzn_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, int: b);
2012-09-03 18:26:36 +00:00
predicate global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);
2012-09-05 15:50:45 +00:00
predicate global_cardinality_closed(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);
predicate global_cardinality_low_up(array [int] of var int: x, array [int] of int: cover, array [int] of int: lbound, array [int] of int: ubound);
predicate global_cardinality_low_up_closed(array [int] of var int: x, array [int] of int: cover, array [int] of int: lbound, array [int] of int: ubound);
2012-09-03 18:26:36 +00:00
predicate maximum_int(var int: m, array [int] of var int: x);
predicate minimum_int(var int: m, array [int] of var int: x);
predicate sliding_sum(int: low, int: up, int: seq, array [int] of var int: vs);
predicate sort(array [int] of var int: x, array [int] of var int: y);
predicate table_bool(array [int] of var bool: x, array [int, int] of bool: t);
predicate table_int(array [int] of var int: x, array [int, int] of int: t);
predicate var_fzn_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, var int: b);
2012-09-03 18:26:36 +00:00
array [1..361] of int: scores = [0, 30, 10, 33, 49, 50, 38, 32, 92, 61, 31, 22, 31, 55, 26, 19, 21, 61, 14, 30, 0, 21, 23, 10, 33, 28, 15, 22, 22, 36, 33, 36, 38, 36, 24, 26, 22, 55, 10, 21, 0, 10, 22, 26, 10, 22, 10, 41, 26, 52, 21, 24, 21, 33, 33, 10, 33, 33, 23, 10, 0, 24, 25, 37, 24, 36, 36, 22, 22, 22, 22, 22, 10, 13, 36, 10, 49, 10, 22, 24, 0, 41, 55, 42, 57, 57, 16, 15, 21, 69, 16, 33, 31, 57, 23, 50, 33, 26, 25, 41, 0, 25, 19, 53, 53, 44, 33, 39, 61, 34, 27, 30, 53, 22, 38, 28, 10, 37, 55, 25, 0, 29, 36, 36, 22, 22, 44, 58, 22, 32, 18, 36, 10, 32, 15, 22, 24, 42, 19, 29, 0, 30, 30, 16, 10, 16, 21, 11, 59, 36, 61, 45, 92, 22, 10, 36, 57, 53, 36, 30, 0, 69, 28, 27, 33, 50, 28, 21, 19, 69, 11, 61, 22, 41, 36, 57, 53, 36, 30, 69, 0, 28, 27, 33, 50, 28, 21, 19, 69, 11, 31, 36, 26, 22, 16, 44, 22, 16, 28, 28, 0, 33, 42, 39, 37, 30, 27, 28, 25, 22, 33, 52, 22, 15, 33, 22, 10, 27, 27, 33, 0, 38, 36, 38, 26, 21, 27, 21, 31, 36, 21, 22, 21, 39, 44, 16, 33, 33, 42, 38, 0, 39, 42, 57, 27, 33, 25, 55, 38, 24, 22, 69, 61, 58, 21, 50, 50, 39, 36, 39, 0, 34, 27, 32, 50, 22, 26, 36, 21, 22, 16, 34, 22, 11, 28, 28, 37, 38, 42, 34, 0, 30, 22, 28, 25, 19, 24, 33, 10, 33, 27, 32, 59, 21, 21, 30, 26, 57, 27, 30, 0, 39, 52, 37, 21, 26, 33, 13, 31, 30, 18, 36, 19, 19, 27, 21, 27, 32, 22, 39, 0, 19, 34, 61, 22, 10, 36, 57, 53, 36, 61, 69, 69, 28, 27, 33, 50, 28, 52, 19, 0, 11, 14, 55, 33, 10, 23, 22, 10, 45, 11, 11, 25, 21, 25, 22, 25, 37, 34, 11, 0];
var 0..1748: INT____00001 :: is_defined_var :: var_is_introduced;
2012-09-05 15:50:45 +00:00
var 20..38: INT____00021 :: is_defined_var :: var_is_introduced;
var 39..57: INT____00023 :: is_defined_var :: var_is_introduced;
var 58..76: INT____00025 :: is_defined_var :: var_is_introduced;
var 77..95: INT____00027 :: is_defined_var :: var_is_introduced;
var 96..114: INT____00029 :: is_defined_var :: var_is_introduced;
var 115..133: INT____00031 :: is_defined_var :: var_is_introduced;
var 134..152: INT____00033 :: is_defined_var :: var_is_introduced;
var 153..171: INT____00035 :: is_defined_var :: var_is_introduced;
var 172..190: INT____00037 :: is_defined_var :: var_is_introduced;
var 191..209: INT____00039 :: is_defined_var :: var_is_introduced;
var 210..228: INT____00041 :: is_defined_var :: var_is_introduced;
var 229..247: INT____00043 :: is_defined_var :: var_is_introduced;
var 248..266: INT____00045 :: is_defined_var :: var_is_introduced;
var 267..285: INT____00047 :: is_defined_var :: var_is_introduced;
var 286..304: INT____00049 :: is_defined_var :: var_is_introduced;
var 305..323: INT____00051 :: is_defined_var :: var_is_introduced;
var 324..342: INT____00053 :: is_defined_var :: var_is_introduced;
var 343..361: INT____00055 :: is_defined_var :: var_is_introduced;
2012-09-03 18:26:36 +00:00
array [1..19] of var 0..92: s :: output_array([1..19]);
var 0..1748: total :: output_var = INT____00001;
array [1..19] of var 1..19: x :: output_array([1..19]);
array [1..19] of var 1..19: z :: output_array([1..19]);
constraint fzn_all_different_int(x) :: domain;
constraint fzn_all_different_int(z) :: domain;
2012-09-05 15:50:45 +00:00
constraint array_int_element(INT____00021, scores, s[2]);
constraint array_int_element(INT____00023, scores, s[3]);
constraint array_int_element(INT____00025, scores, s[4]);
constraint array_int_element(INT____00027, scores, s[5]);
constraint array_int_element(INT____00029, scores, s[6]);
constraint array_int_element(INT____00031, scores, s[7]);
constraint array_int_element(INT____00033, scores, s[8]);
constraint array_int_element(INT____00035, scores, s[9]);
constraint array_int_element(INT____00037, scores, s[10]);
constraint array_int_element(INT____00039, scores, s[11]);
constraint array_int_element(INT____00041, scores, s[12]);
constraint array_int_element(INT____00043, scores, s[13]);
constraint array_int_element(INT____00045, scores, s[14]);
constraint array_int_element(INT____00047, scores, s[15]);
constraint array_int_element(INT____00049, scores, s[16]);
constraint array_int_element(INT____00051, scores, s[17]);
constraint array_int_element(INT____00053, scores, s[18]);
constraint array_int_element(INT____00055, scores, s[19]);
2012-09-03 18:26:36 +00:00
constraint array_int_element(x[1], scores, s[1]);
constraint array_var_int_element(z[1], x, z[2]);
constraint array_var_int_element(z[2], x, z[3]);
constraint array_var_int_element(z[3], x, z[4]);
constraint array_var_int_element(z[4], x, z[5]);
constraint array_var_int_element(z[5], x, z[6]);
constraint array_var_int_element(z[6], x, z[7]);
constraint array_var_int_element(z[7], x, z[8]);
constraint array_var_int_element(z[8], x, z[9]);
constraint array_var_int_element(z[9], x, z[10]);
constraint array_var_int_element(z[10], x, z[11]);
constraint array_var_int_element(z[11], x, z[12]);
constraint array_var_int_element(z[12], x, z[13]);
constraint array_var_int_element(z[13], x, z[14]);
constraint array_var_int_element(z[14], x, z[15]);
constraint array_var_int_element(z[15], x, z[16]);
constraint array_var_int_element(z[16], x, z[17]);
constraint array_var_int_element(z[17], x, z[18]);
constraint array_var_int_element(z[18], x, z[19]);
2012-09-05 15:50:45 +00:00
constraint int_eq(z[1], x[1]);
constraint int_eq(z[19], 1);
constraint int_lin_eq([-1, 1], [INT____00021, x[2]], -19) :: defines_var(INT____00021) :: domain;
constraint int_lin_eq([-1, 1], [INT____00023, x[3]], -38) :: defines_var(INT____00023) :: domain;
constraint int_lin_eq([-1, 1], [INT____00025, x[4]], -57) :: defines_var(INT____00025) :: domain;
constraint int_lin_eq([-1, 1], [INT____00027, x[5]], -76) :: defines_var(INT____00027) :: domain;
constraint int_lin_eq([-1, 1], [INT____00029, x[6]], -95) :: defines_var(INT____00029) :: domain;
constraint int_lin_eq([-1, 1], [INT____00031, x[7]], -114) :: defines_var(INT____00031) :: domain;
constraint int_lin_eq([-1, 1], [INT____00033, x[8]], -133) :: defines_var(INT____00033) :: domain;
constraint int_lin_eq([-1, 1], [INT____00035, x[9]], -152) :: defines_var(INT____00035) :: domain;
constraint int_lin_eq([-1, 1], [INT____00037, x[10]], -171) :: defines_var(INT____00037) :: domain;
constraint int_lin_eq([-1, 1], [INT____00039, x[11]], -190) :: defines_var(INT____00039) :: domain;
constraint int_lin_eq([-1, 1], [INT____00041, x[12]], -209) :: defines_var(INT____00041) :: domain;
constraint int_lin_eq([-1, 1], [INT____00043, x[13]], -228) :: defines_var(INT____00043) :: domain;
constraint int_lin_eq([-1, 1], [INT____00045, x[14]], -247) :: defines_var(INT____00045) :: domain;
constraint int_lin_eq([-1, 1], [INT____00047, x[15]], -266) :: defines_var(INT____00047) :: domain;
constraint int_lin_eq([-1, 1], [INT____00049, x[16]], -285) :: defines_var(INT____00049) :: domain;
constraint int_lin_eq([-1, 1], [INT____00051, x[17]], -304) :: defines_var(INT____00051) :: domain;
constraint int_lin_eq([-1, 1], [INT____00053, x[18]], -323) :: defines_var(INT____00053) :: domain;
constraint int_lin_eq([-1, 1], [INT____00055, x[19]], -342) :: defines_var(INT____00055) :: domain;
2012-09-03 18:26:36 +00:00
constraint int_lin_eq([-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [INT____00001, s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], s[10], s[11], s[12], s[13], s[14], s[15], s[16], s[17], s[18], s[19]], 0) :: defines_var(INT____00001);
2012-09-05 15:50:45 +00:00
constraint int_ne(z[1], 1);
constraint int_ne(z[2], 1);
constraint int_ne(z[3], 1);
constraint int_ne(z[4], 1);
constraint int_ne(z[5], 1);
constraint int_ne(z[6], 1);
constraint int_ne(z[7], 1);
constraint int_ne(z[8], 1);
constraint int_ne(z[9], 1);
constraint int_ne(z[10], 1);
constraint int_ne(z[11], 1);
constraint int_ne(z[12], 1);
constraint int_ne(z[13], 1);
constraint int_ne(z[14], 1);
constraint int_ne(z[15], 1);
constraint int_ne(z[16], 1);
constraint int_ne(z[17], 1);
constraint int_ne(z[18], 1);
solve :: int_search([x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17], x[18], x[19], z[1], z[2], z[3], z[4], z[5], z[6], z[7], z[8], z[9], z[10], z[11], z[12], z[13], z[14], z[15], z[16], z[17], z[18], z[19]], first_fail, indomain_min, complete) maximize INT____00001;