Search code examples
iterationlinear-programmingcplexcpmixed-integer-programming

How can I use 'CP' in cplex model


Now I am trying to make an Iteration code by 'using CP' in cplex. The problem is raised when I use CP to get a solution about 'q1' convex.

What should I do, What I need to change my code below.

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

I changed words 'cplex' to 'CP' but it didn't work.


Solution

  • let me share a tiny example:

    sub.mod

    using CP;
    
    int maxOfx = ...;
    dvar int x;
    
    maximize x;
    subject to {
          x<=maxOfx;
     }
    
    execute
    {
     writeln("x= ",x);
    }
    

    and then for the main model

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

    which gives

    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