Decision Optimization

 View Only
Expand all | Collapse all

why "OpenJS= [ [a IloNumVar]... ]"??

  • 1.  why "OpenJS= [ [a IloNumVar]... ]"??

    Posted Thu October 12, 2017 03:15 AM

    Originally posted by: ljb843


    int NbISets=...;
    int NbJSets=...;
    int NbKSets=...;
    int NbTSets=...;

    int NbJSopens=...;
    int NbTSopens=...;

    range ISets =1..NbISets;
    range JSets =1..NbJSets;
    range KSets =1..NbKSets;
    range TSets =1..NbTSets;

    float DemandKS[KSets];
    float returnKS[KSets];
    execute{
        
         var y1, y2, y3, y4, y5, y6;
         y1=Math.random();
         y2=(-2)*Math.log(y1);
         y3=Math.sqrt(y2);
         y4=6.28*y1;
         y5=Math.sin(y4);
         y6=y3*y5;
        
        DemandKS[1]=11000+1000*y6;
        DemandKS[2]=7500+500*y6;
        DemandKS[3]=15000+1000*y6;
        DemandKS[4]=12000+1000*y6;
        DemandKS[5]=19000+1000*y6;
      
        returnKS[1]=8000+2000*Math.random();
        returnKS[2]=6000+1000*Math.random();
        returnKS[3]=12000+2000*Math.random();
        returnKS[4]=10000+1000*Math.random();
        returnKS[5]=16000+2000*Math.random();
        
      }
        
    float Morepunishrate[KSets] = ...;
    float Lesspunishrate[KSets] = ...;

    float AbilityJS[JSets]=...;
    float AbilityTS[TSets]=...;

    float returnrateJS[JSets]=...;
    float returnrateTS[TSets]=...;

    float FixedfeeJS[JSets]= ...;
    float FixedfeeTS[TSets]= ...;

    float CheckfeerateJS[JSets]= ...;
    float CheckfeerateTS[TSets]= ...;

    float DisposefeerateJS[JSets]= ...;
    float DisposefeerateTS[TSets]= ...;

    float CostIJ[ISets][JSets]= ...;
    float CostJI[JSets][ISets]= ...;

    float CostJK[JSets][KSets]= ...;
    float CostKJ[KSets][JSets]= ...;

    float CostKT[KSets][TSets]= ...;
    float CostTI[TSets][ISets]= ...;

    float buypriceIS[ISets]= ...;

    dvar float+ TransIJ[ISets][JSets];
    dvar float+ TransJI[JSets][ISets];

    dvar float+ TransJK[JSets][KSets];
    dvar float+ TransKJ[KSets][JSets];

    dvar float+ TransTI[TSets][ISets];
    dvar float+ TransKT[KSets][TSets];

    dvar boolean OpenJS[JSets];
    dvar boolean OpenTS[TSets];
     

    dvar float+ buyIS[ISets];

    dexpr float transfeeIJ=sum(i in ISets,j in JSets)CostIJ[i][j]*TransIJ[i][j];
    dexpr float transfeeJI=sum(i in ISets,j in JSets)CostJI[j][i]*TransJI[j][i];

    dexpr float transfeeJK=sum(j in JSets,k in KSets)CostJK[j][k]*TransJK[j][k]; 
    dexpr float transfeeKJ=sum(j in JSets,k in KSets)CostKJ[k][j]*TransKJ[k][j]; 

    dexpr float transfeeKT=sum(k in KSets,t in TSets)CostKT[k][t]*TransKT[k][t]; 
    dexpr float transfeeTI=sum(t in TSets,i in ISets)CostTI[t][i]*TransTI[t][i]; 

    dexpr float checkfeeJS=sum(j in JSets,k in KSets)CheckfeerateJS[j]*TransKJ[k][j]; 
    dexpr float checkfeeTS=sum(t in TSets,k in KSets)CheckfeerateTS[t]*TransKT[k][t]; 

    dexpr float buyfeeIS=sum( i in ISets)buypriceIS[i]*buyIS[i]; 

    dexpr float fixedfeeJS=sum( j in JSets)FixedfeeJS[j]*OpenJS[j];
    dexpr float fixedfeeTS=sum( t in TSets)FixedfeeTS[t]*OpenTS[t];

    dexpr float disposefeeTS=sum(t in TSets,k in KSets)DisposefeerateTS[t]*returnrateTS[t]*TransKT[k][t]; 
    dexpr float disposefeeJS=sum(j in JSets,k in KSets)DisposefeerateJS[j]*returnrateJS[j]*TransKJ[k][j];

    dexpr float morepunishfeeKS=sum(k in KSets)Morepunishrate[k]*maxl(DemandKS[k]-sum(j in JSets) TransJK[j][k],0);
    dexpr float lesspunishfeeKS=sum(k in KSets)Lesspunishrate[k]*maxl(sum(j in JSets)TransJK[j][k]-DemandKS[k],0);

    minimize
      fixedfeeTS+fixedfeeJS+transfeeKT+transfeeTI+transfeeIJ+transfeeJI+transfeeJK+transfeeKJ+checkfeeJS+checkfeeTS+buyfeeIS+disposefeeTS+disposefeeJS+morepunishfeeKS+lesspunishfeeKS;
       
    subject to {
         forall( k in KSets) 
              ctKS:
              sum(t in TSets) TransKT[k][t]+sum(j in JSets) TransKJ[k][j]==returnKS[k];  
          
         forall( t in TSets) 
            ctTSablity:
              returnrateTS[t]*sum(k in KSets) TransKT[k][t]== sum(i in ISets) TransTI[t][i];  
        
        forall( j in JSets) 
             ctJSablity:
              returnrateJS[j]*sum(k in KSets) TransKJ[k][j]== sum(i in ISets) TransIJ[i][j];  
        
        forall( i in ISets) 
          ctSupply:
            sum(t in TSets)TransTI[t][i]+sum(j in JSets)TransJI[j][i]+buyIS[i]==sum(j in JSets)TransIJ[i][j];

        forall( j in JSets) 
           ctJSbalance:
               sum(i in ISets)TransIJ[i][j]== sum(k in KSets)TransJK[j][k] ;                    
        forall( t in TSets) 
           ctTSability :
             sum( k in KSets)TransKT[k][t]<=OpenTS[t]*AbilityTS[t];      
        forall( j in JSets) 
           ctJSability2 :
             sum( k in KSets)TransKJ[k][j]<=OpenJS[j]*AbilityJS[j];    
             
             sum( t in TSets)OpenTS[t]<=NbTSopens;
              
             sum( j in JSets)OpenJS[j]<=NbJSopens; 

     
     main { 
      
      for(var i=1;i<=10;i++)
       {
        writeln();
       writeln("i= ",i);
      var source = new IloOplModelSource("RMLP.mod");
      var cplex = new IloCplex();
      var def = new IloOplModelDefinition(source);
      var opl = new IloOplModel(def,cplex);
      var data = new IloOplDataSource("RMLP.dat");
      opl.addDataSource(data);
      opl.generate();
      cplex.solve();
      if (cplex.solve()) {
          var curr = cplex.getObjValue();
          
          writeln();
          writeln("OBJECTIVE: ",curr);
          writeln("solution=",thisOplModel.OpenJS);
          write("OpenJS= [ ");
          for(var j in thisOplModel.JSets)
            write(thisOplModel.OpenJS[j], " ");
            writeln("]");
            write("OpenTS= [ ");
          for( var t in thisOplModel.TSets)
            write(thisOplModel.OpenTS[t], " ");
            writeln("]"); 

     

     

    and it got  result:

     

    i= 1
    No solution

    i= 2

    OBJECTIVE: 424112.6091577759
    solution=OpenJS
    OpenJS= [ [a IloNumVar] [a IloNumVar] [a IloNumVar] ]
    OpenTS= [ [a IloNumVar] [a IloNumVar] [a IloNumVar] [a IloNumVar] ]
    avgOBJ = 42411.2609157776

     

    why "OpenJS= [ [a IloNumVar] [a IloNumVar] [a IloNumVar] ]"

    thank you very much!!!


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: why "OpenJS= [ [a IloNumVar]... ]"??

    Posted Thu October 12, 2017 03:18 PM

    Hi,

    maybe you mix opl and theOplModel.

    Let me give you a small example where I try to replicate your error and then will fix it.

    sub.mod

    range r=1..2;
    dvar boolean x[r][r];

    subject to
    {
    forall(i,j in r) x[i][j]==1;
    }

    and then

    range r=1..2;
    dvar boolean x[r][r];

    subject to
    {
    forall(i,j in r) x[i][j]==1;
    }

     main {
         var source = new IloOplModelSource("sub.mod");
         var cplex = new IloCplex();
         var def = new IloOplModelDefinition(source);
         var opl = new IloOplModel(def,cplex);
          
          opl.generate();
          cplex.solve();
          writeln(thisOplModel.x);
          for(var i in thisOplModel.r) for(var j in thisOplModel.r)
          writeln(thisOplModel.x[i][j]);
    }

    will give

    x
    [a IloNumVar]
    [a IloNumVar]
    [a IloNumVar]
    [a IloNumVar]

    but if you change

      writeln(thisOplModel.x);
          for(var i in thisOplModel.r) for(var j in thisOplModel.r)
          writeln(thisOplModel.x[i][j]);

    into

    writeln(opl.x);
          for(var i in thisOplModel.r) for(var j in thisOplModel.r)
          writeln(opl.x[i][j]);

    then you ll get

     [[1 1]
             [1 1]]
    1
    1
    1
    1

     

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 3.  Re: why "OpenJS= [ [a IloNumVar]... ]"??

    Posted Tue October 31, 2017 08:48 PM

    Originally posted by: ljb843


    YES, I got it ,thank you for all your help!!!@AlexFleischer


    #DecisionOptimization
    #OPLusingCPLEXOptimizer