Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  How to make a Loop for all DMU

    Posted 01/18/18 05:23 PM

    Originally posted by: Nathalia R.


    Hi! 
    This is the second phase of  DEA BCC model (output oriented)
    To find the possible input excesses (smenos) and output shortfalls (smas), I solved a  two-phase LP problem.

    Phase 1 is the usual model in its dual form where i found theta. For the second phase I used that theta taking as variables lambda, smas and smenos.
    I'm trying to make a loop to solve all the LP in one and not running it DMU by DMU.
    Can anyone help me?
    Regards!

     

     .mod

     intn=...; //número de DMU

     int m=...; //número de entradas

     int s=...; //número de salidas

     

     rangeDMU=1..n;

     range entrada=1..m;

     rangesalida=1..s;

     

     

     float X[DMU][entrada]=...;

     float Y[DMU][salida]=...;

     float teta[DMU]=...;

     

     

     int o=...; // DMU observada

     assert o in DMU;

     

     

     //Variables

     dvar float+ smenos[entrada];

     dvar float+ smas[salida];

     dvar float+ lambda[DMU];

     

     //expresion

     dexprfloat holg = (sum(i in entrada) (smenos[i])) + (sum(r in salida) (smas[r]));

     

     

     //Función objetivo

     

     maximize holg;

     

     subject to

     {

     

     forall(i in entrada

         restric1:

            sum(j in DMU) (lambda[j]*X[j][i]) + smenos[i] == X[o][i];

     forall(r in salida)

         restric2:

             sum(j in DMU) (lambda[j]*Y[j][r]) - smas[r] == (teta[o]*Y[o][r]);

     

         restric3:        

             sum(j in DMU) (lambda[j]) == 1;

            

     }

     

     

     execute

     {

     writeln("Holg= ",holg);

      writeln("Smenos=",smenos);

     writeln("Smas=",smas);

     writeln("lambda=",lambda);

     writeln();

     }

     

    .dat

    n=34; 

    m=4; 

    s=2; 

    o=1; 

     

    SheetConnectionsheet("Datos2.xlsx");

    Xfrom SheetRead(sheet,"data!B2:AI5");

    Yfrom SheetRead(sheet,"data!B6:AI7");

    tetafrom SheetRead(sheet,"data!B8:AI8");

     

     

     

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: How to make a Loop for all DMU

    Posted 01/19/18 04:40 AM

    Hi,

    so let me rewrite the example I gave at https://www.ibm.com/developerworks/community/forums/html/topic?id=9301f47b-4865-4cda-b010-e3977472b8ca&ps=25

    without any main but with all DMUs at once

    .mod

    int nbDMU=...;
     
     int nbInputs= ...;
     int nbOutputs=...;
     
     range DMU=1..nbDMU;
     range Input=1..nbInputs;
     range Output=1..nbOutputs;
     
     // Input
     float X[DMU][Input]=...;
     // Output
     float Y[DMU][Output]=...;
     
     
     
     dvar float+ theta[refDMU in DMU];
     dvar float+ lambda[refDMU in DMU][DMU];
     
     minimize sum(refDMU in DMU)theta[refDMU];
     
     subject to
     {
     forall(refDMU in DMU)
     {  
         forall(j in Input)  
             ctInput:
                 sum(i in DMU) (lambda[refDMU][i]*X[i][j]) <= theta[refDMU]*X[refDMU][j];
         forall(j in Output)
             ctOutput:
             sum(i in DMU) (lambda[refDMU][i]*Y[i][j]) >= Y[refDMU][j];
               }         
             
     }
     
     execute
     {
     for(var refDMU in DMU)
     {
     
     writeln("DMU = ",refDMU)
     writeln("theta= ",theta[refDMU]);
     if (theta[refDMU]==1) writeln("Efficient DMU");
     else writeln("Not efficient DMU");
     writeln("lambda=",lambda[refDMU]);
     writeln();
     }
     
    }

    .dat

     nbDMU=3;

        

        nbInputs=2;
        nbOutputs=3;

        X=[[5 14][8 15][7 12]];
        Y=[[9 4 16][5 7 10][4 9 13]];

     

    which gives

    DMU = 1
    theta= 1
    Efficient DMU
    lambda= [1 0 0]

    DMU = 2
    theta= 0.773333333
    Not efficient DMU
    lambda= [0.26154 0 0.66154]

    DMU = 3
    theta= 1
    Efficient DMU
    lambda= [0 0 1]

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer