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(); 或者以某种方式删除模型中的所有目标,以便我可以在迭代之间构建一个新目标。
答案 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在计算时间方面表现更好。