层次分析法
适用于决策变量主观,难以定量的评价问题定义多目标定性与定量相结合应用最佳方案的选取评价类问题指标体系的优选步骤(1) 建立层次结构模型最高层:决策的目的、要解决的问题中间层:考虑的因素、决策的准则最底层:决策时的备选方案示例(2) 构造成对比较矩阵标度Value1两因素具有同样重要性3一个因素比另一个因素稍微重要5一个因素比另一个因素明显重要7一个因素比另一个因素强烈重要9一个因素比另一个因素极端
适用于决策变量主观,难以定量的评价问题
1. 定义
多目标
定性与定量相结合
2. 应用
最佳方案的选取
评价类问题
指标体系的优选
3. 步骤
(1) 建立层次结构模型
最高层:决策的目的、要解决的问题
中间层:考虑的因素、决策的准则
最底层:决策时的备选方案
示例
(2) 构造成对比较矩阵
标度 | Value |
---|---|
1 | 两因素具有同样重要性 |
3 | 一个因素比另一个因素稍微重要 |
5 | 一个因素比另一个因素明显重要 |
7 | 一个因素比另一个因素强烈重要 |
9 | 一个因素比另一个因素极端重要 |
2,4,6,8 | 重要性位于两程度之间 |
倒数 | 变成同样程度的不重要 |
- 对于一致阵:
存在唯一非零特征根n(矩阵的阶数)
n所对应的特征向量归一化后即可作为权向量
定理:n阶一致阵的唯一非零特征根为n
- 对于非一致阵:
选用最大特征根 λ \lambda λ的特征向量,经归一化后作为权向量 ω \omega ω
定理:非一致阵的最大特征根 λ > n \lambda > n λ>n
(3) 层次单排序及其一致性检验
根据成对比较矩阵算出最大特征根 λ \lambda λ
① 一致性指标
C
I
=
λ
−
n
n
−
1
CI = \frac{\lambda - n}{n-1}
CI=n−1λ−n
- C I = 0 CI = 0 CI=0,有完全的一致性
- C I → 0 CI \to 0 CI→0,有满意的一致性
- C I CI CI越大,不一致越严重
② 随机一致性指标 R I RI RI
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 | 1.49 | 1.51 |
③ 一致性比率
C
R
CR
CR
C
R
=
C
I
R
I
CR = \frac{CI}{RI}
CR=RICI
若
C
R
<
0.1
CR<0.1
CR<0.1,则通过一致性检验;
若未通过检验,则需要重新构造成对比较矩阵A
根据特征根求出特征向量,并进行归一化处理,得到单层次排序。
(4) 层次总排序及其一致性检验
计算某一层所有因素对于最高层相对重要性的权值。
C R = a 1 C I 1 + a 2 C I 2 + ⋅ ⋅ ⋅ + a m C I m a 1 R I 2 + a 2 R I 2 + ⋅ ⋅ ⋅ + a m R I m CR = \frac{a_1CI_1 + a_2CI_2+···+a_mCI_m}{a_1RI_2 + a_2RI_2+···+a_mRI_m} CR=a1RI2+a2RI2+⋅⋅⋅+amRIma1CI1+a2CI2+⋅⋅⋅+amCIm
- C I 1 CI_1 CI1:最底层对中间层中因素的层次单排序的一致性指标。
- R I 1 RI_1 RI1:最底层对中间层中因素的层次单排序的随机一致性指标。
- a i a_i ai:中间层对目标层的单层次排序
若 C R < 0.1 CR<0.1 CR<0.1,则通过检验;
只有通过检验后才可进行决策,否则需要重新考虑模型或重新构造成对比较矩阵。
求出最低层对中间层各因素的权向量,再求出各因素对目标的权向量,列表如下
对各方案求出一个量化值,比较大小,进行评价
4. 模型评价
(1) 优点
-
系统性
-
实用性
定性与定量相结合
无需大量数据
两两比较 -
简洁性
(2) 缺点
- 主观性。需要大量分析,确定成对比较矩阵。
- 不能给出新的方案,只能从原来的方案中选取最优的方案
代码示例
%主函数
clear;clc;
A=[1 5 4 3;
0.2 1 0.5 0.25;
0.25 2 1 0.33;
0.33 4 3 1];
B1 = [1,3,5,3,3,3,5,5,5;0.330000000000000,1,3,1,1,1,3,3,3;0.200000000000000,0.330000000000000,1,1,1,1,3,3,3;0.330000000000000,1,1,1,1,1,3,3,3;0.330000000000000,1,1,1,1,1,3,3,3;0.330000000000000,1,1,1,1,1,3,3,3;0.200000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,1,1,1;0.200000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,1,1,1;0.200000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,1,1,1];
B2 = [1,1,3,1,5,3,5,3,7;1,1,3,1,5,3,5,3,7;0.330000000000000,0.330000000000000,1,0.330000000000000,3,1,3,1,5;1,1,3,1,5,3,5,3,7;0.200000000000000,0.200000000000000,0.330000000000000,0.200000000000000,1,0.330000000000000,1,0.330000000000000,3;0.330000000000000,0.330000000000000,1,0.330000000000000,3,1,3,1,5;0.200000000000000,0.200000000000000,0.330000000000000,0.200000000000000,1,0.330000000000000,1,0.330000000000000,3;0.330000000000000,0.330000000000000,1,0.330000000000000,3,1,3,1,5;0.140000000000000,0.140000000000000,0.200000000000000,0.140000000000000,0.330000000000000,0.200000000000000,0.330000000000000,0.200000000000000,1];
B3 = [1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1];
B4 = [1,1,3,5,3,7,5,1,5;1,1,3,5,3,7,5,1,5;0.330000000000000,0.330000000000000,1,5,3,7,3,0.330000000000000,3;0.200000000000000,0.200000000000000,0.200000000000000,1,0.330000000000000,3,0.330000000000000,0.200000000000000,0.330000000000000;0.330000000000000,0.330000000000000,0.330000000000000,3,1,5,1,0.200000000000000,1;0.140000000000000,0.140000000000000,0.140000000000000,0.330000000000000,0.200000000000000,1,0.200000000000000,0.140000000000000,0.200000000000000;0.200000000000000,0.200000000000000,0.330000000000000,3,1,5,1,0.330000000000000,1;1,1,3,5,5,7,3,1,5;0.200000000000000,0.200000000000000,0.330000000000000,3,1,5,1,0.200000000000000,1];
[W0, Lmax0, CI0, CR0] = AHP(A);
wei0 = quan(A);
[W1, Lmax1, CI1, CR1] = AHP(B1);
[W2, Lmax2, CI2, CR2] = AHP(B2);
[W3, Lmax3, CI3, CR3] = AHP(B3);
[W4, Lmax4, CI4, CR4] = AHP(B4);
wei1 = quan(B1);
wei2 = quan(B2);
wei3 = quan(B3);
wei4 = quan(B4);
CI = [CI1,CI2,CI3,CI4];
RI = [0.52,0.52,0.52,0.52];
CR = sum(W0.*CI)/sum(W0.*RI);
% 实现单层次结构的层次分析法
function [W, Lmax, CI, CR] = AHP(A)
% 输入: A为成对比较矩阵
% 输出: W为权重向量, Lmax为最大特征值, CI为一致性指标, CR为一致性比率
[V,D] = eig(A);
[Lmax,ind] = max(diag(D)); % 求最大特征值及其位置
W = V(:,ind) / sum(V(:,ind)); % 最大特征值对应的特征向量做标准化
Lmax = mean((A * W) ./ W); % 计算最大特征值
n = size(A, 1); % 矩阵行数
CI = (Lmax - n) / (n - 1); % 计算一致性指标
% Saaty随机一致性指标值
RI = [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
CR = CI / RI(n); % 计算一致性比率
%求特征向量
function ret = quan(A)
[n,n]=size(A);
[V,D]=eig(A);%求得特征向量和特征值
%求出最大特征值和它所对应的特征向量
tempNum=D(1,1);
pos=1;
for h=1:n
if D(h,h)>tempNum
tempNum=D(h,h);
pos=h;
end
end
w=abs(V(:,pos));
w=w/sum(w);
ret = w;
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)