|
Home
Figure 7. Example of a GAMS program to solve an output-oriented DEA
model which measures capacity.
1. $oninline
2. Set inout /spec1, spec2, fix1, fix2, var1, var2/
3. Output(inout) /spec1, spec2/
4. Fixed(inout) /fix1, fix2/
5. Var(inout) /var1, var2/
6. Obs /1*500/
7. Subobs(obs) /1*10/
8. Actobs(obs);
9. Alias (subobs, subobs1)
10. $offlisting
11. Table act(obs,inout) input output table
12. $ondelim
13. $include "data.csv"
14. $offdelim
15. $onlisting
16. Variables
17. Theta efficiency score
18. Weight(obs) weights
19. Lambda(obs, var);
20. Positive variable weight, lambda;
21. Equations
22. Constr1(output, obs) DEA constraint for each output
23. Constr2(fixed, obs) DEA constraint for fixed inputs
24. Constr3(var, obs) DEA constraint for variable inputs;
25. Constr1(output, actobs).. sum(subobs,weight(subobs)*act(subobs, output))
=G= theta*act(actobs, output);
26. Constr2(fixed, actobs).. sum(subobs, weight(subobs)*act(subobs,fixed)) =L=
act(actobs, fixed);
27. Constr3(var, actobs).. sum(subobs, weight(subobs)*act(subobs,var)) =E= lambda(actobs,var)*act(actobs,var);
28. Parameter
29. Score1(obs) theta estimates
30. Score2(obs,var) hold variable input levels;
31. File capdea /grcapres.txt/;
32. Model tedea /constr1, constr2, constr3/
33. Loop (subobs1,
34. Actobs(obs)=no;
35. Actobs(subobs1)=yes;
36. Option LP=OSL;
37. Solve tedea maximizing theta using LP;
38. Score1(subobs1)=theta.l;
39. Score2(subobs1,var)=lambda.l(subobs1,var);
40. Put capdea;
41. If ((tedea.modelstat eq 1 and tedea.solvestat eq 1),
42. Put @1, subobs1.tl, @10, "optimal", @20, "normal completion"/
43. Else put @1, subobs1.tl, @10, tedea.modelstat:>2:0, @20, tedea. solvestat:>2:0/)
44. );
45. Parameter capest(subobs1) capacity estimate;
46. Capest(subobs1)=sum(output, score1(subobs1)*act(subobs1,output));
47. File res /cap_inp.csv/;
48. Res.pc=5;
49. Res.pw=160;
50. Put res;
51. Put "obs", "theta", "capacity",
52. Loop (output, put output.tl);
53. Loop (var, put var.tl);
54. Put "var1o", "var2o"
55. Loop (subobs1,
56. Put /
57. Put subobs1.tl, score1(subobs1), capest(subobs1),
58. Loop (output, put act(subobs1,output));
59. Loop (var, put act(subobs1, var));
60. Loop (var, put score2(subobs1,var));
61. );
62. Putclose;
|