GAMS软件单条代码多类报错问题排查与解决请求
GAMS代码错误修正方案
修正后的代码示例(基于常见逻辑假设)
假设你需要对每个b,求和所有序号在1到N_chp_on_max范围内的alpha(b,t),并约束该和不超过N_chp_on_max,修正后的代码如下:
e3_d(b).. sum( t$(ord(t) >= 1 and ord(t) <= N_chp_on_max), alpha(b, t) ) =l= N_chp_on_max;
如果你的逻辑是对每个b和t,求和当前t往前N_chp_on_max个时间段的alpha值,代码应为:
e3_d(b,t).. sum( t_prime$(ord(t_prime) >= ord(t) - N_chp_on_max + 1 and ord(t_prime) <= ord(t)), alpha(b, t_prime) ) =l= N_chp_on_max;
各报错原因及解决方法
and处错误:GAMS中集合过滤的逻辑条件必须放在$()内部,用and/or连接多个条件,不能将and写在$()外面。原写法破坏了sum函数的参数结构,导致解析失败。ord处错误:集合元素t不能直接参与算术运算,必须用ord(t)获取其在集合中的序号值,才能和数值型参数(如N_chp_on_max)做加减。N_chp_on_max处错误:- 维度不匹配:检查该参数的声明,如果是带索引的参数(如
N_chp_on_max(b)),引用时必须带上对应索引;如果是标量,确保声明时未加索引。 - 运算数不兼容:原代码用集合元素
t和参数做加减,类型不匹配,替换为ord(t)即可解决。
- 维度不匹配:检查该参数的声明,如果是带索引的参数(如
- sum右括号处错误:由前面的条件语法错误导致,GAMS无法正确识别sum的参数结构,修正条件写法后该错误会自动消失。
- alpha前逗号处错误:原sum函数的语法结构完全错误,GAMS无法解析参数边界,误以为缺少赋值运算符,修正sum的参数格式后即可解决。
内容的提问来源于stack exchange,提问作者its Nima
相关产品推荐
相关产品推荐

