我在 ubuntu 上使用 scip python 接口(interface)。我正在尝试使用快速求和添加约束:
m.addCons(quicksum(covfinal[i,j]*weightVars[i]*weightVars[j] \
for i in I for j in J)<=z)
由于某种原因,此步骤需要很长时间。我有 I=range(2500)
、J=range(2500)
。有没有办法让这一步更有效?
最佳答案
目前,除了使用 addCons()
方法之外,没有其他方法可以添加约束。与 Python 内置 sum()
相比,quicksum()
显着减少了所需时间,因为只创建一个表达式实例,然后使用单个项迭代更新该实例。否则,将会创建大量新的表达式对象,这是非常昂贵的。
该命令需要一些时间的(可能)原因是您尝试添加包含 625 万个系数的约束 - 考虑到 covfinal
是一个密集矩阵。
此外,请务必始终使用 latest PySCIPOpt version from GitHub :
关于python - 为什么 SCIP python 接口(interface)中的 Quicksum 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38434300/