【问题标题】:Setting a default value to an indexed pyomo parameter将默认值设置为索引 pyomo 参数
【发布时间】:2018-03-20 20:52:10
【问题描述】:

我得到了一个如下所示的数据框:

>data
         x     y
Name                              
A        NaN   0
B        65,2  NaN
C        NaN   100

我创建了一个 pyomo Set-Object m.index,用于索引可变的 pyomo Parameter-Object m.parameter_y

m.index:

# code
m.index = pyomo.Set(
    initialize=data.index.get_level_values(0).unique(),
    doc='Index Set')

# output
(Pdb) m.index.pprint()
index : Index Set
    Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Mutable=True, Bounds=None
    ['A', 'B', 'C']

m.parameter_y:

# code
m.parameter_y = pyomo.Param(
    m.index,
    default=data['y'].values,
    mutable=True
    doc='Par y')

# output
(Pdb) m.parameter_y.pprint()
parameter_y : Par y
    Size=3, Index=index, Domain=Any, Default=None, Mutable=True
    Key : Value
    A   : [  0   nan   100. ]
    B   : [  0   nan   100. ]
    C   : [  0   nan   100. ]

使用default=df['y'].values 可以看到,获取y 列的所有值作为参数的值。

如果我希望得到以下输出,我该如何设置可变索引 pyomo 参数对象的值?

(Pdb) m.parameter_y.pprint()
parameter_y : Par y
    Size=3, Index=index, Domain=Any, Default=None, Mutable=True
    Key : Value
    A   : [  0  ]
    B   : [ nan ]
    C   : [ 100 ]

PS:请记住,这不是实际的数据框、索引集或参数。所以像手动添加值这样的答案在我的情况下不起作用。什么会起作用,从数据帧中获取某种更好的值获取函数,这样,我可以将该参数上的这些值设置为默认值。

【问题讨论】:

    标签: dataframe parameters pyomo indexed


    【解决方案1】:

    假设您希望参数值是单例值而不是列表,以下应该可以工作:

    m.parameter_y = pyomo.Param(
        m.index,
        default=data['y'].to_dict(),
        mutable=True
        doc='Par y')
    

    您使用default 参数而不是initialize 是否有原因?

    【讨论】:

    • 我计划通过一些 for 循环迭代来更改一些值。但有些价值不会受到影响。初始化可能会做同样的伎俩。您是否建议我使用初始化而不是默认值,如果是,为什么? ps:我稍后会检查答案。泰伯大尼
    • 当您使用可变参数时,使用哪个并不重要,但我认为在您的用例中使用initialize 更为常见。如果您使用不可变参数,那么在保持稀疏性方面会有所不同,initialize 会自动构造您为其提供值的任何索引,default 将检查尚未构造但不会构造缺失索引的有效索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    相关资源
    最近更新 更多