203 lines
15 KiB
MiniZinc
203 lines
15 KiB
MiniZinc
predicate fzn_all_different_int(array [int] of var int: x);
|
|
predicate count(array [int] of var int: x, var int: y, var int: c);
|
|
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);
|
|
var bool: BOOL____00071 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00072 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00073 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00074 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00075 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00076 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00077 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00078 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00079 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00080 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00081 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00082 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00083 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00084 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00085 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00086 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00087 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00088 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00089 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00090 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00091 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00092 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00093 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00094 :: is_defined_var :: var_is_introduced;
|
|
var bool: BOOL____00095 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00001 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00003 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00005 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00007 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00009 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00011 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00013 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00015 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00017 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00019 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00021 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00023 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00025 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00027 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00029 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00031 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00033 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00035 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00037 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00039 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00041 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00043 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00045 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00047 :: is_defined_var :: var_is_introduced;
|
|
var 1..25: INT____00049 :: is_defined_var :: var_is_introduced;
|
|
array [1..5] of var 0..4: qgDiagonal;
|
|
array [1..25] of var 0..4: quasiGroup :: output_array([0..4, 0..4]);
|
|
constraint fzn_all_different_int([quasiGroup[1], quasiGroup[2], quasiGroup[3], quasiGroup[4], quasiGroup[5]]);
|
|
constraint fzn_all_different_int([quasiGroup[1], quasiGroup[6], quasiGroup[11], quasiGroup[16], quasiGroup[21]]);
|
|
constraint fzn_all_different_int([quasiGroup[2], quasiGroup[7], quasiGroup[12], quasiGroup[17], quasiGroup[22]]);
|
|
constraint fzn_all_different_int([quasiGroup[3], quasiGroup[8], quasiGroup[13], quasiGroup[18], quasiGroup[23]]);
|
|
constraint fzn_all_different_int([quasiGroup[4], quasiGroup[9], quasiGroup[14], quasiGroup[19], quasiGroup[24]]);
|
|
constraint fzn_all_different_int([quasiGroup[5], quasiGroup[10], quasiGroup[15], quasiGroup[20], quasiGroup[25]]);
|
|
constraint fzn_all_different_int([quasiGroup[6], quasiGroup[7], quasiGroup[8], quasiGroup[9], quasiGroup[10]]);
|
|
constraint fzn_all_different_int([quasiGroup[11], quasiGroup[12], quasiGroup[13], quasiGroup[14], quasiGroup[15]]);
|
|
constraint fzn_all_different_int([quasiGroup[16], quasiGroup[17], quasiGroup[18], quasiGroup[19], quasiGroup[20]]);
|
|
constraint fzn_all_different_int([quasiGroup[21], quasiGroup[22], quasiGroup[23], quasiGroup[24], quasiGroup[25]]);
|
|
constraint fzn_all_different_int(qgDiagonal);
|
|
constraint array_var_int_element(INT____00001, quasiGroup, 0);
|
|
constraint array_var_int_element(INT____00003, quasiGroup, 0);
|
|
constraint array_var_int_element(INT____00005, quasiGroup, 0);
|
|
constraint array_var_int_element(INT____00007, quasiGroup, 0);
|
|
constraint array_var_int_element(INT____00009, quasiGroup, 0);
|
|
constraint array_var_int_element(INT____00011, quasiGroup, 1);
|
|
constraint array_var_int_element(INT____00013, quasiGroup, 1);
|
|
constraint array_var_int_element(INT____00015, quasiGroup, 1);
|
|
constraint array_var_int_element(INT____00017, quasiGroup, 1);
|
|
constraint array_var_int_element(INT____00019, quasiGroup, 1);
|
|
constraint array_var_int_element(INT____00021, quasiGroup, 2);
|
|
constraint array_var_int_element(INT____00023, quasiGroup, 2);
|
|
constraint array_var_int_element(INT____00025, quasiGroup, 2);
|
|
constraint array_var_int_element(INT____00027, quasiGroup, 2);
|
|
constraint array_var_int_element(INT____00029, quasiGroup, 2);
|
|
constraint array_var_int_element(INT____00031, quasiGroup, 3);
|
|
constraint array_var_int_element(INT____00033, quasiGroup, 3);
|
|
constraint array_var_int_element(INT____00035, quasiGroup, 3);
|
|
constraint array_var_int_element(INT____00037, quasiGroup, 3);
|
|
constraint array_var_int_element(INT____00039, quasiGroup, 3);
|
|
constraint array_var_int_element(INT____00041, quasiGroup, 4);
|
|
constraint array_var_int_element(INT____00043, quasiGroup, 4);
|
|
constraint array_var_int_element(INT____00045, quasiGroup, 4);
|
|
constraint array_var_int_element(INT____00047, quasiGroup, 4);
|
|
constraint array_var_int_element(INT____00049, quasiGroup, 4);
|
|
constraint bool_le(BOOL____00071, BOOL____00071);
|
|
constraint bool_le(BOOL____00072, BOOL____00073);
|
|
constraint bool_le(BOOL____00073, BOOL____00072);
|
|
constraint bool_le(BOOL____00074, BOOL____00075);
|
|
constraint bool_le(BOOL____00075, BOOL____00074);
|
|
constraint bool_le(BOOL____00076, BOOL____00077);
|
|
constraint bool_le(BOOL____00077, BOOL____00076);
|
|
constraint bool_le(BOOL____00078, BOOL____00079);
|
|
constraint bool_le(BOOL____00079, BOOL____00078);
|
|
constraint bool_le(BOOL____00080, BOOL____00080);
|
|
constraint bool_le(BOOL____00081, BOOL____00082);
|
|
constraint bool_le(BOOL____00082, BOOL____00081);
|
|
constraint bool_le(BOOL____00083, BOOL____00084);
|
|
constraint bool_le(BOOL____00084, BOOL____00083);
|
|
constraint bool_le(BOOL____00085, BOOL____00086);
|
|
constraint bool_le(BOOL____00086, BOOL____00085);
|
|
constraint bool_le(BOOL____00087, BOOL____00087);
|
|
constraint bool_le(BOOL____00088, BOOL____00089);
|
|
constraint bool_le(BOOL____00089, BOOL____00088);
|
|
constraint bool_le(BOOL____00090, BOOL____00091);
|
|
constraint bool_le(BOOL____00091, BOOL____00090);
|
|
constraint bool_le(BOOL____00092, BOOL____00092);
|
|
constraint bool_le(BOOL____00093, BOOL____00094);
|
|
constraint bool_le(BOOL____00094, BOOL____00093);
|
|
constraint bool_le(BOOL____00095, BOOL____00095);
|
|
constraint int_eq(qgDiagonal[1], quasiGroup[1]);
|
|
constraint int_eq(qgDiagonal[2], quasiGroup[7]);
|
|
constraint int_eq(qgDiagonal[3], quasiGroup[13]);
|
|
constraint int_eq(qgDiagonal[4], quasiGroup[19]);
|
|
constraint int_eq(qgDiagonal[5], quasiGroup[25]);
|
|
constraint int_eq_reif(quasiGroup[1], 0, BOOL____00071) :: defines_var(BOOL____00071);
|
|
constraint int_eq_reif(quasiGroup[1], 1, BOOL____00072) :: defines_var(BOOL____00072);
|
|
constraint int_eq_reif(quasiGroup[1], 2, BOOL____00074) :: defines_var(BOOL____00074);
|
|
constraint int_eq_reif(quasiGroup[1], 3, BOOL____00076) :: defines_var(BOOL____00076);
|
|
constraint int_eq_reif(quasiGroup[1], 4, BOOL____00078) :: defines_var(BOOL____00078);
|
|
constraint int_eq_reif(quasiGroup[7], 0, BOOL____00073) :: defines_var(BOOL____00073);
|
|
constraint int_eq_reif(quasiGroup[7], 1, BOOL____00080) :: defines_var(BOOL____00080);
|
|
constraint int_eq_reif(quasiGroup[7], 2, BOOL____00081) :: defines_var(BOOL____00081);
|
|
constraint int_eq_reif(quasiGroup[7], 3, BOOL____00083) :: defines_var(BOOL____00083);
|
|
constraint int_eq_reif(quasiGroup[7], 4, BOOL____00085) :: defines_var(BOOL____00085);
|
|
constraint int_eq_reif(quasiGroup[13], 0, BOOL____00075) :: defines_var(BOOL____00075);
|
|
constraint int_eq_reif(quasiGroup[13], 1, BOOL____00082) :: defines_var(BOOL____00082);
|
|
constraint int_eq_reif(quasiGroup[13], 2, BOOL____00087) :: defines_var(BOOL____00087);
|
|
constraint int_eq_reif(quasiGroup[13], 3, BOOL____00088) :: defines_var(BOOL____00088);
|
|
constraint int_eq_reif(quasiGroup[13], 4, BOOL____00090) :: defines_var(BOOL____00090);
|
|
constraint int_eq_reif(quasiGroup[19], 0, BOOL____00077) :: defines_var(BOOL____00077);
|
|
constraint int_eq_reif(quasiGroup[19], 1, BOOL____00084) :: defines_var(BOOL____00084);
|
|
constraint int_eq_reif(quasiGroup[19], 2, BOOL____00089) :: defines_var(BOOL____00089);
|
|
constraint int_eq_reif(quasiGroup[19], 3, BOOL____00092) :: defines_var(BOOL____00092);
|
|
constraint int_eq_reif(quasiGroup[19], 4, BOOL____00093) :: defines_var(BOOL____00093);
|
|
constraint int_eq_reif(quasiGroup[25], 0, BOOL____00079) :: defines_var(BOOL____00079);
|
|
constraint int_eq_reif(quasiGroup[25], 1, BOOL____00086) :: defines_var(BOOL____00086);
|
|
constraint int_eq_reif(quasiGroup[25], 2, BOOL____00091) :: defines_var(BOOL____00091);
|
|
constraint int_eq_reif(quasiGroup[25], 3, BOOL____00094) :: defines_var(BOOL____00094);
|
|
constraint int_eq_reif(quasiGroup[25], 4, BOOL____00095) :: defines_var(BOOL____00095);
|
|
constraint int_lin_eq([-1, 6], [INT____00001, quasiGroup[1]], -1) :: defines_var(INT____00001) :: domain;
|
|
constraint int_lin_eq([-1, 6], [INT____00013, quasiGroup[7]], -1) :: defines_var(INT____00013) :: domain;
|
|
constraint int_lin_eq([-1, 6], [INT____00025, quasiGroup[13]], -1) :: defines_var(INT____00025) :: domain;
|
|
constraint int_lin_eq([-1, 6], [INT____00037, quasiGroup[19]], -1) :: defines_var(INT____00037) :: domain;
|
|
constraint int_lin_eq([-1, 6], [INT____00049, quasiGroup[25]], -1) :: defines_var(INT____00049) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00003, quasiGroup[2], quasiGroup[6]], -1) :: defines_var(INT____00003) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00005, quasiGroup[3], quasiGroup[11]], -1) :: defines_var(INT____00005) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00007, quasiGroup[4], quasiGroup[16]], -1) :: defines_var(INT____00007) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00009, quasiGroup[5], quasiGroup[21]], -1) :: defines_var(INT____00009) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00015, quasiGroup[8], quasiGroup[12]], -1) :: defines_var(INT____00015) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00017, quasiGroup[9], quasiGroup[17]], -1) :: defines_var(INT____00017) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00019, quasiGroup[10], quasiGroup[22]], -1) :: defines_var(INT____00019) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00027, quasiGroup[14], quasiGroup[18]], -1) :: defines_var(INT____00027) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00029, quasiGroup[15], quasiGroup[23]], -1) :: defines_var(INT____00029) :: domain;
|
|
constraint int_lin_eq([-1, 1, 5], [INT____00039, quasiGroup[20], quasiGroup[24]], -1) :: defines_var(INT____00039) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00011, quasiGroup[2], quasiGroup[6]], -1) :: defines_var(INT____00011) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00021, quasiGroup[3], quasiGroup[11]], -1) :: defines_var(INT____00021) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00023, quasiGroup[8], quasiGroup[12]], -1) :: defines_var(INT____00023) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00031, quasiGroup[4], quasiGroup[16]], -1) :: defines_var(INT____00031) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00033, quasiGroup[9], quasiGroup[17]], -1) :: defines_var(INT____00033) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00035, quasiGroup[14], quasiGroup[18]], -1) :: defines_var(INT____00035) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00041, quasiGroup[5], quasiGroup[21]], -1) :: defines_var(INT____00041) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00043, quasiGroup[10], quasiGroup[22]], -1) :: defines_var(INT____00043) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00045, quasiGroup[15], quasiGroup[23]], -1) :: defines_var(INT____00045) :: domain;
|
|
constraint int_lin_eq([-1, 5, 1], [INT____00047, quasiGroup[20], quasiGroup[24]], -1) :: defines_var(INT____00047) :: domain;
|
|
constraint int_lin_le([-1], [quasiGroup[20]], -1);
|
|
constraint int_lin_le([-1], [quasiGroup[25]], -2);
|
|
constraint int_ne_reif(quasiGroup[2], quasiGroup[6], true);
|
|
constraint int_ne_reif(quasiGroup[3], quasiGroup[11], true);
|
|
constraint int_ne_reif(quasiGroup[4], quasiGroup[16], true);
|
|
constraint int_ne_reif(quasiGroup[5], quasiGroup[21], true);
|
|
constraint int_ne_reif(quasiGroup[6], quasiGroup[2], true);
|
|
constraint int_ne_reif(quasiGroup[8], quasiGroup[12], true);
|
|
constraint int_ne_reif(quasiGroup[9], quasiGroup[17], true);
|
|
constraint int_ne_reif(quasiGroup[10], quasiGroup[22], true);
|
|
constraint int_ne_reif(quasiGroup[11], quasiGroup[3], true);
|
|
constraint int_ne_reif(quasiGroup[12], quasiGroup[8], true);
|
|
constraint int_ne_reif(quasiGroup[14], quasiGroup[18], true);
|
|
constraint int_ne_reif(quasiGroup[15], quasiGroup[23], true);
|
|
constraint int_ne_reif(quasiGroup[16], quasiGroup[4], true);
|
|
constraint int_ne_reif(quasiGroup[17], quasiGroup[9], true);
|
|
constraint int_ne_reif(quasiGroup[18], quasiGroup[14], true);
|
|
constraint int_ne_reif(quasiGroup[20], quasiGroup[24], true);
|
|
constraint int_ne_reif(quasiGroup[21], quasiGroup[5], true);
|
|
constraint int_ne_reif(quasiGroup[22], quasiGroup[10], true);
|
|
constraint int_ne_reif(quasiGroup[23], quasiGroup[15], true);
|
|
constraint int_ne_reif(quasiGroup[24], quasiGroup[20], true);
|
|
solve :: int_search([quasiGroup[1], quasiGroup[2], quasiGroup[3], quasiGroup[4], quasiGroup[5], quasiGroup[6], quasiGroup[7], quasiGroup[8], quasiGroup[9], quasiGroup[10], quasiGroup[11], quasiGroup[12], quasiGroup[13], quasiGroup[14], quasiGroup[15], quasiGroup[16], quasiGroup[17], quasiGroup[18], quasiGroup[19], quasiGroup[20], quasiGroup[21], quasiGroup[22], quasiGroup[23], quasiGroup[24], quasiGroup[25]], first_fail, indomain, complete) satisfy;
|