optimization - 如何区分负变量和正变量?
问题描述
让我有一个变量 UT[i,j,k,r],其定义为 2 个其他变量的总和。
UT[i,j,k,r]= U[i,j,k,r]+D[i,j,k,r]
现在我想为正的 UT[i,j,k,r] 写一些约束!我可以做什么?
我尝试了很多方法:我定义了一个二进制变量,如果 UT 为正,则为 1,否则为 0,但它没有解决我的问题,因为将它们相乘很复杂。有什么方法可以存储 UT 为正的索引?
解决方案
假设这BT[i,j,k,r]
是您的二进制变量。然后,如果您使用 CPLEX、Gurobi 或 Xpress 作为求解器,则可以编写如下“指标约束”:
BT[i,j,k,r] = 1 ==> *your constraint*
这是最简单的方法。或者,对于任何求解器,如果您的约束是线性的,则可以将指标约束转换为等效的线性约束,而无需将二进制变量乘以任何其他变量。(如果您的约束是非线性的,那么也可能存在转换。)要了解如何完成此类转换,请参阅 @LarrySnyder610 对 ampl 中if 条件的回答。
推荐阅读
- r - 计算加权平均值时出错:“x”和“w”必须具有相同的长度
- docker - 使用 Docker 在目标 windows 服务器中创建分区驱动器 E
- java - 比较2个excel文件大数据写入结果与Highlight cellstyle sxssf JAVA
- asp.net-mvc - 更新列表 Aspnet core 2.2
- python - 为 x 和 y 坐标和时间戳的 panda 数据帧创建多索引
- python - 带有格式化 Python 的 HTML 到 JSON
- javascript - 将图层名称复制到 Photoshop 中的文本框的脚本
- python - 如何使用 for 循环根据唯一变量将数据帧子集化?
- regex - 正则表达式用于普通字符和重音字符,仅在字符串内包含空格和破折号
- javascript - babelv7 中的配置合并