GAMSプログラム紹介シリーズラストです。Inverted DEAのプログラムです。DEAが効率性を計測するモデルなのに対し、Inverted DEAは「非効率性」を計測するモデルということになります。両者は効率値の評価式の取り方が異なるため、DEAの効率値とIDEAの非効率値の間に本質的には関係がないということが重要なのですが、その辺は以下の論文等で詳しく書かれてます。興味ある方はご覧ください。
円谷友英・前田豊・田中英夫:区間効率値によるDEAモデル, 数理解析研究所講究録, Vol.1079, pp.224-232, 1999.
Inverted DEAのGAMSプログラム例(2018/1/16)
主問題のみ.λ使った双対問題はまた今度紹介する.(→と言いつつ、2015年現在、紹介できていないわけですが・・・まぁ、また追々ということで・・・)
*************************************************
*Inverted DEA Model
*
*Dice-K 2008/01/16
*************************************************
*パラメータの設定*
sets i "DMU's" /DMU1*DMU5/
j 'inputs and outputs' /out,in1,in2/
inp(j) 'inputs' /in1,in2/
outp(j) 'output' /out/
;
*対象DMUの設定*
set j0(i) 'current DMU';
*データ入力*
Table data(i,j)
out in1 in2
DMU1 50 5454 1135
DMU2 27 5109 957
DMU3 55 2465 357
DMU4 35 3261 1763
DMU5 37 4354 1735
;
*変数をデータから拾う*
parameter
x(inp,i) 'inputs of DMU i'
y(outp,i) 'outputs of DMU i'
;
*係数の設定*
positive variables
v(inp) 'input weights'
u(outp) 'output weights'
;
*無次元パラメータの設定*
variable
eff 'efficiency'
sigm
;
*数式の定義*
equations
objective(i) 'objective function: maximize efficiency'
normalize(i) 'normalize input weights'
limit(i) "limit other DMU's efficiency"
;
*目的関数*
objective(j0).. eff =e= sum(inp, v(inp)*x(inp,j0));
*制約条件*
normalize(j0).. sum(outp, u(outp)*y(outp,j0))+sigm =e= 1;
limit(i).. sum(outp, u(outp)*y(outp,i))+sigm =g= sum(inp, v(inp)*x(inp,i));
*モデルの定義*
model dea /objective, normalize, limit/;
*データの変換*
alias(i,iter);
x(inp,i) = data(i,inp);
y(outp,i) = data(i,outp);
parameter efficiency(i), out(i,outp),in(i,inp) 'efficiency of each DMU';
*効率性計算のループ*
loop(iter,
j0(i) = no;
j0(iter) = yes;
solve dea using lp maximizing eff;
abort$(dea.modelstat<>1) "LP was not optimal";
efficiency(iter) = eff.l;
out(iter,outp) = u.l(outp);
in(iter,inp) = v.l(inp);
;)
*結果の出力*
display efficiency,out,in;
最新情報をお届けします
Twitter でdicekcomをフォローしよう!
Follow @dicekcom