class InstanceTestCase(unittest.TestCase): code = "" instance: GenInstance solver: Solver def setUp(self): self.solver = Solver.lookup("gecode") self.instance = Instance(self.solver) self.instance.add_string(self.code)
def minizinc(*files, solver=gecode, data={}, all_solutions=False): """Solve using minizinc.""" model = Model(files) instance = Instance(solver, model) for key, value in data.items(): if isinstance(value, str): instance.add_string(f'{key} = {value};\n') else: instance[key] = value return instance.solve(all_solutions=all_solutions)
class TestEnum(InstanceTestCase): code = """ enum DAY = {Mo, Tu, We, Th, Fr, Sa, Su}; var DAY: d; """ def test_value(self): self.instance.add_string("constraint d == Mo;") result = self.instance.solve() assert isinstance(result["d"], str) assert result["d"] == "Mo" def test_cmp_in_instance(self): self.instance.add_string("var DAY: d2;") self.instance.add_string("constraint d < d2;") result = self.instance.solve() assert isinstance(result["d"], str) assert isinstance(result["d2"], str) # TODO: assert result["d"] < result["d2"] def test_cmp_between_instances(self): append = "constraint d == Mo;" self.instance.add_string(append) result = self.instance.solve() inst = Instance(self.solver) inst.add_string(self.code + append) result2 = inst.solve() assert isinstance(result["d"], str) assert isinstance(result2["d"], str) assert result["d"] == result2["d"] inst = Instance(self.solver) inst.add_string(""" enum DAY = {Mo, Tu, We, Th, Fr}; var DAY: d; """ + append) result2 = inst.solve() # TODO: assert type(result["d"]) != type(result2["d"]) # TODO: assert result["d"] == result2["d"] def test_assign(self): self.instance = Instance(self.solver) self.instance.add_string(""" enum TT; var TT: t1; """) TT = enum.Enum("TT", ["one"]) self.instance["TT"] = TT result = self.instance.solve() assert isinstance(result["t1"], TT) assert result["t1"] is TT.one
def test_cmp_between_instances(self): append = "constraint d == Mo;" self.instance.add_string(append) result = self.instance.solve() inst = Instance(self.solver) inst.add_string(self.code + append) result2 = inst.solve() assert isinstance(result["d"], str) assert isinstance(result2["d"], str) assert result["d"] == result2["d"] inst = Instance(self.solver) inst.add_string(""" enum DAY = {Mo, Tu, We, Th, Fr}; var DAY: d; """ + append) result2 = inst.solve()
class TestEnum(InstanceTestCase): code = """ enum DAY = {Mo, Tu, We, Th, Fr, Sa, Su}; var DAY: d; """ def test_value(self): self.instance.add_string("constraint d == Mo;") result = self.instance.solve() assert isinstance(result["d"], enum.Enum) assert result["d"].name == "Mo" def test_cmp_in_instance(self): self.instance.add_string("var DAY: d2;") self.instance.add_string("constraint d < d2;") result = self.instance.solve() assert isinstance(result["d"], enum.Enum) assert isinstance(result["d2"], enum.Enum) # TODO: assert result["d"] < result["d2"] def test_cmp_between_instances(self): append = "constraint d == Mo;" self.instance.add_string(append) result = self.instance.solve() inst = Instance(self.solver) inst.add_string(self.code + append) result2 = inst.solve() assert isinstance(result["d"], enum.Enum) assert isinstance(result2["d"], enum.Enum) assert result["d"].name == result2["d"].name inst = Instance(self.solver) inst.add_string( """ enum DAY = {Mo, Tu, We, Th, Fr}; var DAY: d; """ + append ) result2 = inst.solve() assert result["d"].name == result2["d"].name def test_assign(self): self.instance = Instance(self.solver) self.instance.add_string( """ enum TT; var TT: t1; """ ) TT = enum.Enum("TT", ["one"]) self.instance["TT"] = TT result = self.instance.solve() assert isinstance(result["t1"], TT) assert result["t1"] is TT.one def test_collections(self): self.instance = Instance(self.solver) self.instance.add_string( """ enum TT; array[int] of var TT: arr_t; var set of TT: set_t; """ ) TT = enum.Enum("TT", ["one", "two", "three"]) self.instance["TT"] = TT self.instance["arr_t"] = [TT(3), TT(2), TT(1)] self.instance["set_t"] = {TT(2), TT(1)} result = self.instance.solve() assert result["arr_t"] == [TT(3), TT(2), TT(1)] assert result["set_t"] == {TT(1), TT(2)} def test_intenum_collections(self): self.instance = Instance(self.solver) self.instance.add_string( """ enum TT; % array[int] of var TT: arr_t; var set of TT: set_t; """ ) TT = enum.IntEnum("TT", ["one", "two", "three"]) self.instance["TT"] = TT # TODO: self.instance["arr_t"] = [TT(3), TT(2), TT(1)] self.instance["set_t"] = {TT(2), TT(1)} result = self.instance.solve() # TODO: assert result["arr_t"] == [TT(3), TT(2), TT(1)] assert result["set_t"] == {TT(1), TT(2)}
s = "n=" + str(n) + ";\n" s += "card = [|\n" for i in range(0, n + 1): for j in range(i, n + 1): s += " " + str(i) + "," + str(j) + ",|" + "\n" if (i == n and j == n): s = s[:-1] s += "];" chuffed = Solver.lookup("chuffed") generator = Model("./minizinc/Dominosa_Instances.mzn") #generator.add_file("./Dominosa_Instances.dzn") instance = Instance(chuffed, generator) instance.add_string(s) # Find and print all possible solutions r = instance.solve(all_solutions=False) m = r['temp'] m = np.array(m, dtype=int) format = "" for i in range(0, n + 2): format += "%i " #scriviamo su file np.savetxt('./Instances/Instances' + str(n) + '.txt', m, fmt=format) #print(m) #sys.stdout.flush()