目录

一、相关知识与例子

二、代码实现


一、相关知识与例子

层次分析法是数学建模过程中最基础的模型之一,主要应用于评价问题。层次分析法是对一些较为复杂、较为模糊的问题作出决策的简易方法,其适用于那些难以完全定量分析的问题。

系统中取得最优的概念。多个方案,多个考虑指标因素,通过比较综合得到的分析权重,用于决策。

处理评价类问题时,首先应当注意三个问题:

1)评价的目标是什么?

2)备选方案有哪些?

3)评价指标是什么?

AHP基本步骤

1)确定三个层级,确定评价指标

2)确定判断矩阵

3)对判断矩阵进行一致性检验

4)计算各决策的权重

实例:

1、构件层次结构(目标层、指标层(指标层可能有很多)、方案层),如图1

图1

通过查阅文献、询问专家等方法,可得到各层之间的判断矩阵,并通过判断矩阵来得到各决策之间的评分,以此来进行哪些决策。

构造了层次关系之后,对于同一层次的各元素关于上一层此的某一准则的重要性进行两两比较,构造判断矩阵。

 2、构建判断矩阵

如何比较因素之间的重要程度:如图1中的景色与吃住两两比较,并将这些比较的强烈程度量化成值,制成图2中的右图。

图2

3、计算各层要素对应权重——算术平均法求权重

图3

按列归一化的方法一:算数平均法(和积法)

先求出列的和,再用值去除以这个和;如A1-A1时,是1/8.5

随后用归一化的值,以行为单位算出平均值,用以求权重;第一行的

=(0.12+0.13+0.13+0.09)/4

图4

归一化的方法二:几何平均法(方根法)

将行元素相乘,然后对乘积开四次方;如第一行行成绩=1*(1/4)*2*(1/3) ,开四次方后sqrt**4(行成绩)

然后把开的四次方全部相加,然后再算一个值在这个sum里的总数;如第一行的权重w=0.64/5.46

图5

两种方法差别不大,但这两种算法都是近似算法,实际要算的话很复杂,要用matlab。

权重的大小表示这个因素的重要程度。

最后要做一致性判断,避免矛盾(如A1>A2,A2>A3,又A3>A1)

那么如何做一致性判断,以和积法为例

其中这个公式用于近似求特征值,计算公式详见图7,可知的计算方式为下图左边的矩阵乘以右边的向量。

随后特征值

是用于一次性检验用的,为了检验权重是否矛盾,我们还要算一致性指标

 本题为

Ri直接查表就好,是有固定值的;本题是四阶矩阵,查出来就是0.89,如图8所示。

最后求得的要和0.1比较大小

  若, 一次性检验通过,反之,一致性检验不通过。

图6

图7

图8

在景色维度比较南京、桂林和三亚,可知,当矩阵行列成比例时,CR=0;本图表示桂林的权重最重,桂林的风景最好

图9

图9同样的操作,对吃住、价格、人文作同样的操作,将得到的权重模型列出如图10所示

图10

图10左边一列的四个值,对应的是4个指标权重(他们的重要程度),后面几列是三个城市在四个指标中的比分;最下面的一行是他们比分的平均值。

最后还需要对图10作一次一致性检验。该图CI的计算方式为,用四个指标权重,乘以它们在上图中对应的CI,本题中

RI也许如上图加权平均,CR用算得

二、代码实现

本次代码实现的层次结构,如图11;数据结构,如图12.

图11

图12

第一行是准则层关于目标层的一个判断矩阵,所以它是5X5的矩阵。

第二到六行是方案层关于准则层的一个判断矩阵,它是3X3的矩阵,有9个数

代码实现:

