一、 算法引入

人们在进行社会、经济以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。比如要在三个旅游景点选择其中二个作为目的地。而这三个旅游景点的消费水平、气候条件、饮食、交通等都会影响我们对它的选择。三个旅游景点中选取两个又有3种不同的组合方案。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。

不得不说的是,层次分析法因为其可以套用的场合较多,且有不易于给出令人信服的专家打分矩阵等算法本身缺陷,若在有些场合滥用层次分析法往往并不是一个好的选择。若要在数学建模中使用层次分析法,需先考虑其在此问题下是否合适。

二、 算法介绍

层次分析法(Analytic Hierarchy Process ,简称 AHP )是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家T. L. Saaty 教授于上世纪 70 年代初期提出的一种简便、灵活而又实用的多准则决策方法。

三、 算法步骤

1.步骤

(i)建立递阶层次结构模型;

(ii)构造出各层次中的所有判断矩阵;

(iii)层次单排序及一致性检验;

(iv)层次总排序及一致性检验。

2.步骤的具体实现

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


最顶层是我们的目标,比如说选择旅游目的地
中间层是判断候选方物或人优劣的因素或标准
选旅游目的地时有:景色 费用 居住 饮食
最后一层就是可供选择的事物,比如:青岛 九寨沟 黄山

在分层以后,为了选出最优候选,给目标层分配值1.000。然后将这一值作为权重,分配给不同因素,对应因素的权重大小代表该因素在整个选择过程中的重要性程度。
然后对于候选方案,每一个标准再将其权重值分配给所有的候选方案,每一方案获得权重值,来源于不同因素分得的权重值的和。
例如选工作时,待遇所占的比重为0.8, 有工作1,2,3候选,如果工作1的待遇最高,工作2的待遇次之,工作3最差,则可将0.8的值按0.4,0.3,0.1分给工作1,2,3,

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

1每个准则(因素)权重具体应该分配多少

2每一个候选方案在每一个因素下又应该获得多少权重

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

首先解决第一个问题:每个准则(因素)权重具体应该分配多少?
在递阶层次结构中,设上一层元素 CC 为准则,所支配的下一层元素为 u1,u2,…,unu1,u2,…,un 对于准则 CC 相对重要性即权重。这通常可分两种情况:

(1)如果 u1,u2,…,unu1,u2,…,un 对 CC 的重要性可定量(如可以使用货币、重量等),其权重可直接确定。

(2)如果问题复杂, u1,u2,…,unu1,u2,…,un 对于 CC 的重要性无法直接定量,而只能定性,那么确定权重用两两比较方法。其方法是:对于准则 CC,元素uiu_i和uju_j哪一个更重要,重要的程度如何,通常按1~9比例标度对重要性程度赋值,下表中列出了1~9标度的含义。

这时我们就可以得到判断矩阵,也就是每两个因素的权重比:

A=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜w1w1w2w1⋮wnw1w1w2w2w2⋮wnw2⋯⋯⋱⋯w1wnw2wn⋮wnwn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟(1)

A=\begin{pmatrix} \frac {w_1}{w_1}&\frac {w_1}{w_2}&\cdots&\frac {w_1}{w_n} \\ \frac {w_2}{w_1}&\frac {w_2}{w_2}&\cdots&\frac {w_2}{w_n} \\ \vdots&\vdots&\ddots&\vdots\\ \frac {w_n}{w_1}&\frac {w_n}{w_2}&\cdots&\frac {w_n}{w_n} \end{pmatrix}\quad\qquad\qquad(1)
假设我们得到的例子中判断矩阵是:

A=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜1214131312117151547123351211351311⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟(2)

A=\begin{pmatrix}1&\frac 1 2 &4&3&3\\2&1&7&5&5\\\frac1 4&\frac 1 7&1&\frac 1 2&\frac 1 3 \\\frac1 3&\frac1 5&2&1&1\\\frac1 3&\frac1 5&3&1&1\end{pmatrix}\qquad\qquad\qquad(2)
有了判断矩阵,我们就可以得到各个因素的权重。在(1)式中,右乘 ww 就有

Aw=nw(3)

Aw=nw\qquad\qquad\qquad\qquad(3)也就是说我们只要令 (A−n)w=0(A-n)w=0 和 |w|=1|w|=1,就可以算出 ww。

如a,b,c的判断矩阵为

