我注意到IloModel逐个添加约束可能会非常缓慢。(我指的是模型的构建,而不是优化。)
假设我有许多具有相同数量变量的约束,我可以在一个函数调用中添加约束矩阵吗?
还有其他方法可以加快模型的构建吗?
我注意到IloModel逐个添加约束可能会非常缓慢。(我指的是模型的构建,而不是优化。)
假设我有许多具有相同数量变量的约束,我可以在一个函数调用中添加约束矩阵吗?
还有其他方法可以加快模型的构建吗?
我最近遇到了这个问题,并发现如果您首先将约束添加到 IloRangeArray,然后将该对象添加到模型中,您会看到显着的加速。如果约束包含在 IloRangeArray 等容器对象中,则移除约束也会更快。
我最近遇到了类似的问题,并注意到由于某种原因使用 IloRange 比使用 IloNumExpr 慢得多。以前我添加约束如下:
IloEnv env;
IloNumVarArray vars(env, stl_vars.size(), 0, IloInfinity);
IloRangeArray constrs(env, stl_constrs.size(), 0, 1);
for (size_t i = 0; i < stl_constrs.size(); ++i) {
constrs[i].setUB(stl_constrs[i].ub);
for (size_t j = 0; j < stl_constrs[i].vars.size(); ++j)
constrs[i].setLinearCoef(vars[stl_constrs[i].vars[j].ind], stl_constrs[i].vars[j].coefficient);
}
model.add(constrs);
用以下代码替换此代码:
IloEnv env;
IloNumVarArray vars(env, stl_vars.size(), 0, IloInfinity);
for (size_t i = 0; i < stl_constrs.size(); ++i) {
IloNumExpr row(env);
for (size_t j = 0; j < stl_constrs[i].vars.size(); ++j)
row += stl_constrs[i].vars[j].coefficient * vars[stl_constrs[i].vars[j].ind];
model.add(row <= stl_constrs[i].ub);
row.end();
}
显着提高了速度。
希望,这会帮助某人。