层次分析算法
本文最后更新于96 天前,其中的信息可能已经过时,如有错误请发送邮件到3014096835@qq.com

1.问题提出

日常生活中有很多的决策问题。决策是指在面临多种方案时需要依据一定的标准选择某一种方案。

  • 买衣服,一般要根据质量,颜色,价格,款式等方面的因素选择
  • 旅游,要根据景色,费用,食宿条件,旅途等因素来判断去哪个地方

2.例:评价三个明星A,B,C

  • 考虑一个明星可以从粉丝数,颜值,作品数量,作品质量四个方向
  • A,B,C的相关数据如下
明星粉丝数颜值作品质量作品数量
A6000W106.525
B3400W68.146
C5500W87.531

3.归一化处理

思考:如何对明星进行评价呢,如果直接相加粉丝数+颜值+作品质量+作品数量,会导致由于粉丝数过大,会直接忽视掉其他指标,因此我们需要将指标化为同一数量级,且保证在同一指标下其差距不变。

归一化处理:指标的数组[a b c]归一化处理得到\(A = \frac{a}{a+b+c}\),\(B = \frac{b}{a+b+c}\),\(C = \frac{c}{a+b+c}\);A+B+C=1;

例:将三位明星的颜值进行归一化处理:

\(A=\frac{10}{10+6+8}\) ,\(B=\frac{6}{10+6+8}\) ,\(C=\frac{8}{10+6+8}\)可以得到颜值归一化后的数据为A=0.42,B=0.25,C=0.33

明星粉丝数颜值作品质量作品数量评分
A0.400.420.290.251.36
B0.230.250.370.451.30
C0.370.330.340.301.35

此时将各项指标相加即可得出对明星的评价,但是除了归一化处理外,我们还应当分析对于不同指标在进行选择的时候重要程度是不同的,因此可以根据对指标进行加权来修改对应指标的重要程度

明星粉丝数(0.4)颜值(0.3)作品质量(0.2)作品数量(0.1)评分
A0.40*0.40.42*0.30.29*0.20.25*0.10.365
B0.230*0.40.25*0.30.37*0.20.45*0.10.293
C0.37*0.40.33*0.30.34*0.20.30*0.10.342

层次分析法(AHP)

上述的权重的设置具有较强的主观性,是不够科学的,如何严谨科学的设置权重呢?就需要使用层次分析法。

基本概念

面临各种各样的方案,要进行比较,判断,评价,直至最后的决策。这个过程中都是一些主观的因素,这些因素可能由于个人情况的不同,有相应不同的比重,所以这样主观因素给数学方法的解决带来了很多的不方便。

注意:层次分析法并不代表绝对客观,而是在相对随意去制定权重的情况下设置一个科学的标准。

模型原理

应用AHP分析问题时,首先要把问题条理化层次化,构造出一个有层次的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属性及其关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。这些层次可以分为三类:

最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也成为目标层。

中间层:这一层次包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则,子准则,因此也成为准则层。

最底层:这一层次包括了为实现目标可供选择的各种措施,决策方案等,因此也成为措施层或方案层。

基本步骤

运用层次分析法建立模型,大体上可以按下面四个步骤进行:

  • 建立阶梯层次结构模型
  • 构造出各层次中的所有判断矩阵
  • 一致性检验
  • 求权重后进行评价

建立阶梯层次模型

目标层:最好的明星

准测层:粉丝数,颜值,作品质量,作品数量

方案层:A,B,C

构造出各层次中的所有判断矩阵

  • 对指标的重要性进行两两比较,构造判断矩阵,从而科学求出权重
  • 矩阵中元素\(a_{ij}\)的意义是,第i个指标相对第j个指标的重要程度

构造判断矩阵的方法

标度含义
1表示两个元素相比,具有同样重要性
3表示两个元素相比,一个因素比另一个因素稍微重要
5表示两个元素相比,一个因素比另一个因素明显重要
7表示两个元素相比,一个因素比另一个因素强烈重要
9表示两个元素相比,一个因素比另一个因素极端重要
2,4,6,8上述两相邻判断的中间值

例:粉丝数跟作品数量比明显重要,那么\(a_{14}\)=5,反过来作品质量相比粉丝数的重要性就是,\(B=\frac{1}{5}\),因此\(a_{41}\)=\(\frac{1}{5}\)。

粉丝数颜值作品质量作品数量
粉丝数15
颜值1
作品质量1
作品数量\(\frac{1}{5}\)1

构造判断矩阵

依次对变量进行两两比较,得到完整的判断矩阵,如下表所示

粉丝数颜值作品质量作品数量
粉丝数1235
颜值\(\frac{1}{2}\)1\(\frac{1}{2}\)2
作品质量\(\frac{1}{3}\)21\(\frac{1}{2}\)
作品数量\(\frac{1}{5}\)\(\frac{1}{2}\)21

注意:由于两两比较的过程中忽略了其他因素,导致最后的结果可能出现矛盾

如:\(a_{23}\) = \(\frac{1}{2}\),颜值<作品质量,\(a_{24}\)=2,颜值>作品数量,可以推导出作品质量>作品数量,但是\(a_{34}\)=\(\frac{1}{2}\),作品质量<作品数量,此时产生矛盾。