A=⎛⎝⎜⎜⎜⎜112162113633⎞⎠⎟⎟⎟⎟

A=\begin{pmatrix}1&2&6\\\frac1 2&1&3\\\frac1 6&\frac1 3&3 \end{pmatrix}

令 (A−3)w=0(A-3)w=0 ,就有w=[0.60.30.1]w=[0.6 0.3 0.1]

现在,我们先来看两个概念

(1)正互反矩阵的定义是:


(2)一致性矩阵的定义是:

aijajk=aik,∀i,j,k=1,2,⋯n

a_{ij}a_{jk}=a_{ik},\qquad\forall i,j,k=1,2,\cdots n 接着我们仔细查看(2),其实是有问题的。判断矩阵可能会出现不一致的情况,这时(3)不成立。
如果说a比b重要2倍,b比c重要3倍,然后说c比a重要2倍,这就有问题了。这就是所谓的不一致现象。(2)就是出现了这一现象。那么,这时权重又如何确定。
学过线性代数的话,我们知道(3)中, nn 是 AA 的特殊值,而 ww 是 AA 的特殊向量。在出现不一致的情况下,Saaty等人建议用对应于最大特征根 λ\lambda 的特征向量作为权向量 ww ,即

Aw=λw

Aw=\lambda w由于λ 连续的依赖于 aija_{ij} ,则 λ\lambda 比 nn 大的越多,AA 的不一致性越严重。用最大特征值对应的特征向量作为被比较因素对上层某因素影响程度的权向量,其不一致程度越大,引起的判断误差越大。因而可以用 λ−n\lambda-n 数值的大小来衡量 AA 的不一致程度。
于是引入了一致性检验。
定义一致性指标:

Cl=λ−nn−1

Cl=\frac {\lambda-n}{n-1} CI=0CI=0,有完全的一致性
CICI接近于0,有满意的一致性
CICI越大,不一致越严重
定义随机一致性指标 RIRI:它的值与 nn 的关系如下:

定义一致性比率 :

CR=ClRl

CR=\frac {Cl} {Rl}一般,当一致性比率 时,认为 AA 的不一致程度在容许范围之内,有满意的一致性,通过一致性检验。可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵 AA,对 aija_{ij} 加以调整。

接下来解决第二个问题:每一个候选方案在每一个因素下又应该获得多少权重
这里则需要将不同候选方案,在不同因素下分别比较,具体的比较方法,还是使用比较矩阵,只不过之前准则层的比较矩阵比较的对象是因素,这里比较的是某一因素下,候选方案的优劣, nn个因素则需构造出来nn个比较矩阵
例如在工作环境的因素下,工作1与工作2相比为 :4:2,工作2与工作3=2:1 工作1:工作3=6:1.,这样构造一个矩阵,再用之前的一致性矩阵的方法就可以求出一个权重,然后相对应因素(这里是工作环境)所拥有的权值就可以按这个权重比例分配给不同候选物或人。
至此两个问题就都得到了解决
最终将每个候选物、人从不同因素获得的权值求和,就可以得到不同候选对于目标层的权值大小,继而可以根据值的大小,来选出优劣

四、 算法举例

挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型,如图 2 所示。


准则层的判断矩阵如表 4 所示。

方案层的判断矩阵如表 5 所示。

层次总排序的结果如表 6 所示。

根据层次总排序权值,该生最满意的工作为工作 1。根据层次总排序权值,该生最满意的工作为工作1。

根据层次总排序权值,该生最满意的工作为工作 1。
Matlab程序如下:

clc
clear
fid=fopen('txt3.txt','r');
n1=6;
n2=3;
a=[];
for i=1:n1tmp=str2num(fget1(fid));a=[a;tmp];%读取准则层
end
for i=1:n1str1=char(['b',int2str(i),'=[];']);str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);eval(str1);for j=1:n2tmp=str2num(fget1(fid));eval(str2);%读取方案层的判断矩阵end
end

纯文本文件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

