Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

数据包络分析--混合模型(Hybrid model)附python代码

Data envelopment analysis-Hybrid model

今天上传一本DEA入门级别的英文教材,欢迎大家一起学习!

Hybrid model

今天要介绍的是混合模型。对于之前学过的CCR与BCC模型,我们知道它们都是针对径向(radial)变量而言,而SBM则是非径向模型,是作用于非径向变量(non-radial)。那么,如果拿到一组数据,其中既有径向变量又有非径向,此时就要用到混合模型(Hybrid Model)。

我们先把投入产出指标重新用符号命名。对于投入:
在这里插入图片描述
显然地,R代表radial,NR代表non-radial,并且:
在这里插入图片描述
在这里插入图片描述

且 m1+m2=m。同理,对于产出:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
且 s1+s2=s。

这里要补充一句,本文接下来混合模型用的是固定规模报酬(constant returns to scale)。

模型

在这里插入图片描述
在这个模型中,我们可以发现,对于径向部分的松弛变量我们是不考虑的。其在目标函数中也没用到,这说明径向部分的松弛对于目标函数是不直接影响的。

接下来,将其转变成线性模型:
在这里插入图片描述
转变之后的模型,与初始模型相比:
在这里插入图片描述

python代码

附上混合模型python代码(为主体部分,其余请看上一篇文章,都差不多,只要稍作修改):

    def __HYBRID(self):
        for k in self.DMUs:
            MODEL = gurobipy.Model()
            theta, fi, T, lambdas, sNR_negitive, sNR_positive = MODEL.addVar(),MODEL.addVar(), MODEL.addVar(),MODEL.addVars(self.DMUs),  \
                                                                MODEL.addVars(self.m1_NR), MODEL.addVars(self.m2_NR)
            #决策变量 Model.addVar() 和 Model.addVars(),比如说是x = MODEL.addVar(lb=0.0, ub=gurobipy.GRB.INFINITY,
            # vtype=gurobipy.GRB.CONTINUOUS, name="")
            MODEL.update()
            ## 更新变量环境
            MODEL.setObjective(T*(1- self.m1_R / (self.m1_R+self.m1_NR) *(1-theta)-1/ (self.m1_R+self.m1_NR)*
                                  gurobipy.quicksum(sNR_negitive[j] / self.XNR[k][j] for j in range(self.m1_NR))), sense=gurobipy.GRB.MINIMIZE)
            MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.XR[i][j] for i in self.DMUs)
                             <= theta * self.XR[k][j] for j in range(self.m1_R))
            MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.XNR[i][j] for i in self.DMUs)
                             + sNR_negitive[j] == self.XNR[k][j] for j in range(self.m1_NR))
            MODEL.addConstrs(gurobipy.quicksum(lambdas[i] * self.YR[i][j] for i in self.DMUs)
                             >= fi * self.YR[k][j] for j in range(self.m2_R))
            MODEL.addConstrs((gurobipy.quicksum(lambdas[i] * self.YNR[i][j] for i in self.DMUs) - sNR_positive[j]) == self.YNR[k][j] for j in range(self.m2_NR))
            MODEL.addConstr(T*(1 + self.m2_R/(self.m2_R+self.m2_NR)*(fi-1) + 1/(self.m2_R+self.m2_NR)*gurobipy.quicksum(sNR_positive[j] / self.YNR[k][j] for j in range(self.m2_NR))) == 1)


            MODEL.setParam('OutputFlag', 0)
            MODEL.setParam("NonConvex", 2)
            MODEL.optimize()
            self.Result.at[k, ('效益分析', '效率(Hybrid)')] = MODEL.objVal if MODEL.status == gurobipy.GRB.Status.OPTIMAL else 'N/A'
            self.Result.at[k, ('规模报酬分析', '有效性')] = '非 混合 有效' if MODEL.objVal < 1 else '混合 有效'

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 使用子查询获取,使用 all 关键字获取比所有“国内短线游”价格高的线路信息,按照线路类型、线路价格升序显示线路编号、线路名和价格

下一篇: 2020-12-13

精华推荐