首页 > 解决方案 > 如何区分负变量和正变量?

问题描述

让我有一个变量 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 为正的索引?

标签: optimizationlinear-programmingamplglpk

解决方案


假设这BT[i,j,k,r]是您的二进制变量。然后,如果您使用 CPLEX、Gurobi 或 Xpress 作为求解器,则可以编写如下“指标约束”:

BT[i,j,k,r] = 1 ==> *your constraint*

这是最简单的方法。或者,对于任何求解器,如果您的约束是线性的,则可以将指标约束转换为等效的线性约束,而无需将二进制变量乘以任何其他变量。(如果您的约束是非线性的,那么也可能存在转换。)要了解如何完成此类转换,请参阅 @LarrySnyder610 对 ampl 中if 条件的回答。


推荐阅读