在CPLEX约束中关联两个变量

问题描述 投票:0回答:2

[在处理线性程序时,我遇到了这个问题:可以将两类变量关联起来,例如Xij(大于或等于零的变量集)和Yij(决策变量),这样:

if Xij> 0 -> Yij = 1
if Xij == 0 -> Yij = 0

谢谢大家。

cplex
2个回答
0
投票

对于所有CPLEX API,您可以使用逻辑约束。

例如,您可以写if then中的“ OPL CPLEX

int nbKids=300;
float costBus40=500;
float costBus30=400;



dvar int+ nbBus40;
dvar int+ nbBus30;

minimize
 costBus40*nbBus40  +nbBus30*costBus30;

subject to
{
 40*nbBus40+nbBus30*30>=nbKids;

 // with if nb buses 40 more than 3  then nb buses30 more than 7

 (nbBus40>=3)=>(nbBus30>=7);
 //(nbBus40>=3)<=(nbBus30>=7); //equivalent
}

0
投票

您是否可以定义值Xij_minXij_max来表示Xij变量的最小和最大限制?如果变量没有物理限制,则Xij > 0可以根据需要设置为较小或有意义,并且Xij_min可以为任意高。然后通过添加以下两个约束,可以实现您想要的:

Xij_max

为了便于说明,我假设Xij >= Xij_min * Yij Xij <= Xij_max * Yij Xij_min = 0.1。这将产生约束:

Xij_max = 1000

如果Xij >= 0.1 * Yij Xij <= 1000 * Yij 取值介于0.1和1000之间(我们将其定义为可行的正范围),则Xij必须为1。

现在,如果Yij变为0,则为了使这些约束保持为Xij,必须具有0以具有YijXij <= 0

© www.soinside.com 2019 - 2024. All rights reserved.