目录

1概述

2算法实现流程

3实例

4matlab实现层次分析法

5计算结果


1概述

层次分析法,简称AHP,是评价模型中的一种算法,指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。层次分析法的缺陷在于判断矩阵是主观决定的,无法得到一个客观的评价,且指标的数量不可过多(不可大于15)。本文将展示使用层次分析法实现对旅游城市的选取。

matlab是建模的主流,其次为python,R等,matlab相较于python会更加方便,因为自带了很多函数,而python需要自己下载需要的库。但matlab缺陷在于软件过大,启动速度慢。但众所周知,matlab除了不能生孩子,其他功能他都有,下面让我们一起来看看怎么用matlab实现层次分析法吧。

2算法实现流程

首先需要确定评价体系,分为目标层,准则层,方案层,再根据重要程度(可参考以下表格)确定评判指标及方案的判断矩阵的,分别使用算术平均法、几何平均法、特征值法分别求解指标权重(重要程度)和各个方案的得分。将三种方法计算的权重和得分进行取平均,相较于只使用特征值法求权重和得分使得比赛论文更加完整。

标度 含义
1 同样重要性
3 稍微重要
5 明显重要
7 强烈重要
9 极端重要
2,4,6,8 上述两相邻判断的中值
倒数 A和B相比是5,B与A相比是1/5

3实例

请选择合适的指标,为小明选取一个最适合他的旅游城市。

本题需要我们选取最优的旅游城市,首先上网搜集资料确定我主观认为最重要的几个指标,分别为,花费、景色、交通,选取想去的几个城市,分别为:武汉、厦门、南昌。主观确定判断矩阵并检验一致性,判断该矩阵是不是一致矩阵。使用算数平均法、几何平均法、特征值法求指标权重及各个城市得分。最后,根据指标权重及各个城市在各指标方面的得分进行打分。

Step1:建立指标判断矩阵

根据自己对这几个指标的判断确定x-y的权重,如景色-花费的相对权重(景色的重要程度/花费的要程度)为1/2,则花费-景色的相对权重(花费的重要程度/景色的要程度)为2

花费 景色 交通
花费 1 2 1/3
景色 1/2 1 1/5
交通 3 5 1

根据上表观察到对角位置的两个权重相乘为1,这是由于景色相对花费的重要程度为1/2,而反过来花费相对景色的重要程度就为2

Step2:建立城市判断矩阵

在花费方面建立各个城市的判断矩阵如下:

花费 武汉 厦门 南昌
武汉 1 1/3 4
厦门 3 1 5
南昌 1/4 1/5 1

在景色方面建立各个城市的判断矩阵如下:

景色 武汉 厦门 南昌
武汉 1 1/3 2
厦门 3 1 5
南昌 1/2 1/5 1

在交通方面建立各个城市的判断矩阵如下:

交通 武汉 厦门 南昌
武汉 1 2 5
厦门 1/2 1 3
南昌 1/5 1/3 1

Step3:检验判断矩阵一致性

(1)计算一致性指标

表示判断矩阵最大特征值,n表示矩阵大小,即判断矩阵是n行n列的矩阵

(2)计算一致性指标CR

RI为平均随机一致性指标,由以下表规定,根据判断矩阵的大小确定RI的值

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
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

若CR小于<0.1则认为判断矩阵一致性可以接受,否则需要重新调整判断矩阵。若没有通过一致性检验可以通过一个很简单的方法调整,首先看各行各列两两之间是否成比例,若没有成比例按各行各列之间的比例调整即可

一个一致矩阵的例子如下:

景色 杭州 西安 桂林
杭州 1 2 4
西安 1/2 1 2
桂林 1/4 1/2 1

可以看到上面矩阵的各行各列是成比例的,如第二列的元素是第一列元素的两倍,如果不通过一致性检验需要往各行各列都是成比例的方向区调整

Step4:求指标权重及城市在各个指标上的得分

  1. 算数平均法

第一步:将判断矩阵按行相加得到一个1*n的行向量

第二步:将判断矩阵第一行的所有元素除以上述1*n的行向量对应元素,直至最后一行都完成除以1*n的行向量操作,最后得到一个n*n的矩阵

第三步:将第二步得到的n*n的矩阵按列相加得到一个n*1的矩阵,再将每个元素除以n即可得到算术平均法计算的权重向量。

我举个例子给大家看:

计算花费的权重使用该公式计算为

分别使用花费与其他各个指标的比值除以其他指标所在列的和得到的权重

