电力定价模型GAMS代码报错求助:Total_Bills公式问题
解决GAMS总账单计算公式的语法与维度错误
错误根源
- 括号语法错误:原代码中第二个
sum的索引列表未用括号包裹,且整体求和逻辑错误——应该将电价与对应时段需求的乘积纳入同一求和循环,而非分开求和后再相乘。 - 维度关联错误:原代码的外层求和结构导致
Price_ToU(j,p)与Demand_ToU的索引映射逻辑混乱,GAMS无法识别跨集合的小时索引计算与定价时段的关联关系。
修正后的代码
两种等价写法,按需选择:
写法1(平铺所有循环)
Total_Bills.. B = e= sum((j,p,d,h), Price_ToU(j,p) * Demand_ToU(j, (p-1)*8 + (d-1)*24 + h));
写法2(内层聚合小时需求,更高效)
Total_Bills.. B = e= sum((j,p), Price_ToU(j,p) * sum((d,h), Demand_ToU(j, (p-1)*8 + (d-1)*24 + h)));
修正说明
- 修正
sum语法:所有求和索引均用括号包裹,严格遵循GAMSsum(索引集合, 表达式)的语法规则。 - 逻辑对齐:将
Price_ToU(j,p)与对应定价时段下的所有小时需求(由d和h遍历生成)绑定,确保电价只乘对应时段的需求,符合账单计算逻辑。 - 维度匹配:小时索引
(p-1)*8 + (d-1)*24 + h的计算结果落在1-8760范围内,与集合k的定义完全匹配,解决维度不匹配报错。 - 括号完全匹配:消除了原代码中括号缺失/冗余的问题,符合GAMS的语法解析要求。
内容的提问来源于stack exchange,提问作者Omar
相关产品推荐
相关产品推荐

