我需要帮助来创建具有稀疏索引的变量。我有这样的事情:
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万个索引,这就是创建内存的问题。
制作一个包含元组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)