00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "test/flatzinc.hh"
00035
00036 namespace Test { namespace FlatZinc {
00037
00038 namespace {
00040 class Create {
00041 public:
00042
00044 Create(void) {
00045 (void) new FlatZincTest("warehouses::small",
00046 std::string("predicate all_different_int(array [int] of var int: x);\n\
00047 predicate all_equal_int(array [int] of var int: x);\n\
00048 predicate among(var int: n, array [int] of var int: x, set of int: v);\n\
00049 predicate array_bool_lq(array [int] of var bool: x, array [int] of var bool: y);\n\
00050 predicate array_bool_lt(array [int] of var bool: x, array [int] of var bool: y);\n\
00051 predicate array_int_lq(array [int] of var int: x, array [int] of var int: y);\n\
00052 predicate array_int_lt(array [int] of var int: x, array [int] of var int: y);\n\
00053 predicate array_set_partition(array [int] of var set of int: S, set of int: universe);\n\
00054 predicate at_least_int(int: n, array [int] of var int: x, int: v);\n\
00055 predicate at_most_int(int: n, array [int] of var int: x, int: v);\n\
00056 predicate bool_lin_ge(array [int] of int: a, array [int] of var bool: x, var int: c);\n\
00057 predicate bool_lin_gt(array [int] of int: a, array [int] of var bool: x, var int: c);\n\
00058 predicate bool_lin_lt(array [int] of int: a, array [int] of var bool: x, var int: c);\n\
00059 predicate bool_lin_ne(array [int] of int: a, array [int] of var bool: x, var int: c);\n\
00060 predicate count(array [int] of var int: x, var int: y, var int: c);\n\
00061 predicate count_reif(array [int] of var int: x, var int: y, var int: c, var bool: b);\n\
00062 predicate cumulatives(array [int] of var int: s, array [int] of var int: d, array [int] of var int: r, var int: b);\n\
00063 predicate decreasing_bool(array [int] of var bool: x);\n\
00064 predicate decreasing_int(array [int] of var int: x);\n\
00065 predicate disjoint(var set of int: s1, var set of int: s2);\n\
00066 predicate gecode_array_set_element_union(var set of int: x, array [int] of var set of int: y, var set of int: z);\n\
00067 predicate gecode_bin_packing_load(array [int] of var int: l, array [int] of var int: bin, array [int] of int: w, int: minIndex);\n\
00068 predicate gecode_circuit(int: offset, array [int] of var int: x);\n\
00069 predicate gecode_int_set_channel(array [int] of var int: x, int: xoff, array [int] of var set of int: y, int: yoff);\n\
00070 predicate gecode_inverse_set(array [int] of var set of int: f, array [int] of var set of int: invf, int: xoff, int: yoff);\n\
00071 predicate gecode_link_set_to_booleans(var set of int: s, array [int] of var bool: b, int: idx);\n\
00072 predicate gecode_member_bool_reif(array [int] of var bool: x, var bool: y, var bool: b);\n\
00073 predicate gecode_member_int_reif(array [int] of var int: x, var int: y, var bool: b);\n\
00074 predicate gecode_nooverlap(array [int] of var int: x, array [int] of var int: w, array [int] of var int: y, array [int] of var int: h);\n\
00075 predicate gecode_precede(array [int] of var int: x, int: s, int: t);\n\
00076 predicate gecode_precede_set(array [int] of var set of int: x, int: s, int: t);\n\
00077 predicate gecode_range(array [int] of var int: x, int: xoff, var set of int: s, var set of int: t);\n\
00078 predicate gecode_set_weights(array [int] of int: csi, array [int] of int: cs, var set of int: x, var int: y);\n\
00079 predicate global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);\n\
00080 predicate global_cardinality_closed(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);\n\
00081 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);\n\
00082 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);\n\
00083 predicate increasing_bool(array [int] of var bool: x);\n\
00084 predicate increasing_int(array [int] of var int: x);\n\
00085 predicate inverse_offsets(array [int] of var int: f, int: foff, array [int] of var int: invf, int: invfoff);\n\
00086 predicate maximum_int(var int: m, array [int] of var int: x);\n\
00087 predicate member_bool(array [int] of var bool: x, var bool: y);\n\
00088 predicate member_int(array [int] of var int: x, var int: y);\n\
00089 predicate minimum_int(var int: m, array [int] of var int: x);\n\
00090 predicate nvalue(var int: n, array [int] of var int: x);\n\
00091 predicate regular(array [int] of var int: x, int: Q, int: S, array [int, int] of int: d, int: q0, set of int: F);\n\
00092 predicate sort(array [int] of var int: x, array [int] of var int: y);\n\
00093 predicate table_bool(array [int] of var bool: x, array [int, int] of bool: t);\n\
00094 predicate table_int(array [int] of var int: x, array [int, int] of int: t);\n\
00095 array [1..5] of int: capacity = [1, 4, 2, 1, 3];\n\
00096 array [1..50] of int: cost_matrix = [20, 24, 11, 25, 30, 28, 27, 82, 83, 74, 74, 97, 71, 96, 70, 2, 55, 73, 69, 61, 46, 96, 59, 83, 4, 42, 22, 29, 67, 59, 1, 5, 73, 59, 56, 10, 73, 13, 43, 96, 93, 35, 63, 85, 46, 47, 65, 55, 71, 95];\n\
00097 var bool: BOOL____00001 :: is_defined_var :: var_is_introduced;\n\
00098 var bool: BOOL____00002 :: is_defined_var :: var_is_introduced;\n\
00099 var bool: BOOL____00003 :: is_defined_var :: var_is_introduced;\n\
00100 var bool: BOOL____00004 :: is_defined_var :: var_is_introduced;\n\
00101 var bool: BOOL____00005 :: is_defined_var :: var_is_introduced;\n\
00102 var bool: BOOL____00006 :: is_defined_var :: var_is_introduced;\n\
00103 var bool: BOOL____00007 :: is_defined_var :: var_is_introduced;\n\
00104 var bool: BOOL____00008 :: is_defined_var :: var_is_introduced;\n\
00105 var bool: BOOL____00009 :: is_defined_var :: var_is_introduced;\n\
00106 var bool: BOOL____00010 :: is_defined_var :: var_is_introduced;\n\
00107 var bool: BOOL____00012 :: is_defined_var :: var_is_introduced;\n\
00108 var bool: BOOL____00013 :: is_defined_var :: var_is_introduced;\n\
00109 var bool: BOOL____00014 :: is_defined_var :: var_is_introduced;\n\
00110 var bool: BOOL____00015 :: is_defined_var :: var_is_introduced;\n\
00111 var bool: BOOL____00016 :: is_defined_var :: var_is_introduced;\n\
00112 var bool: BOOL____00017 :: is_defined_var :: var_is_introduced;\n\
00113 var bool: BOOL____00018 :: is_defined_var :: var_is_introduced;\n\
00114 var bool: BOOL____00019 :: is_defined_var :: var_is_introduced;\n\
00115 var bool: BOOL____00020 :: is_defined_var :: var_is_introduced;\n\
00116 var bool: BOOL____00021 :: is_defined_var :: var_is_introduced;\n\
00117 var bool: BOOL____00023 :: is_defined_var :: var_is_introduced;\n\
00118 var bool: BOOL____00024 :: is_defined_var :: var_is_introduced;\n\
00119 var bool: BOOL____00025 :: is_defined_var :: var_is_introduced;\n\
00120 var bool: BOOL____00026 :: is_defined_var :: var_is_introduced;\n\
00121 var bool: BOOL____00027 :: is_defined_var :: var_is_introduced;\n\
00122 var bool: BOOL____00028 :: is_defined_var :: var_is_introduced;\n\
00123 var bool: BOOL____00029 :: is_defined_var :: var_is_introduced;\n\
00124 var bool: BOOL____00030 :: is_defined_var :: var_is_introduced;\n\
00125 var bool: BOOL____00031 :: is_defined_var :: var_is_introduced;\n\
00126 var bool: BOOL____00032 :: is_defined_var :: var_is_introduced;\n\
00127 var bool: BOOL____00034 :: is_defined_var :: var_is_introduced;\n\
00128 var bool: BOOL____00035 :: is_defined_var :: var_is_introduced;\n\
00129 var bool: BOOL____00036 :: is_defined_var :: var_is_introduced;\n\
00130 var bool: BOOL____00037 :: is_defined_var :: var_is_introduced;\n\
00131 var bool: BOOL____00038 :: is_defined_var :: var_is_introduced;\n\
00132 var bool: BOOL____00039 :: is_defined_var :: var_is_introduced;\n\
00133 var bool: BOOL____00040 :: is_defined_var :: var_is_introduced;\n\
00134 var bool: BOOL____00041 :: is_defined_var :: var_is_introduced;\n\
00135 var bool: BOOL____00042 :: is_defined_var :: var_is_introduced;\n\
00136 var bool: BOOL____00043 :: is_defined_var :: var_is_introduced;\n\
00137 var bool: BOOL____00045 :: is_defined_var :: var_is_introduced;\n\
00138 var bool: BOOL____00046 :: is_defined_var :: var_is_introduced;\n\
00139 var bool: BOOL____00047 :: is_defined_var :: var_is_introduced;\n\
00140 var bool: BOOL____00048 :: is_defined_var :: var_is_introduced;\n\
00141 var bool: BOOL____00049 :: is_defined_var :: var_is_introduced;\n\
00142 var bool: BOOL____00050 :: is_defined_var :: var_is_introduced;\n\
00143 var bool: BOOL____00051 :: is_defined_var :: var_is_introduced;\n\
00144 var bool: BOOL____00052 :: is_defined_var :: var_is_introduced;\n\
00145 var bool: BOOL____00053 :: is_defined_var :: var_is_introduced;\n\
00146 var bool: BOOL____00054 :: is_defined_var :: var_is_introduced;\n\
00147 var 6..10: INT____00057 :: is_defined_var :: var_is_introduced;\n\
00148 var 11..15: INT____00059 :: is_defined_var :: var_is_introduced;\n\
00149 var 16..20: INT____00061 :: is_defined_var :: var_is_introduced;\n\
00150 var 21..25: INT____00063 :: is_defined_var :: var_is_introduced;\n\
00151 var 26..30: INT____00065 :: is_defined_var :: var_is_introduced;\n\
00152 var 31..35: INT____00067 :: is_defined_var :: var_is_introduced;\n\
00153 var 36..40: INT____00069 :: is_defined_var :: var_is_introduced;\n\
00154 var 41..45: INT____00071 :: is_defined_var :: var_is_introduced;\n\
00155 var 46..50: INT____00073 :: is_defined_var :: var_is_introduced;\n\
00156 var 0..1: INT____00075 :: is_defined_var :: var_is_introduced;\n\
00157 var 0..1: INT____00076 :: is_defined_var :: var_is_introduced;\n\
00158 var 0..1: INT____00077 :: is_defined_var :: var_is_introduced;\n\
00159 var 0..1: INT____00078 :: is_defined_var :: var_is_introduced;\n\
00160 var 0..1: INT____00079 :: is_defined_var :: var_is_introduced;\n\
00161 var 10..1120: INT____00080 :: is_defined_var :: var_is_introduced;\n\
00162 var 10..1120: Total :: output_var = INT____00080;\n\
00163 array [1..10] of var 1..97: cost :: output_array([1..10]);\n\
00164 array [1..5] of var bool: open :: output_array([1..5]);\n\
00165 array [1..10] of var 1..5: supplier :: output_array([1..10]);\n\
00166 var int: use____00081;\n\
00167 var int: use____00082;\n\
00168 var int: use____00083;\n\
00169 var int: use____00084;\n\
00170 var int: use____00085;\n\
00171 constraint array_bool_or([BOOL____00010, BOOL____00009, BOOL____00008, BOOL____00007, BOOL____00006, BOOL____00005, BOOL____00004, BOOL____00003, BOOL____00002, BOOL____00001], open[1]);\n\
00172 constraint array_bool_or([BOOL____00021, BOOL____00020, BOOL____00019, BOOL____00018, BOOL____00017, BOOL____00016, BOOL____00015, BOOL____00014, BOOL____00013, BOOL____00012], open[2]);\n\
00173 constraint array_bool_or([BOOL____00032, BOOL____00031, BOOL____00030, BOOL____00029, BOOL____00028, BOOL____00027, BOOL____00026, BOOL____00025, BOOL____00024, BOOL____00023], open[3]);\n\
00174 constraint array_bool_or([BOOL____00043, BOOL____00042, BOOL____00041, BOOL____00040, BOOL____00039, BOOL____00038, BOOL____00037, BOOL____00036, BOOL____00035, BOOL____00034], open[4]);\n\
00175 constraint array_bool_or([BOOL____00054, BOOL____00053, BOOL____00052, BOOL____00051, BOOL____00050, BOOL____00049, BOOL____00048, BOOL____00047, BOOL____00046, BOOL____00045], open[5]);\n\
00176 constraint array_int_element(INT____00057, cost_matrix, cost[2]);\n\
00177 constraint array_int_element(INT____00059, cost_matrix, cost[3]);\n\
00178 constraint array_int_element(INT____00061, cost_matrix, cost[4]);\n\
00179 constraint array_int_element(INT____00063, cost_matrix, cost[5]);\n\
00180 constraint array_int_element(INT____00065, cost_matrix, cost[6]);\n\
00181 constraint array_int_element(INT____00067, cost_matrix, cost[7]);\n\
00182 constraint array_int_element(INT____00069, cost_matrix, cost[8]);\n\
00183 constraint array_int_element(INT____00071, cost_matrix, cost[9]);\n\
00184 constraint array_int_element(INT____00073, cost_matrix, cost[10]);\n\
00185 constraint array_int_element(supplier[1], cost_matrix, cost[1]);\n\
00186 constraint bool2int(open[1], INT____00075) :: defines_var(INT____00075);\n\
00187 constraint bool2int(open[2], INT____00076) :: defines_var(INT____00076);\n\
00188 constraint bool2int(open[3], INT____00077) :: defines_var(INT____00077);\n\
00189 constraint bool2int(open[4], INT____00078) :: defines_var(INT____00078);\n\
00190 constraint bool2int(open[5], INT____00079) :: defines_var(INT____00079);\n\
00191 constraint count(supplier, 1, use____00081);\n\
00192 constraint count(supplier, 2, use____00082);\n\
00193 constraint count(supplier, 3, use____00083);\n\
00194 constraint count(supplier, 4, use____00084);\n\
00195 constraint count(supplier, 5, use____00085);\n\
00196 constraint int_eq_reif(1, supplier[1], BOOL____00001) :: defines_var(BOOL____00001);\n\
00197 constraint int_eq_reif(1, supplier[2], BOOL____00002) :: defines_var(BOOL____00002);\n\
00198 constraint int_eq_reif(1, supplier[3], BOOL____00003) :: defines_var(BOOL____00003);\n\
00199 constraint int_eq_reif(1, supplier[4], BOOL____00004) :: defines_var(BOOL____00004);\n\
00200 constraint int_eq_reif(1, supplier[5], BOOL____00005) :: defines_var(BOOL____00005);\n\
00201 constraint int_eq_reif(1, supplier[6], BOOL____00006) :: defines_var(BOOL____00006);\n\
00202 constraint int_eq_reif(1, supplier[7], BOOL____00007) :: defines_var(BOOL____00007);\n\
00203 constraint int_eq_reif(1, supplier[8], BOOL____00008) :: defines_var(BOOL____00008);\n\
00204 constraint int_eq_reif(1, supplier[9], BOOL____00009) :: defines_var(BOOL____00009);\n\
00205 constraint int_eq_reif(1, supplier[10], BOOL____00010) :: defines_var(BOOL____00010);\n\
00206 constraint int_eq_reif(2, supplier[1], BOOL____00012) :: defines_var(BOOL____00012);\n\
00207 constraint int_eq_reif(2, supplier[2], BOOL____00013) :: defines_var(BOOL____00013);\n\
00208 constraint int_eq_reif(2, supplier[3], BOOL____00014) :: defines_var(BOOL____00014);\n\
00209 constraint int_eq_reif(2, supplier[4], BOOL____00015) :: defines_var(BOOL____00015);\n\
00210 constraint int_eq_reif(2, supplier[5], BOOL____00016) :: defines_var(BOOL____00016);\n\
00211 constraint int_eq_reif(2, supplier[6], BOOL____00017) :: defines_var(BOOL____00017);\n\
00212 constraint int_eq_reif(2, supplier[7], BOOL____00018) :: defines_var(BOOL____00018);\n\
00213 constraint int_eq_reif(2, supplier[8], BOOL____00019) :: defines_var(BOOL____00019);\n\
00214 constraint int_eq_reif(2, supplier[9], BOOL____00020) :: defines_var(BOOL____00020);\n\
00215 constraint int_eq_reif(2, supplier[10], BOOL____00021) :: defines_var(BOOL____00021);\n\
00216 constraint int_eq_reif(3, supplier[1], BOOL____00023) :: defines_var(BOOL____00023);\n\
00217 constraint int_eq_reif(3, supplier[2], BOOL____00024) :: defines_var(BOOL____00024);\n\
00218 constraint int_eq_reif(3, supplier[3], BOOL____00025) :: defines_var(BOOL____00025);\n\
00219 constraint int_eq_reif(3, supplier[4], BOOL____00026) :: defines_var(BOOL____00026);\n\
00220 constraint int_eq_reif(3, supplier[5], BOOL____00027) :: defines_var(BOOL____00027);\n\
00221 constraint int_eq_reif(3, supplier[6], BOOL____00028) :: defines_var(BOOL____00028);\n\
00222 constraint int_eq_reif(3, supplier[7], BOOL____00029) :: defines_var(BOOL____00029);\n\
00223 constraint int_eq_reif(3, supplier[8], BOOL____00030) :: defines_var(BOOL____00030);\n\
00224 constraint int_eq_reif(3, supplier[9], BOOL____00031) :: defines_var(BOOL____00031);\n\
00225 constraint int_eq_reif(3, supplier[10], BOOL____00032) :: defines_var(BOOL____00032);\n\
00226 constraint int_eq_reif(4, supplier[1], BOOL____00034) :: defines_var(BOOL____00034);\n\
00227 constraint int_eq_reif(4, supplier[2], BOOL____00035) :: defines_var(BOOL____00035);\n\
00228 constraint int_eq_reif(4, supplier[3], BOOL____00036) :: defines_var(BOOL____00036);\n\
00229 constraint int_eq_reif(4, supplier[4], BOOL____00037) :: defines_var(BOOL____00037);\n\
00230 constraint int_eq_reif(4, supplier[5], BOOL____00038) :: defines_var(BOOL____00038);\n\
00231 constraint int_eq_reif(4, supplier[6], BOOL____00039) :: defines_var(BOOL____00039);\n\
00232 constraint int_eq_reif(4, supplier[7], BOOL____00040) :: defines_var(BOOL____00040);\n\
00233 constraint int_eq_reif(4, supplier[8], BOOL____00041) :: defines_var(BOOL____00041);\n\
00234 constraint int_eq_reif(4, supplier[9], BOOL____00042) :: defines_var(BOOL____00042);\n\
00235 constraint int_eq_reif(4, supplier[10], BOOL____00043) :: defines_var(BOOL____00043);\n\
00236 constraint int_eq_reif(5, supplier[1], BOOL____00045) :: defines_var(BOOL____00045);\n\
00237 constraint int_eq_reif(5, supplier[2], BOOL____00046) :: defines_var(BOOL____00046);\n\
00238 constraint int_eq_reif(5, supplier[3], BOOL____00047) :: defines_var(BOOL____00047);\n\
00239 constraint int_eq_reif(5, supplier[4], BOOL____00048) :: defines_var(BOOL____00048);\n\
00240 constraint int_eq_reif(5, supplier[5], BOOL____00049) :: defines_var(BOOL____00049);\n\
00241 constraint int_eq_reif(5, supplier[6], BOOL____00050) :: defines_var(BOOL____00050);\n\
00242 constraint int_eq_reif(5, supplier[7], BOOL____00051) :: defines_var(BOOL____00051);\n\
00243 constraint int_eq_reif(5, supplier[8], BOOL____00052) :: defines_var(BOOL____00052);\n\
00244 constraint int_eq_reif(5, supplier[9], BOOL____00053) :: defines_var(BOOL____00053);\n\
00245 constraint int_eq_reif(5, supplier[10], BOOL____00054) :: defines_var(BOOL____00054);\n\
00246 constraint int_le(use____00081, 1);\n\
00247 constraint int_le(use____00082, 4);\n\
00248 constraint int_le(use____00083, 2);\n\
00249 constraint int_le(use____00084, 1);\n\
00250 constraint int_le(use____00085, 3);\n")+"\
00251 constraint int_lin_eq([-1, 1], [INT____00057, supplier[2]], -5) :: defines_var(INT____00057) :: domain;\n\
00252 constraint int_lin_eq([-1, 1], [INT____00059, supplier[3]], -10) :: defines_var(INT____00059) :: domain;\n\
00253 constraint int_lin_eq([-1, 1], [INT____00061, supplier[4]], -15) :: defines_var(INT____00061) :: domain;\n\
00254 constraint int_lin_eq([-1, 1], [INT____00063, supplier[5]], -20) :: defines_var(INT____00063) :: domain;\n\
00255 constraint int_lin_eq([-1, 1], [INT____00065, supplier[6]], -25) :: defines_var(INT____00065) :: domain;\n\
00256 constraint int_lin_eq([-1, 1], [INT____00067, supplier[7]], -30) :: defines_var(INT____00067) :: domain;\n\
00257 constraint int_lin_eq([-1, 1], [INT____00069, supplier[8]], -35) :: defines_var(INT____00069) :: domain;\n\
00258 constraint int_lin_eq([-1, 1], [INT____00071, supplier[9]], -40) :: defines_var(INT____00071) :: domain;\n\
00259 constraint int_lin_eq([-1, 1], [INT____00073, supplier[10]], -45) :: defines_var(INT____00073) :: domain;\n\
00260 constraint int_lin_eq([-1, 30, 30, 30, 30, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [INT____00080, INT____00075, INT____00076, INT____00077, INT____00078, INT____00079, cost[1], cost[2], cost[3], cost[4], cost[5], cost[6], cost[7], cost[8], cost[9], cost[10]], 0) :: defines_var(INT____00080);\n\
00261 solve :: int_search([supplier[1], supplier[2], supplier[3], supplier[4], supplier[5], supplier[6], supplier[7], supplier[8], supplier[9], supplier[10], cost[1], cost[2], cost[3], cost[4], cost[5], cost[6], cost[7], cost[8], cost[9], cost[10], INT____00075, INT____00076, INT____00077, INT____00078, INT____00079], first_fail, indomain_split, complete) minimize INT____00080;\n\
00262 ", "Total = 383;\n\
00263 cost = array1d(1..10, [30, 27, 70, 2, 4, 22, 5, 13, 35, 55]);\n\
00264 open = array1d(1..5, [true, true, true, false, true]);\n\
00265 supplier = array1d(1..10, [5, 2, 5, 1, 5, 2, 2, 3, 2, 3]);\n\
00266 ----------\n\
00267 ==========\n\
00268 ");
00269 }
00270 };
00271
00272 Create c;
00273 }
00274
00275 }}
00276
00277