Pointers 未处理的异常错误c++;当使用对象的指针IloModel和ILOBJECTION::setLinearCoefs时?
我正在编写一个包含场景子问题的分解算法。我使用模型指针创建子问题优化模型。然后,随着算法的进行,需要修改每个子问题的目标函数系数。我使用指针来避免每次从头开始创建子问题模型。代码部分显示如下:;生成子问题模型指针(用于两个场景),然后必须使用ILObjective::setLinearCoefficients更改一个场景子问题的目标函数系数。必须再次解决修改后的子问题:Pointers 未处理的异常错误c++;当使用对象的指针IloModel和ILOBJECTION::setLinearCoefs时?,pointers,visual-c++,cplex,decomposition,rational-team-concert,Pointers,Visual C++,Cplex,Decomposition,Rational Team Concert,我正在编写一个包含场景子问题的分解算法。我使用模型指针创建子问题优化模型。然后,随着算法的进行,需要修改每个子问题的目标函数系数。我使用指针来避免每次从头开始创建子问题模型。代码部分显示如下:;生成子问题模型指针(用于两个场景),然后必须使用ILObjective::setLinearCoefficients更改一个场景子问题的目标函数系数。必须再次解决修改后的子问题: int main (int argc, char **argv) { int ScenearioNum=2;//Numb
int main (int argc, char **argv)
{
int ScenearioNum=2;//Number of scenarios in small example
IloEnv env;
try {
//Generate the subproblem model pointers:
IloModel* MaxProblemPtr= new(env) IloModel[ScenearioNum];
IloObjective* MaxObjPtr= new(env) IloObjective[ScenearioNum];
for (int s=0;s<ScenearioNum;s++){
IloModel MaxProblem(env);
*(MaxProblemPtr+s)=MaxProblem;
IloObjective MaxObj= IloAdd(MaxProblem, IloMaximize(env));
*(MaxObjPtr+s)=MaxObj;
IloRangeArray ConstMax;
if (s==0){
ConstMax=IloAdd(MaxProblem,
IloRangeArray(env, - IloInfinity,RHS_sub1));
}else{
ConstMax=IloAdd(MaxProblem,
IloRangeArray(env, - IloInfinity,RHS_sub2));
}
for (int j=0;j<2;j++){
X.add(IloNumVar(MaxObj(1)+ConstMax[0](1)));
Y.add(IloNumVar(MaxObj(2)+ConstMax[1](1)));
}
IloCplex maxcplex(MaxProblem);
maxcplex.solve();
if (maxcplex.solve()) {
double currentObj=maxcplex.getObjValue();
cout<<"**max Objective function for s"<<s+1<<" :"<< currentObj<<endl;
}
}
//CHANGING OBJECTIVE FUNCTION OF FIRST SCENARIO
IloNumArray XCoeff(env);
IloObjective tempMaxObj=*MaxObjPtr;
tempMaxObj.setLinearCoefs(X,XCoeff);
IloModel Maxproblem=*MaxProblemPtr;
IloCplex maxcplex(Maxproblem);
}
}
catch (IloException& ex) {
cerr << "Error: " << ex << endl;
}
catch (...) {
cerr << "Error" << endl;
}
env.end();
return 0;
}
int main(int argc,char**argv)
{
int ScenearioNum=2;//小示例中的场景数
伊洛恩温;
试一试{
//生成子问题模型指针:
IloModel*MaxProblemPtr=new(env)IloModel[ScenearioNum];
ILObObjective*MaxObjPtr=新(环境)ILObObjective[ScenearioNum];
对于(int s=0),SU确实知道像ILoMod的C++类只是句柄类,这些句柄类的实例只包含指向每个实例实现的指针。成员函数。您最好保留指向实现实例的指针。谢谢您的建议。我尝试了getImpl()成员函数,没有解决问题。我感到困惑的是,我只尝试了一个场景,并且成功地从指针获得了实例实现。但是,当我添加更多场景时,会出现错误。任何想法都将受到高度赞赏。