[懐古シリーズ]GAMSでDEA-BCCモデルのプログラムを作成


つづいてBCCモデル。結構まめに整理していたんだなぁと当時の自分に感心。

DEA(BCCモデル)のGAMSプログラム(2007/12/7)

すぐお分かりかと思うが,変えているのは制約条件のみ.制約条件の中でlamdaのSumを1にすることによって収穫可変を表現している.
$title Data  Envelopment Analysis - DEA(BCC Model dual)
**********************************************************
*2007/12/01
*programmed by dice-K (Harmony*Harmony)
*
**********************************************************

*変数及びDMUの宣言*
*iはDMU,jは変数の種類*
sets i       "DMU's"  /city1*city10/
     j       'inputs and outputs and costs' /speed,c_pkm, p_pkm/
     inp(j)  'inputs'  /c_pkm, p_pkm/
     outp(j) 'outputs' /speed/;

*分析対象DMUの決定*
set j0(i) 'current DMU';

*データの入力*
Table data(i,j)
             speed          c_pkm          p_pkm
city1         50.51         5454.2         1135.92
city2         27.30         5109.75        957.59
city3         55.75         24656.93       357.85
city4         35.33         3261.41        1763.58
city5         37.57         4354.82        1735.63
city6         57.35         8105.73        3114.18
city7         32.17         6967.87        665.79
city8         58.19         12639.91       719.8
city9         45.26         5741.48        1612.8
city10        46.60         11208.22       925.28
;

*変数の決定*
Positive variable lamda(i);
parameter x(i,inp), y(i,outp);
Variable eff;

*使用する式の宣言*
Equations dii(i,inp), dio(i,outp),convex;

* 目的関数及び制約条件の設定*
dii(j0,inp).. sum(i, lamda(i)*x(i,inp)) =l= eff*x(j0,inp);
dio(j0,outp).. sum(i, lamda(i)*y(i,outp)) =g= y(j0,outp);
convex..  sum(i,lamda(i)) =e=1;

*使用モデルと変数の宣言*
model dea /dii,dio,convex/;

*データの変換作業*
alias(i,iter);
x(i,inp) = data(i,inp);
y(i,outp) = data(i,outp);

*出力の際の変数の設定*
parameter efficiency(i),lam(iter,i);

*効率性計算のためのループ*
loop(iter,
   j0(i) = no;
   j0(iter) = yes;
   solve dea using lp minimizing eff;
   abort$(dea.modelstat<>1) "LP was not optimal";
   lam(iter,i) = lamda.l(i);
   efficiency(iter) = eff.l
;)

*結果の表示*
display efficiency,lam;

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

Twitter でdicekcomをフォローしよう!