这个问题是关于 python 包约束(参见http://labix.org/python-constraint),特别是内置的“ AllEqualConstraint ”。在涉及 4 个变量的问题中,我想强制前两个和后两个相等,即:
p = Problem()
p.addVariables([1,2,3,4], [0,1])
p.addConstraint(AllEqualConstraint(), [1,2])
p.addConstraint(AllEqualConstraint(), [3,4])
我只有两个解决方案:
for sol in p.getSolutions():
print sol
> {1: 1, 2: 1, 3: 1, 4: 1}
> {1: 0, 2: 0, 3: 0, 4: 0}
我希望看到四个,即:
> {1: 1, 2: 1, 3: 1, 4: 1}
> {1: 1, 2: 1, 3: 0, 4: 0}
> {1: 0, 2: 0, 3: 1, 4: 1}
> {1: 0, 2: 0, 3: 0, 4: 0}
我的问题是:任何人都可以确认这是包打算计算的内容以及其背后的原因是什么?
Ps:我已经联系了这个包的作者,但还没有得到回复。我知道这个包是相当有名的,并且之前在 StackOverflow 上也有过关于它的问题。
作为对 LVC 的回答:约束并不总是将约束应用于所有变量:
p = Problem()
p.addVariables([1,2,3], [0,1])
p.addConstraint(AllEqualConstraint(), [1,2])
给
> {1: 1, 2: 1, 3: 1}
> {1: 1, 2: 1, 3: 0}
> {1: 0, 2: 0, 3: 1}
> {1: 0, 2: 0, 3: 0}
正如预期的那样。如果AllEqualConstraint
不尊重变量,它将非常有限。