使用字典的总和值初始化 pyomo 参数

Initializing a pyomo parameter with summed values of a dict

我有一个 pyomo 参数,我想用 python 字典的值初始化它。

字典(示例)如下所示:

dict
{('A', 'B', 'x', 'y'): 100, 
 ('A', 'C', 'x', 'y'): 10, 
 ('D', 'E', 'x', 'y'): 20,
 ('D', 'A', 'x', 'y'): 1}

我的参数由 ABCD 索引。

我想要实现的是创建一个参数,初始化值如下:m.param[A] = 110m.param[B] = 0m.param[C] = 0m.param[D] = 21

m.param= pyomo.Param(
    m.index, # this has indexes {A,B,C,D}
    initialize= #sum???
    mutable=True)

PS: 我不是要用 initialize=0 创建 m.param,然后用 [=23= 设置值].而是使用 initialize=some_command 将正确的值设置为正确的索引。

类似这样的东西(它不起作用,我使用 pandas 系列,而不是 dict。但直截了当):

m.param = pyomo.Param(
    m.index,
    initialize=sum(dict_df.loc[m.index]),
    mutable=True)

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)