索引对索引组件无效。 pyomo 中具有双索引的参数

Index is not valid for indexed component. Parameter with double indexing in 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,这意味着该词典具有该索引。可能是什么问题呢?提前致谢!

这只是一个打字错误。

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)