Pyomo:用两个索引初始化变量
Pyomo: Initialize variable with two indices
我正在寻找一种方法来初始化具有两个索引的 pyomo 中的变量。我的第一个想法是使用嵌套字典,第一个索引在字典的上层,第二个索引在字典的下层。
使用这种方法,我得到以下错误:
错误:从数据=None 构建组件'p_norm_generator' 失败:
KeyError:“索引 'PV' 对索引组件无效
'p_norm_generator'"
有人知道如何正确实施初始化吗?
代码如下所示:
#Electricity generation
p_nom_dict['PV'] = p_nom_pv_dict
p_nom_dict['Onshore'] = p_nom_wind_onshore_dict
generators = ['PV', 'Onshore']
model.GENERATOR = generators
model.p_norm_generator = Param(model.GENERATOR, model.TIME, initialize=p_nom_dict)
具有多个索引的事物的数据源需要由具有适当索引的元组进行索引。所以在你上面的例子中,你的源字典需要有 (model.GENERATOR, model.TIME) 的元组作为键。
这是一个玩具示例:
from pyomo.environ import *
sources = ['sun', 'wind', 'voodoo']
time_periods = list(range(4))
data = { ('sun', 2): 24,
('wind', 3): 60,
('voodoo', 1): 12}
m = ConcreteModel()
# sets
m.sources = Set(initialize=sources)
m.time = Set(initialize=time_periods)
# param
m.energy = Param(m.sources, m.time, initialize=data)
# check it....
m.pprint()
产量:
3 Set Declarations
energy_index : Dim=0, Dimen=2, Size=12, Domain=None, Ordered=False, Bounds=None
Virtual
sources : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=None
['sun', 'voodoo', 'wind']
time : Dim=0, Dimen=1, Size=4, Domain=None, Ordered=False, Bounds=(0, 3)
[0, 1, 2, 3]
1 Param Declarations
energy : Size=3, Index=energy_index, Domain=Any, Default=None, Mutable=False
Key : Value
('sun', 2) : 24
('voodoo', 1) : 12
('wind', 3) : 60
4 Declarations: sources time energy_index energy*
我正在寻找一种方法来初始化具有两个索引的 pyomo 中的变量。我的第一个想法是使用嵌套字典,第一个索引在字典的上层,第二个索引在字典的下层。
使用这种方法,我得到以下错误:
错误:从数据=None 构建组件'p_norm_generator' 失败: KeyError:“索引 'PV' 对索引组件无效 'p_norm_generator'"
有人知道如何正确实施初始化吗?
代码如下所示:
#Electricity generation
p_nom_dict['PV'] = p_nom_pv_dict
p_nom_dict['Onshore'] = p_nom_wind_onshore_dict
generators = ['PV', 'Onshore']
model.GENERATOR = generators
model.p_norm_generator = Param(model.GENERATOR, model.TIME, initialize=p_nom_dict)
具有多个索引的事物的数据源需要由具有适当索引的元组进行索引。所以在你上面的例子中,你的源字典需要有 (model.GENERATOR, model.TIME) 的元组作为键。
这是一个玩具示例:
from pyomo.environ import *
sources = ['sun', 'wind', 'voodoo']
time_periods = list(range(4))
data = { ('sun', 2): 24,
('wind', 3): 60,
('voodoo', 1): 12}
m = ConcreteModel()
# sets
m.sources = Set(initialize=sources)
m.time = Set(initialize=time_periods)
# param
m.energy = Param(m.sources, m.time, initialize=data)
# check it....
m.pprint()
产量:
3 Set Declarations
energy_index : Dim=0, Dimen=2, Size=12, Domain=None, Ordered=False, Bounds=None
Virtual
sources : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=None
['sun', 'voodoo', 'wind']
time : Dim=0, Dimen=1, Size=4, Domain=None, Ordered=False, Bounds=(0, 3)
[0, 1, 2, 3]
1 Param Declarations
energy : Size=3, Index=energy_index, Domain=Any, Default=None, Mutable=False
Key : Value
('sun', 2) : 24
('voodoo', 1) : 12
('wind', 3) : 60
4 Declarations: sources time energy_index energy*