我一直在用 gurobi 解决一些 LP,我注意到对于我遇到的大多数情况,构建模型比实际解决它花费的时间更长。也许这是标准,但对我来说似乎很奇怪。
一个特定的实例需要 1.75 秒来解决,但用于构建模型的以下代码部分需要 13.6 秒:
for (int i = 0; i < numSeq2; ++i) {
expr = new GRBLinExpr();
//expr.clear();
for (int j = 0; j < numSeq1; ++j)
expr.addTerm(-1 * A[j][i], x[j]);
for (int j = 0; j < numIS2; ++j)
expr.addTerm(-1 * F[j][i], q[j]);
duals[i] = model.addConstr(expr, GRB.LESS_EQUAL, 0, "");
}
在上述示例中,numSeq1 = 7475、numSeq2 = 7475、numIS2 = 2517,最终 LP 有 9992 行和 9992 列。我知道这相当大,但构建模型所需的时间几乎是解决模型的 10 倍,这似乎很奇怪。
我尝试了 expr.clear() 而不是为每个约束创建一个新的 GRBLinExpr (注释掉),但它没有帮助。
有什么方法可以让 gurobi 更快地构建模型?如果瓶颈在于构建模型,cplex 在这方面会比 gurobi 更好吗?
谢谢!