首页 > 解决方案 > 索引对索引组件无效。pyomo中具有双索引的参数

问题描述

我正在尝试通过Wind_DA以下方式创建具有双索引的参数:

import pandas as pd
import pyomo.environ as pe
import pyomo.opt as po

#DATA
T=3;
W=1;

time = ['t{0}'.format(t+1) for t in range(T)]
wind=['W{0}'.format(w+1) for w in range(W)]

Wind_DA={}
Wind_DA['w1', 't1']=200
Wind_DA['w1', 't2']=200
Wind_DA['w1', 't3']=200

#MODEL
seq=pe.ConcreteModel()

### SETS
seq.W = pe.Set(initialize = wind)
seq.T =pe.Set(initialize = time)

### PARAMETERS

seq.Wind_DA = pe.Param(seq.W, seq.T, initialize = Wind_DA)

我收到以下错误:

KeyError:“索引'('w1','t1')'对于索引组件'Wind_DA'无效”。

但是,当我在控制台上输入时,Wind_DA[('w1', 't1')]我得到了200,这意味着这本字典有那个索引。可能是什么问题呢?先感谢您!

标签: pythonpyomo

解决方案


这只是一个打字错误。

创建风阵时wind=['W{0}'.format(w+1) for w in range(W)] 使用大写 W,但创建参数Wind_DA = {}...时使用较低的 W

只需更改wind=['W{0}'.format(w+1) for w in range(W)]为小写字母w,它应该可以正常工作。wind=['w{0}'.format(w+1) for w in range(W)]

import pandas as pd
import pyomo.environ as pe
import pyomo.opt as po

#DATA
T=3
W=1

time = ['t{0}'.format(t+1) for t in range(T)]
wind=['w{0}'.format(w+1) for w in range(W)]

Wind_DA={}
Wind_DA['w1', 't1']=200
Wind_DA['w1', 't2']=200
Wind_DA['w1', 't3']=200

#MODEL
seq=pe.ConcreteModel()

### SETS
seq.W = pe.Set(initialize = wind)
seq.T =pe.Set(initialize = time)

### PARAMETERS
seq.Wind_DA = pe.Param(seq.W, seq.T, initialize = Wind_DA)

推荐阅读