[懐古シリーズ]GAMSでDEA出力指向型モデルのプログラムを作成


通常のDEAは入力指向で、出力フィックスで入力要素の最小化を図ることになるのですが、出力の最大化をどうしても表現したいときはこのモデルを。

DEA出力指向モデル(2007/12/18)

DEA出力指向モデル(出力の最大化を目指すモデル)のGAMSプログラム.
$title Data  Envelopment Analysis - DEA(出力指向モデル)

**********************************************************
*2007/12/18
*programmed by dice-K (Harmony*Harmony)
*
**********************************************************

*変数及びDMUの宣言*
*iはDMU,jは変数の種類*
sets i       "DMU's"  /city1*city5/
     j       'inputs and outputs' /out1,in1,in2/
     inp(j)  'inputs'  /in1,in2/
     outp(j) 'outputs' /out1/
;

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

*データの入力*
Table data(i,j)
              out1          in1           in2
city1        10843          71.87        633.35
city2        16880          23.60        363.10
city3         4825          64.70        609.24
city4         9755          85.20        580.70
city5        16563          23.10        500.46
;

*変数の決定*
Positive variable
         lamda(i) dual weights;

parameter
         x(i,inp)        'inputs of DMU i'
         y(i,outp)       'outputs of DMU i';

Variable
         eff     'efficiency';

*使用する式の宣言*
Equations
         dii(i,inp)      'input duals'
         dio(i,outp)     'output duals'
         convex       'BCC model'
;

* 目的関数及び制約条件の設定*
dii(j0,inp).. sum(i, lamda(i)*x(i,inp)) =l= x(j0,inp);
dio(j0,outp).. sum(i, lamda(i)*y(i,outp)) =g= eff*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 maximizing eff;
   lam(iter,i) = lamda.l(i);
   efficiencydi(iter) = eff.l
;)

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

 

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

最新情報をお届けします

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


dicekcom

離島と写真とコーヒーと公共交通が好き。中山間離島の交通まちづくりを考えるのが趣味兼仕事。ルーツは広島市と津和野町。ときどき島旅に出かけます。駅メモはじめました。