Как я могу использовать «CP» в модели cplex - PullRequest
0 голосов
/ 30 сентября 2019

Теперь я пытаюсь создать код итерации, используя CP в cplex. Проблема возникает, когда я использую CP, чтобы получить решение о выпуклом 'q1'.

Что мне делать, что мне нужно для изменения кода ниже.

main {


      var source = new IloOplModelSource("Ver.1.0.mod");
      var def = new IloOplModelDefinition(source);
      var opl = new IloOplModel(def,cplex);
      var data = new IloOplDataSource("Ver.1.0.dat");

      var nInstances = 1;

        opl.addDataSource(data);
        opl.generate();

      for (var i=0; i<nInstances; i++){
         var def = opl.modelDefinition;
         var data= opl.dataElements;      
              cplex.tilim=60; 

       for (var u=1; u<=data.UNum; u++){data.nU = data.Many[u];
          for (var t=1; t<=data.TNum; t++){data.nT = data.Many[t];
               for (var g=1; g<=data.GNum; g++){data.nG = data.Many[g];
                       for (var e=1; e<=data.ENum; e++){data.nE = data.Many[e];
                               for (var c=5; c<=30; c++){data.T = data.Many[c];




     if(opl!=thisOplModel){opl.end(); }

      opl=new IloOplModel(def,cplex);
      opl.addDataSource(data);
      opl.generate();

        if (cplex.solve()) {                
        writeln(data.nU,":",data.nT,":",data.nG,":",data.nE,":",data.T,":",cplex.getObjValue(),":",cplex.getBestObjValue(),":",cplex.getDetTime(),":",cplex.getCplexTime(),":",cplex.status);
        }    
       else {

       writeln(data.nU,":",data.nT,":",data.nG,":",data.nE,":",data.T,":","Error",":",cplex.getDetTime(),":",cplex.status); 
       }


}}}}}}  //}}}}


          writeln();
          writeln();



        opl.end();
        data.end();
        def.end();
        source.end();
}

Я изменил словаот cplex до CP, но это не сработало.

1 Ответ

1 голос
/ 30 сентября 2019

позвольте мне поделиться крошечным примером:

sub.mod

using CP;

int maxOfx = ...;
dvar int x;

maximize x;
subject to {
      x<=maxOfx;
 }

execute
{
 writeln("x= ",x);
}

, а затем для основной модели

main {
      var source = new IloOplModelSource("sub.mod");
      var cp = new IloCP();
      var def = new IloOplModelDefinition(source);



      for(var k=1;k<=10;k++)
      {
      var opl = new IloOplModel(def,cp);

      var data2= new IloOplDataElements();
      data2.maxOfx=k;
      opl.addDataSource(data2);
      opl.generate();

      if (cp.solve()) {  
         opl.postProcess();
         writeln("OBJ = " + cp.getObjValue());
      } else {
         writeln("No solution");
      }
     opl.end();
    }  

    }

, которая дает

x= 1
OBJ = 1
x= 2
OBJ = 2
x= 3
OBJ = 3
x= 4
OBJ = 4
x= 5
OBJ = 5
x= 6
OBJ = 6
x= 7
OBJ = 7
x= 8
OBJ = 8
x= 9
OBJ = 9
x= 10
OBJ = 10
...