# 利用层次分析法(AHP)进行评价import numpy as np# 一致性检验函数
def check(A):eigen = np.linalg.eig(A)[0] # A的特征值n = A.shape[0]CI = (max(eigen) - n) / (n - 1)RI = [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 = CI / RI[n-1]CI = float(CI)CR = float(CR)# 若CI过小,为防止计算误差出现,取0if abs(CI) < 0.0001:CI = 0if abs(CR) < 0.0001:CR = 0print('The CI is:{}'.format(CI))print('The CR is:{}'.format(CR))# 一致性检验if CR < 0.1:return 1else:return 0 # 对CR进行判断,用于下面计算权值函数# 计算权重值
def count_p(A):q = check(A)n = A.shape[0]while q:weight1 = (np.sum(A/np.sum(A,axis = 1),axis = 1)) / n # 算数平均权重weight2 = pow(np.prod(A,axis = 1), 1/n) / np.sum(pow(np.prod(A,axis = 1), 1/n)) # 几何平均权重eigen, F_vector = np.linalg.eig(A)for i in range(n):if eigen[i] == np.max(eigen):index_e = ibest = F_vector[:,index_e]weight3 = best / np.sum(best) # 特征值权重print('算术平均权重、几何平均权重和特征值权重分别算出来的权重矩阵:')print(weight1, '\n',weight2, '\n',weight3,'\n')return weight1,weight2,weight3else:print('Consistency check not pass')return 0,0,0# 数据获取与处理
tx = open(r'C:\Users\Aaliy\Desktop\O_R.txt').readlines()
# 下面这样子大咩呀
# tx = [[1,1/2,4,3,3,2,1,7,5,5,1/4,1/7,1,1/2,1/3,1/3,1/5,2,1,1,1/3,1/5,3,1,1],
#     [1,2,5,1/2,1,2,1/5,1/2,1],
#     [1,1/3,1/8,3,1,1/3,8,3,1],
#     [1,1,3,1,1,3,1/3,1/3,1],
#     [1,3,4,1/3,1,1,1/4,1,1],
#     [1,1,1/4,1,1,1/4,4,4,1]]
for i in range(len(tx)):tx[i] = np.array(list(eval(tx[i])))n0 = int((np.size(tx[i]))**0.5)tx[i] = tx[i].reshape(n0,n0) # 令tx[i]称为矩阵A0 = tx[0]
print('目标层和指标层的判断矩阵:')
print(A0)
# 有三种方法计算权重,分别传入到o_c1,o_c2,o_c3中
# 它们分别是算数平均权重,几何平均权重,特征值权重
o_c1,o_c2,o_c3 = count_p(A0)
C_P = []
# 这五个判断矩阵,是方案层关于准则层的判断矩阵
print('接下来是方案层关于准则层的判断矩阵:')
for Ai in tx[1:]:print(Ai)c_p1,c_p2,c_p3 = count_p(Ai)# 同样得到三个权重,但是这取用c_p3,将c_p3转化为list,然后添加C_P.append(list(c_p3))c_p = np.array(C_P)
print('方案层与准则层的权重矩阵:')
print(c_p)
# print(o_c3)
score = []
for i in range(len(c_p[0,:])):score.append(sum(o_c3*c_p[:,i])) # 计算权重print('解决方案们的权重:')
print(score)

学习对象:

【AHP层次分析法(python)】 https://www.bilibili.com/video/BV1964y1B7Vc/?share_source=copy_web&vd_source=98fbab4e0ff3ef4e18cd477db479634d

【层次分析法(AHP)步骤详解】 https://www.bilibili.com/video/BV1hK411G76S/?share_source=copy_web&vd_source=98fbab4e0ff3ef4e18cd477db479634d

AHP层次分析法(Analytic Hierarchy Process)——个人学习笔记相关推荐

  1. 层次分析法(Analytic Hierarchy Process)

    层次分析法(Analytic Hierarchy Process ,简称 AHP ) AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家Saaty教授于二十世纪8 ...

  2. AHP层次分析法—特征权重初始化

    最近在做电商知识图谱,涉及一些商品评分,店铺GMV的计算.这些结果是由一些特征加权计算得到,因此如何初始化特征的权重就显得尤为重要.如果一味的按照经验去进行初始化权重,然后不停的A/B测试,权重调整, ...

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

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

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

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

  5. AHP层次分析法matlab实现

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

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

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

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

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

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

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

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

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

最新文章

  1. HTML 基础知识回顾
  2. 客户端oracle12537连接关闭,ORA-12537:TNS:连接关闭 和 TNS-12547: TNS: 丢失连接
  3. Java最大的优势真的在于跨平台吗?
  4. java源码编译为字节码的流程
  5. Windows PowerShell下基础操作
  6. 解决 connect to host github.com port 22 operation timed out
  7. mysql my.ini my.cnf_Mysql配置文件my.ini/my.cnf
  8. 并查集——小米笔试题求朋友圈个数,分小组个数
  9. 大厂在用的Python反爬虫手段,破了它!
  10. JAVA格式化输出浮点数:空格,位数
  11. snorkel_Snorkel AI:标记培训数据的程序化方法
  12. 计算机毕业设计springboot+vue基本微信小程序的考试系统
  13. [51nod1457]小K vs. 竹子
  14. 人生的意义在于梦想和坚持
  15. 【风马一族_xml】xml语法
  16. 安卓手机玩游戏卡顿怎么解决_安卓手机卡顿怎么办?5招教你变流畅,继续用三五年,媲美iPhone...
  17. STM32L152 的参考电压Vrefint输出
  18. 逻辑回归原理梳理_以python为工具 【Python机器学习系列(九)】
  19. 20154312 曾林 EXP9 Web安全基础
  20. 归并排序(Java代码实现)

热门文章

  1. Java swing皮肤(look and feel)大全
  2. html图片自动移动代码是什么,html图片滚动代码
  3. 51单片机c语言点亮LED,点亮LED
  4. 上滑ScrollView,实现控件顶部悬浮
  5. 充电计划 -- http协议
  6. 【Linux学习】基础IO
  7. java生成电子发票_电子发票实例(iText)
  8. 3DMAXDragonBones中骨骼绑定,IK约束,蒙皮权重的概念
  9. 基于S7-200 PLC和组态王温室大棚组态设计程序设计电气自动控制
  10. 黄聪:Win7文件另存为时 找不到桌面选项