首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Google或-Tools SCIP上设置“值减少事件”约束?- Python

如何在Google或-Tools SCIP上设置“值减少事件”约束?- Python
EN

Stack Overflow用户
提问于 2022-04-11 14:54:44
回答 2查看 87关注 0票数 1

我试图优化12个有序的整数变量与谷歌或-工具。基本上,每个月有一个变量。

我想要实现的约束之一是,值的减少只能在最大值时锁定1次。

我就是这么做的..。

solver.Add(solver.Sum([x[i] <= x[i+1] for i in range(11)]) >= 11)

...and,这是错误。

AttributeError: LinearConstraint对象没有属性“AddSelfToCoeffMapOrStack”

还有其他方法来完成这个约束吗?

EN

回答 2

Stack Overflow用户

发布于 2022-04-11 15:08:38

使用线性求解器,需要大M公式将布尔变量与xi <= x(i+1)连接起来。

我建议使用CP,因为它使写作更容易。请看一下这个doc页面

票数 1
EN

Stack Overflow用户

发布于 2022-04-19 14:31:50

我所做的就是把这个问题分成两个步骤。

首先,我设置了一个标志,以指示何时发生的减少使用大M;

代码语言:javascript
复制
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])))

然后,约束“旗子数组”的和;

代码语言:javascript
复制
solver.Add(sum(flag[i] for i in range(12)) <= 1)

由于某些原因,在缺少sum约束时,标志似乎不起作用。但与这两个部分,它是正确的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71829983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档