我需要帮助来创建索引稀疏的变量。 我有这样的东西:
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万个索引正在造成内存问题。
答案 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)