【数学建模】层次分析法

引例

就拿旅游来讲吧,有3个目的地(A,B,C)在你的旅游清单上,但是由于你精力有限,你只能选择其中一个。而等下讲的层次分析法,便能很好地解决这种问题。

层次分析法介绍

首先我们的目标就是选择一个要去的旅游地,而我们在选择过程中会考虑一些参考准则,比如景色,费用,居住,饮食和旅途等因素。而我们要选择的有三个方案:A、B、C三地。
旅游层次图
上图是用visio画出来的描述。其为层次分析法的框架。

成对比较阵和一致性检验

分别成对地比较各个准则D1,D2,D3,D4,D5对于目标G的重要程度。对于重要程度的评判标准给出下面1~9尺度表。

尺度 a i j a_{ij} aij123456789
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=aikakj。 比如说D2费用是D1景色的重要度的2倍,而D1景色是D3 居住重要度的4倍,如果一致的话D2费用是D3居住重要度的8倍,这里给出的矩阵A是不一致的,为7倍。

这种不一致是有一定的允许范围的,需要做一致性检验。

  • n阶正互反阵的最大特征根 λ m a x ≥ n \lambda _{max}\geq n λmaxn,当 λ 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=n1λmaxn C I CI CI 越小,就越一致。那么怎样衡定越小呢?这里进一步引入随机一致性指标记作 R I RI RI(用计算机随机模拟得到矩阵A。计算出的 C I CI CI 即为 R I RI RI), R I RI RI的值列表如下:

n12345678910
RI000.580.901.121.241.321.411.451.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个权向量列出下表。

k12345

wk3

0.5950.0820.430.6330.17
0.2770.2360.430.1930.17
0.1290.6820.140.1750.67
λmaxk3.0053.00233.0093
CIk0.0030.00100.0050

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(s1)W(3)w(2),其中 W ( j ) W^{(j)} W(j)就是第j 层对于第j-1 层的权向量组成的权向量矩阵。

层次分析法步骤

  • 建立层次分析结构模型:深入分析实际问题,进行分层,其中上层受下层影响,而层内基本相互独立;
  • 构造成对比较阵:用1~9尺度构造各层对上一层每个因素的成对比较阵;
  • 计算权向量并作一致性检验:对每一个成对比较阵计算最大特征根和其对应的特征向量。若通过一致性检验,则令此特征向量为权向量;
  • 计算组合权向量:计算出组合权向量可以作为决策的定量依据。

代码实现

RI

n12345678910
RI000.580.901.121.241.321.411.451.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 B111141 1 2 \frac {1}{2} 21
B 2 B_2 B211241 1 2 \frac {1}{2} 21
B 3 B_3 B31 1 2 \frac {1}{2} 21153 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} 511 1 3 \frac {1}{3} 31 1 3 \frac {1}{3} 31
B 5 B_5 B511 1 3 \frac {1}{3} 31311
B 6 B_6 B6222331

方案层的判断矩阵如表所示。(n个准则就要有n个方案)

B1
C1C2 C3B2
C1C2 C3
C1 1 1/4 1/2C1 1 1/4 1/5
C2 413C2 411/2
C3 31/31C3 521
B3
C1 C2 C3B4
C1 C2 C3
C1 1 1/35C1 1 17
C2 317C2117
C3 1/51/71C3 1/71/71

层次总排序的结果如表 6 所示:

准则研究
课题
发展
前途
待遇同事
情况
地理
位置
单位
名气


总排序权值
准则层权值0.15070.17920.18860.04720.14640.2879
方案层工作10.13650.09740.24260.27900.46670.79860.3952
单排序工作20.62500.33310.08790.64910.46670.10490.2996
权值工作30.23850.56950.66940.07190.06670.09650.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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
层次分析法(AHP)是一种常用的多准则决策分析方法。其基本思想是将复杂的决策问题分解成多个层次,对每个层次进行比较和判断,最终得出总体评价。 以下是一个使用AHP进行决策分析的例题及答案: 例题: 某公司需要购买一台新机器,该机器有3个品牌可供选择,分别为品牌A、B、C。决策者需要考虑3个因素来选择最佳品牌:价格、质量和售后服务。这3个因素对决策的重要性不同,价格的重要性为0.5,质量的重要性为0.3,售后服务的重要性为0.2。请使用层次分析法帮助决策者做出最佳选择。 答案: 第一步:构建层次结构 层次结构如下: - 目标:选择最佳品牌 - 准则层:价格、质量、售后服务 - 方案层:品牌A、品牌B、品牌C 第二步:构建判断矩阵 根据决策者对各个准则的重要性,构建判断矩阵如下: $$\begin{matrix} &价格& 质量 &售后服务 \\ 价格&1&3&5\\ 质量&\frac{1}{3}&1&3\\ 售后服务&\frac{1}{5}&\frac{1}{3}&1 \end{matrix}$$ 根据判断矩阵可以得到每个准则的权重向量,如下: $$W=[0.476,0.301,0.223]$$ 第三步:计算各个方案的得分 对于每个方案,需要比较其在每个准则上的相对优劣。由于价格重要性最高,因此需要将价格列作为基准列,计算其他列相对于价格列的权重。得到判断矩阵如下: $$\begin{matrix} &价格& 质量 &售后服务 \\ 品牌A&1&3&5\\ 品牌B&\frac{1}{3}&1&3\\ 品牌C&\frac{1}{5}&\frac{1}{3}&1 \end{matrix}$$ 通过计算,可以得到每个方案在各个准则上的得分,如下表所示: $$\begin{matrix} &价格& 质量 &售后服务 &总得分 \\ 品牌A&1&0.774&0.725&2.499\\ 品牌B&3&1&0.867&4.867\\ 品牌C&5&1.155&1&7.155 \end{matrix}$$ 因此,品牌C是最佳选择。 第四步:检验一致性 在层次分析法中,需要检验判断矩阵的一致性,以确保分析结果的可靠性。这里不再详细介绍如何检验一致性,有兴趣的读者可以参考相关资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰之光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值