层次分析法笔记

什么是一致性矩阵?

举个例子就明白了

下面这个矩阵就是一致性矩阵
  1      2     4
1/2      1     2
1/4    1/2     1

比如 a 的座标是(12),元素值为 2
b 的座标是(31),元素值为 1/4
那么它们相乘得 1/2,而它们平移相交处的座标(32)的元素值也是 1/2,说明这对数据满足一致性

同理,任意座标(i,j)与(j,k)的元素值乘积 等于 它们相交处的座标(i,k)的元素值
则说明这个矩阵为一致性矩阵

再来举个反例

下面这个矩阵不是一致性矩阵
  1      2     3
1/2      1     2
1/3    1/2     1

比如 a 的座标是(13),元素值为 3
b 的座标是(21),元素值为 1/2
那么它们相乘得 3/2,而它们平移相交处的座标(23)的元素值却是 2,说明这对数据不满足一致性
那这个矩阵就不是一致性矩阵

什么是正互反矩阵?

举个例子

下面这个矩阵就是正互反矩阵
  1      2     4
1/2      1     2
1/4    1/2     1

下面这个矩阵不是正互反矩阵
  1      2     3
1/2      1     2
1/4    1/2     1

因为座标(13)乘以座标(31)的元素值不为 1

下面这个矩阵也不是正互反矩阵
  1      2     4
1/2      1     2
1/4    1/2     2

因为座标(13)与座标(31)所对应的座标(33)的元素值不为 1

结论:当座标(i,j)乘以座标(j,i)的元素值为 1 ,且对应的座标(j,j)的元素值为 1 时,该矩阵为正互反矩阵

作业解答

一、判断矩阵是否为正互反矩阵?

if sum(sum(A'.* A ~=  ones(n))) > 0
    disp('不是正互反矩阵')
end

提示:层次分析法代码的编写 视频中的 1:17:34 中会有详细的讲解

二、输入二阶判断矩阵会有什么问题?如何修正?

在这里插入图片描述

从图中我们看出当 n=2 时 RI=0
而计算一致性的公式为 CR=CI/RI(n)
这显然是错误的,修改方法如下:

RI=[0 0.00001 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];
将 n=2 时 RI=0.00001 即可

判断矩阵的元素规定

层次分析法的判断矩阵中,仅能包含 1 – 9 的整数及其倒数,不能出现类似 0.3、4.5、11 等不符合要求的元素

判断矩阵的顺序

先进行一致性检验(必须通过)
再求权重
最后归一化
注意:准则层都是关联性较小的

判断矩阵的代码部分

disp(' 请输入判断矩阵A ')     
A=input('A=');     
ERROR = 0;  
[r,c]=size(A);
if r ~= c  || r <= 1
    ERROR = 1;
end
if ERROR == 0
    [n,n] = size(A);
    if sum(sum(A <= 0)) > 0
        ERROR = 2;
    end
end
if ERROR == 0
    if n > 15
        ERROR = 3;
    end
end
if ERROR == 0
    if sum(sum(A' .* A ~=  ones(n))) > 0
        ERROR = 4;
    end
end

if ERROR == 0
    % % % % % % % % % % % % %方法1: 算术平均法求权重% % % % % % % % % % % % %
    Sum_A = sum(A);
    SUM_A = repmat(Sum_A,n,1);
    Stand_A = A ./ SUM_A;
    disp('算术平均法求权重的结果为:');
    disp(sum(Stand_A,2)./n)
    % % % % % % % % % % % % %方法2: 几何平均法求权重% % % % % % % % % % % % %
    Prduct_A = prod(A,2);
    Prduct_n_A = Prduct_A .^ (1/n);
    disp('几何平均法求权重的结果为:');
    disp(Prduct_n_A ./ sum(Prduct_n_A))
    % % % % % % % % % % % % %方法3: 特征值法求权重% % % % % % % % % % % % %
    [V,D] = eig(A);
    Max_eig = max(max(D));
    [r,c]=find(D == Max_eig , 1);
    disp('特征值法求权重的结果为:');
    disp( V(:,c) ./ sum(V(:,c)) )
    % % % % % % % % % % % % %下面是计算一致性比例CR的环节% % % % % % % % % % % % %
    CI = (Max_eig - n) / (n-1);
    RI=[0 0.00001 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];  %注意哦,这里的RI最多支持 n = 15
    % 这里n=2时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数
    CR=CI/RI(n);
    disp('一致性指标CI=');disp(CI);
    disp('一致性比例CR=');disp(CR);
    if CR<0.10
        disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!');
    else
        disp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
    end
elseif ERROR == 1
    disp('请检查矩阵A的维数是否不大于1或不是方阵')
elseif ERROR == 2
    disp('请检查矩阵A中有元素小于等于0')
elseif ERROR == 3
    disp('A的维数n超过了15,请减少准则层的数量')
elseif ERROR == 4
    disp('请检查矩阵A中存在i、j不满足A_ij * A_ji = 1')  % 说明不是正互反矩阵
end

切记不能直接用于论文中,要根据题目适当的修改,避免查重

建议三种求权重的方法都用在论文上,并且强调一句:为了保证结果的稳健性,本文采用了三种方法分别求出了权重后计算平均值,再根据得到的权重矩阵计算各方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效

层次分析法的评估

层次分析法的优点:层次分析法具有系统性、简洁实用、所需定量数据信息较少,这种方法尤其可用于对无结构特性的系统评价以及多目标、多准则、多时期等的系统评价,而且结果简单明确、可信度较高。然而,层次分析法虽然可以简单地把综合指标量化,但在权重的确定方面主观性太强,因此通过构造出来的判断矩阵所求出来的权值不一定可靠从而不能客观的评价目标层的影响指标

同理,要做适当修改避免查重

补充:记得看作业讲解视频

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章