GAMS code for Data Envelopment Analysis

Chapter 3 (Fig. 3.19) – The Mathematical formulation of stochastic (Chance constraints) efficiency models and the corresponding GAMS code

$Title Chapter 3 (Fig. 3.19)
$Title Mathematical formulation of stochastic (Chance constraints) efficiency models and the corresponding GAMS code

$onText

If using this code, please cite:

---------------------------------------------------------------------------------
Emrouznejad, A., P. Petridis, and V. Charles (2023). Data Envelopment Analysis
with GAMS: A Handbook on Productivity Analysis, and Performance Measurement,
Springer, ISBN: 978-3-031-30700-3.
---------------------------------------------------------------------------------

Website: https://dataenvelopment.com/GAMS/

$offText

Option NLP=KNITRO;

 Sets    j DMUs /DMU1*DMU10/
           g Inputs and Outputs /ProdCost,TrnCost, HoldInv, SatDem, Rev/
           i(g)  Inputs /ProdCost, TrnCost, HoldInv/
           r(g) Outputs /SatDem, Rev/
           alias(jj,j);


Table Data(j,g) Data for inputs and outputs

           ProdCost     TrnCost      HoldInv     SatDem      Rev
DMU1        0.255        0.161        0.373        20        2.64
DMU2        0.98         0.248        0.606        6         5.29
DMU3        0.507        0.937        0.749        17        2.43
DMU4        0.305        0.249        0.841        2         8.99
DMU5        0.659        0.248        0.979        19        2.94
DMU6        0.568        0.508        0.919        17        0.75
DMU7        0.583        0.628        0.732        17        6.36
DMU8        0.627        0.675        0.738        10        7.2
DMU9        0.772        0.657        0.486        9         2.16
DMU10       0.917        0.639        0.234        8         7.3;


Parameters var_in(i) variance for inputs,
           var_out(r) Variance for outputs,
           mux(i) average of inputs,
           muy(r) average of outputs,
           Data_DMU(g),
           cc1,
           sigma_out(r),
           sigma_in(i),
           DMU_data_stoch_form(g),
           res_stat(j);


     mux(i)=(1/CARD(j))*SUM(j,Data(j,i));
     muy(r)=(1/CARD(j))*SUM(j,Data(j,r));

******************Output parameters****************************************************************
    var_out(r)= (1/(CARD(j)-1))*SUM(j,power((Data(j,r)-muy(r)),2));
    sigma_out(r) = sqrt(var_out(r));
***************************************************************************************************

******************Input parameters*****************************************************************
    var_in(i)= (1/(CARD(j)-1))*SUM(j,power((Data(j,i)-mux(i)),2));
    sigma_in(i) = sqrt(var_in(i));
***************************************************************************************************


 Scalar Alpha /0.5/;
 Parameter FF frictional function;
 FF=errorf(Alpha);

  Variables objective      objective function for model
            Lambda(j)      dual weights (Lambda values)
            Phi            Output efficiency scores;

  Nonnegative variables
            Lambda(j)      dual weights (Lambda values)
            sminus(i)      input slack variable
            splus(r)       output slack variable;

  Parameters DMU_data(g)     slice of data
             Lamres(j,j)     peers for each DMU
             res_Phi(j)      output efficiency results;


  Equations OBJ objective function
            CON1(r) output constraint
            CON2(i) input constraint
            VRS     VRS constraint;


OBJ..      objective=E=Phi+1E-3*(SUM(i,sminus(i))+SUM(r,splus(r)));

CON1(r)..  Phi*DMU_data_stoch_form(r)-SUM(j$(ord(j)<>cc1), Lambda(j)*Data(j,r))+splus(r)=E=0;

CON2(i)..  SUM(j$(ord(j)<>cc1), Lambda(j)*Data(j,i))+sminus(i)=E=DMU_data_stoch_form(i);

VRS..      SUM(j,Lambda(j))=E=1;

model Chance_DEA_constraints /OBJ, CON1, CON2, VRS/;

  loop(jj,
      DMU_data(g) = Data(jj,g);
      DMU_data_stoch_form(r) = DMU_data(r) - FF*sigma_out(r);
      DMU_data_stoch_form(i) = DMU_data(i) + FF*sigma_in(i);
      cc1 = ord(jj);
      solve Chance_DEA_constraints max objective using LP;
      res_Phi(jj)=Phi.l;
      res_stat(jj)=Chance_DEA_constraints.modelstat;
);

display res_Phi;

    execute_unload