【数学建模】层次分析法
层次分析法
- 引例
- 层次分析法介绍
- 成对比较阵和一致性检验
- 组合权向量
- 层次分析法步骤
- 代码实现
- RI
- 一致性检验
- 层次单排序
- 计算组合权向量(层次总排序)
- 经典案例
- 代码实现
- 练习训练
- 参考文献
引例
就拿旅游来讲吧,有3个目的地(A,B,C)在你的旅游清单上,但是由于你精力有限,你只能选择其中一个。而等下讲的层次分析法,便能很好地解决这种问题。
层次分析法介绍
首先我们的目标就是选择一个要去的旅游地,而我们在选择过程中会考虑一些参考准则,比如景色,费用,居住,饮食和旅途等因素。而我们要选择的有三个方案:A、B、C三地。
上图是用visio画出来的描述。其为层次分析法的框架。
成对比较阵和一致性检验
分别成对地比较各个准则D1,D2,D3,D4,D5对于目标G的重要程度。对于重要程度的评判标准给出下面1~9尺度表。
尺度 a i j a_{ij} aij | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
D i : D j D_i:D_j Di:Dj的重要性 | 相同 | 稍强 | 强 | 明显强 | 绝对强 |
比如,如果对D2费用看得比较重,可以令D2费用的重要程度是D1景色的2倍,是D4饮食和D5旅途的5倍,是D3居住的7倍,设置权重。
如此,我们记 D i : D j = a i j , A = ( a i j ) n × n D_i:D_j=a_{ij},A={(a_{ij})}_{n\times n} Di:Dj=aij,A=(aij)n×n,其中 a i j > 0 , a j i = ( a i j ) − 1 a_{ij}>0,a_{ji}={(a_{ij})}^{-1} aij>0,aji=(aij)−1。按照我们自己的重要性评价标准得到下面的矩阵A,A为正互反矩阵(即对角线对称的两个数互为倒数)。
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 ] A=\begin{bmatrix} {1}&{\frac{1}{2}}&4&3&3\\ {2}&{1}&7&5&5\\ {\frac{1}{4}}&\frac{1}{7}&1&\frac{1}{2}&\frac{1}{3}\\ {\frac{1}{3}}&\frac{1}{5}&2&{1}&{1}\\ {\frac{1}{3}}&\frac{1}{5}&3&{1}&{1}\\ \end{bmatrix} A=⎣⎢⎢⎢⎢⎡1241313121171515147123352111353111⎦⎥⎥⎥⎥⎤
允许矩阵A是不一致矩阵,即允许 a i j ≠ a i k ⋅ a k j a_{ij}\ne a_{ik}\cdot a_{kj} aij=aik⋅akj。 比如说D2费用是D1景色的重要度的2倍,而D1景色是D3 居住重要度的4倍,如果一致的话D2费用是D3居住重要度的8倍,这里给出的矩阵A是不一致的,为7倍。
这种不一致是有一定的允许范围的,需要做一致性检验。
- n阶正互反阵的最大特征根 λ m a x ≥ n \lambda _{max}\geq n λmax≥n,当 λ m a x = n \lambda _{max}= n λmax=n 时,即为一致阵。
衡量该矩阵一致性的指标记作 C I = λ m a x − n n − 1 CI=\frac {\lambda _{max}-n}{n-1} CI=n−1λmax−n , C I CI CI 越小,就越一致。那么怎样衡定越小呢?这里进一步引入随机一致性指标记作 R I RI RI(用计算机随机模拟得到矩阵A。计算出的 C I CI CI 即为 R I RI RI), R I RI RI的值列表如下:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 | 1.49 |
则有一致性比例 C R = C I R I CR=\frac {CI}{RI} CR=RICI, 当 C R < 0.1 CR<0.1 CR<0.1时,则通过一致性检验。我们旅游实例中的矩阵A 的最大特征值 λ m a x \lambda_{max} λmax为5.0721, C I CI CI的值为0.0180, C R CR CR为 0.0161 < 0.1 0.0161<0.1 0.0161<0.1, 通过了一致性检验。
组合权向量
建议用最大特征根 λ m a x \lambda_{max} λmax对应的特征向量作为第2层的权向量 w ( 2 ) w^{(2)} w(2), 可得旅游实例中的第二层权向量为: w ( 2 ) = ( 0.263 , 0.475 , 0.055 , 0.090 , 0.110 ) T w^{(2)}={(0.263,0.475,0.055,0.090,0.110)}^T w(2)=(0.263,0.475,0.055,0.090,0.110)T。
采取同样的方法依次求得第3 层方案层对第2层每一准则的权向量 w 1 ( 3 ) , w 2 ( 3 ) , w 3 ( 3 ) , w 4 ( 3 ) , w 5 ( 3 ) w_1^{(3)},w_2^{(3)},w_3^{(3)},w_4^{(3)},w_5^{(3)} w1(3),w2(3),w3(3),w4(3),w5(3) 。
就以第三层方案层(A、B和C地)对第二层的D2的准则费用为例,求出权向量 w 2 ( 3 ) w_2^{(3)} w2(3)。
游玩C地的费用是A地的8倍,是B地的3倍,游玩B地的费用是A地的3 倍,则此成对比较阵为:
B 2 = [ 1 1 3 1 8 3 1 1 3 8 3 1 ] B_2=\begin{bmatrix} {1}&{\frac{1}{3}}&\frac{1}{8}\\ {3}&{1}&\frac{1}{3}\\ 8&3&1\\ \end{bmatrix} B2=⎣⎡138311381311⎦⎤
则 B 2 B_2 B2的最大特征根对应的特征向量为 w 2 ( 3 ) = ( 0.082 , 0.236 , 0.682 ) T w_2^{(3)}={(0.082,0.236,0.682)}^T w2(3)=(0.082,0.236,0.682)T
第3层的3个方案对于第2层的5个准则求出的5个权向量列出下表。
k | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
wk3 |
0.595 | 0.082 | 0.43 | 0.633 | 0.17 |
0.277 | 0.236 | 0.43 | 0.193 | 0.17 | |
0.129 | 0.682 | 0.14 | 0.175 | 0.67 | |
λmaxk | 3.005 | 3.002 | 3 | 3.009 | 3 |
CIk | 0.003 | 0.001 | 0 | 0.005 | 0 |
当 n = 3 n=3 n=3时, R I = 0.58 {RI}=0.58 RI=0.58, C I k {CI}_k CIk均可通过一致性检验。
第三层权向量矩阵为: W ( 3 ) = ( w 1 ( 3 ) , w 2 ( 3 ) , w 3 ( 3 ) , w 4 ( 3 ) , w 5 ( 3 ) ) W^{(3)}={(w_1^{(3)},w_2^{(3)},w_3^{(3)},w_4^{(3)},w_5^{(3)})} W(3)=(w1(3),w2(3),w3(3),w4(3),w5(3))
W ( 3 ) = [ 0.595 0.082 0.43 0.633 0.17 0.277 0.236 0.43 0.193 0.17 0.129 0.682 0.14 0.175 0.67 ] W^{(3)}=\begin{bmatrix} {0.595}&{0.082}&0.43&0.633&0.17\\ {0.277}&{0.236}&0.43&0.193&0.17\\ 0.129&0.682&0.14&0.175&0.67\\ \end{bmatrix} W(3)=⎣⎡0.5950.2770.1290.0820.2360.6820.430.430.140.6330.1930.1750.170.170.67⎦⎤
那么方案层对于目标层的组合权向量为 w ( 3 ) = W ( 3 ) . w ( 2 ) = ( 0.300 , 0.246 , 0.456 ) T w^{(3)}=W^{(3)}.w^{(2)}={(0.300,0.246,0.456)}^{T} w(3)=W(3).w(2)=(0.300,0.246,0.456)T,由此可知,根据层次分析法得到的三个旅游地的定量比较结果,C地0.456 高于A地0.300 又高于B地0.246,所以结果是去C地游玩。
在本例子中,采用的层次分析法是3 层,如果更为一般的是s 层的话,最终组合权向量的求法就是 w ( s ) = W ( s ) ⋅ W ( s − 1 ) ⋯ W ( 3 ) ⋅ w ( 2 ) w^{(s)}=W^{(s)}\cdot W^{(s-1)}\cdots W^{(3)}\cdot w^{(2)} w(s)=W(s)⋅W(s−1)⋯W(3)⋅w(2),其中 W ( j ) W^{(j)} W(j)就是第j 层对于第j-1 层的权向量组成的权向量矩阵。
层次分析法步骤
- 建立层次分析结构模型:深入分析实际问题,进行分层,其中上层受下层影响,而层内基本相互独立;
- 构造成对比较阵:用1~9尺度构造各层对上一层每个因素的成对比较阵;
- 计算权向量并作一致性检验:对每一个成对比较阵计算最大特征根和其对应的特征向量。若通过一致性检验,则令此特征向量为权向量;
- 计算组合权向量:计算出组合权向量可以作为决策的定量依据。
代码实现
RI
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 | 1.49 |
一致性检验
clear all
clc
A=[1/1 1/2 4/1 3/1 3/1
2/1 1/1 7/1 5/1 5/1
1/4 1/7 1/1 1/2 1/3
1/3 1/5 2/1 1/1 1/1
1/3 1/5 3/1 1/1 1/1]; %判断矩阵
[V,D]=eig(A); %计算特征向量V和特征值D:A*V=V*D
[lambda, i]=max(diag(D)); %最大特征值lambda及其位置i
CI=(lambda-5)/(5-1); %一致性指标
CR=CI/1.12 %一致性比例=0.0161
层次单排序
clear all
clc
A=[1/1 1/2 4/1 3/1 3/1
2/1 1/1 7/1 5/1 5/1
1/4 1/7 1/1 1/2 1/3
1/3 1/5 2/1 1/1 1/1
1/3 1/5 3/1 1/1 1/1]; %判断矩阵
[V,D]=eig(A); %计算特征向量V和特征值D:A*V=V*D
[lambda, i]=max(diag(D)); %最大特征值lambda及其位置i
W=V(:,i); %最大特征值对应的特征向量
w=W/sum(W) %归一化=[0.2636,0.4758,0.0538,0.0981,0.1087]'
计算组合权向量(层次总排序)
clear;clc
A=[1/1 1/2 4/1 3/1 3/1;2/1 1/1 7/1 5/1 5/1
1/4 1/7 1/1 1/2 1/3;1/3 1/5 2/1 1/1 1/1
1/3 1/5 3/1 1/1 1/1]; %判断矩阵
[w,CI,CR,lambda]=ahp(A)
B2=[1/1 1/3 1/8;3/1 1/1 1/3;8/1 3/1 1/1];
[w1,CI1,CR1,lambda1]=ahp(B2)
function [w,CI,CR,lambda]=ahp(A)
RI=[0.00 0.00 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49];
n=size(A,1);
[V,D]=eig(A);
[lambda,i]=max(diag(D));
CI=(lambda-n)/(n-1);
CR=CI/RI(n);
W=V(:,i);
w=W/sum(W);
这里解出来的 w 1 w1 w1便是 w 2 ( 3 ) w_2^{(3)} w2(3),并检验了一致性。其他计算同理。
经典案例
挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型如下:
准则层的判断矩阵如表所示:(n个准则就是n*n矩阵)
A A A | B 1 B_1 B1 | B 2 B_2 B2 | B 3 B_3 B3 | B 4 B_4 B4 | B 5 B_5 B5 | B 6 B_6 B6 |
---|---|---|---|---|---|---|
B 1 B_1 B1 | 1 | 1 | 1 | 4 | 1 | 1 2 \frac {1}{2} 21 |
B 2 B_2 B2 | 1 | 1 | 2 | 4 | 1 | 1 2 \frac {1}{2} 21 |
B 3 B_3 B3 | 1 | 1 2 \frac {1}{2} 21 | 1 | 5 | 3 | 1 2 \frac {1}{2} 21 |
B 4 B_4 B4 | 1 4 \frac {1}{4} 41 | 1 4 \frac {1}{4} 41 | 1 5 \frac {1}{5} 51 | 1 | 1 3 \frac {1}{3} 31 | 1 3 \frac {1}{3} 31 |
B 5 B_5 B5 | 1 | 1 | 1 3 \frac {1}{3} 31 | 3 | 1 | 1 |
B 6 B_6 B6 | 2 | 2 | 2 | 3 | 3 | 1 |
方案层的判断矩阵如表所示。(n个准则就要有n个方案)
B1 | C1 | C2 | C3 | B2 | C1 | C2 | C3 |
---|---|---|---|---|---|---|---|
C1 | 1 | 1/4 | 1/2 | C1 | 1 | 1/4 | 1/5 |
C2 | 4 | 1 | 3 | C2 | 4 | 1 | 1/2 |
C3 | 3 | 1/3 | 1 | C3 | 5 | 2 | 1 |
B3 | C1 | C2 | C3 | B4 | C1 | C2 | C3 |
C1 | 1 | 1/3 | 5 | C1 | 1 | 1 | 7 |
C2 | 3 | 1 | 7 | C2 | 1 | 1 | 7 |
C3 | 1/5 | 1/7 | 1 | C3 | 1/7 | 1/7 | 1 |
层次总排序的结果如表 6 所示:
准则 |
研究 课题 |
发展 前途 |
待遇 |
同事 情况 |
地理 位置 |
单位 名气 |
总排序权值 |
|
---|---|---|---|---|---|---|---|---|
准则层权值 | 0.1507 | 0.1792 | 0.1886 | 0.0472 | 0.1464 | 0.2879 | ||
方案层 | 工作1 | 0.1365 | 0.0974 | 0.2426 | 0.2790 | 0.4667 | 0.7986 | 0.3952 |
单排序 | 工作2 | 0.6250 | 0.3331 | 0.0879 | 0.6491 | 0.4667 | 0.1049 | 0.2996 |
权值 | 工作3 | 0.2385 | 0.5695 | 0.6694 | 0.0719 | 0.0667 | 0.0965 | 0.3052 |
根据层次总排序权值,得到该生最满意的工作为工作 1。
代码实现
clc,clear
fid=fopen('txt3.txt','r'); %读取文件
n1=6;n2=3;
a=[];
%读取判断矩阵
for i=1:n1 tmp=str2num(fgetl(fid)); %str2num将字符数组或字符串转换为数值数组%fgetl读取文件中的行,并删除换行符a=[a;tmp]; %读准则层判断矩阵
end
for i=1:n1 %C = char(A) 将数组 A 转换为字符数组。%int2str将整数转换为字符str1=char(['b',int2str(i),'=[];']);str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']); %eval计算 MATLAB 表达式eval(str1); for j=1:n2 %str2num将字符数组或字符串转换为数值数组tmp=str2num(fgetl(fid)); eval(str2); %读方案层的判断矩阵end
end
ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
[x,y]=eig(a);
lamda=max(diag(y));
%find查找非零元素的索引和值
%diag创建对角矩阵或获取矩阵的对角元素
num=find(diag(y)==lamda);
w0=x(:,num)/sum(x(:,num));
cr0=(lamda-n1)/(n1-1)/ri(n1)
for i=1:n1 %eig特征值和特征向量[x,y]=eig(eval(char(['b',int2str(i)]))); lamda=max(diag(y)); num=find(diag(y)==lamda); w1(:,i)=x(:,num)/sum(x(:,num)); cr1(i)=(lamda-n2)/(n2-1)/ri(n2);
end
cr1, ts=w1*w0, cr=cr1*w0
写入txt3.txt的数据格式
1 1 1 4 1 1/2
1 1 2 4 1 1/2
1 1/2 1 5 3 1/2
1/4 1/4 1/5 1 1/3 1/3
1 1 1/3 3 1 1
2 2 2 3 3 1
1 1/4 1/2
4 1 3
2 1/3 1
1 1/4 1/5
4 1 1/2
5 2 1
1 3 1/3
1/3 1 1/7
3 7 1
1 1/3 5
3 1 7
1/5 1/7 1
1 1 7
1 1 7
1/7 1/7 1
1 7 9
1/7 1 1
1/9 1 1
练习训练
A = [ 1 1 4 6 4 1 5 1 6 1 5 1 ] A=\begin{bmatrix} {1}&{\frac{1}{4}}&6\\ {4}&{1}&5\\ {\frac{1}{6}}&\frac{1}{5}&1\\ \end{bmatrix} A=⎣⎡146141151651⎦⎤
(1)试着对 A 进行一致性检验
(2)如 A 的非一致性较严重,应如何作修正
参考文献
1、层次分析法原理及计算过程详解 - 子木的文章 - 知乎
https://zhuanlan.zhihu.com/p/266405027
2、数模系列(1):层次分析法 - 00木水的文章 - 知乎
https://zhuanlan.zhihu.com/p/32662422
【数学建模】层次分析法相关推荐
- 数学建模——层次分析法Python代码
数学建模--层次分析法Python代码 import numpy as np class AHP: """ 相关信息的传入和准备 """ d ...
- 数学建模层次分析法例题及答案_斩获国际特等奖!兰理工数学建模团队为百年校庆献礼...
近日,2019年美国大学生数学建模竞赛(MCM-ICM)成绩正式公布. 兰州理工大学数学建模团队再创佳绩,分别获得国际特等奖(Outstanding Winner)1项.一等奖(Meritorious ...
- [清风数学建模]层次分析法(AHP)笔记及代码实现
本文章是学习清风老师数学建模视频后所做的笔记,其中一些图片及代码实现来源于清风老师的B站视频: [强烈推荐]清风:数学建模算法.编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilib ...
- 数学建模 --- 层次分析法(AHP模型)
层次分析法 评价类问题 该问题思路 选出相关指标,求各个指标之间的权重 和 对某个指标而言各个选择权重(分而治之思想) 计算每个方案的得分 层次分析法 层次分析法第一步 --- 层次结构图 层次分析法 ...
- 数学建模 层次分析法
层次分析法介绍 层次分析法是对一些较为复杂而且模糊的问题做出分析的一种简易方法,它适用于解决难以完全定量的问题. 该方法在数学建模中运用较多,但是主观因素很大,特别是构造成对比较矩阵的时候,必须要有完 ...
- 数学建模层次分析法一致性检验建立
2023年2月11日,备赛美赛复习建模需要使用的算法.在复习层次分析法的过程可以发现,层次分析法建立判断矩阵时具有强主观性,这个时候就需要建立一致性检验,对模型的差异性进行评估. 计算一致性比例: ...
- 数学建模-层次分析法
决策 层次分析法原理 相对重要权值的确定 算法步骤 目标层 准则层 方案层 层次分析法解决旅游问题 B1~B5表示 5个属性对于三地的各个重要性 通过层次分析矩阵 得到 各个属性相对于目标的权重. 最 ...
- 数学建模|层次分析法笔记
一.什么是层次分析法? 定义: 由目标.方案.指标三部分组成. 框架图: 1.含子准则: 2.方案多种(方案交叉): 3.一对多(一准则多方案,方案不交叉): 二.层次分析法如何设计? 层次分析法步 ...
- 数学建模层次分析法例题及答案_【热门推荐】影响力意志力创新力、数学建模简明教程...
<影响力•意志力•创新力> 索书号:B848.4-49/1028 作者:邢群麟编著 出版社:浙江工商大学出版社,2018 馆藏地:新馆304室 简介:本书在总结众多成功人士经验的基础上, ...
- 数学建模 层次分析法 python计算权重
这里用python语言来计算判断矩阵的权重,网上大部分是matlab语言,里面也包含一致性检验的函数,具体各函数使用方法详见代码注释的部分 import numpy as np a=np.array( ...
最新文章
- java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
- 以下属于linux文件系统认为的文件是,信息安全技术题库:在Linux系统中,图形文件、数据文件、文档文件等都属于()。...
- 一个程序员的逗逼瞬间(二)
- 遇到这个工具前我都是建议文章写好就先投Cell?
- 怎么创建python django项目_创建Django项目图文实例详解
- DB2存储过程中的ATOMIC关键字
- 暴风集团:冯鑫因涉嫌对非国家工作人员行贿被公安机关拘留
- Linux -- 基于zookeeper的java api(二)
- JS生成随机的字母数字组合的字符串
- 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day01~day10)
- 【2021-07最新可用】解决谷歌地球、Google地球、Google Earth Pro无法正常启动:启动一直转圈圈、无法链接到登录服务器 、显示黑屏地图无法加载 、软件无法启动双击图标没反应等
- ESP8266固件烧录软件flash_download_tools的安装过程
- 图片格式如何批量转换成jpg呢?
- 国产AIoT SoC芯片
- 如何区分加密、压缩、编码?
- 离散型最值的期望计算
- DIY装机之显示器(苹果显示器参数)
- java 汉字是多少字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...
- 基于stm32及LM041L的对角棋游戏
- RF连接Mysql数据库
热门文章
- win10 无法连接打印机 报0x00000520错误解决办法!
- python 爬取王者壁纸
- 制作单词记录App(一)
- Partial Dependence and Individual Conditional Expectation plots
- mysql分布式事务wcf_WCF系列_分布式事务(下)
- 深圳市员工工资支付条例
- 语音合成接口整理_各平台语音合成接口
- 重要开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
- 大数据审计的发展_大数据时代的审计发展趋势
- 爬虫实战1:爬取豆瓣top250电影