数学建模学习笔记(1):层次分析法(AHP)(附有详细使用步骤)
评价类问题是指从多个评价对象中选择出最优者或对多个评价对象进行优先级排序。解决评价类问题可以通过打分的方式进行。每一个评价都有可能有多个不同的评价指标,而不同评价指标的权重往往不相同,因此需要科学地确定不同指标的权重,所有指标的权重之和为1。......
层次分析法概述
层次分析法是由美国运筹学家T.L.Saaty于20世纪七十年代创立的一种系统分析与决策的综合评价方法,是在充分研究了人类思维过程的基础上提出的较为合理的解决定性问题定量化的处理过程。
层次分析法的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因素两两之间的重要度的比较上,从而把难于量化的定性判断转化为可操作的重要度的比较上面。在许多情况下,决策者可以直接使用层次分析法进行决策,极大提高了决策的有效性、可靠性和可行性,但其本质是一种思维方式,它把复杂问题分解成多个组成因素,又将这些因素按支配关系分别形成递阶层次结构,通过两两比较的方法确定决策方案相对重要度的总排序。
评价类问题概述
- 概念:评价类问题是指从多个评价对象中选择出最优者或对多个评价对象进行优先级排序。
- 解决方法:解决评价类问题可以通过打分的方式进行。
- 评价指标的权重:每一个评价都有可能有多个不同的评价指标,而不同评价指标的权重往往不相同,因此需要科学地确定不同指标的权重,所有指标的权重之和为1。
评价类问题的三要素
- 首先确定评价的目标是什么;
- 接着确定有哪些可以选择的评价对象;
- 最后需要确定有哪些评价指标。
在实际情况中,评价指标往往没有事先确定,因此需要自行确定评价指标。
评价指标的确定方法有:根据问题的背景材料、生活常识以及相关资料的查找。
通过查找资料确定评价指标时,首先查找知网、万方和百度学术等专业平台,接着再查找其他资料。一个好用的查找引擎是虫部落。
在确定影响某因素的诸因子在该因素终所占的比重时,遇到的主要困难是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各个因子对该因素有多大程度的影响时,常常会因为考虑不周全、顾此失彼而使决策者剔除与他实际认为的重要性程度不相一致的数据,甚至有可能剔除一组隐含矛盾的数据。
——司守奎《数学建模算法与应用教材》
层次分析法步骤(重点)
层次分析法的核心思想就是由于同时确定多个指标的权重或不同方案的指标得分不方便,因此需要通过两个指标或不同方案同一指标之间两两比较的方法来确定各自的权重。
(以下步骤均假设评价对象和评价指标都已经完全确定)
- 作出层次结构图:根据所选定的评价对象和评价指标作出层次结构图,图中包含目标层、准则层和方案层三个要素,如下图所示:
- 作出指标判断矩阵:假设共有N个评价指标,则首先建立一个N×N的方阵,称为判断矩阵。方阵的每一行和每一列均表示一个指标。方阵中第i行第j列的元素表示的是第i个评价指标相对于第j个评价指标的重要程度,可以取1-9之间的整数或它们的倒数。后面的步骤中可以通过这个矩阵获取每个指标的权重。
备注:在实际应用中,判断矩阵的元素是“由相关专家填写”,但是在建模比赛中只能依靠自身进行填写。因此推荐不加说明地直接给出判断矩阵。
正互反矩阵:线性代数中的一个概念。该矩阵中第j行第i列的元素和第i行第j列的元素互为倒数,因此称该矩阵为正互反矩阵。矩阵对角线上的元素均为1。
- 作出得分判断矩阵:假设共有M个评价方案,则对于每一个指标,都需要建立一个M×M的方阵,同样也称为判断矩阵。方阵的每一行与每一列均表示一个方案,第i行第j列的元素表示第i个方案在该指标下相对于第j个方案的满意程度,同样只能取1-9之间的整数或它们的倒数。该方阵的性质与指标判断矩阵的性质相同。后面的步骤中可以通过这些方阵计算不同方案在该指标下的得分。
- 对每一个判断矩阵进行一致性检验和调整:由于上面步骤填写的判断矩阵可能存在互相矛盾的地方,因此需要检验判断矩阵的矛盾程度,也就是进行判断矩阵的一致性检验(一般情况下很少出现完全理想的一致矩阵):
备注:实际建模过程中,最好不要直接给出一个一致性矩阵,这样就显得太假了一些。
①计算判断矩阵的一致性指标CI:CI=(最大特征值-n)/(n-1),其中n为矩阵的阶数。
②查表得到平均随机一致性指标RI:通过下表,确定n在一定取值时的平均随机一致性指标RI:
备注:实际情况中n一般不超过10,对于n超过10的情况可以考虑使用多级评价体系进行评价。
③最后计算一致性比例CR:CR=CI/RI。
如果CR<0.1,则认为矩阵的一致性可以接受;否则需要对矩阵进行一定程度的修正调整。
修正的方向:一致性比例为0的矩阵称为一致矩阵,其各行各列之间呈倍数关系。修正的方向即将不一致矩阵尽可能朝该方向进行转化。
- 计算指标权重和不同方案的指标得分:
首先需要对权重进行归一化:将矩阵中的每一个元素除以其所在列的元素之和即得到归一化后的元素。
对于一致矩阵,进行归一化后的矩阵中任意一列的元素即代表不同指标的权重或不同方案对于某一指标的得分;对于非一致矩阵,则需要进行下面的处理:
①算术平均法:对进行归一化后的矩阵中各列权重取算术平均值作为最终的权重。
②几何平均法:对进行归一化后的矩阵中各列权重取几何平均值作为最终的权重。
③特征值法:首先求出判断矩阵的最大特征值和对应的特征向量,然后对该特征向量进行归一化即可得到最终的权重。(该方法在建模比赛中使用最多)
备注:实际使用中,出于对模型的稳健性考虑,建议同时使用三种方法并取平均值。
- 列出最终的得分表格并计算最终的得分:
表格的第一列表示所有评价指标,第二列为所有指标的对应权重,后面的各列分别表示一个评价方案。
根据不同指标的权重和各个评价方案在某个指标上的得分计算最终的方案得分并进行排序比较即可。
层次分析法局限性
- 层次分析法中可选的评价对象和评价指标个数都不能过多(最多不能超过15个,最好限制在10个以下);
- 如果在某些指标下已经存在一些客观数据可以用于评价的情况,则不适合使用层次分析法进行评价。
层次分析法拓展模型
- 一个指标下对应多个子指标的情况:使用多级的层次分析法进行逐级求解即可。
- 一个指标只对应一部分评价对象:将该指标不对应的评价对象的权重设置为0即可。
一些个人看法
层次分析法使用过程中可能遇到的问题:
- 确定评价指标:确定评价目标和可选评价方案总体不难,但是评价指标的选择需要根据题目背景、生活常识等,可能还需要查找资料,因此在查找资料方面可能会遇到一些问题。但是,由于指标个数越多,该方法在建模中使用的主观性越强,对后面结果的准确性影响越大,因此不建议使用太多的指标,所以只根据题目条件和生活常识确定指标也许也够了。
- 绘制算法流程图和层次结构图:这里需要使用亿图图示等软件进行绘图,但是总体难度应该不大。
- 当指标个数过多怎么办:此时需要使用多级层次分析法。首先可以使用聚类算法将原始指标划分到多个类中,然后再对每个类使用层次分析法。
- 层次分析法可以用于调整模型:例如当用熵权法或灰色关联分析求出权重后,可以用层次分析法对权重进行一定的修正,这样不仅增加了模型的丰富性,而且调整后的模型效果也会更好。
层次分析法本身的一些问题:
- 不推荐使用层次分析法确定权重:层次分析法可能应用的三个方面分别是:进行评价、确定权重和指标筛选。但是,由于实际建模过程中所有的判断矩阵都是由自己构建,因此具有很强的主观性和很大的误差,而用其确定权重需要使用计算结果进行后续计算,会更加影响后续计算结果,因此不推荐使用层次分析法确定权重。
- 不推荐使用层次分析法进行指标筛选:关于指标筛选,完全可以使用更好的方法(如Lasso回归)或查找资料进行指标筛选,因为层次分析法的主观性太强,说白了使用层次分析法差不多还是在进行主观筛选,因此不推荐使用层次分析法进行指标筛选。
- 何时使用层次分析法:当我们只能主观地从多个方案中选出最好的(层次分析法的基本模型),或者只能主观地确定指标的权重时才使用,否则尽可能不使用层次分析法。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)