Python约束反转

2024-03-28 23:59:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个解决方案,使用数字2,3,4,5进行10次运算,得到40的精确和;因此我编写了以下代码

from constraint import Problem, InSetConstraint, ExactSumConstraint
problem = Problem()
problem.addVariables(range(10), range(10))
problem.addConstraint(InSetConstraint([2,3,4,5]))
problem.addConstraint(ExactSumConstraint(40))
solutions = problem.getSolutions()
print(solutions)

这很好,但我想要的是另一种方法来限制结果,这意味着我的变量应该是[2,3,4,5]&它们的值等于每个变量使用了多少次,我无法理解它是如何工作的我尝试了以下方法

from constraint import Problem, ExactSumConstraint
problem = Problem()
problem.addVariables([2,3,4,5], [1,1,1,1])
problem.addConstraint(ExactSumConstraint(10))
solutions = problem.getSolutions()
print(solutions)

如何使键与值相乘,以及在何处添加40的约束?你知道吗


Tags: 方法fromimportrange解决方案printproblemconstraint
1条回答
网友
1楼 · 发布于 2024-03-28 23:59:08

我使用以下代码找到了解决方案:

from constraint import Problem, ExactSumConstraint
problem = Problem()
MaximumSum = 10
MaxMultiplicationSum = 40
Variables = ("a", "b", "c", "d")
realKeys = {'a': 2, 'b': 3, 'c': 4, 'd': 5}
for Variable in Variables:
    problem.addVariable(Variable, range(1, MaximumSum - len(Variables)))
problem.addConstraint(ExactSumConstraint(MaximumSum), Variables)
problem.addConstraint(lambda a,b,c,d: 2 * a + 3 * b + 4 * c + 5 * d == MaxMultiplicationSum)
solutions = problem.getSolutions()
for solution in solutions:
    print(dict((realKeys[key], value) for (key, value) in solution.items()))

相关问题 更多 >