数学建模之层次分析法(AHP)

article/2025/9/21 18:25:03

层次分析法(Analytic Hierarchy Process)

AHP是对一些较为复杂的,较为模糊的问题作出决策的简易方法,它特别适用于那些难以完全定量分析的问题。由美国运筹学家T.L.Saaty教授于上世纪70年代初期提出。


目录

层次分析法(Analytic Hierarchy Process)

一、建模步骤

二、层次结构模型

三、层次结构分析法的两个权重

3.1 首先解决第一个问题:每个准则(因素)权重具体应该分配多少?

3.2 接下来解决第二个问题:每一个候选方案在每一个因素下又应该获得多少权重

总结

具体举例与代码

参考链接


一、建模步骤

运用层次分析法建模,大体上可按下面四个步骤进行: 

  • 建立递阶层次结构模型; 
  • 构造出各层次中的所有判断矩阵; 
  • 层次单排序及一致性检验; 
  • 层次总排序及一致性检验。 

二、层次结构模型

层次分析法是用来根据多种准则,或是说因素从候选方案中选出最优的一种数学方法

 

问题结构如图。首先做一个归一处理,给目标层(choose a leader)分配值为1或0,然后将这一值作为权重,分配给不同因素(Age,Experience,Education,Charisma),对应因素的权重大小代表该因素在整个选择过程中的重要性程度。

之后对于候选方案,每一个标准再将其权重值分配给所有的候选方案,每一方案获得权重值,来源于不同因素分得的权重值的和。最终获得的各个方案的的权重值的和依然为1。

  

例如选工作时,待遇所占的比重为0.8,有工作1,2,3候选, 如果工作1的待遇最高,工作2的待遇次之,工作3最差,则可将0.8的值按0.4,0.3,0.1分给工作1,2,3。

三、层次结构分析法的两个权重

从上文看,这不就是一个简单的权重打分的过程吗?为什么还要层次分析呢。这里就有两个关键问题:

  • 每个准则Criterion的权重具体应该分配多少?
  • 每一个候选方案Alternative在每一个因素下又应该获得多少权重?

这里便进入层次分析法的第二个步骤,也是层次分析法的一个精华:  构造比较矩阵(判断矩阵)Comparison Matrix

3.1 第一个问题:每个准则(因素)权重具体应该分配多少?

如果直接要给各个因素分配权重比较困难,但在不同因素之间两两比较其重要程度是相对容易的

将不同因素两两作比获得的值aij 填入到矩阵的 i 行 j 列的位置,则构造了所谓的比较矩阵,显然比较矩阵对角线上都是1, 因为是自己和自己比。这个矩阵容易获得,我们如何从这一矩阵获得对应的权重分配呢

这里需要引入概念,正互反矩阵和一致性矩阵

正互反矩阵定义:

我们目前构造出的矩阵很明显就是正互反矩阵。

一致性矩阵定义:

这里我们构造出的矩阵就不一定满足一致性,比如我们做因素1:因素2= 4:1  因素2:因素3=2:1    因素1:因素3=6:1(如果满足一致性就应该是8:1),我们就是因为难以确定各因素比例分配才做两两比较的,如果认为判断中就能保证一致性,就直接给出权重分配了。

一致性矩阵有一个性质可以算出不同因素的比例

重点:这里的w就是我们想要知道的权重,所以通过求比较矩阵的最大特征值所对应的特征向量,就可以获得不同因素的权重,归一化一下(每个权重除以权重和作为自己的值,最终总和为1)就更便于使用了。

注:我们给出的比较矩阵一般是不满足一致性的,但是我们还是把它当做一致矩阵来处理,也可以获得一组权重,但是这组权重能不能被接受,需要进一步考量。(即下文的一致性检验)例如在判断因素1,2,3重要性时,可以存在一些差异,但是不能太大,1比2重要,2比3 重要,1和3比时却成了3比1重要,这显然不能被接受。

一致性检验

当写出来判断矩阵之后还会存在一个问题,那就是按理来说如果i对j的重要程度是a,j对k的重要程度是b,那么理所应当i对k的重要程度应该a*b,有点符合“传递性”的感觉。但事实上不是这样的。所以需要进行一致性检验,如果在一定的合理范围之内,矩阵不需要修改,如果不在,则需要修改矩阵。

 一致性的检验是通过计算一致性比例CR 来进行的

