我有一个pyomo参数,我想用python字典的值进行初始化。
字典(示例)如下所示:
dict
{('A', 'B', 'x', 'y'): 100,
('A', 'C', 'x', 'y'): 10,
('D', 'E', 'x', 'y'): 20,
('D', 'A', 'x', 'y'): 1}
并且我的参数由A
,B
,C
和D
索引。
我想要实现的是创建一个参数,并使用以下值初始化:m.param[A] = 110
,m.param[B] = 0
,m.param[C] = 0
和m.param[D] = 21
m.param= pyomo.Param(
m.index, # this has indexes {A,B,C,D}
initialize= #sum???
mutable=True)
PS:我不是要用m.param
创建initialize=0
,然后用for-loop
设置值。而是使用initialize=some_command
为正确的索引设置正确的值。
这样的事情(它不起作用,我使用pandas系列,而不是dict。但要讲到重点):
m.param = pyomo.Param(
m.index,
initialize=sum(dict_df.loc[m.index]),
mutable=True)
答案 0 :(得分:0)
initialize
带有签名(parent_block, *indices)
的函数。
也就是说,对于m.param = Param(m.index, initialize=init_func)
,您希望拥有:
mydict = {
('A', 'B', 'x', 'y'): 100,
('A', 'C', 'x', 'y'): 10,
('D', 'E', 'x', 'y'): 20,
('D', 'A', 'x', 'y'): 1}
def init_func(m, idx):
return sum(val for tup, val in mydict.items() if tup[0] == idx)
答案 1 :(得分:-1)
部分答案:
以下操作有效,但仅当dict_df
是熊猫obj时有效。我仍在寻找纯Python字典的方法。
m.param = pyomo.Param(
m.index,
default=dict_df.groupby(level=0).sum().to_dict(),
mutable=True)
结果是initialize
给出了一些错误,default
更好。