【问题标题】:Pyomo: Initialize variable with two indicesPyomo:使用两个索引初始化变量
【发布时间】:2020-07-09 13:42:39
【问题描述】:

我正在寻找一种方法来初始化 pyomo 中具有两个索引的变量。我的第一个想法是使用嵌套字典,它的第一个索引在字典的上层,第二个索引在字典的下层。

使用这种方法,我得到以下错误:

错误:从数据构造组件“p_norm_generator”=None 失败: 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)

【问题讨论】:

    标签: python variables initialization pyomo indices


    【解决方案1】:

    具有多个索引的事物的数据源需要由具有适当索引的元组索引。所以在你上面的例子中,你的源字典需要有 (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*
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2015-01-17
      • 2017-05-01
      • 2020-04-09
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多