You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyomo优化出现KeyError:LV网络参数定义索引无效求助

LV网络优化模型Param定义的KeyError问题排查

问题场景

为LV网络定义优化问题,电阻矩阵Rmatrix和电抗矩阵Xmatrix均为122×122矩阵,网络共122个节点。编写的部分代码如下:

Rmatrix[i,j] = np.real(Zmatrix[i,j]) #extracted from Z matrix
Xmatrix[i,j] = np.imag(Zmatrix[i,j])
model = ConcreteModel()
Nodes = [Node list]
model.nodes = Set(initialize = [Nodes])
model.Rmatrix = Param(model.nodes, model.nodes, initialize = Rmatrix, within=NonNegativeReals)
model.Xmatrix = Param(model.nodes, model.nodes, initialize = Xmatrix, within=ComplexNumbers)

执行时触发KeyError:

ERROR: Rule failed for Param 'Rmatrix' with index 0: KeyError: "Index '0' is
not valid for indexed component 'Rmatrix'"
ERROR: Constructing component 'Rmatrix' from data=None failed:
    KeyError: "Index '0' is not valid for indexed component 'Rmatrix'"

问题原因

  • 节点集合定义错误:model.nodes = Set(initialize = [Nodes])中,Nodes本身就是节点索引的列表(比如[0,1,...,121]),额外嵌套一层[]会让集合的元素变成整个列表,而非单个节点索引。此时model.nodes的有效索引是这个嵌套列表,而非0、1这类单个节点编号,因此Param调用时找不到索引0。
  • 电抗矩阵类型约束错误:Xmatrix是从阻抗矩阵虚部提取的实数矩阵,但代码中指定within=ComplexNumbers,与实际数据类型不匹配。

修正方案

修改节点集合的初始化方式,同时修正电抗矩阵的类型约束:

Rmatrix[i,j] = np.real(Zmatrix[i,j]) #extracted from Z matrix
Xmatrix[i,j] = np.imag(Zmatrix[i,j])
model = ConcreteModel()
Nodes = [Node list]
# 直接用Nodes初始化集合,移除多余的嵌套列表
model.nodes = Set(initialize = Nodes)
model.Rmatrix = Param(model.nodes, model.nodes, initialize = Rmatrix, within=NonNegativeReals)
# 电抗为实数,改用Reals或NonNegativeReals约束
model.Xmatrix = Param(model.nodes, model.nodes, initialize = Xmatrix, within=Reals)

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:00:56