Skip to content

Latest commit

 

History

History
132 lines (110 loc) · 5.42 KB

CRS model.md

File metadata and controls

132 lines (110 loc) · 5.42 KB

CRS Model

POLab
2017/01/29
【回到首頁】

Reference

本篇範例資料取自高強教授於2007發表的Paper:Efficiency decomposition in network data envelopment analysis: A relational model

(一)CRS Model

※此為DEA中固定規模報酬(constant return to scale, CRS)的模型建構說明,並以投入導向的模組為例

固定規模報酬是指每一單位的投入可得到的產出量是固定的,並不會因為規模大小而改變,也就是說當投入量以等比例增加時,產出亦會以等比例增加,並在固定規模報酬的假設下,藉由將各決策單位(Decision Making Unit, DMU)的各項投入加權組合與各項產出加權組合互相比較計算其比值,以得出各個決策單位的相對效率值,且效率值介於0到1之間,而在CRS模式中所求得的效率值又稱之為總體效率值(overall efficiency, OE);投入導向指的是在相同產出水準下,比較各決策單位投入資源的使用效率。

§ 符號說明

  • ErCRS: 決策單位r的效率值
  • K: 決策單位(DMU)個數 r,k∈K
  • I: 投入項個數 i∈I
  • J: 產出項個數 j∈J
  • ε: 極小的正值稱之為非阿基米德數(non-Archimedean constant),通常設為10-4或10-6(目的為了使任一投入或產出項皆不會被忽略)

§ 參數說明

  • Xki: 決策單位k (k=1,...,K)使用第i (i=1,...,I)個投入項
  • Ykj: 決策單位k (k=1,...,K)使用第j (j=1,...,J)個產出項

§ 決策變數

  • urj: 決策單位r的第j個產出項之權重
  • vri: 決策單位r的第i個投入項之權重

§ CRS Model

1. 比率型

  • 目標式: 找出一組對於受評決策單位r最有利的投入項與產出項之權重,以最大化其效率值
  • 限制式: 效率值必須介於0到1之間,且各權重皆為正值

2. 原問題

由於上述的數學模型為分數線性規劃(fractional linear programming)形式,除了會發生多重解的情況外,求解也較不易,因此透過轉換,將其變成下列線性規劃的模式,以方便求解。

(二)範例說明

※在此以一個簡單的範例來建構上述的數學模型,並說明如何利用Python-Gurobi進行建模

  • 此範例為一個具有兩項投入及三項產出的系統,系統內部的各製程均被視為黑盒子般,在此不被考量。
  • 共有五個決策單位要進行比較,其各自的產出項與投入項情形如下圖所示:
  • 並能形成如下所示的CRS Model:

(三)Python-Gurobi

在此說明如何運用Python-Gurobi來建構CRS model

※完整程式碼可點擊這裡

Import gurobipy

from gurobipy import*

Add parameters

E={}
I=2  # 兩項投入
O=3  # 三項產出
#X、Y為各DMU的投入與產出情形
DMU,X,Y=multidict({('A'):[[11,14],[2,2,1]],('B'):[[7,7],[1,1,1]],('C'):[[11,14],[1,1,2]],('D'):[[14,14],[2,3,1]],('E'):[[14,15],[3,2,3]]})    

Model

  • 透過for loop來計算每個決策單位r的效率
for r in DMU:
    m=Model("CRS_model")

Add decision variables

  • 建立決策變數投入項與產出項權重 vri、 urj
    v,u={},{}

    for i in range(I):
        v[r,i]=m.addVar(vtype=GRB.CONTINUOUS,name="v_%s%d"%(r,i),lb=0.0001)
    
    for j in range(O):
        u[r,j]=m.addVar(vtype=GRB.CONTINUOUS,name="u_%s%d"%(r,j),lb=0.0001)

Update

    m.update()

Add objective

    m.setObjective(quicksum(u[r,j]*Y[r][j] for j in range(O)),GRB.MAXIMIZE)

Add constraints

    m.addConstr(quicksum(v[r,i]*X[r][i] for i in range(I))==1)
    for k in DMU:
        m.addConstr(quicksum(u[r,j]*Y[k][j] for j in range(O))-quicksum(v[r,i]*X[k][i] for i in range(I))<=0)

Print result

    m.optimize()
    E[r]="The efficiency of DMU %s:%0.3g"%(r,m.objVal)
    
for r in DMU:
    print (E[r])

最後可得到如下所示的結果
從結果我們可知決策單位A、D、E與其他決策單位相比是相較有效率的,其效率值皆為1。

    The efficiency of DMU A:1
    The efficiency of DMU B:0.898
    The efficiency of DMU C:0.848
    The efficiency of DMU D:1
    The efficiency of DMU E:1