1.问题提出
日常生活中有很多的决策问题。决策是指在面临多种方案时需要依据一定的标准选择某一种方案。
- 买衣服,一般要根据质量,颜色,价格,款式等方面的因素选择
- 旅游,要根据景色,费用,食宿条件,旅途等因素来判断去哪个地方
2.例:评价三个明星A,B,C
- 考虑一个明星可以从粉丝数,颜值,作品数量,作品质量四个方向
- A,B,C的相关数据如下
明星 | 粉丝数 | 颜值 | 作品质量 | 作品数量 |
A | 6000W | 10 | 6.5 | 25 |
B | 3400W | 6 | 8.1 | 46 |
C | 5500W | 8 | 7.5 | 31 |
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
明星 | 粉丝数 | 颜值 | 作品质量 | 作品数量 | 评分 |
A | 0.40 | 0.42 | 0.29 | 0.25 | 1.36 |
B | 0.23 | 0.25 | 0.37 | 0.45 | 1.30 |
C | 0.37 | 0.33 | 0.34 | 0.30 | 1.35 |
此时将各项指标相加即可得出对明星的评价,但是除了归一化处理外,我们还应当分析对于不同指标在进行选择的时候重要程度是不同的,因此可以根据对指标进行加权来修改对应指标的重要程度
明星 | 粉丝数(0.4) | 颜值(0.3) | 作品质量(0.2) | 作品数量(0.1) | 评分 |
A | 0.40*0.4 | 0.42*0.3 | 0.29*0.2 | 0.25*0.1 | 0.365 |
B | 0.230*0.4 | 0.25*0.3 | 0.37*0.2 | 0.45*0.1 | 0.293 |
C | 0.37*0.4 | 0.33*0.3 | 0.34*0.2 | 0.30*0.1 | 0.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}\)。
粉丝数 | 颜值 | 作品质量 | 作品数量 | |
粉丝数 | 1 | 5 | ||
颜值 | 1 | |||
作品质量 | 1 | |||
作品数量 | \(\frac{1}{5}\) | 1 |
构造判断矩阵
依次对变量进行两两比较,得到完整的判断矩阵,如下表所示
粉丝数 | 颜值 | 作品质量 | 作品数量 | |
粉丝数 | 1 | 2 | 3 | 5 |
颜值 | \(\frac{1}{2}\) | 1 | \(\frac{1}{2}\) | 2 |
作品质量 | \(\frac{1}{3}\) | 2 | 1 | \(\frac{1}{2}\) |
作品数量 | \(\frac{1}{5}\) | \(\frac{1}{2}\) | 2 | 1 |
注意:由于两两比较的过程中忽略了其他因素,导致最后的结果可能出现矛盾
如:\(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
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
RI | 0 | 0 | 0.52 | 0.89 | 1.12 | 1.26 | 1.36 | 1.41 | 1.46 | 1.49 |
3、计算一致性比例CR
\(CR=\frac{CI}{RI}\)
CR = 0,判断矩阵为一致矩阵
CR < 0.1判断矩阵一致
CR > 0.1判断矩阵不一致
注:特征值可使用matlab软件进行计算,可以不用了解原理
回到我们的例题,根据一致性检验算法,对我们的矩阵进行检验
粉丝数 | 颜值 | 作品质量 | 作品数量 | |
粉丝数 | 1 | 2 | 3 | 5 |
颜值 | \(\frac{1}{2}\) | 1 | \(\frac{1}{2}\) | 2 |
作品质量 | \(\frac{1}{3}\) | 2 | 1 | \(\frac{1}{2}\) |
作品数量 | \(\frac{1}{5}\) | \(\frac{1}{2}\) | 2 | 1 |
\(\lambda_{max}\) = 4.4672,n = 4,求得CI = 0.1557,查表可知RI = 0.89,计算得CR = 0.1750
CR > 0.1,判断矩阵不一致,需要修改矩阵
粉丝数 | 颜值 | 作品质量 | 作品数量 | |
粉丝数 | 1 | 2 | 3 | 5 |
颜值 | \(\frac{1}{2}\) | 1 | \(\frac{1}{2}\) | 2 |
作品质量 | \(\frac{1}{3}\) | 2 | 1 | 2 |
作品数量 | \(\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