我试图优化12个有序的整数变量与谷歌或-工具。基本上,每个月有一个变量。
我想要实现的约束之一是,值的减少只能在最大值时锁定1次。
我就是这么做的..。
solver.Add(solver.Sum([x[i] <= x[i+1] for i in range(11)]) >= 11)
...and,这是错误。
AttributeError: LinearConstraint对象没有属性“AddSelfToCoeffMapOrStack”
还有其他方法来完成这个约束吗?
发布于 2022-04-11 15:08:38
使用线性求解器,需要大M公式将布尔变量与xi <= x(i+1)连接起来。
我建议使用CP,因为它使写作更容易。请看一下这个doc页面
发布于 2022-04-19 14:31:50
我所做的就是把这个问题分成两个步骤。
首先,我设置了一个标志,以指示何时发生的减少使用大M;
flag = {}
bigM = 100000000
for j in range(12):
flag[j] = solver.BoolVar('flag[%i]' % j)
for k in range(12-1):
solver.Add(x[k] <= (x[k+1] + (bigM * flag[k])))然后,约束“旗子数组”的和;
solver.Add(sum(flag[i] for i in range(12)) <= 1)由于某些原因,在缺少sum约束时,标志似乎不起作用。但与这两个部分,它是正确的工作。
https://stackoverflow.com/questions/71829983
复制相似问题