Data envelopment analysis–Assurance region method
这个保证域方法比较简单,接下来简单概述一下:
对一个DEA模型求解,例如CCR的线性模型,我们既有可能得到的最优系数值为0,这就意味着我们并没有充分利用原数据信息,所以其实这个DMU哪怕其theta值为1,也是无效的。
针对这个情况,我们进行改进。给每个DMU的系数限定范围。这里把每个系数都与第一项作比较:
model
那么接下来,就给出CCR形式下的保证域方法:
其中:
其对偶形式为:
AR-有效
与CCR形式类似,这个保证域方法有效的前提是theta=1且松弛变量全为0。
python代码
数据:
若直接用这组数据进行CCR模型求解得到的结果是:
可以从上图结果中发现,众多系数为0。意味着许多原始数据并没有得到充分利用。继而用保证域方法进行改良。
此时,保证域方法使得系数有限制:
附上主体部分,剩余的可看前面,都差不多的:
def __CCR_dual(self):
for k in self.DMUs:
MODEL = gurobipy.Model()
u, v = MODEL.addVars(self.m2), MODEL.addVars(self.m1)
MODEL.update()
MODEL.setObjective(gurobipy.quicksum(u[j]*self.Y[k][j] for j in range(self.m2)), sense=gurobipy.GRB.MAXIMIZE)
MODEL.addConstr(gurobipy.quicksum(v[j]*self.X[k][j] for j in range(self.m1)) == 1)
MODEL.addConstrs(gurobipy.quicksum(v[j]*self.X[i][j] for j in range(self.m1))
>= gurobipy.quicksum(u[j]*self.Y[i][j] for j in range(self.m2)) for i in self.DMUs)
MODEL.addConstr(v[1] <= 5 * v[0])
MODEL.addConstr(v[1] >= 0.2 * v[0])
MODEL.addConstr(u[1] <= 5 * u[0])
MODEL.addConstr(u[1] >= 0.2 * u[0])
MODEL.setParam('OutputFlag', 0)
MODEL.setParam("NonConvex", 2)
MODEL.optimize()
self.Result.at[k, ('效益分析', '综合技术效益(CCR)')] = MODEL.objVal
for m in range(self.m1):
self.Result.at[k, ('系数v', f'{self.m1_name[m]}')] = v[m].X
for m in range(self.m2):
self.Result.at[k, ('系数u', f'{self.m2_name[m]}')] = u[m].X
结果如下: