如何修复Julia中JuMP的SDbalanced约束以匹配发电与需求?
修复JuMP中SDbalanced约束的方法
你遇到的错误是因为JuMP无法直接解析整个向量/矩阵维度的等式表达式作为约束。要实现发电变量g[i,j]与data[j,i]相等的约束,有两种可靠的写法:
方法1:显式嵌套循环(直观易读)
直接遍历每个索引对(i,j),逐个添加约束:
# 假设g是二维变量数组,data是对应的二维需求数据数组 for i in axes(g, 1), j in axes(g, 2) @constraint(model, g[i,j] == data[j,i]) end
这种写法逻辑清晰,适配所有版本的JuMP,不会出现解析问题。
方法2:JuMP数组约束(简洁高效)
利用JuMP支持的数组约束语法,无需显式循环即可批量生成约束:
@constraint(model, SDbalanced[i=axes(g,1), j=axes(g,2)], g[i,j] == data[j,i])
这里SDbalanced会成为一个与g维度相同的约束数组,每个元素对应一组(i,j)的等式约束,JuMP能正确解析这种索引化的约束定义。
错误原因说明
如果你的原代码类似@constraint(model, SDbalanced, g .== data'),这种广播式的矩阵等式会被JuMP识别为:vect类型的表达式,而JuMP不支持直接将整个数组的等式作为单个约束处理,必须通过索引逐个定义或使用数组约束语法。
内容的提问来源于stack exchange,提问作者김성원
相关产品推荐
相关产品推荐