2-3、AHP层次分析法相关推荐

  1. 用AHP层次分析法挑选最佳结婚对象

    为了使文章读起来比较有趣,假设屏幕前的你现在中了彩票头奖,奖金5亿RMB.于是你彻底解放不用再写代码啦,天天开辆法拉利到处玩,来给你介绍对象的媒人踏破家门.经过初赛.复赛.泳装.晚装.才艺展示之后,仍 ...

  2. 【AHP层次分析法python部分实现】

    提示:仅用到AHP层次分析法的部分功能因此只完成了python的部分实现 目录 前言 一.AHP是什么? 层次分析法的特点: 层次分析法的原理: 二.使用步骤 参考视频 前言 提示:这里可以添加本文要 ...

  3. MATLAB AHP AHP层次分析法code 自写代码 完美运行。 权重设计

    MATLAB AHP AHP层次分析法code 自写代码 完美运行. 权重设计 ID:5150612144581085YouthOG

  4. AHP层次分析法(Analytic Hierarchy Process)——个人学习笔记

    目录 一.相关知识与例子 二.代码实现 一.相关知识与例子 层次分析法是数学建模过程中最基础的模型之一,主要应用于评价问题.层次分析法是对一些较为复杂.较为模糊的问题作出决策的简易方法,其适用于那些难 ...

  5. AHP层次分析法在水利中的实践技术应用

    原文:AHP层次分析法在水利中的实践技术应用 内容简述: 1.认识 AHP,掌握 AHP 的基本原理,优缺点及建模的步骤.以手算案例的方式,熟 悉层次分析法的计算过程,为后期学习软件夯实理论基础. 2 ...

  6. AHP层次分析法分析流程

    AHP层次分析法分析流程: 一.案例背景 当前有一项研究,想要构建公司绩效评价指标体系,将一级指标分为4个,分别是:服务质量.管理水平.运行成本.安全生产,现在想要确定4个指标的权重. AHP层次分析 ...

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

    一.定义 层次分析法,简称AHP,是指将与决策总是有关的元素分解成目标.准则.方案等层次,在此基础之上进行定性和定量分析的决策方法.该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初,在为美国 ...

  8. Matlab基于SEIRD模型,NSIR预测模型,AHP层次分析法新冠肺炎预测与评估分析

    全文链接:http://tecdat.cn/?p=32175 分析师:Jiahui Zhao 新型冠状病毒肺炎COVID-19 给中国乃至全世界都带来了深重的灾难,对世界经济也造成了不可逆的影响(点击 ...

  9. AHP层次分析法matlab实现

    AHP层次分析法的步骤和matlab实现方法 AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家T. L. Saaty教授于二十世纪70年代提出的一种实用的多方案 ...

  10. AHP层次分析法与python代码讲解(处理论文、建模)

    目录 AHP是啥 题目  ①构建阶梯层次结构 ②构建判断矩阵 ④综合算术平均法 .几何平均法.特征值法求权重  方法1:算术平均法求权重 一般步骤  表达式解释 代码实现 方法2:几何平均法求权重 一 ...

最新文章

  1. Hadoop-调优剖析
  2. c盘python27文件夹可以删除嘛_电脑C盘那些文件夹可以删除
  3. BaseExecutor.query()-清空本地缓存
  4. poj 1160 dp
  5. 1661Help Jimmy
  6. 访问win10的远程桌面(Remote Desktop)总是凭据或者用户密码错误
  7. 拓端tecdat|R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列
  8. response.sendRedirect()和request.getRequestDispatcher().forward(request,reponse)的区别
  9. 维控触摸屏编程手册_维控触摸屏AB PLC地址编辑说明
  10. 程序员必备的英语词汇表-持续更新
  11. 编程实现英语句子反转python_Python字符串处理实现单词反转
  12. 这绝对是目前最好用的电脑桌面便签,免费的,墙裂推荐
  13. 少儿python教学_如何教少儿学习Python编程
  14. 获取java时间 小时_Java 如何获取当前时间前一个小时的时间
  15. putty下载与安装
  16. 用牛顿迭代法求方程的根
  17. java cst_Java中处理CST格式时间
  18. maven打包二进制文件
  19. 一程序员被网恋女友诈骗1.8万,警方调查“女友”后发现竟是...
  20. SecureCRT的安装及破解(详细过程)

热门文章

  1. FFmpeg从入门到牛掰(一):解复用(demux)讲解
  2. 2023 彩虹易支付USDT(TRC20)支付收款插件
  3. VS2019+WDK环境搭建
  4. 中国通过CMM/CMMI第五级认证的企业
  5. bzoj4521(数位dp
  6. 2022最新养生打卡健康小程序(云开发)
  7. Cisco统一通信---视频部分
  8. EF登录+首页+列表
  9. 重要接口interface实现画图形
  10. 【笔记】路由器 - 软硬件构成