当  CR<0.10 时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵作适当修正。 

CI的值由判断矩阵计算获得,RI的值查表获得,具体的计算公式这里就略去,重点是理解为什么要做一致性检验。

3.2 第二个问题:每个候选方案在每个因素下又应该获得多少权重

这里则需要将不同候选方案,在不同因素下分别比较,具体的比较方法,还是使用比较矩阵,只不过之前准则层的比较矩阵比较的对象是因素,这里比较的是某一因素下,候选方案的优劣。

注:n个因素则需构造出来n个比较矩阵

例如在工作环境的因素下,工作1与工作2相比为 :4:2,工作2与工作3=2:1 ,工作1:工作3=6:1,这样构造一个矩阵,再用之前的一致性矩阵的方法就可以求出一个权重,然后相对应因素(这里是工作环境)所拥有的权值就可以按这个权重比例分配给不同候选物或人。

至此两个问题就都得到了解决。最终将每个候选物、人从不同因素获得的权值求和,就可以得到不同候选对于目标层的权值大小,继而可以根据值的大小,来选出优劣。

总结

通过对层次分析法的基本了解,不难发现层次分析法对人们的思维过程进行了加工整理,提出了一套系统分析问题的方法,为科学管理和决策提供了较有说服力的依据。 

明显的缺点是,整个分析过程似乎都是依赖于人的主观判断思维,一来不够客观,二来两两比较全部人为完成,还是非常耗费精力的,尤其是当候选方案比较多的时候。

 

具体举例与代码

有一个毕业生为挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生,该毕业生考虑的因素有6个,研究课题、发展前途、待遇、同事情况、地理位置和单位名气。 
那么这六个因素就是准则层,三个单位就是方案层,最后要求的就是应该去哪个单位。 
1)准则层判断矩阵(主观性) 

这里写图片描述

2)方案层判断矩阵(主观性) 
这里写图片描述

分别针对每一个B,判断C1、C2、C3之间的相对大小

计算的 Matlab 程序如下: 

clc,clear 
fid=fopen(‘txt3.txt’,’r’); 
n1=6;n2=3; 
a=[]; 
for i=1:n1 
tmp=str2num(fgetl(fid)); 
a=[a;tmp]; %读准则层判断矩阵 
end 
for i=1:n1 
str1=char([‘b’,int2str(i),’=[];’]); 
str2=char([‘b’,int2str(i),’=[b’,int2str(i),’;tmp];’]); 
eval(str1); 
for j=1:n2 
tmp=str2num(fgetl(fid)); 
eval(str2); %读方案层的判断矩阵 
end end
ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标 
[x,y]=eig(a); 
lamda=max(diag(y)); 
num=find(diag(y)==lamda); 
w0=x(:,num)/sum(x(:,num)); 
cr0=(lamda-n1)/(n1-1)/ri(n1) 
for i=1:n1 
[x,y]=eig(eval(char([‘b’,int2str(i)]))); 
lamda=max(diag(y)); 
num=find(diag(y)==lamda); 
w1(:,i)=x(:,num)/sum(x(:,num)); 
cr1(i)=(lamda-n2)/(n2-1)/ri(n2); 
end 
cr1, ts=w1*w0, cr=cr1*w0 


纯文本文件txt3.txt中的数据格式如下: 
1 1 1 4 1 1/2 
1 1 2 4 1 1/2 
1 1/2 1 5 3 1/2 
1/4 1/4 1/5 1 1/3 1/3 
1 1 1/3 3 1 1 
2 2 2 3 3 1 
1 1/4 1/2 
4 1 3 
2 1/3 1 
1 1/4 1/5 
4 1 1/2 
5 2 1 
1 3 1/3 
1/3 1 1/7 
3 7 1 
1 1/3 5 
3 1 7 
1/5 1/7 1 
1 1 7 
1 1 7 
1/7 1/7 1 
1 7 9 
1/7 1 1 
1/9 1 1


R语言中AHP的应用参考

