【发布时间】:2018-04-04 16:19:40
【问题描述】:
我有一个约束问题,我想用python-constraint 解决
假设我有 3 个位置:loc1,...loc3
另外,我有 7 台设备:device1,...device7
每个位置的最大设备数量:loc1:3, loc2:4, loc3:2
(例如loc1 中最多 3 个设备等等...)
还有一些关于位置和设备的限制:
loc1: device1, device3, device7,
loc2: device1, device3, device4, device5, device6, device7
loc3: device2, device4, device5, device6
(例如仅表示device1、device3 和device7 可以在loc1 中。)
我正在尝试为特定位置的设备获取一组可能的选项。
from constraint import *
problem = Problem()
for key in locations_devices_dict:
problem.addVariable(key,locations_devices_dict[key])
# problem.addVariable("loc1", ['device1', 'device3', 'device7'])
problem.addConstraint(AllDifferentConstraint())
我一直在纠结如何做约束。我试过了:
problem.addConstraint(MaxSumConstraint(3), 'loc1')
但它不起作用,MaxSumConstraint 没有总结我需要的内容。
所有设备都必须放在某个地方
可能的解决方案:
loc1: device1, device3
loc2: device4, device6, device7
loc3: device2, device5
有人有想法吗?
(另一个python包/不使用任何包,如果有人有任何建议也是个好主意...)
【问题讨论】:
-
这有点像分配问题。所以有一个布尔变量 x[i,j] 来指示设备 i 是否对位置 j 进行操作。然后我们有 sum(j,x[i,j])=1 和 sum(i,x[i,j])
-
@ErwinKalvelagen 抱歉,我看不出它是如何轻松编码的。我想要所有可能的解决方案,我怎样才能有效地做到这一点?这只是一个例子,我遇到的真正问题更大......
标签: python constraints constraint-programming