我在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
答案 0 :(得分:0)
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