使用CPLEX重置目标函数(c ++)

时间:2015-11-17 17:58:21

标签: c++ cplex

model.add(finalObjective);
cplex.solve();

cout << "final 1" << endl;
finalObjective.end();
cout << "final 2" << endl;
finalObjective = IloObjective(env, makespan, IloObjective::Minimize);
cout << "final 3" << endl;

程序打印:“最终2”,然后崩溃。没错。刚结束。 如何重置模型的目标(我每次都使用相同的模型迭代运行)? 我想做类似的事情:model.clearObjective(); 或者以某种方式删除模型中的所有目标,以便我可以在迭代之间构建一个新目标。

1 个答案:

答案 0 :(得分:0)

如果您的新目标函数具有相同的变量集,则可以使用setLinearCoef(const IloNumVar var, IloNum value)对象的setLinearCoefs(const IloNumVarArray vars, const IloNumArray values)IloObjective方法。例如,

IloObjective obj = IloMinimize(...); // your objective's here
model.add(obj);
cplex.extract(model);
cplex.solve();

obj.setLinearCoefs(vars, vals);
model.add(obj);
cplex.extract(model);
cplex.solve();

如果您添加新变量,我建议删除旧模型并创建一个新模型。在这种情况下,CPLEX在计算时间方面表现更好。