让我有一个变量UT [i,j,k,r],其定义为其他2个变量的和。
const routes: Routes = [
{
path: 'home',
component: HomeComponent,
},
];
现在,我只想为正UT [i,j,k,r]写一些约束!我能做什么?
我尝试了很多方法:我定义了一个二进制变量,如果UT为正,则为1,否则为0,但这并不能解决我的问题,因为将它们相乘很复杂。有什么方法可以存储UT为正的索引?
答案 0 :(得分:2)
假设BT[i,j,k,r]
是您的二进制变量。然后,如果您使用CPLEX,Gurobi或Xpress作为您的求解器,则可以编写这样的“指标约束”:
BT[i,j,k,r] = 1 ==> *your constraint*
这是最简单的方法。或者,对于任何求解器,如果您的约束是线性的,则可以将指标约束转换为等效的线性约束,而无需将二进制变量乘以任何其他变量。 (如果您的约束是非线性的,那么也可能会有一个转换。)要了解如何完成这种转换,请参阅@ LarrySnyder610对if condition in ampl的回答。
答案 1 :(得分:0)
一种选择是将UT分为两部分:UTplus和UTminus,两者均> =0。然后定义UT = UTplus-UTminus。
现在,您需要添加一个约束,该约束说两个中的一个最多可以为非零。有几种选择:
UTplus <= M*binary
和UTminus <= M*(1 - binary)
。如果M不太大,可能会带来更好的性能。