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

Create a variable with sparse index in pyomo

我需要帮助来创建一个具有稀疏索引的变量。 我有这样的东西:

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

我将为 model.KP 加载一个 CSV 文件,其中 K 和 P 的组合值为 KP==1

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

我只想为 model.KP 中的 K 和 P 的组合创建这个变量,因为当我用 K 和 P 的所有组合创建变量时,它会生成 3700 万个索引集我给了,这会造成内存问题。

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

定义您的集合元素:

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

注意:由于您将使用 CSV 文件加载数据,因此此时也可以完成所有 K 和 P 组合的填充 kp

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

model.S = Set(initialize=kp)

如果不需要,我建议不要在 model.KP 参数中使用默认值。这样做会通知您本应有的元素缺少值。但是假设您仍然希望在没有为元组 (p,k) 提供任何值时将参数 model.PK 的所有值设置为 0 并继续使用默认值,您应该像这样定义参数:

model.KP = Param(model.S, default=0)

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

model.X = Var(model.S)