matlab自学算法第一篇:层次分析法

2021/9/20 9:34:57

本文主要是介绍matlab自学算法第一篇:层次分析法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

记录自己学习过程的一篇博客(根据B站清风老师的课程所学所感。自己水平不高,希望各方大佬指点错误)

先介绍一下,层次分析法(The Analytic Hierarchy Process简称 AHP)是由美国运筹学家、匹兹堡大学教授T.L.Saaty(萨蒂)于20世纪70年代创立的一种系统分析与决策的综合评价方法,是在充分研究了人类思维过程的基础上提出来的,它较合理地解决了定性问题定量化的处理过程。

AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作的重要度的比较上面。在许多情况下,决策者可以直接使用AHP进行决策,极大地提高了决策的有效性、可靠性和可行性,但其本质是一种思维方式,
将复杂问题分解,又将这些分解后的复杂问题按支配关系分别形成递阶层次结构,通过两两比较的方法确定决策方案相对重要度的总排序。整个过程体现了人类决策思维的基本特征。

优点:将复杂问题分解并进行判断与综合,不仅克服了决策者主观判断的缺点,也大大提高了解决问题的效率。

在matlab中,层次分析法主要解决评价类问题。

解决评价类问题,大家首先要想到以下三个问题:

1、我们为什么要评价它,即我们评价的目标是什么?

2、我们为了达到这个目标有几种可选的方案?

3、我们评价这几个方案的标准是什么?

可以用图示方便理解:

 (这里的准则层与方案层之间不一定是一对多或多对多的关系,按照具体情况具体分析)

这里要注意:准则层不易确定,在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各因子对该因素有多大程度的影响时,常常会因考虑不周全、顾此失彼而使决策者提出与他实际认为的重要性程度不相一致的数据,甚至有可能提出一组隐含矛盾的数据。

 

介绍完层次分析法的主要流程后,我们主要解决我们要如何以比较客观的数据来判断哪种方案最优,接着我们要引入一致矩阵的概念:

若矩阵中每个元素且满足,则我们称该矩阵为正互反矩阵。

在层次分析法中,我们构造的判断矩阵均是正互反矩阵。

若正互反矩阵(判断矩阵)满足,则我们称其为一致矩阵
注意:在使用判断矩阵求权重之前,必须对其进行一致性检验。

一致性检验:是指对由不同样本计算的各平均值或方差进行检验,即检验我们构造的判断矩阵和一致矩阵是否有太大的差别

矩阵一致矩阵的充要条件

(注意:A为n阶方阵,且r(A)=1,则A有一个特征值为tr(A),其余特征值均为0.因为一致矩阵的各行成比例且不是零矩阵,所以一致矩阵的秩一定为1. )

一致性检验的步骤:

1、计算一致性指标Cl:

 

2、 查找对应的平均随机一致性指标RI

 (需要注意的是:在实际运用中,n很少超过10,如果指标的个数大于10,则可考虑建立二级指标体系,或使用模糊综合评价模型。) 

3、计算一致性比例CR

 注意:在用matlab软件中计算特征值时,如果特征值中有虚数,则比较的是特征值的模长。

 如果CR<0.1,则可认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。

但是CR > 0.1 如何修正?只需要往一致矩阵上调整一致矩阵各行成倍数关系

如果得出的一致矩阵检验一致性通过后就可以进行求权重了:

一般求权重有三种方法:1、算术平均法求权重;2、几何平均法求权重;3、特征值法求权重

(大家在进行数学建模比赛中使用特征值法用的比较多,那我在这篇文章里也仅记录特征值法吧,但是大家在进行比赛的时候,论文中最好三种方法都用一下,这样可以吸引老师眼球。)

特征值法求权重:

(假如我们的判断矩阵一致性可以接受,那么我们可以仿照一致矩阵权重的求法。)

1、求出矩阵A的最大特征值以及其对应的特征向量

2、对求出的特征向量进行归一化即可得到我们的权重

需要注意:在实际的论文写作中一致矩阵不需要进行一致性检验,只有非一致矩阵的判断矩阵才需要进行一致性检验,并且应该先进行一致性检验,通过检验后再计算权重。

最后根据权重矩阵计算各个方案层的数值,并进行排序,得到方案优解顺序。

这里要注意一下层次分析法的局限性:评价的决策层不能太多,太多的话n会很大,判断矩阵和一致矩阵差异可能会很大。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



这篇关于matlab自学算法第一篇:层次分析法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程