DEA简介
DEA是数据包络分析( Data envelopment analysis)的简称,是通过数学规划模型得出效率的非参数方法,不需要对生产函数的形式进行假定。以上文字是截取自吴杰老师的《行业分析视角下中国区域环境效率研究——基于数据包络分析(DEA)方法》中的描述。(其实我的理解就是初中就学过的不等式组,只不过没有具体数字了,求最佳值也跟以前在可行域内求最大最小值的思想一样。) 吴杰老师这本书对于刚接触DEA方法的人来说真的很友好,各种基础模型之间的联系和区别都写的很清楚,不过要是想了解最新的模型,还是建议去看最新的英文文献哦。(本来是想详细写简介的,可是觉得字太多会不想看)
CCR与BCC模型
这两个模型算是DEA模型中基础中的基础了,从包络型来看区别主要就是增加了一个,乘子型二者也有一定区别。
CCR乘子型(已归一化)
用的gurobi线性规划求解器哦,按道理来说,用linprog也可以,matlab里面就用的它,不过我因为师姐用的这个,我们就传承下来了。后面就把def ccr一整块换到,然后引用的dea.ccr()换成定义的名称就好了,比如dea.bcc().
from gurobipy import *
import pandas as pd
import numpy as np
class DEA(object):
def __init__(self, DMU_name, X, Y):
self.m1 = X.shape[1]
self.m2 = Y.shape[1]
self.DMUs, self.X, self.Y = multidict({DMU: [X.loc[DMU].tolist(),
Y.loc[DMU].tolist()] for DMU in DMU_name})
def ccr(self):
"""计算theta dd 的值"""
lst = []
a = []
for d in self.DMUs:
m = Model()
v = m.addVars(self.m1)
u = m.addVars(self.m2)
m.update()
m.setObjective(quicksum(u[i] * self.Y[d][i] for i in range(self.m2)), sense=GRB.MAXIMIZE)
m.addConstr(quicksum(v[i] * self.X[d][i] for i in range(self.m1)) == 1)
m.addConstrs(quicksum(u[i] * self.Y[j][i] for i in range(s