python - 如何在 Pulp Python 中添加指标约束?
问题描述
我有一个问题,我不知道如何在pulp
. 谁能帮我?
例如:我有一个决策变量x[(i,j)]
,LpBinary和一个连续变量,u[i]
当x[(i,j)]
等于时1
,那么u[i] + q[j] == u[j]
(q
只是客户的需求)谢谢您的帮助。
解决方案
欢迎来到 SO!
我对您的问题的解释是您有二进制变量x[(i,j)]
和连续变量u[i]
。当x[(i,j)]==1
您想要强制执行约束时,如下所示u[i] + q[j] == u[j]
。如果x[(i,j)]==0
那么没有这样的约束被强制执行。
这可以按如下方式完成:
for i in set_I:
for j in set_J:
u[j] >= u[i] + q[j] - (1 - x[(i,j)])*M
u[j] <= u[i] + q[j] + (1 - x[(i,j)])*M
哪里M
是一个比值的最大可能范围u[i]
+ 最大可能值稍大的q[j]
值。要理解为什么这可行,请考虑这两种情况,首先如果x[(i,j)]==1
这些约束变为:
u[j] >= u[i] + q[j]
u[j] <= u[i] + q[j]
可以简写为:u[j] == u[i] + q[j]
,在这种情况下你想要的约束x[(i,j)]==1
。
在这种x[(i,j)]==0
情况下,这些约束变为:
u[j] >= u[i] + q[j] - M
u[j] <= u[i] + q[j] + M
回想一下,M 是一个很大的数字,我们所说的是u[j] >= some_value - large_number
,只要您选择M
它,使其足够大就不会产生任何影响(根据需要)。类似地,如果足够大,约束u[j] <= some_value + large_number
没有效果。M
推荐阅读
- reactjs - 使用反应时访问“本地”文件以在 Web Audio API 中使用的最佳方式?
- python - GAN 模型中的生成器仅生成一位数字的图像(使用 MNIST 数据集)?
- excel - VBA Selenium 点击输入 type="radio"
- r - 如何以有据可查的方式使用向量实现 if 语句?
- javascript - ReferenceError: 未定义 MongoDB
- python - 按类别分组
- flutter - 在 SliverChildBuilderDelegate 下显示内容
- python - 改变一个类的实例会改变整个类
- c# - 尝试使用 IndexOf 在数组中搜索特定字符串
- sql - 将“4:00AM”转换为 ISO8601