【发布时间】:2019-09-14 09:16:09
【问题描述】:
考虑以下 Gurobi 模型:
import gurobipy as gb
import numpy as np
N = 100
x = np.random.randint(10, high=2*N, size=N)
model = gb.Model("ACC")
amp_i_vars = model.addVars(N, vtype=gb.GRB.BINARY, name='ai')
model.setObjective(amp_i_vars.sum(*), gb.GRB.MINIMIZE)
model.addConstrs(gb.quicksum(amp_i_vars[i] for i in range(r+1)) <= x[r]
for r in range(N), "SumConstr")
我们实际上只是试图用尽可能多的位填充ai,这样直到位置r 的位总和永远不会大于x[r]。
我的问题是 GurobiPy 在通过约束的方式是否“智能”,即它是否计算前缀总和 ai,或者实际上重新计算每个 r<N 的总和。前一种情况是线性时间,而后一种情况是二次的。我有一个包含许多这样的总和和约束的 LP,我想知道是否最好创建一个单独的变量来存储每个序列的前缀总和,以防止 GurobiPy 重新计算每个约束的总和,但我不如果它已经足够聪明,就不想这样做。
【问题讨论】:
标签: python optimization linear-programming gurobi integer-programming