如何节省计算时间在python中添加sum函数

时间:2018-02-09 00:49:02

标签: python gurobi

我在Python中构建模型并使用Gurobi来解决它时,尝试在目标函数中使用quicksum函数。当我使用大型机箱时,需要很长时间。有什么方法可以改善吗? (g [i,j,t]是输入,Q [(i,j,t)]是我模型中的决策变量)。 i,j,t是键,g [i,j,t]和Q [(i,j,t)]是指值:

obj =(quicksum(quicksum(Q[(i,j,t)]*g[i,j,t]*(p) for i in range(I))for j in range(J))for t in range(T))

我将其更改为以下代码,但这是错误的:

obj =(LinExpr([((((Q[(i,j,t)], g[i,j,t]) for i in range(I))for j in range(J))for t in range(T) ])*(p))
   TypeError: 'generator' object is not subscriptable

1 个答案:

答案 0 :(得分:0)

使用itertools.product

,而不是嵌套循环
import itertools
ranges = itertools.product(range(I), range(J), range(T))
obj = quicksum(Q[(i,j,t)] * g[i,j,t] * p for i,j,t in ranges)

或使用更高效(和可读)的tupledict prod功能:

obj = Q.prod(g) * p