我在ubuntu上使用scip python接口。我正在尝试使用quicksum添加一个约束:

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内置的quicksum()相比,sum()大大减少了所需的时间,因为仅创建了一个表达式实例,然后使用单个术语对其进行迭代更新。否则,将创建许多新的表达式对象,这非常昂贵。

该命令花费一些时间的(可能)原因是因为您尝试添加具有625万个系数的约束-假定covfinal是一个密集矩阵。

另外,请确保始终使用latest PySCIPOpt version from GitHub

08-26 14:18