GAMS code for Data Envelopment Analysis

Chapter 4 (Fig. 4.21) – The mathematical formulation of the SORM model

$Title Chapter 4 (Fig. 4.21)
$Title Mathematical formulation of the SORM model 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

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

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

dmu_data(g), res_eff(j), Y1(j,k), Y2(j,k), lamres(j,j), y1_s(k), y2_s(k), stat(j);


loop(jj,
     y1(jj,k)$(data(jj,k)>=0)=data(jj,k);
     y1(jj,k)$(data(jj,k)<0)=0;
     y2(jj,k)$(data(jj,k)>=0)=0;
     y2(jj,k)$(data(jj,k)<0)=-data(jj,k);
);


variables h efficiency measure;
nonnegative variables l(j) peers of DMU j;

EQUATIONS


CON1(i) Inputs constraint
CON2(r) Positive Outputs constraint
CON3(k) Negative output constraint Y1
CON4(k) Negative output constraint Y2
CON5 VRS;


CON1(i).. SUM(j,l(j)*Data(j,i))=L=dmu_data(i)*h;
CON2(r).. SUM(j,l(j)*Data(j,r))=G=dmu_data(r);
CON3(k).. SUM(j,l(j)*y1(j,k))=G=y1_s(k);
CON4(k).. SUM(j,l(j)*y2(j,k))=L=y2_s(k);
CON5..    SUM(j,l(j))=E=1;

Model SORM/All/

loop(jj,
    dmu_data(g) = Data(jj,g);
    y1_s(k)=y1(jj,k);
    y2_s(k)=y2(jj,k);
    Solve SORM min h using LP;
    res_eff(jj) = h.l;
    stat(jj) = SORM.modelstat;
    loop(kk,
      Lamres(jj,kk)=l.l(kk);
    );
 );

display res_eff, lamres;

execute_unload