Data envelopment analysis--super-efficiency models
模型
一般在实际中,我们拿到一组数据,直接进行DEA计算,很容易发生一种情况,就是有大量的决策单元(DMUs)最终效率分数为零。那么接下来就是对这些效率分数为1的值进行考虑,哪一个更好,对其进行一个排序。
与往常模型类似,其实也就是把这个被评估的决策单元不放进生可能集中去,继而建立模型。
CCR下的模型
要注意的是,这里的目标函数,是要在第一阶段求得theta的值,然后在第二阶段中这个theta作为已知条件代入,然后再求所有松弛的和最大。
SBM下的模型
将新的x和y代入模型中,得到新的模型为:
注意
超效率模型存在缺点,就是在VRS(variable returns to scale)情况时可能会存在无可行解的情况。
python处理超效率模型
例子:数据如下,用super radial-I-C模型进行求解:
代码主要部分:
def __CCR_super(self):
for k in self.DMUs:
MODEL = gurobipy.Model()
OE, lambdas, s_negitive, s_positive = MODEL.addVar(), MODEL.addVars(self.DMUs), MODEL.addVars(self.m1),\
MODEL.addVars(self.m2)
#决策变量 Model.addVar() 和 Model.addVars(),比如说是x = MODEL.addVar(lb=0.0, ub=gurobipy.GRB.INFINITY,
# vtype=gurobipy.GRB.CONTINUOUS, name="")
MODEL.update()
## 更新变量环境
MODEL.setObjectiveN(OE, index=0, priority=1)
#添加目标函数 Model.setObjective() 和 Model.setObjectiveN(),有多个目标函数时候加N,并且index: 目标函数对应的序号 (默认 0,1,2,…),
# 以 index=0 作为目标函数的值, 其余值需要另外设置参数
MODEL.setObjectiveN(-(sum(s_negitive) + sum(s_positive)), index=1, priority=0)
#priority大就先算
MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.X[i][j] for i in self.DMUs if i != k)
+ s_negitive[j] == OE * self.X[k][j] for j in range(self.m1))
MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.Y[i][j] for i in self.DMUs if i != k)
- s_positive[j] == self.Y[k][j] for j in range(self.m2))
MODEL.setParam('OutputFlag', 0)
MODEL.optimize()
self.Result.at[k, ('效益分析', '综合技术效益(CCR-super)')] = MODEL.objVal
return self.Result
结果如下: