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

85 lines
6.3 KiB
MiniZinc

predicate fzn_all_different_int(array [int] of var int: x);
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);
predicate global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);
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);
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..828: INT____00001 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00002 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00004 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00006 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00008 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00010 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00012 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00014 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00016 :: is_defined_var :: var_is_introduced;
var 1..361: INT____00018 :: is_defined_var :: var_is_introduced;
var 0..19: leftout :: output_var;
array [1..9] of var 0..92: s :: output_array([1..9]);
var 0..828: total :: output_var = INT____00001;
array [1..18] of var 1..19: x :: output_array([1..9, 1..2]);
constraint fzn_all_different_int([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]]) :: domain;
constraint array_int_element(INT____00002, scores, s[1]);
constraint array_int_element(INT____00004, scores, s[2]);
constraint array_int_element(INT____00006, scores, s[3]);
constraint array_int_element(INT____00008, scores, s[4]);
constraint array_int_element(INT____00010, scores, s[5]);
constraint array_int_element(INT____00012, scores, s[6]);
constraint array_int_element(INT____00014, scores, s[7]);
constraint array_int_element(INT____00016, scores, s[8]);
constraint array_int_element(INT____00018, scores, s[9]);
constraint int_le(s[2], s[1]);
constraint int_le(s[3], s[2]);
constraint int_le(s[4], s[3]);
constraint int_le(s[5], s[4]);
constraint int_le(s[6], s[5]);
constraint int_le(s[7], s[6]);
constraint int_le(s[8], s[7]);
constraint int_le(s[9], s[8]);
constraint int_le(x[1], x[2]);
constraint int_le(x[3], x[4]);
constraint int_le(x[5], x[6]);
constraint int_le(x[7], x[8]);
constraint int_le(x[9], x[10]);
constraint int_le(x[11], x[12]);
constraint int_le(x[13], x[14]);
constraint int_le(x[15], x[16]);
constraint int_le(x[17], x[18]);
constraint int_lin_eq([-1, 19, 1], [INT____00002, x[1], x[2]], 19) :: defines_var(INT____00002) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00004, x[3], x[4]], 19) :: defines_var(INT____00004) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00006, x[5], x[6]], 19) :: defines_var(INT____00006) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00008, x[7], x[8]], 19) :: defines_var(INT____00008) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00010, x[9], x[10]], 19) :: defines_var(INT____00010) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00012, x[11], x[12]], 19) :: defines_var(INT____00012) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00014, x[13], x[14]], 19) :: defines_var(INT____00014) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00016, x[15], x[16]], 19) :: defines_var(INT____00016) :: domain;
constraint int_lin_eq([-1, 19, 1], [INT____00018, x[17], x[18]], 19) :: defines_var(INT____00018) :: domain;
constraint int_lin_eq([-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]], 0) :: defines_var(INT____00001);
constraint int_ne(leftout, 0);
constraint int_ne(leftout, x[1]);
constraint int_ne(leftout, x[2]);
constraint int_ne(leftout, x[3]);
constraint int_ne(leftout, x[4]);
constraint int_ne(leftout, x[5]);
constraint int_ne(leftout, x[6]);
constraint int_ne(leftout, x[7]);
constraint int_ne(leftout, x[8]);
constraint int_ne(leftout, x[9]);
constraint int_ne(leftout, x[10]);
constraint int_ne(leftout, x[11]);
constraint int_ne(leftout, x[12]);
constraint int_ne(leftout, x[13]);
constraint int_ne(leftout, x[14]);
constraint int_ne(leftout, x[15]);
constraint int_ne(leftout, x[16]);
constraint int_ne(leftout, x[17]);
constraint int_ne(leftout, x[18]);
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]], first_fail, indomain_median, complete) maximize INT____00001;