DEA基础模型python代码

DEA简介

        DEA是数据包络分析( Data envelopment analysis)的简称,是通过数学规划模型得出效率的非参数方法,不需要对生产函数的形式进行假定。以上文字是截取自吴杰老师的《行业分析视角下中国区域环境效率研究——基于数据包络分析(DEA)方法》中的描述。(其实我的理解就是初中就学过的不等式组,只不过没有具体数字了,求最佳值也跟以前在可行域内求最大最小值的思想一样。)          吴杰老师这本书对于刚接触DEA方法的人来说真的很友好,各种基础模型之间的联系和区别都写的很清楚,不过要是想了解最新的模型,还是建议去看最新的英文文献哦。(本来是想详细写简介的,可是觉得字太多会不想看)

CCR与BCC模型

        这两个模型算是DEA模型中基础中的基础了,从包络型来看区别主要就是增加了一个\sum \lambda = 1,乘子型二者也有一定区别。

CCR乘子型(已归一化)

\begin{aligned} max \quad &\sum_{r=1}^s u_{r}{y_{rd}} \\ s.t. \quad &\sum_{i=1}^m {v_{i}x_{id}} = 1;\\ &\sum_{r=1}^s{u_{r}y_{rj}} - \sum_{i=1}^m{v_{i}x_{ij}} \leq 0,\quad j=1,...,n;\\ &\forall v_{i},u_{r} \ge 0. \end{aligned}

用的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值