将默认值设置为索引的pyomo参数

时间:2018-03-20 20:52:10

标签: dataframe parameters pyomo indexed

我有一个如下所示的数据框:

>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:请记住,这不是实际的数据帧,索引集或参数。因此,在某些情况下以某种方式手动添加值的答案在我的案例中不起作用。什么可以工作,某种类型的更好的值获取函数来自数据框,因此,我可以将该参数的这些值设置为默认值。

1 个答案:

答案 0 :(得分:0)

假设您希望参数值是单例值而不是列表,则以下内容应该有效:

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

您是否有理由使用default参数代替initialize