GAMS模型约束条件中如何设置别名变量i与k不相等?
解决GAMS约束中i与k不相等的问题
嘿,这个问题在GAMS里其实很好解决,直接用过滤条件就能排除i和k相等的情况啦!下面给你两种实用的处理方式:
方法一:直接在约束定义域中过滤
修改你的约束代码,在i和k的后面加上$(i ne k)——这是GAMS专门用来筛选满足条件集合元素的语法,ne就是“不等于”的意思:
NB6(i,k$(i ne k),t).. ST(k,t) =g= ET(i,t) - (1-GAM(i,k,t)) ;
这样GAMS在生成约束时,会自动跳过i和k相同的组合,只处理所有i≠k的情况,完全符合你的需求。
方法二:提前定义过滤后的集合(可选)
如果你的模型里多处需要用到i≠k的产品组合,也可以先提前定义一个过滤好的集合,再用这个集合来写约束,可读性会更强:
Set ik(PROD,PROD) "存储i不等于k的产品组合"; ik(i,k) = yes$(i ne k); NB6(ik,t).. ST(k,t) =g= ET(i,t) - (1-GAM(i,k,t)) ;
这种方式适合需要重复调用该组合的场景,能让代码结构更清晰。
目前你给出的信息已经足够解决问题啦,不需要额外提供其他代码~
内容的提问来源于stack exchange,提问作者njb
相关产品推荐
相关产品推荐

