咨询GAMS无需重新定义集合即可排除指定索引对应方程的方法
GAMS排除指定索引生成方程的解决方案
你可以直接使用GAMS内置的条件过滤语法,不需要完全重写原有集合,有两种常用的简单实现方式:
- 直接在方程定义时加过滤条件
在方程定义行的索引后加$条件运算符,仅满足条件的索引会生成对应方程,推荐用sameas()函数做元素匹配,避免字符串匹配误差,修改后的代码如下:
Sets i index /i1 'Index 1' i2 'Index 2' i3 'Index 3' i4 'Index 4'/ Variables X(i); Equations EQX(i) ; * 仅i不等于i3时生成对应方程 EQX(i)$(not sameas(i, 'i3')).. Whatever ;
- 先定义派生的过滤子集(适合多次使用该过滤规则的场景)
如果后续还有其他变量、方程需要排除i3,可以基于原有集合i快速派生一个子集,不需要重新录入所有元素:
Sets i index /i1 'Index 1' i2 'Index 2' i3 'Index 3' i4 'Index 4'/ * 基于i派生排除i3的子集,不需要重新写所有元素 i_use(i) = i - {'i3'}; Variables X(i); Equations EQX(i_use) ; EQX(i_use).. Whatever ;
两种方法都不会修改原有i集合的定义,后续其他场景需要用到i3时可以正常调用,不会产生影响。
内容的提问来源于stack exchange,提问作者Kwame Brown
相关产品推荐
相关产品推荐