https://cran.r-project.org/web/packages/ahpsurvey/vignettes/my-vignette.html

 

参考与资源

[1]《数学建模算法与应用》

[2] https://blog.csdn.net/lengxiao1993/article/details/19575261

[3]https://blog.csdn.net/fz_851474/article/details/52281849

 


http://chatgpt.dhexx.cn/article/K7KEoVvT.shtml

相关文章

时序分析-季节因素

目录 1时序分析的基础 1.1 简介 1.2 分类 2 分析套路 3 主流时序分析模型 3.1移动平均 3.2 指数平滑法 3.3 组合模型 3.4 ARIMA 4 研究细分领域 4.1 异常值检测 4.2 季节序列分析 4.1 同期平均法 4.1.1 简单季节指数法 4.1.2 趋势季节指数法 4.2 长期趋势剔除法…

html5播放器的示例代码

本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。其中实现了播放暂停、进度拖拽、音量控制及全屏等功能。 效果预览 核心思路 我相信一定会有些没有接触过制作自定义播放器的童鞋对于 标签的认识会停留在此。 <video controls"controls" autoplay"…

HTML5音乐播放器

明月浩空-HTML5浮窗音乐播放器研发于2014年&#xff0c;并持续更新至今 是基于QQ音乐、酷狗音乐、网易云音乐等歌曲ID全自动解析的网页音乐播放器 依靠服务器强大的接口功能&#xff0c;只需要一个ID既可获取全部信息 同时播放器主体会跟随专辑图片主色值自动变色&#xff0c;歌…

h5的开源播放器组件

哈喽&#xff0c;大家好&#xff0c;今天我要给大家推荐一个非常棒的看片神器&#xff0c;那就是【moovie】.它是一款专注于电影的HTML5 播放器。 先展示一下效果&#xff0c;测试了一下&#xff0c;支持倍速播放、快捷键操作、字幕偏移即时调整&#xff0c;还有一些参数展示&a…

H5播放器使用方法。

1.使用webkit-playsinline playsinline 在iOS微信webview中视频不会弹出来&#xff0c;直接播放。 <video id"test_video" class"test_video" webkit-playsinline playsinlinesrc"http://res.imtt.qq.com/qqbrowser/js/advideo.mp4"control…

H5,Audio音乐播放器(移动版)

有些时候&#xff0c;总是感觉自己进步的没有以前快了。于是就怀疑自己是不是也被时间磨灭了&#xff0c;这可真是一件不幸的事儿。可能是自己会的东西太少了&#xff0c;总是有种莫名的危机感。 前一段时间&#xff0c;想写一个移动版音乐播放器&#xff0c;于是就开始利用下班…

H5 video 播放器demo

H5 video 播放器demo 前言 最近在做一个wap端的项目&#xff0c;需要视频播放功能。大家也知道wap对flash支持很差&#xff0c;所以优先考虑使用h5播放器video,在这里我介绍用video实现视频播放方法。之后在介绍几个插件和第三方视频实现方法。 H5 video 因为video样式是原…

SkeyeWebPlayer.js H5播放器开发之播放器video动态创建(三)

SkeyeWebPlayer.js H5播放器是由成都视开信息科技开发和维护的一个完善的RTSP、FLV、HLS等多种流媒体协议播放&#xff0c;视频编码支持H.264&#xff0c;H.265&#xff0c;音频支持AAC&#xff0c;支持TCP/UDP协议&#xff0c;是一套极佳的且适合用于综合安防视频云服务播放组…

H5音乐播放器(包含源码与示例)

H5音乐播放器&#xff08;包含源码与示例&#xff09; 基于Angularionic的H5音乐播放器&#xff0c;源码&#xff1a;https://gitee.com/CrimsonHu/h5-music-player 示例地址 建议使用原版chrome或edge访问&#xff1a;http://intelyes.club:5300/ 功能 实时歌词显示支持歌…

基于H5+js开发一款音乐播放器

前言&#xff1a;当下音乐播放器不胜其数&#xff0c;为了更好的掌握一些东西&#xff0c;我们来自己制作一个音乐播放器。 文章目录&#xff1a; 一.开发环境&#xff1a;二.页面视图&#xff1a;1.主文件入口&#xff08;首页&#xff09;&#xff1a;2.音乐播放界面&#…

