add symmetry breaking

This commit is contained in:
Laurent Perron
2018-12-23 18:43:35 +01:00
parent 8fad11c956
commit b4e7c38dbf

View File

@@ -58,9 +58,14 @@ def CoverRectangle(num_squares):
model.Add(sum(areas) == size_x * size_y)
# Symmetry breaking 1: size are ordered.
for i in range(num_squares - 1):
model.Add(sizes[i] <= sizes[i + 1])
# Symmetry breaking 2: first square in one quadrant.
model.Add(sxs[0] < 36)
model.Add(sys[0] < 19)
# Creates a solver and solves.
solver = cp_model.CpSolver()
solver.parameters.num_search_workers = 4
@@ -86,7 +91,7 @@ def CoverRectangle(num_squares):
return status == cp_model.FEASIBLE
for i in range(15):
for i in range(1, 15):
print('Trying with size =', i)
if CoverRectangle(i):
break