0

我正在编写包括场景子问题的分解算法。我使用模型指针来创建子问题优化模型。然后,随着算法的进行,需要修改每个子问题的目标函数系数。我使用指针来避免每次从头开始创建子问题模型。代码部分显示如下;生成子问题模型指针(用于 2 个场景),然后必须使用 IloObjective::setLinearCoefficients 更改一个场景子问题的目标函数系数。修改后的子问题必须再次求解:

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;
}

但是我在“tempMaxObj.setLinearCoefs”行中得到了未处理的异常错误。我不知道如何解决这个问题,因为模型指针似乎工作正常。如果有人帮助我,我将不胜感激。谢谢。

4

0 回答 0