《DEA算法学习系列之三:一次性求解CCR模型所有DMU参数——效率、规模效益、有效性特征、调整值的matlab代码》由会员分享,可在线阅读,更多相关《DEA算法学习系列之三:一次性求解CCR模型所有DMU参数——效率、规模效益、有效性特征、调整值的matlab代码(44页珍藏版)》请在人人文库网上搜索。
1、DEA算法学习笔记系列(三)一次性求解CCR模型所有DMU参数效率、规模效益、有效性特征、调整值的matlab代码目 录1 编写目的41.1 Excel一次只能计算一个DMU41.2 Matlab编程一次性计算所有DMU的效率、有效性、调整值52 MATLAB求解线性规划52.1 系统函数说明52.1.1 调用格式:52.1.2 输入参数说明52.1.3 返回值说明62.2 简单例子,用代码求解72.2.1 例172.2.2 例2:82.2.3 例题3(无解的例子)92.2.4 例4(需要标准化的例子,一个等式的例子)102.2.5 例5112.2.6 例子6:松弛变量为基变量用等式重解例11。
2、32.3 自定义Matlab函数求解线性规划(从excel读数据)142.3.1 简单版:MyLinprog读取给定文件中数据,返回计算结果143 DEA模型之CCR简介163.1 CCR理论模型164 CCR模型计算过程一个决策单元的计算过程184.1 例题说明184.2 基于理论构建模型湖南省194.3 调整形式,以利于线性规划函数求解194.4 按照自定义函数,构造excel文件204.4.1 矩阵A的格式和说明204.4.2 价值向量系数矩阵C的格式和说明204.4.3 资源限制矩阵b的格式和说明214.4.4 X取值条件的限制214.5 调用自定义函数(MyLinprog)求解指定决。
3、策单元模型224.6 计算结果评价224.6.1 最优值224.6.2 各变量的值234.6.3 模型效率分析244.7 调整方案245 计算CCR模型的MATLAB函数所有决策单元255.1 程序代码(可直接运行)255.2 存放数据的excel文件格式说明275.2.1 第一个:投入产出数据275.2.2 第二个数据:价值变量系数矩阵(不需准备)275.2.3 第三个数据:资源限制矩阵(不需要准备)285.2.4 第四个数据:决策变量的取值范围(不需要准备)285.2.5 范例数据285.3 计算所有DMU的函数285.3.1 函数输入参数285.3.2 返回参数1:每个DMU效率、规模效。
4、益、是否弱有效285.3.3 返回参数2:每个DMU的所有值295.3.4 返回参数3:增加的松弛变量295.3.5 返回参数4:非DEA有效DMU调整后的投入产出矩阵295.3.6 返回参数5:非DEA有效DMU各个指标调整值295.4 返回参数例子295.4.1 返回参数1:每个DMU效率、规模效益、是否弱有效295.4.2 返回参数2:每个DMU的所有值305.4.3 返回参数3:增加的松弛变量305.4.4 返回参数4:非DEA有效DMU调整后的投入产出矩阵305.4.5 返回参数5:非DEA有效DMU各个指标调整值306 补充知识306.1 自定义matlab函数306.2 Matl。
5、ab向量操作326.2.1 读取矩阵第一列326.3 Matlab操作excel数据326.3.1 读入excel数据326.3.2 写内容到xls336.4 Matlab的for循环语句357 参考资料351 编写目的1.1 Excel一次只能计算一个DMUDEA的CCR模型,他的对偶模型如下图:很多人通过EXCEL提供的一个插件进行计算,如下图所示:但是,这种方法有以下不足:(1)每次只能计算一个DMU,如果有多个DMU,那么需要人工重复计算过程多次;(2)通过Excel计算,只能得到,没法得到各个,所以,也无法直接判断是规模效益递增还是递减;(3)没发直接得到的值,也无法直接判断DMU是。
6、弱DEA有效,还是DEA有效1.2 Matlab编程一次性计算所有DMU的效率、有效性、调整值文章通过编写Matlab程序,实现一次性对所有DMU计算效率、有效性(根据以及所有的汇总值)、调整值(根据)。2 Matlab求解线性规划2.1 系统函数说明2.1.1 调用格式:x, fval, exitflag, output, lambda=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 注意:这个函数求的是最小值2.1.2 输入参数说明输入f: 线性规划中的C,价值系数矩阵,一行n列的向量输入A,b:作有等式约束的问题。若没有不等式约束,则令A= 、b= 具体参。
7、考例子输入lb ,ub:变量x的下界和上界输入x0:初值点输入options:为指定优化参数进行最小化Display 显示水平, 选择off 不显示输出;选择iter显示每一 步迭代过程的输出;选择final 显示最终结果。MaxFunEvals 函数评价的最大允许次数Maxiter 最大允许迭代次数TolX x处的终止容限2.1.3 返回值说明返回值x:为最优解向量。返回值 fval:返回解x处的目标函数值exitflag :描述函数计算的退出条件:若为正值,表示目标函数收敛于解x处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。1Function conve。
8、rged to a solutionx.0Number of iterations exceededoptions.MaxIter.-2No feasible point was found.-3Problem is unbounded.-4NaNvalue was encountered during execution of the algorithm.-5Both primal and dual problems are infeasible.-7Search direction became too small. No further progress could be made.ou。
9、tput 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。lambda 返回x处的拉格朗日乘子。它有以下属性:lambda.lower-lambda的下界;lambda.upper-lambda的上界;lambda.ineqlin-lambda的线性不等式;lambda.eqlin-lambda的线性等式。2.2 简单例子,用代码求解2.2.1 例1max f=-2x1+3x2s.t x1 + 2x2 8 4x1 164x2 12 x1,x2,x302.2.1.1 求解过程(1)先。
10、将目标函数转化成最小值问题:min(-f)= -2x1 - 3x2(2)计算代码: f=-2 -3; %相当于CA=1 2;4 0;0 4;b=8;16;12; x,fval=linprog(f,A,b) f=fval*(-1) 2.2.1.2 结果x =4.00002.0000fval =-14.0000f =14.00002.2.2 例2:minf=5x1-x2+2x3+3x4-8x5s.t2x1+x2-x3+x4-3x56 2x1+x2-x3+4x4+x57 0xj15j=1,2,3,4,5 2.2.2.1 求解过程f=5 -1 2 3 -8; A=-2 1 -1 1 -3;2 1 -1。
11、 4 1; b=6;7; lb=0 0 0 0 0; ub=15 15 15 15 15; %注意:这个例题的xj除了大于0之外,还有小于15的条件x,fval=linprog(f,A,b,lb,ub) 2.2.2.2 结果:x =0.00000.00008.00000.000015.0000minf =-1042.2.3 例题3(无解的例子)min f=5x1+x2+2x3+3x4+x5s.t2x1+x2-x3+x4-3x51 2x1+3x2-x3+2x4+x5-2 0xj1j=1,2,3,4,5程序: f=5 1 2 3 1; A=-2 1 -1 1 -3;2 3 -1 2 1; b=1;。
12、-2; lb=0 0 0 0 0; ub=1 1 1 1 1; x,fval,exitflag,output,lambda=linprog(f,A,b,lb,ub)运行结果: Exiting: One or more of the residuals, duality gap, or total relative errorhas grown times greater than its minimum value so far:the primal appears to be infeasible (and the dual unbounded).(The dual residual cle。
13、ar a = eg_sum(10)6.2 Matlab向量操作6.2.1 读取矩阵第一列6.3 Matlab操作excel数据6.3.1 读入excel数据(1)一般语句:ranmdta=xlsread(ramdta.xls);(2)读取第二个sheet中的数据:NUM=xlsread(example,2),注意:matlab读取excel中的数据是按照sheet在excel中的排放顺序来的(3)读取A3-D7之间的数据NUM=xlsread(example,2,A3:D7)(4)NUM=xlsread(d:deaDEA_Data.xlsx,b)数据源:结果:6.3.2 写内容到xls语法:x。
14、lswrite(f:result.xls,stats,sheet1,A2)具体例子参考:%将结果保存到excel文件中sTitle=;%生成标题sTitle(1,1)=最后5天最高价格;sTitle(2,1)=;sTitle(1:2,2:6)=num2cell(xPrice(:,end-4:end);sTitle(3,1)=最后5天最高价格区间;sTitle(4,1)=;sTitle(3:4,2:6)=num2cell(PriceState(:,end-4:end);sTitle(5,1)=区间;n=size(GroupInfo,2);sTitle(6,2:n+1)=GroupInfo;sTitle(7:7+5-1,1)=num2cell(1:5);%生成内容sTitle(7:7+5-1,2:n+1)=num2cell(HighNextNDaysRow);%保存到excel文件中xlswrite(StockName, sTitle,Sheet2, A1 );效果图:6.4 Matlab的for循环语句for num=1:1000EPS=EPS/2;if (1+EPS)=1EPS=EPS*2breakendend.7 参考资料1 线性规划模型及matlab程序求解https:/wenku.baidu.com/view/5ebcf84b9d57b31.html。