使用 IF 语句进行约束
Constraint using IF statement
我正在使用 GAMS 解决网络分布问题,这是我第一次使用 GAMS。我有以下约束(参见图片),我想在 gams 中编写但不断出错。尝试使用 IF 语句或任何其他方法来解决它。变量z是一个二进制变量,已经声明了。
谢谢!
Image
您不需要 if 语句,但可以用美元条件处理。
您可以在等式中使用美元条件来完成(如此处所做),或者您可以编写三个带有美元条件的单独等式来定义每个等式的定义域。
E_z(u,v,i).. sum(j, z(u,v,j,i)) - sum(j, z(u,v,i,j))
=E=
0 + 1$(sameas(i,u)) - 1$(sameas(i,v));
记录了 sameas 运算符 here。如果您的集合具有数值,则进行值比较可能会更清晰,例如$(i.val = u.val).
您可以在以下内容中阅读有关 GAMS 中条件表达式的更多信息link:
https://www.gams.com/latest/docs/userguides/userguide/_u_g__cond_expr.html
我正在使用 GAMS 解决网络分布问题,这是我第一次使用 GAMS。我有以下约束(参见图片),我想在 gams 中编写但不断出错。尝试使用 IF 语句或任何其他方法来解决它。变量z是一个二进制变量,已经声明了。
谢谢!
Image
您不需要 if 语句,但可以用美元条件处理。 您可以在等式中使用美元条件来完成(如此处所做),或者您可以编写三个带有美元条件的单独等式来定义每个等式的定义域。
E_z(u,v,i).. sum(j, z(u,v,j,i)) - sum(j, z(u,v,i,j))
=E=
0 + 1$(sameas(i,u)) - 1$(sameas(i,v));
记录了 sameas 运算符 here。如果您的集合具有数值,则进行值比较可能会更清晰,例如$(i.val = u.val).
您可以在以下内容中阅读有关 GAMS 中条件表达式的更多信息link:
https://www.gams.com/latest/docs/userguides/userguide/_u_g__cond_expr.html