GAMS中排除特定方程EQX('d','k')的语法问题咨询
GAMS方程过滤逻辑错误修正
问题根源
你写的过滤条件not sameAs(i,"d") and not sameAs(j, "k")逻辑完全偏离需求:
- 这个条件的意思是只保留既不是i='d'、也不是j='k'的组合,会把所有i='d'的条目(包括
(d,h))和所有j='k'的条目(包括(a,k)、(b,k)、(C,k))全部排除,最终只剩(a,h)、(b,h)、(C,h)三个方程。你说所有方程都被排除,大概率是后续方程定义不完整,但核心问题是逻辑判断错误。
正确写法
你需要仅排除(d,k)这一个组合,有两种简洁的实现方式:
方式一:对“同时满足i=d且j=k”取反
EQX(i,j)$(not (sameAs(i,"d") and sameAs(j,"k")))..
方式二:直接判断元素组合不等
GAMS支持直接对集合元素组合做比较,代码更直观:
EQX(i,j)$((i,j) <> ("d","k"))..
内容的提问来源于stack exchange,提问作者ChinG
相关产品推荐
相关产品推荐