使用第一列元素计算权重:

1/(1+1/2+3)

使用第二列元素计算权重:
2/(2+1+5)

使用第三列元素计算权重:
1/3/(1/3+1/5+1)

再将这三个结果取平均值就得到归一化后的结果

(1/(1+1/2+3)+ 2/(2+1+5)+ 1/3/(1/3+1/5+1))/3

(2)几何平均法

第一步:将判断矩阵的元素按照行相乘得到一个新的列向量

第二步:将新的向量的每个分量开n次方

第三步:对该列向量进行归一化即可得到权重向量

表示将判断矩阵的元素按行相乘得到一个新的列向量并开n次方,随后除以新的列向量所有元素之和得到归一化后的权重向量

(3)特征值法

第一步:求出矩阵A的最大特征值以及其对应的特征向量

第二步:对求出的特征向量进行归一化即可得到我们的权重

使用matlab 的eig()函数可以求特征向量矩阵

4matlab实现层次分析法

注意,当只有两个指标或两个方案需要选择时不可以使用层次分析法。

%输入判断矩阵A
A=[1 1/3 4;3 1 5;1/4 1/5 1]
%判断判断矩阵A是否通过一致性检验,否则需要修改判断矩阵直到通过一致性检验
[n,n]=size(A)[v,d]=eig(A)%求最大特征向量%v表特征向量,d表示特征值构成的对角矩阵max_v=max(max(d))%求判断矩阵A是几行几列的矩阵%计算一致性指标CICI=(max_v-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]%计算一致性比例CRdisp("一致性比例为")CR=CI/RI(n)disp(CR)if CR<0.10disp("因为一致性比例CR<0.1,因此判断矩阵A通过一致性检验")elsedisp("因为一致性比例CR>0.1,因此判断矩阵A不通过一致性检验,请重新调整判断矩阵,直至通过一致性检验")end
%算数平均法求权重
%将判断矩阵按列求和
%n表示判断矩阵A有n行n列
%[n,n]=size(A)
if CR<0.1sum_a=sum(A,1)sum_A=repmat(sum_a,n,1)%计算未归一化的权重weight=A./sum_A%计算归一化后的权重sum_weight=sum(weight,2)weight=sum_weight/ndisp("算数平均法求的权重或得分为:")disp(weight)%几何平均法求权重%判断矩阵按行相乘prod_A=prod(A,2)%将新的向量开n次方得到未归一化的权重prod_A=prod_A.^(1/n)%权重归一化disp("几何平均法求得权重或得分为:")weight_jihe=prod_A./sum(prod_A)%特征值法求权重%v表特征向量,d表示特征值构成的对角矩阵%[v,d]=eig(A)%max_v=max(max(d))%将特征向量归一化%find函数用于寻找最大特征值所在的位置%max_v表示最大特征值[max_r,max_c]=find(max_v,1)%v(:,max_c)找到最大特征值对应的列e=v(:,max_c)/sum(v(:,max_c))disp("特征值法求的权重或得分为:")disp(e)
end
%三种方法得出的平均权重
disp("三种方法得出的平均权重或得分为")
disp((e+ weight_jihe+weight)./3)

5计算结果

指标权重及各个城市在各方面的得分为:

指标权重 武汉 厦门 南昌
花费 0.2297 0.2812 0.6424 0.0946
景色 0.1221 0.2297 0.6482 0.1221
交通 0.6482 0.5815 0.3090 0.1095

各个城市的最终得分为:

得分
武汉 0.47
厦门 0.43
南昌 0.11

可以看到武汉得分最高,我主观认为最适合小明去的城市为武汉。

非常感谢各位小伙伴看到这里,有不对的地方欢迎各位小伙伴指正。我写到这里老辛苦了,可怜一下我给我个赞吧,谢谢各位大漂亮大帅逼~

