专栏文章(数学建模总结系列)
数学建模总结(一)——MATLAB快速入门
数学建模总结(二)——层次分析法的理解与运用
数学建模总结(三)——TOPSIS 优劣解距离法
tips:持续更新中
一、方法简介(背景综述)
评价类问题是数模比赛中较为常见的一种问题,而解决此类问题的常见方法之一便是层次分析法。
层次分析法(AHP)是美国运筹学家萨蒂于上世纪70年代初,为美国国防部研究“根据各个工业部门对国家福利的贡献大小而进行电力分配”课题时,应用网络系统理论和多目标综合评价方法,提出的一种层次权重决策分析方法。
层次分析法是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标之间能否实现的标准之间的相对重要程度,并合理地给出每个决策方案的每个标准的权数,利用权数求出各方案的优劣次序,比较有效地应用于那些难以用定量方法解决的课题。
这里我是引用的别人的关于层次分析法的简介,大家简单阅读即可,主要可以去阅读下面的文章和模型总结,
大家在学习时,可以先阅读笔者对一道例题的分析和论文中建模的部分,然后再去阅读方法总结,这样的学习效果可能会好一些。
二、例题分析
1.题目简介:
如果小明要购置一台电脑,需要考虑功能,价格,配置等因素,该如何做出选择?
2.题目分析:
根据层次分析法的分析过程,先确定评价的目标——给小明购置一台性价比高的电脑,可选的方案——游戏本,轻薄本,台式机,指标与准则——价格,性能与续航,外观与屏幕,功能
(只从比较宏观的角度去分类,不够权威也不够具体,由于时间的局限性,只做举例分析,让大家了解层次分析法的运用)
3.建模过程
(1)建立评价体系(目标层,准则层,方案层)
(2)构建判断矩阵(由于每个人的指标权重都不尽相同,我也就没有具体列出来,大家可以根据我所举的例子来自行填充和修改)
表1—A-B判断矩阵
A | B1 | B2 | B3 | B4 |
---|---|---|---|---|
B1 | ||||
B2 | ||||
B3 | ||||
B4 |
表2—B1-C判断矩阵
B1 | C1 | C2 | C3 |
---|---|---|---|
C1 | |||
C2 | |||
C3 |
表3—B2-C判断矩阵
B2 | C1 | C2 | C3 |
---|---|---|---|
C1 | |||
C2 | |||
C3 |
表4—B3-C判断矩阵
B3 | C1 | C2 | C3 |
---|---|---|---|
C1 | |||
C2 | |||
C3 |
表5—B4-C判断矩阵
B4 | C1 | C2 | C3 |
---|---|---|---|
C1 | |||
C2 | |||
C3 |
(3)进行一致性检验,确定判断矩阵的合理性
(4)利用算术平均法,几何平均法,特征值法求出三种的权重(取一个即可),得出最终的权重表格并计算得分(C1、C2、C3分别与B1、B2、B3、B4相乘再相加,所得的为最终的得分)
指标权重 | C1 | C2 | C3 | |
---|---|---|---|---|
B1 | ||||
B2 | ||||
B3 | ||||
B4 | ||||
总得分 |
(3)画层次结构图
(4)得出结论
根据所有方案的各自得分来确定最终方案
三、方法总结
1.评价类问题的考虑
(1)评价的目标——为了实现什么或者为了满足什么的要求
(2)可选的方案——为了达成这个目标有哪些可选的方案
(3)指标与准则——每一个方案的评价准则或指标是什么,最终形成的评价体系是什么
注:可选的方案与评价指标可以去网站上找比较官方的回答
2.层次分析法的步骤
(1)确定解决问题的方案,以及每种方案的评价指标,形成一个权重表格
指标权重 | 方案1 | 方案2 | 方案3 |
---|---|---|---|
指标1 | |||
指标2 | |||
指标3 | |||
指标4 |
(2)根据所查阅的资料来完善权重表格。由于在实际问题当中,方案和指标数量比较多,不可能一次填写其权重,因此就涉及到层次分析法的思想——分而治之,逐层比较
标度 | 含义 |
---|---|
1 | 表示两个因素相比,具有同样重要性 |
3 | 表示两个因素相比,一个因素比另一个因素稍微重要 |
5 | 表示两个因素相比,一个因素比另一个因素明显重要 |
7 | 表示两个因素相比,一个因素比另一个因素相当重要 |
9 | 表示两个因素相比,一个因素比另一个因素极其重要 |
2、4、6、8 | 上述两相邻判断的中值 |
倒数 | A与B相比为2,则B与A相比为1/2 |
注:重要性的描述词可能不是很准确,大家在使用的过程中自己把握判断的准则
(3)基于层次分析法的思想,来构建判断矩阵
标度 | 指标1 | 指标2 | 指标3 | 指标4 |
---|---|---|---|---|
指标1 | 1 | 1/2 | 4 | 3 |
指标2 | 2 | 1 | 7 | 5 |
指标3 | 1/4 | 1/7 | 1 | 1/2 |
指标4 | 1/3 | 1/5 | 3 | 1 |
<1>上表为4*4的方阵,记为A,对应的元素为aij
<2> 𝑎ij表示的意义是,与指标 j 相比,i 的重要程度
<3>当 i = j 时,两个指标相同,因此同等重要记为1,因而主对角线元素为1
<4> 𝑎ij > 0且满足𝑎ij * 𝑎ji = 1 (我们称满足这一条件的矩阵为正互反矩阵)
(4)一致矩阵与一致性检验
<1>一致矩阵:判断矩阵的各行各列成倍数关系
<2>当在两两比较,填写指标的标度时,会出现A>B,B>C,C>A的不一致现象,因此在使用判断矩阵求权重之前,必须要进行一致性检验
<3>一致性检验的步骤:
clc
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
<4>一致矩阵和判断矩阵计算权重的方法:
- 算术平均法:
% 第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)
Sum_A = sum(A)
[n,n] = size(A)
SUM_A = repmat(Sum_A,n,1)
% 第二步:将归一化的各列相加(按行求和)
sum(Stand_A,2)
% 第三步:将相加后得到的向量中每个元素除以n即可得到权重向量
disp('算术平均法求权重的结果为:');
disp(sum(Stand_A,2) / n)
- 几何平均法:
% 第一步:将A的元素按照行相乘得到一个新的列向量
clc;A
Prduct_A = prod(A,2)% prod函数为乘函数
% 第二步:将新的向量的每个分量开n次方
Prduct_n_A = Prduct_A .^ (1/n)
% 第三步:对该列向量进行归一化即可得到权重向量
disp('几何平均法求权重的结果为:');
disp(Prduct_n_A ./ sum(Prduct_n_A))
- 特征值法:
假设我们有一个n阶的矩阵A以及一个实数
λ
\lambda
λ,使得我们可以找到一个非零向量x,满足:Ax=
λ
\lambda
λx,则
λ
\lambda
λ是矩阵A的特征值,非零向量x是矩阵A的特征向量。
基于以上概念我们有特征值法求权重:
% 第一步:求出矩阵A的最大特征值以及其对应的特征向量
clc
[V,D] = eig(A)
%V是特征向量, D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
Max_eig = max(max(D))
D == Max_eig
[r,c] = find(D == Max_eig , 1)
% 第二步:对求出的特征向量进行归一化即可得到我们的权重
V(:,c)
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )
<5>画层次结构图(推荐使用Visio或亿图图示来画)