Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  min function in the model

    Posted 01/12/17 08:19 AM

    Originally posted by: Rym


    Hi i have an sytax error in min function

     

    My model is:

     

    dvar boolean lumda[V][P];

    dexpr int countPV[ <ptype,vtype> in indexes]=sum( j in P, i in V:j==ptype&&vms[i]==vtype) lumda[i][j]; 
    dexpr int cpuc[j in P]= cpum-(sum(i in V,j in P) lumda[i][j]*cpui[i]);
    dexpr int ramc[j in P]= ramm-(sum(i in V,j in P) lumda[i][j]*rami[i]);
    dexpr int diskc[j in P]= diskm-(sum(i in V,j in P) lumda[i][j]*diski[i]);
    dexpr {int} setR={cpuc,ramc,diskc};
     dvar int Rj[P][setR];
    dexpr int minx[j in P] = min(cpuc[j],(min(ramc[j],diskc[j])));
    dexpr int mini[j in P]=(minx[j]==cpuc[j])?(1):(minx[j]==ramc[j])?(2):(3);
    //dvar boolean phy[P];
    dexpr int O = sum( i in V, j in P) lumda[i][j];
    dexpr int RW = sum (i in V,j in P,l in setR,k in setR:l!=k) lumda[i][j]*(Rj[j][l]-min(k in setR)Rj[j][k]);
    minimize RW;

     

    Thanks

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: min function in the model

    Posted 01/12/17 08:27 AM

    Hi,

    instead of

    dexpr int minx[j in P] = min(cpuc[j],(min(ramc[j],diskc[j])));

    could you write

    dexpr int minx[j in P] = minl(cpuc[j],(minl(ramc[j],diskc[j])));

    ?

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 3.  Re: min function in the model

    Posted 01/12/17 08:30 AM

    Originally posted by: Rym


    it is well but the problem is here now:

     

    dexpr int minx[j in P] = minl(cpuc[j],(minl(ramc[j],diskc[j])));
    dexpr int mini[j in P]=(minx[j]==cpuc[j])?(1):(minx[j]==ramc[j])?(2):(3);

     

    thanks


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 4.  Re: min function in the model

    Posted 01/12/17 08:52 AM

    Hi,

    in the condition you have a decision expression which is not good.

    You d rather use a logical constraint like

    dexpr int mini[j in P]=(minx[j]==cpuc[j])*(1)
    +(minx[j]==ramc[j])*(2)
    +(3)*(minx[j]==diskc[j]);

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 5.  Re: min function in the model

    Posted 01/12/17 09:13 AM

    Originally posted by: Rym


    I still have an error

     

    dexpr int mini[j in P]=(minx[j]==cpuc[j])*(1) +(minx[j]==ramc[j])*(2) +(3)*(minx[j]==diskc[j]);
    dexpr float RW = sum (j in P,l in D) (R[j][l]-R[j][mini[j]]);

    minimize RW;

     

    thanks


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 6.  Re: min function in the model

    Posted 01/12/17 09:22 AM

    Hi,

    because what you write is forbidden.

    You index R by a decision expression mini[j]!

    A workaround could be

    dexpr float RW = sum (j in P,l in D)
    sum(minij in 1..3) (minij==mini[j])*(R[j][l]-R[j][minij]);

    regards

    PS:

     range V=1..2;
     range P=1..3;
     range D=1..3;
     
     dvar boolean lumda[V][P];
     
     int cpuc[P];
     int ramc[P];
     int diskc[P];
     
     dvar int R[1..3][1..3];


    dexpr int minx[j in P] = minl(cpuc[j],(minl(ramc[j],diskc[j])));
    //dexpr int mini[j in P]=(minx[j]==cpuc[j])?(1):(minx[j]==ramc[j])?(2):(3);


    dexpr int mini[j in P]=(minx[j]==cpuc[j])*(1)
    +(minx[j]==ramc[j])*(2)
    +(3)*(minx[j]==diskc[j]);

    dexpr float RW = sum (j in P,l in D)
    sum(minij in 1..3) (minij==mini[j])*(R[j][l]-R[j][minij]);

    minimize RW;


    subject to
    {

    }

    works


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 7.  Re: min function in the model

    Posted 01/12/17 05:00 PM

    Originally posted by: Rym


    Thanks Alex, but the problem that :

    the filling of  the following arrays are depending of the  dvar boolean lumda[V][P] result:

    int cpuc[P];
     int ramc[P];
     int diskc[P];
     

     

    I other words;

    int cpui[V];

    int rami[V];

    int diski[V];

     

    dexpr int cpuc[j in P]= sum(i in V,j in P) lumda[i][j]*cpui[i]
    dexpr int  ramc[j in P]= sum(i in V,j in P) lumda[i][j]*rami[i]
    dexpr int diskc[j in P]= sum(i in V,j in P) lumda[i][j]*diski[i]

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 8.  Re: min function in the model

    Posted 01/13/17 03:36 AM

    Hi,

    at least your error about "min" instead of "minl" is ok now

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer