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
相关产品推荐
相关产品推荐

