$Title Chapter 4 (Fig. 4.18)
$Title Mathematical formulation of MSBM for negative data (inputs/outputs) 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/
r(g) Outputs /SatDem, Rev/;
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
Rplus(j,r), Rminus(j,i), max_y(r), min_x(i), dmu_data(g), Rmin(i), Rpl(r), res_eff(j), Lamres(j,j), stat(j);
max_y(r) = smax(j,Data(j,r));
min_x(i) = smax(j,Data(j,i));
loop(jj,
Rplus(jj,r) = max_y(r) - Data(jj,r);
Rminus(jj,i) = Data(jj,i) - min_x(i);
);
Rplus(jj,r)$(Rplus(jj,r)=0)=10**3;
Rminus(jj,i)$(Rminus(jj,i)=0)=10**3;
parameters w(i), v(r);
w(i) = 1/CARD(i);
v(r) = 1/CARD(r);
variables tau efficiency measure;
nonnegative variables lambda(j) peers of DMU j,
t auxiliary variable,
sminus(i) slack variable for inputs,
splus(r) slack variable for outputs;
EQUATIONS
OBJ Objective function
CON1(i) Inputs constraint
CON2(r) Outputs constraint
CON3
CON4;
OBJ.. tau =E=t-SUM(i,(sminus(i)*w(i))/Rmin(i));
CON1(i).. SUM(j,lambda(j)*Data(j,i))+sminus(i)=E=dmu_data(i)*t;
CON2(r).. SUM(j,lambda(j)*Data(j,r))-splus(r)=E=dmu_data(r)*t;
CON3.. SUM(r,(v(r)*splus(r))/Rpl(r))+t=E=1;
CON4.. SUM(j,lambda(j))=E=t;
Model MSBM/All/
loop(jj,
dmu_data(g) = Data(jj,g);
Rmin(i) = Rminus(jj,i);
Rpl(r) = Rplus(jj,r);
Solve MSBM min tau using LP;
res_eff(jj) = tau.l;
stat(jj) = MSBM.modelstat;
loop(kk,
Lamres(jj,kk)=Lambda.l(kk);
);
);
display res_eff, lamres;
execute_unload