#python #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)
Я получаю следующую ошибку:
Ошибка ключа: «Индекс «(«w1», «t1″)» недопустим для индексированного компонента «Wind_DA»».
Однако, когда я печатаю на консоли Wind_DA[('w1', 't1')]
, я получаю 200
, что означает, что этот словарь имеет этот индекс. В чем может быть проблема? Заранее благодарю вас!
Ответ №1:
Это просто опечатка.
При создании массива ветра с 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)