我需要使用约束编程在一个大矩形(名为 bin)中安排一组矩形。
当我使用 CPLEX 时,我发现了 square sched 示例(我实际上是 CPLEX 和 PPC 的新手)。当我为矩形案例调整示例时,它没有找到任何可行的解决方案,我不明白为什么会发生这种情况?
这是我用示例值替换变量的代码:
import docplex
#Size of the englobing rectangle
size_bin = 100
mdl = docplex.cp.model.CpoModel()
vx = [mdl.interval_var(size=[1, 4], name="X" + str(i), end=(0,
size_bin)) for i in range(7)]
vy = [mdl.interval_var(size=[1, 4], name="X" + str(i), end=(0, SIZE_bin))
for i in range(7)]
#Create dependencies between variables
for i in range(7):
for j in range(i):
mdl.add((mdl.end_of(vx[i]) <= mdl.start_of(vx[j])) | (mdl.end_of(vx[j]) >= mdl.start_of(vx[i])) | (mdl.end_of(vy[i]) <=
mdl.start_of(vy[j])) | (mdl.end_of(vy[j]) <= mdl.start_of(vy[i])))
#To speed-up the search, create cumulative expressions on each dimension
rx = mdl.sum([mdl.pulse(vx[i], vx[i].size) for i in range(len(vx))])
print(vx[0],rx)
mdl.add(mdl.always_in(rx, (0,size_bin), size_bin, size_bin))
ry = mdl.sum([mdl.pulse(vy[i], vy[i].size) for i in range(len(vy))])
mdl.add(mdl.always_in(ry, (0, size_bin), size_bin, size_bin))
#Define search phases, also to speed-up the search
mdl.set_search_phases([mdl.search_phase(vx), mdl.search_phase(vy)])
#Solve model
msol = mdl.solve(TimeLimit=50)
msol.print_solution()