在pyomo中创建具有稀疏索引的变量

问题描述 投票:0回答:1

我需要帮助来创建具有稀疏索引的变量。我有这样的事情:

model.K = Set()
model.P = Set()
model.KP = Param(model.K, model.P, default=0)

我将加载model.KP的CSV文件,其值为KP==1,用于K&P的组合。

model.X = Var(model.K, model.P)

我想仅为model.KP中的K和P组合创建此变量,因为当我创建具有K和P的所有组合的变量时,它使用我给出的集合生成3700万个索引,这就是创建内存的问题。

python pyomo
1个回答
0
投票

制作一个包含元组Set(k,p),并将其用作定义变量和参数的集合。

定义您的设置元素:

kp = []
for k in model.K:
    for p in model.P:
        foo_tuple = (k, p)
        kp.append(foo_tuple)

注意:由于您将使用CSV文件加载数据,因此此时也可以完成具有所有K和P组合的人口qazxsw poi。

然后使用kp中的元素创建一个Set

kp

如果您不需要,我建议您不要在model.S = Set(initialize=kp) 参数中使用默认值。这样做会通知您应该有一个元素的缺失值。但是,如果没有为元组model.KP提供值并继续使用默认值,你仍然希望将参数model.PK的所有值都设置为0,你应该像这样定义你的参数:

(p,k)

然后,定义您的变量将是:

model.KP = Param(model.S, default=0)
© www.soinside.com 2019 - 2024. All rights reserved.