数学建模——层次分析法

前言

本文是笔者在B站的学习收获,B站教程:www.bilibili.com/video/BV1kC...

本文将通过案例详细介绍层次分析法,包括完整建模和编程(matlab编写)过程。

正文

介绍

层次分析法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标能否实现的标准之间的相对重要程度,并合理地给出每个决策方案的每个标准的权数,利用权数求出各方案的优劣次序,比较有效地应用于那些难以用定量方法解决的课题。

层次分析法的优点

(1)系统性。把所研究的问题看成一个 系统,按照分解、比较判断、综合分析的思维方式进行决策分析,也是实际中继机理分析方法、统计分析方法之后发展起来的又一个重要的系统分析工具。

(2)实用性。把定性与定量方法结合起来,能处理许多传统的优化方法无法处理的实际问题,应用范围广。而且将决策者和决策分析者联系起来,体现了决策者的主观意见,决策者可以直接应用它进行决策分析,增加了决策的有效性和实用性。

(3)简洁性。具有中等文化程度的人都可以学习掌握层次分析法的基本原理和步骤,计算也比较简便, 所得结果简单明确,容易被决策者了解和掌握。

层次分析法的局限性

局限性是粗略、 主观。首先是它的比较、判断及结果都是粗糙的,不适于精度要求很高的问题;

其次是从建 立层次结构图到给出两两比较矩阵,人的主观因素作用很大,使决策结果较大程度地依赖于决策人的主观意志,可能难以为众人所接受。

具体事例

问题:

现在有三个地方供旅游选择------苏杭、北戴河、桂林,应该如何选择?

求解:

1.建立层次结构模型

该结构层包括目标层准则层方案层

2.构造成对比较矩阵

使用1------9尺度构造成对比较矩阵

首先构造准则层的比较矩阵,即景色、费用、...、旅途相关性重要程度的权重矩阵,这一步很主观,因为矩阵是我们自己构造的,这里我构造的矩阵是A

然后构造准则层->方案层的比较矩阵,即在景色方面,这三个地方相比之下怎么样、在费用方面,这三个地方相比之下怎么样,...在旅途方面...最后构造出五个矩阵B1-B5

3.计算单排序权向量并做一致性检验

对每个成对比较矩阵计算最大特征值及其对应的特征向量,利用一致性指标、随机-致性指标和一致性比率做一致性检验。若检验通过,特征向量(归一化后)即为权向量;若不通过,需要重新构造成对比较矩阵。

实际操作就是把第二步得出的矩阵放入代码中,通过一致性检验则进行下一步,不通过则说明矩阵构造的不理想需要重新构建。matlab代码放在下面:

scss 复制代码
disp('请输入准则层判断矩阵A(n阶)');
A=input('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);
t=D(pos,pos);
disp('准则层特征向量w=');disp(w);disp('准则层最大特征根t=');disp(t);
         %以下是一致性检验
CI=(t-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 1.60 1.61 1.615 1.62 1.63];
CR=CI/RI(n);
if CR<0.10
    disp('此矩阵的一致性可以接受!');
    disp('CI=');disp(CI);
    disp('CR=');disp(CR);
else disp('此矩阵的一致性验证失败,请重新进行评分!');
end

使用方法

(1)构造判断矩阵A

(2)将下文代码复制粘贴到Matlab中即可

例如:A=[1 3 5;0.33 1 3;0.2 0.33,1]

代码中的步骤就是根据输入的矩阵计算出最大特征值和其对应的特征向量,然后把特征向量归一化处理,利用最大特征值和矩阵的维数求出CI值,RI是固定的,根据矩阵维数拿出对应的RI,CI/RI求出CR,如果CR<0.1则通过一致性检验。

运行代码可以得到归一化的特征向量,以A矩阵为例,求出w(特征向量)、入(最大特征根)、CI、RI。

多次运行,再分别带入B1-B5,最后得出

并且都通过了一致性检验

4.计算总排序权向量并做一致性检验

苏杭的得分为A矩阵得出的特征向量和wk1行元素对应相乘:

(这里一些值和上面A矩阵的求出来的特征向量不太一致,但是很接近。原因在于A矩阵那个是在我自己的matlab上面运行的,这个里面的图片是我截的听课时候的图,所以有细微差别,但是不影响结果,毕竟学懂了就行。)

同样的道理可以求出北戴河和桂林的得分:0.2460.456

然后再进行一致性检验,这时候的检验方法为:一个分数,分子是A矩阵得出的特征向量和CIk行元素对应相乘,分母是A矩阵得出的特征向量和RIk行元素对应相乘,结果与0.1比较:

通过一致性检验,所以进行下一步。

根据得分情况算出桂林>苏杭>北戴河,所以最后的决策是选择桂林作为旅游目的地。

相关推荐
2301_764441331 小时前
Python构建输入法应用
开发语言·python·算法
AI科技星1 小时前
为什么变化的电磁场才产生引力场?—— 统一场论揭示的时空动力学本质
数据结构·人工智能·经验分享·算法·计算机视觉
TheLegendMe2 小时前
贪心+线程安全单例
算法·哈希算法
豐儀麟阁贵2 小时前
8.5在方法中抛出异常
java·开发语言·前端·算法
胖咕噜的稞达鸭3 小时前
算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串
数据库·redis·算法
小青龙emmm3 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法
WolfGang0073213 小时前
代码随想录算法训练营Day28 | 509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯
算法
Boop_wu3 小时前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法
闻缺陷则喜何志丹4 小时前
【SOSDP模板 容斥原理 逆向思考】3757. 有效子序列的数量|分数未知
c++·算法·力扣·容斥原理·sosdp·逆向思考
CoovallyAIHub4 小时前
如何在手机上轻松识别多种鸟类?我们发现了更简单的秘密……
深度学习·算法·计算机视觉