先来看传统的CCR模型代码,注释是我以前学习时加上去的,这次我又重新校对和修改了部分注释,方便理解与学习。linprog函数是专门用来计算线性规划的函数,不熟悉的同学在matlab中help一下或者在mathwork中找一下linprog的介绍就懂了。
clcclearX= [ ];%投入指标数据,每一列代表每个决策单元的投入数据Y= [];%产出指标数据,每一列代表每个决策单元的产出数据n=size(X', 1); %决策单元数m=size(X,1); %投入指标数s=size(Y,1); %产出指标数epsilon=10^-10;%一个非常小的正数,在目标函数中用以识别松弛变量,并判断有效和弱有效f=[zeros(1,n) -epsilon*ones(1,m+s) 1];%目标函数前n个待求解变量的系数为0(即目标函数中不需要出现这n个待求解变量),第n+1到第n+m+s个待求解变量的系数都为那个充分小的正数,第n+m+s+1个待求解变量的系数为1(保留效率值!)A=[];%不等式约束的系数矩阵,没有不等式约束,所以为空b=[];%不等式约束右端的值,为空LB=zeros(n+m+s+1,1);%待求解变量的下限,共n+m+s+1行,1列。每个元素都为0,UB=[];%待求解变量的上限,无要求。for i=1:n;%i从1循环到n,即从第一个决策单元的效率开始算到最后一个,循环结束 Aeq=[X eye(m) zeros(m,s) -X(:,i) Y zeros(s,m) -eye(s) zeros(s,1) ]; beq=[zeros(m,1) Y(:,i) ]; w(:,i)=linprog(f,A,b,Aeq,beq,LB,UB); endtheta=w(n+m+s+1,:)'%效率按列输出
相对于CCR模型,BCC模型只是增加了一个约束条件 ,
论文中仅给出CCR模型的代码,没有给出BCC模型的代码,我将代码进行了修改,请看BCC模型的代码。
clcclear%微信公众号:DEA小白入门%本代码求解vrs假设投入导向径向DEA模型,仅供同学们科研学术使用。X= [];%投入指标数据,每一列代表每个决策单元的投入数据Y= [];%产出指标数据,每一列代表每个决策单元的产出数据n=size(X', 1); %决策单元数m=size(X,1); %投入指标数s=size(Y,1); %产出指标数epsilon=10^-10;%一个非常小的正数,在目标函数中用以识别松弛变量,并判断有效和弱有效f=[zeros(1,n) -epsilon*ones(1,m+s) 1];%目标函数前n个待求解变量的系数为0,第n+1到第n+m+s个待求解变量的系数都为那个充分小的正数,第n+m+s+1个待求解变量的系数为1A=[];%不等式约束的系数矩阵,没有不等式约束,所以为空b=[];%不等式约束右端的值,为空LB=zeros(n+m+s+1,1);%待求解变量的下限,共n+m+s+1行,1列。每个元素都为0,UB=[];%待求解变量的上限,无要求。for i=1:n;%i从1循环到n,即从第一个决策单元的效率开始算到最后一个,循环结束 Aeq=[X eye(m) zeros(m,s) -X(:,i) Y zeros(s,m) -eye(s) zeros(s,1) ones(1,n) zeros(1,m+s+1)];%新添约束等式的左边 beq=[zeros(m,1) Y(:,i) 1];%新添约束等式的右边 w(:,i)=linprog(f,A,b,Aeq,beq,LB,UB); endtheta=w(n+m+s+1,:)'
有了这两个模型的代码,便可计算被评价单元的技术效率和纯技术效率。然后通过二者相除便可得到规模效率。数据的怎么放进矩阵中,可参考非期望产出SBM模型的matlab操作示范。