因此我们需要引入一致性检验

一致性检验

\(a_{ij}\)=\(\frac{i}{j}\) \(a_{ik}\)=\(\frac{i}{k}\) \(a_{kj}\)=\(\frac{k}{j}\)满足\(a_{ij}\)=\(a_{ik}\)*\(a_{kj}\)且矩阵各行(列)成倍数关系,满足这两条的矩阵是一致矩阵,不会出现矛盾情况。

一致矩阵

  • 若矩阵中每个元素都大于0,且满足\(a_{ij}\)*\(a_{ji}\)=1,则我们称该矩阵为正互反矩阵。在层次分析法中,我们构造的判断矩阵均是正互反矩阵。
  • 若正互反矩阵满足\(a_{ik}\)*\(a_{kj}\)=\(a_{ij}\),则我们称其为一致矩阵。
  • 在使用判断矩阵求权重之前,必须要对其进行一致性检验,以免产生矛盾。
  • 一致性检验原理:检验我们构造的判断矩阵和一致矩阵是否有太大差别。

一致性检验步骤

1、计算一致性指标CI

\(CI=\frac{\lambda_{max}-n }{n-1}\)

2、查找对应的平均随机一致性指标RI

n12345678910
RI000.520.891.121.261.361.411.461.49

3、计算一致性比例CR

\(CR=\frac{CI}{RI}\)

CR = 0,判断矩阵为一致矩阵

CR < 0.1判断矩阵一致

CR > 0.1判断矩阵不一致

注:特征值可使用matlab软件进行计算,可以不用了解原理

回到我们的例题,根据一致性检验算法,对我们的矩阵进行检验

粉丝数颜值作品质量作品数量
粉丝数1235
颜值\(\frac{1}{2}\)1\(\frac{1}{2}\)2
作品质量\(\frac{1}{3}\)21\(\frac{1}{2}\)
作品数量\(\frac{1}{5}\)\(\frac{1}{2}\)21

\(\lambda_{max}\) = 4.4672,n = 4,求得CI = 0.1557,查表可知RI = 0.89,计算得CR = 0.1750

CR > 0.1,判断矩阵不一致,需要修改矩阵

粉丝数颜值作品质量作品数量
粉丝数1235
颜值\(\frac{1}{2}\)1\(\frac{1}{2}\)2
作品质量\(\frac{1}{3}\)212
作品数量\(\frac{1}{5}\)\(\frac{1}{2}\)\(\frac{1}{2}\)1

\(\lambda_{max}\) = 4.1128,n = 4,求得CI = 0.0376,查表可知RI = 0.89,计算得CR = 0.0423

CR < 0.1,通过一致性检验

求权重

算数平均法求权重

  • 第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)
  • 第二步:将归一化的各列相加(按行求和)
  • 第三步:将相加后得到的向量中每个元素除以n即可得到权重

例:\(\begin{bmatrix}1&\frac{1}{2} \\2&1\end{bmatrix}\)先按列归一化得到\(\begin{bmatrix}\frac{1}{3} &\frac{1}{3}\\\frac{2}{3} &\frac{2}{3}\end{bmatrix}\)在将归一化的各列相加(按行求和)得到\(\begin{bmatrix}\frac{2}{3}\\\frac{4}{3}\end{bmatrix}\)最后将元素除以n = 2就可以得到权重向量\(\begin{bmatrix}\frac{1}{3}\\\frac{2}{3}\end{bmatrix}\)

几何平均法求权重

  • 第一步:将判断矩阵的元素按照行相乘得到一个新的列向量
  • 第二步:将新的向量的每个分量开n次方
  • 第三步:对该向量进行归一化即可得到权重

特征值法求权重

  • 第一步:求出矩阵A的最大特征值及其对应的特征向量
  • 第二步:对求出的特征向量进行归一化即可得到我们的权重

层次分析法对应Matlab代码

%% 输入判断矩阵
clear;clc
disp('请输入判断矩阵A: ')
A = input('判断矩阵A=');
[r,c]=size(A);
error=0;
%% 判断矩阵是否为方阵并且阶数大于等于2
if r~=c || r<2
  error=1;
end
%% 判断矩阵是否大于15
if r==c&&r>15
    error=2;
end
 
%% 判断矩阵A是否为正互反矩阵
if error~=1 && sum(sum(A'.*A~=ones(r)))>0
    error=3;
end
%% 计算
if error==0
    %% 算术平均法求权重
    Sum_A = sum(A);
    [n,m] = size(A);
    SUM_A = repmat(Sum_A,n,1);
    Stand_A = A ./ SUM_A;
    sum(Stand_A,2);
    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);
    V(:,c);
    disp('特征值法求权重的结果为:');
    disp( V(:,c) ./ sum(V(:,c)) )
    %% 计算一致性比例CR
    CI = (Max_eig - 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];  %注意哦,这里的RI最多支持 n = 15
    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不为方阵或者阶数小于2")
elseif error==2
        disp("判断矩阵的阶数大于15")
elseif error==3
    disp("不为正互反矩阵")
end
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