H5纯原生播放器 【学习video】

这是一个纯原生的H5播放器&#xff0c;尽管网上有很多第三方库&#xff0c;但是基础打的牢固&#xff0c;一定会帮你走的更远。 大厂也非常重视基础&#xff0c;再说了那些第三方库也是基础一点点搭起来的&#xff0c;所以有兴趣学习的同学可以下载来学习。 代码中的细节我都…

MuiPlayer - 一款优秀的 H5 视频播放器框架

Mui Player Gitee | Docs | 中文文档 介绍 MuiPlayer 是一款 HTML5 视频播放插件&#xff0c;其默认配置了精美可操作的的播放控件&#xff0c;涉及了常用的播放场景&#xff0c;例如全屏播放、播放快进、循环播放、音量调节、视频解码等功能。 支持 mp4、m3u8、flv 等多…

[h5]一个基于HTML5实现的视频播放器代码详解

什么是 HTML5&#xff1f; HTML5 是最新的 HTML 标准。 HTML5 是专门为承载丰富的 web 内容而设计的&#xff0c;并且无需额外插件。 HTML5 拥有新的语义、图形以及多媒体元素。 HTML5 提供的新元素和新的 API 简化了 web 应用程序的搭建。 HTML5 是跨平台的&#xff0c;被…

一个牛逼的开源 H5 视频播放器

【公众号回复 “1024”&#xff0c;免费领取程序员赚钱实操经验】 大家好&#xff0c;我是章鱼猫。今天给大家分享的这个开源项目&#xff0c;对于前端开发者来讲非常非常的有用。因为它是一个 H5 的视频播放器。 字节跳动出品&#xff0c;必属精品啊&#xff01;尤其是我感觉在…

H5移动端页面使用DPlayer视频播放器

背景&#xff1a; 如果使用原生video标签&#xff0c;那在不同类型手机浏览器上样式都不一样&#xff0c;而且播放表现不一样&#xff0c;比如使用css隐藏播放按钮在PC端有效&#xff0c;在手机端就无效&#xff0c;故我们选择引入第三方成熟的播放器。 需求&#xff1a; 1、自…

13款用于Web的流行HTML5视频播放器

​​​​​​当视频流媒体席卷通信世界&#xff0c;为了保持和提升用户增长&#xff0c;内容创造者和流媒体服务提供者需要提供高质量的用户体验。而想要实现这一点&#xff0c;他们都需要在自己的网站上内嵌HTML5视频播放器。 在本文中&#xff0c;我们将来了解一下现在市面上…

分位数回归的实现方法

目录 分位数回归简介实现方法参考文献 分位数回归简介 简介参照可参照参考文献【1】。如下图&#xff0c;散点图代表我们所需分析数据&#xff0c;若用简单的参数方程拟合&#xff0c;即只利用期望值&#xff0c;会损失很多数据特征。因此分位数回归就可以乘风破浪了。 分位数…

分位数回归(Quantile Regression)代码解析

实验代码 本文采用python sklearn库中&#xff0c;作为quantile regression的示例代码。以下为详细解析&#xff1a; import numpy as np import matplotlib.pyplot as pltfrom sklearn.ensemble import GradientBoostingRegressor %matplotlib inline np.random.seed(1) #设…

python中的分位数回归(初探)

分位数回归 参考文献 Python statsmodels 介绍 - 树懒学堂 (shulanxt.com) Quantile Regression - IBM Documentation https://www.cnblogs.com/TMesh/p/11737368.html 传统的线性回归模型 其的求解方式是一个最小二乘法&#xff0c;保证观测值与你的被估值的差的平方和应…

分位数回归 Quantile Regression,python 代码

偶尔在机器学习的论文中了解到了分位数回归&#xff0c;发现这个方法应用也满广的。 文章目录 1. 分位数回归的数学原理2. 分位数回归的求解原理3 python 分位数回归 1. 分位数回归的数学原理 一般的回归方法是最小二乘法&#xff0c;即最小化误差的平方和&#xff1a; min ⁡…