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

114 lines
8.3 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);
array [1..8] of int: bad_soil = [0, 0, 1, 1, 0, 0, 0, 0];
array [1..8] of int: near_highway = [1, 1, 0, 0, 0, 0, 0, 0];
array [1..8] of int: near_lake = [0, 1, 1, 1, 0, 0, 0, 0];
array [1..64] of int: near_lots = [0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0];
array [1..8] of int: steep_slopes = [0, 0, 1, 1, 0, 0, 1, 1];
var bool: BOOL____00004 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00007 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00010 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00013 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00016 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00019 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00022 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00025 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00028 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00031 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00034 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00037 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00040 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00041 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00045 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00048 :: is_defined_var :: var_is_introduced;
var bool: BOOL____00049 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00001 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00002 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00005 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00008 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00011 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00014 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00017 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00020 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00023 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00026 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00029 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00032 :: is_defined_var :: var_is_introduced;
var 1..64: INT____00035 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00036 :: is_defined_var :: var_is_introduced;
var 1..64: INT____00038 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00039 :: is_defined_var :: var_is_introduced;
var 1..64: INT____00043 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00044 :: is_defined_var :: var_is_introduced;
var 1..64: INT____00046 :: is_defined_var :: var_is_introduced;
var 0..1: INT____00047 :: is_defined_var :: var_is_introduced;
var 1..8: apartments;
array [1..13] of var 0..1: broken :: output_array([1..13]);
var 1..8: cemetery;
var 1..8: dump;
var 1..8: houses;
var 1..8: recreation;
array [1..5] of var 1..8: developments :: output_array([1..5]) = [recreation, apartments, houses, cemetery, dump];
var 0..13: total_count :: output_var = INT____00001;
constraint fzn_all_different_int(developments);
constraint array_bool_and([BOOL____00037, BOOL____00040], BOOL____00041);
constraint array_bool_and([BOOL____00045, BOOL____00048], BOOL____00049);
constraint array_int_element(INT____00035, near_lots, INT____00036) :: defines_var(INT____00036);
constraint array_int_element(INT____00038, near_lots, INT____00039) :: defines_var(INT____00039);
constraint array_int_element(INT____00043, near_lots, INT____00044) :: defines_var(INT____00044);
constraint array_int_element(INT____00046, near_lots, INT____00047) :: defines_var(INT____00047);
constraint array_int_element(apartments, bad_soil, INT____00017) :: defines_var(INT____00017);
constraint array_int_element(apartments, near_highway, INT____00023) :: defines_var(INT____00023);
constraint array_int_element(apartments, steep_slopes, INT____00005) :: defines_var(INT____00005);
constraint array_int_element(cemetery, steep_slopes, INT____00011) :: defines_var(INT____00011);
constraint array_int_element(dump, near_lake, INT____00032) :: defines_var(INT____00032);
constraint array_int_element(dump, steep_slopes, INT____00014) :: defines_var(INT____00014);
constraint array_int_element(houses, bad_soil, INT____00020) :: defines_var(INT____00020);
constraint array_int_element(houses, near_highway, INT____00026) :: defines_var(INT____00026);
constraint array_int_element(houses, steep_slopes, INT____00008) :: defines_var(INT____00008);
constraint array_int_element(recreation, near_highway, INT____00029) :: defines_var(INT____00029);
constraint array_int_element(recreation, near_lake, INT____00002) :: defines_var(INT____00002);
constraint int_eq_reif(INT____00002, 1, BOOL____00004);
constraint int_eq_reif(INT____00005, 0, BOOL____00007);
constraint int_eq_reif(INT____00008, 0, BOOL____00010);
constraint int_eq_reif(INT____00011, 0, BOOL____00013);
constraint int_eq_reif(INT____00014, 0, BOOL____00016);
constraint int_eq_reif(INT____00017, 0, BOOL____00019);
constraint int_eq_reif(INT____00020, 0, BOOL____00022);
constraint int_eq_reif(INT____00023, 0, BOOL____00025);
constraint int_eq_reif(INT____00026, 0, BOOL____00028);
constraint int_eq_reif(INT____00029, 0, BOOL____00031);
constraint int_eq_reif(INT____00032, 0, BOOL____00034);
constraint int_eq_reif(INT____00036, 0, BOOL____00037) :: defines_var(BOOL____00037);
constraint int_eq_reif(INT____00039, 0, BOOL____00040) :: defines_var(BOOL____00040);
constraint int_eq_reif(INT____00044, 0, BOOL____00045) :: defines_var(BOOL____00045);
constraint int_eq_reif(INT____00047, 0, BOOL____00048) :: defines_var(BOOL____00048);
constraint int_eq_reif(broken[1], 0, BOOL____00004) :: defines_var(BOOL____00004);
constraint int_eq_reif(broken[2], 0, BOOL____00007) :: defines_var(BOOL____00007);
constraint int_eq_reif(broken[3], 0, BOOL____00010) :: defines_var(BOOL____00010);
constraint int_eq_reif(broken[4], 0, BOOL____00013) :: defines_var(BOOL____00013);
constraint int_eq_reif(broken[5], 0, BOOL____00016) :: defines_var(BOOL____00016);
constraint int_eq_reif(broken[6], 0, BOOL____00019) :: defines_var(BOOL____00019);
constraint int_eq_reif(broken[7], 0, BOOL____00022) :: defines_var(BOOL____00022);
constraint int_eq_reif(broken[8], 0, BOOL____00025) :: defines_var(BOOL____00025);
constraint int_eq_reif(broken[9], 0, BOOL____00028) :: defines_var(BOOL____00028);
constraint int_eq_reif(broken[10], 0, BOOL____00031) :: defines_var(BOOL____00031);
constraint int_eq_reif(broken[11], 0, BOOL____00034) :: defines_var(BOOL____00034);
constraint int_eq_reif(broken[12], 0, BOOL____00041) :: defines_var(BOOL____00041);
constraint int_eq_reif(broken[13], 0, BOOL____00049) :: defines_var(BOOL____00049);
constraint int_lin_eq([-1, 1, 8], [INT____00038, dump, houses], 8) :: defines_var(INT____00038) :: domain;
constraint int_lin_eq([-1, 1, 8], [INT____00043, apartments, dump], 8) :: defines_var(INT____00043) :: domain;
constraint int_lin_eq([-1, 8, 1], [INT____00035, dump, houses], 8) :: defines_var(INT____00035) :: domain;
constraint int_lin_eq([-1, 8, 1], [INT____00046, apartments, dump], 8) :: defines_var(INT____00046) :: domain;
constraint int_lin_eq([-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [INT____00001, broken[1], broken[2], broken[3], broken[4], broken[5], broken[6], broken[7], broken[8], broken[9], broken[10], broken[11], broken[12], broken[13]], 0) :: defines_var(INT____00001);
solve :: int_search(developments, first_fail, indomain, complete) satisfy;