2015-11-17 48 views
0
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; 

該程序打印:「final 2」,然後崩潰。沒有錯誤。只是結束。 如何重置我的模型的目標(我迭代運行,每次使用相同的模型)? 我想做一些事情:model.clearObjective(); 或者以某種方式移除模型中的所有目標,以便在迭代之間建立一個新目標。使用CPLEX(C++)重置目標函數

回答

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在計算時間方面表現更好。