2

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 倍の時間がかかるのは奇妙に思えます。

各制約 (コメントアウト) に対して新しい GRBLinExpr を作成する代わりに expr.clear() を試しましたが、役に立ちませんでした。

gurobi がモデルをより速く構築できるようにする方法はありますか? ボトルネックがモデルの構築である場合、cplex はこの点で gurobi よりも優れているでしょうか?

ありがとう!

4

2 に答える 2