使用字典的总和值初始化 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}
我的参数由 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: 我不是要用 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)
我有一个 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: 我不是要用 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)