发布时间:2022-09-07 00:00
在人类社会生活的各个领域以及日常生活中,我们经常遇到一些决策问题,例如购物买钢笔,一般要依据质量、颜色、实用性、价格、外形等方面的因素选择某一支钢笔。买饭,则要依据色、香、味、价格等方面的因素选择某种饭菜。过去人们处理这些问题往往是凭经验,靠主观定性的去分析,随意性较大并且缺少应有的科学性,因而常常造成重大的失误。 层次分析法是将定性问题定量化处理的一种有效手段。面临各种各样的方案,要进行比较、判断、评价、最后做出决策,这个过程主观因素占有相当的比重给数学方法解决问题带来不便,而层次分析法却对这种场景有较好的应用。
假设一个场景,我们现在去买一支钢笔,有四支钢笔供你选择,在选择这些钢笔的时候你会考虑一些因素,如质量、颜色、价格、外形、实用性,选择过程如下:
1、将质量、颜色、价格、外形、实用性进行排序
2、将每支钢笔的质量、颜色、价格、外形、实用性进行综合排序
3、决定买哪只钢笔
这就是层次分析法的一个基本思想
第一步:首先要建立模型的一个层次结构
目标层 | 买钢笔 | ||||
准则层 | 质量 | 颜色 | 价格 | 外形 | 实用 |
方案层 | 可供选择的3只钢笔 |
第二步:构造对比矩阵
在做决策的过程中,我们需要考虑的因素一共有五个,我们需要对它进行一个排序,才能知道我们因素对我们做出决策的影响程度。
那么如何去做呢?
假设因素和因素的比值为
那么我们可以列出一个表格:(其中和是相等的)
如何选取呢?
这里列举一种评价标度
重要性相同 稍微重要 重要 很重要 绝对重要 1 3 5 7 9 在每个等级之间的值也可以取,如2,4,6,8
第三步:一致性检验
一致性检验需要计算出几个指标(为特征值,为准则层的因素个数)
1、计算一致性指标
2、计算相应的平均随机一致性指标
为了方便,在这里给出随机一致性指标:
1 2 3 4 5 6 7 8 9 0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 3、计算一致性比例
结论:当时,认为矩阵的不一致性时可以接受的,反之则需要修改矩阵直至通过检验
第四步:计算权重向量
求矩阵最大特征值所对应的向量并进行归一化即可作为权重向量
第五步:层次总排序即求各方案的综合得分
前面我们求的都是在一层中各因素的权重,这个过程称为单层次排序。不妨设准则层权向量,而方案层有个方案可供选择,且每个方案的权向量分别为。那么每个方案对最终目标的影响程度就可以通过下面的式子算出来了。
在最后结果李,得分最高的那一项即为最优方案
%层次分析法AHP
clear all
clc
%构建方案层的比较矩阵
B1 = [1 2 3; 1/2 1 2; 1/5 1/2 1];
B2 = [1 1/3 1/8; 3 1 1/3; 8 3 1];
B3 = [1 1 3; 1 1 3; 1/3 1/3 1];
B4 = [1 3 4; 1/3 1 1; 1/4 1 1];
B5 = [1 1 1/4; 1 1 1/4; 4 4 1];
B = [B1 B2 B3 B4 B5];
%构建准则层的比较矩阵
A = [1 1/2 4 3 3;
2 1 7 5 5;
1/4 1/7 1 1/2 1/3;
1/3 1/5 2 1 1;
1/3 1/5 3 1 1];
%方案层一致性判断
W1 = [];%方案层汇总的权值
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 1.60 1.61 1.615 1.62 1.63];
for i = 1:5
[m,n] = size(B(1:3,3*(i-1)+1:3*i));
[V,D] = eig(B(1:3,3*(i-1)+1:3*i));%求得特征向量和特征根
%求出最大特征值和它所对应的特征向量
Max = D(1,1);
pos = 1;
for j = 1:n
if D(j,j) > Max
Max = D(j,j);
pos = j;%记录最大特征值的位置
end
end
w = abs(V(:,pos));%找出每个因素的权值
w = w / sum(w);%归一化
CI = (Max - n) / (n - 1);
CR = CI / RI(n);
if CR < 0.10
X = ['方案层第',num2str(i),'个矩阵一致性可以接受!',' ','CR:',num2str(CR)];
disp(X)
else
X = ['方案层第',num2str(i),'个矩阵一致性验证失败,请重新进行评分!'];
disp(X)
end
W1 = [W1 w];
end
%准则层一致性判断
[m,n] = size(A);
[V,D] = eig(A);
Max = D(1,1);
pos = 1;
for j = 1:n
if D(j,j) > Max
Max = D(j,j);
pos = j;
end
end
w = abs(V(:,pos));
w = w / sum(w);
W2 = w;
CI = (Max - n) / (n - 1);
CR = CI / RI(n);
if CR < 0.10
X = ['准则层矩阵一致性可以接受!',' ','CR:',num2str(CR)];
disp(X)
else
X = ['准则层矩阵一致性验证失败,请重新进行评分!'];
disp(X)
end
%计算每个方案对最终目标的权值
disp('每个方案对最终目标的权值:')
answer = W1*W2
%最后计算结果为:
方案层第1个矩阵一致性可以接受! CR:-0.14068
方案层第2个矩阵一致性可以接受! CR:0.0014823
方案层第3个矩阵一致性可以接受! CR:-2.135e-15
方案层第4个矩阵一致性可以接受! CR:0.0088488
方案层第5个矩阵一致性可以接受! CR:-8.5402e-16
准则层矩阵一致性可以接受! CR:0.01609
每个方案对最终目标的权值:
answer =
0.2888
0.2522
0.4590
(1)它智能从现有的方案中选择出较优的一个,并不能提供出一个新的或者是更好的方案
(2)该方法中的比较,判断以及结果都是比较粗略的,并不适合精确计算
(3)建立层次结构及构成对比矩阵,人的主观因素起很大作用,这是一个无法克服的缺点
以上就是层次分析法的原理及其实践,希望对你有所帮助,感谢观看!