【数学建模学习】matlab实现评价模型——层次分析法(AHP)相关推荐

  1. 数学建模学习笔记(四)层次分析法(AHP)

    应用场景: 1.最佳方案选取 2.评价类问题 3.指标体系的优选 步骤: 1.建立层次结构模型: 2.构造判断(成对比较)矩阵: 3.层次单排序及其一致性检验: 4.层次总排序及其一致性检验: 建立层 ...

  2. 【清风数学建模笔记】第一讲:层次分析法

    层次分析法 (The analytic hierarchy process,简称AHP) 建模比赛中最基础的模型之一,其主要用于解决评价类问题(例如:选择哪种方案最好.哪种运动员或者员工表现的更优秀) ...

  3. 数学建模学习笔记之评价问题聚类分析法

    数学建模学习笔记之评价问题聚类分析法 物以类聚.人以群分. 聚类分析是一个很大的概念,显然根据分类的依据不同会出现很多很多聚类的方法.例如K-Means .Sequential Leader.Mode ...

  4. 评价类模型——层次分析法

    评价类模型--层次分析法 注:以下故事纯属虚构,部分背景及人物姓名设定借用<你好,旧时光>这部剧,但与原剧基本无关,如有情节雷同,纯属巧合. Q:余周周同学遇到三位追求者,这三位候选人分别 ...

  5. 熵权法EW与层次分析法AHP之数学原理及实例

    1.概述 对于多指标或多目标决策问题,由于涉及到多个指标或属性,在对实测数据进行评价时,需要确定这些指标之间的相互权重,各指标权重的客观性与合理性也会大大影响到最终的评价结果.目前对于指标权重确定的方 ...

  6. 数学建模 --- 层次分析法(AHP模型)

    层次分析法 评价类问题 该问题思路 选出相关指标,求各个指标之间的权重 和 对某个指标而言各个选择权重(分而治之思想) 计算每个方案的得分 层次分析法 层次分析法第一步 --- 层次结构图 层次分析法 ...

  7. 数学建模学习笔记(一)——层次分析模型

    1.模型简介 层次分析模型主要应用于综合评价类问题,例如:怎样购买最划算.怎样养殖才能获得最大经济效益等等. 2.下面使用一道例题来说明这个问题 问题:你想要购置一台个人电脑,考虑价格.性能等因素,如 ...

  8. MATLAB数学建模必备算法--层次分析法AHP

    其主要用于解决评价类问题(例如:选择哪种方案最好.哪位运动员或者员工表现的更优秀) 一个很典型的层次分析法案例: 确定评价目标: 高考完后小明想要去旅游,有三个目的地供他选择: 苏杭 北戴河 桂林 确 ...

  9. 数学建模之层次分析法AHP

    层次分析法(Analytic Hierarchy Process,AHP)这是一种定性和定量相结合的.系统的.层次化的分析方法.这种方法的特点就是在对复杂决策问题的本质.影响因素及其内在关系等进行深入 ...

最新文章

  1. Kotlin 性能优化利器 —— Sqeuence 原理浅析
  2. Redis相比memcached
  3. JetBrains WebStorm 快捷键失效
  4. 北京.net俱乐部博客园小组成立了
  5. Log日志分析--awstats
  6. 【SpringMVC】SpringMVC :@RequestMapping注解
  7. Flink算子(ProcessFunction,map和Flatmap)
  8. mysql数据库sql语法参考_MySQL数据库SQL语法参考
  9. Filecoin逻辑梳理及源代码导读
  10. C++简易复数类的实现
  11. 吾有个怪习惯:看书时经常把ABC结构的词看成ACB
  12. python bootstrap 中位数_【机器学习】Bootstrap详解
  13. ROST情感分析的语法规则_《自然语言处理入门》12.依存句法分析--提取用户评论...
  14. 虚拟机及CentOS7各个版本镜像下载地址
  15. 企业网站如何进行外链建设
  16. API勾取实现进程隐藏
  17. CSS第三级选择器 Selectors Level 3 文档翻译
  18. 正则表达式同时匹配中英文_,还控制长度
  19. 2022年第十二届APMCM亚太杯1月增赛E题思路分享
  20. linux查看cpu的赫兹,linux平台jiffies和HZ Cpu使用率

热门文章

  1. 中国最初开始发展计算机是在哪一年,中国从哪一年开始有手机了,手机出现最早的城市在哪里...
  2. js 个性标签图片生成
  3. android设备udid,Android下获取设备唯一标识(UDID, DeviceID...)
  4. 【布局优化】基于布谷鸟算法实现无线传感器网(WSN)覆盖优化 Matlab源码
  5. LilyPond 乐谱软件
  6. 【解决】ubuntu用vim编辑时退格键和上下左右键失灵的问题
  7. cache系列——存储介质
  8. ubuntu安装HBuilder过程
  9. 使用Verilog语言描述计数器——脉动计数器;脉动计数器具有减法计数功能。采用模块设计和行为级设计方法。
  10. Unreal Blueprint API Reference[Add Documentation Node...]