数据包络分析DEA

一些好文:https://zhuanlan.zhihu.com/p/390594011

多属性决策

采取加法或者乘法等模式,计算方案之加总价值,假设方案之价值衡量在每个属性上都是越大越好。

好文:https://blog.csdn.net/qq_44431690/article/details/108198631

进行信息集结的方法:加权算术平均(WAA)算法、加权几何平均(WGA)算子、有序加权平均(OWA)算法。

由于不同属性指标的值大小有所不同,为了消除不同物理量纲对决策结果的影响,决策时可对数据进行规范化处理。

多属性决策模型处理步骤:
1.对属性值进行归一化处理

用函数mapminmax
默认的map范围是[-1, 1],所以如果需要[0, 1],则按这样的格式提供参数:
MappedData = mapminmax(OriginalData, 0, 1);
只按行归一化,如果是矩阵,则每行各自归一化,如果需要对整个矩阵归一化,用如下方法:
FlattenedData = OriginalData(:)'; % 展开矩阵为一列,然后转置为一行。
MappedFlattened = mapminmax(FlattenedData, 0, 1); % 归一化。
MappedData = reshape(MappedFlattened, size(OriginalData)); % 还原为原始矩阵形式。此处不需转置回去,因为reshape恰好是按列重新排序

2.计算属性权重
2.由属性权重和属性值计算总得分

disp('请输入判断矩阵A(n阶)');
A=input('A=');
[n,n]=size(A);
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while  k>p
  i=i+1;
  x(:,i)=A*y(:,i-1);
  m(i)=max(x(:,i));
  y(:,i)=x(:,i)/m(i);
  k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp(w); % w表示了底层对上层的权重
         %以下是一致性检验
CI=(t-n)/(n-1);RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
if CR<0.10
    disp('此矩阵的一致性可以接受!');
    disp('CI=');disp(CI);
    disp('CR=');disp(CR);
end


数据包络分析

以【效率】为概念作为加总模式,而效率则等于加总产出÷总投入,并以效率最大化为目标。
同时DEA中的权重不是事先预设的,而是在实证资料中推导产生。

好文:https://wenku.baidu.com/link?url=5QTVRpdlhN82xkuKnmBox0csPCggStzVo7SEqakP-ipLwu5757VouBDyQGUl0skclxgGctpirFukXA4pi_bWbwh5KTVmMwFbKw1GSk2SspK

在这里插入图片描述

CCR模型

https://zhuanlan.zhihu.com/p/390594011

在这里插入图片描述

function [eff,slackX,slackY,Xeff,Yeff ] = dea_ccr( X, Y)
%DEA Data envelopment analysis radial model
%   X表示投入变量矩阵
%   Y表示产出变量矩阵
    
    %1. 提取变量的维度
    [n, m] = size(X);
    s = size(Y,2);
    
    %2. 依据提取的维度信息,创建求解变量的存储矩阵
   
    slackX = nan(n, m);%投入的松弛变量
    slackY = nan(n, s);%产出的松弛变量
    eff = nan(n, 1);%效率值,第一阶段可计算得的
    Eflag = nan(n, 2);%求解的过程信息
    lambda = nan(n, n);% 每个单元的intensity variable
    Xeff = nan(n, m);%投入对应的前沿值
    Yeff = nan(n, s);%产出对应的前沿值
    
    %3. 参数准备及求解线性规划过程
   
        % 对每个 DMU
        for j=1:n
            
            %第一阶段,求解效率θ
                % 目标函数
                f = [zeros(1,n), 1];
                
                % 约束条件
                A = [ X', -X(j,:)';
                     -Y', zeros(s,1)];
                b = [zeros(m,1);
                    -Y(j,:)'];
                Aeq = [];
                beq = [];
                lb = zeros(1, n + 1);
                ub = [];                
                % linprog()求解
                [z, ~, exitflag] = linprog(f, A, b, Aeq, beq, lb, ub);
                if exitflag ~= 1
                    fprintf(1,'DMU %6d 第一阶段的exitflag: %6d', j, exitflag)
                end
                if isempty(z)
                    fprintf(1,'DMU %6d 第一阶段的解不存在.', j)
                    z = nan(n + 1, 1);
                end
                
                % 提取计算结果
                theta = z(end);
                Eflag(j, 1) = exitflag;
                eff(j) = theta;
    
                
           %第二阶段,计算松弛变量及每个单元各变量对应的前沿值
                
                if ~isnan(theta)
                
                    % 目标函数
                    f = [zeros(1, n), -ones(1, m + s)];

                    % 约束条件
                    Aeq = [ X', eye(m,m)  , zeros(m,s);
                            Y', zeros(s,m), -eye(s,s)];
                    beq = [theta .* Xeval(j,:)';
                            Yeval(j,:)'];
                    lb = zeros(n + s + m, 1);

                    % 求解
                    [z, ~, exitflag] = linprog(f, [], [], Aeq, beq, lb, []);
                    if exitflag ~= 1
                        fprintf(1, 'DMU %6d 第二阶段的exitflag: %6d: %i', j, exitflag)
                    end
                    if isempty(z)
                        fprintf(1,'DMU %6d 第二阶段的解不存在.', j)
                        z = nan(n + m + s, 1);                   
                    end

                    % 提取结果
                    lambda(j,:) = z(1:n);
                    slackX(j,:) = z(n + 1 : n + m);
                    slackY(j,:) = z(n + m + 1 : n + m + s);                
                    Eflag(j, 2) = exitflag;

                    % 计算每个变量的前沿值
                    Xeff(j,:) = repmat(eff(j), 1, m) .* X(j,:) - slackX(j,:);
                    Yeff(j,:) = Y(j,:) + slackY(j,:);

                end
                
        end
end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值