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

时间:2019-02-28 12:56:58

标签: python pyomo

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

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

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

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

我只想为model.KP中的K和P的组合创建此变量,因为当我创建包含K和P的所有组合的变量时,使用我给出的集合将产生3700万个索引正在造成内存问题。

1 个答案:

答案 0 :(得分:0)

制作一个包含元组Set的{​​{1}}并将其用作定义变量和参数的集合。

定义您的设置元素:

(k,p)

注意:由于将使用CSV文件加载数据,因此此时也可以对所有K和P组合进行填充kp = [] for k in model.K: for p in model.P: foo_tuple = (k, p) kp.append(foo_tuple)

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

kp

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

(p,k)

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

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