一、层次分析法原理

层次分析法(Analytic Hierarchy Process,AHP)由美国运筹学家托马斯·塞蒂(T. L. Saaty)于20世纪70年代中期提出,用于确定评价模型中各评价因子/准则的权重,进一步选择最优方案。该方法仍具有较强的主观性,判断/比较矩阵的构造在一定程度上是拍脑门决定的,一致性检验只是检验拍脑门有没有自相矛盾得太离谱。

相关的理论参考可见:wiki百科

二、代码实现

需要借助Python的numpy矩阵运算包,代码最后用了一个b1矩阵进行了调试,相关代码如下,具体的实现流程已经用详细的注释标明,各位小伙伴有疑问的欢迎留言和我一起讨论。

import numpy as np
class AHP:"""相关信息的传入和准备"""def __init__(self, array):## 记录矩阵相关信息self.array = array## 记录矩阵大小self.n = array.shape[0]# 初始化RI值,用于一致性检验self.RI_list = [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]# 矩阵的特征值和特征向量self.eig_val, self.eig_vector = np.linalg.eig(self.array)# 矩阵的最大特征值self.max_eig_val = np.max(self.eig_val)# 矩阵最大特征值对应的特征向量self.max_eig_vector = self.eig_vector[:, np.argmax(self.eig_val)].real# 矩阵的一致性指标CIself.CI_val = (self.max_eig_val - self.n) / (self.n - 1)# 矩阵的一致性比例CRself.CR_val = self.CI_val / (self.RI_list[self.n - 1])"""一致性判断"""def test_consist(self):# 打印矩阵的一致性指标CI和一致性比例CRprint("判断矩阵的CI值为:" + str(self.CI_val))print("判断矩阵的CR值为:" + str(self.CR_val))# 进行一致性检验判断if self.n == 2:  # 当只有两个子因素的情况print("仅包含两个子因素,不存在一致性问题")else:if self.CR_val < 0.1:  # CR值小于0.1,可以通过一致性检验print("判断矩阵的CR值为" + str(self.CR_val) + ",通过一致性检验")return Trueelse:  # CR值大于0.1, 一致性检验不通过print("判断矩阵的CR值为" + str(self.CR_val) + "未通过一致性检验")return False"""算术平均法求权重"""def cal_weight_by_arithmetic_method(self):# 求矩阵的每列的和col_sum = np.sum(self.array, axis=0)# 将判断矩阵按照列归一化array_normed = self.array / col_sum# 计算权重向量array_weight = np.sum(array_normed, axis=1) / self.n# 打印权重向量print("算术平均法计算得到的权重向量为:\n", array_weight)# 返回权重向量的值return array_weight"""几何平均法求权重"""def cal_weight__by_geometric_method(self):# 求矩阵的每列的积col_product = np.product(self.array, axis=0)# 将得到的积向量的每个分量进行开n次方array_power = np.power(col_product, 1 / self.n)# 将列向量归一化array_weight = array_power / np.sum(array_power)# 打印权重向量print("几何平均法计算得到的权重向量为:\n", array_weight)# 返回权重向量的值return array_weight"""特征值法求权重"""def cal_weight__by_eigenvalue_method(self):# 将矩阵最大特征值对应的特征向量进行归一化处理就得到了权重array_weight = self.max_eig_vector / np.sum(self.max_eig_vector)# 打印权重向量print("特征值法计算得到的权重向量为:\n", array_weight)# 返回权重向量的值return array_weightif __name__ == "__main__":# 给出判断矩阵b = np.array([[1, 1 / 3, 1 / 8], [3, 1, 1 / 3], [8, 3, 1]])# 算术平均法求权重weight1 = AHP(b).cal_weight_by_arithmetic_method()# 几何平均法求权重weight2 = AHP(b).cal_weight__by_geometric_method()# 特征值法求权重weight3 = AHP(b).cal_weight__by_eigenvalue_method()

python实现AHP算法(层次分析法)相关推荐

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

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

  2. 数学建模常规算法——层次分析法

    层次分析法是将定性问题定量化处理的一种有效手段,根据不同的指标进行比对,得出最优解.层次分析法是一种定性和定量相结合的.系统化的.层次化的分析方法. 层次分析法的基本思路: 1)目标层: 2)准则层( ...

  3. 层次分析法python代码_Python 实现层次分析法

    import csv import numpy as np import tensorflow as tf #大概的思路是: #1.首先输入每个指标下面对应的对比矩阵,每个这个矩阵是由专家比较每两个 ...

  4. AHP | 层次分析法原理及Python实现

    层次分析法(Analytic Hierarchy Process,AHP)由美国运筹学家托马斯·塞蒂(T. L. Saaty)于20世纪70年代中期提出,用于确定评价模型中各评价因子/准则的权重,进一 ...

  5. 1.层次分析法(AHP)

    AHP(层次分析法) 层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(TLsaaty)正式提出.它是一种定性和定 ...

  6. 层次分析法(Analytic Hierarchy Process,AHP)

    层次分析法AHP 1. 基本原理 2. 基本思路 2.1 建立层次结构模型 2.2 构造判断矩阵 2.3 判断矩阵的一致性检验 3.权重赋值 最近参加的两个建模比赛中都用到了AHP(层次分析法,运筹学 ...

  7. python开发ahp算法应用(1024祝各位程序员节日快乐)

    开发背景: ahp 又名层次分析法,是一个多因素多层次的决策算法.为了将层次分析算法的流程简易化,将算法的作用生活化,于是我在一个夜深人静的晚上准备抽空做这个软件.网络上有十分专业的ahp算法分析软件 ...

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

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

  9. 层次分析法(AHP)算法简介

     一·.模型介绍 层次分析法(AHP)是美国运筹学家萨蒂于上世纪70年代初,为美国国防部研究"根据各个工业部门对国家福利的贡献大小而进行电力分配"课题时,应用网络系统理论和多目标综 ...

最新文章

  1. R语言ggplot2可视化分组变量下的数据分布(线条、色彩配置)、WVPlots包的ShadowHist函数比较分组下的数据直方图、ggplot2分面图facet_wrap可视化分组变量下的数据分布
  2. React编写input组件传参共用onChange
  3. cpu子系统(优化)
  4. Optimize a Flex application using deferred instantiations
  5. ABAP和Java的destination和JNDI
  6. linux学习之lvm-逻辑卷管理器
  7. 使用PostgREST的配置教程
  8. dubbo go中的TPS Limit设计与实现 滑动窗口、固定窗口有什么区别?
  9. 新硬盘挂载-fdisk+mount案例实操
  10. java创建对象方法列表(转)
  11. php 快速路由,基于FastRoute的快速路由(支持RESTful)
  12. 4.JUC-共享模型之无锁
  13. 腾讯云自建k8s对接文件存储CFS
  14. python可视化是什么意思_python3数据可视化是什么?
  15. 怎么批量设置EDIUS中的图片持续时间
  16. Android studio录屏按钮不能用怎么办
  17. ITRON的任务管理
  18. SDUT OJ 多项式求和
  19. 扣丁软件测试基础知识,苹果无线充电线圈揭秘,iphone8无线充电线圈介绍
  20. 转:PM产品设计九步法

热门文章

  1. npm run dev关闭终端后如何停止?退出vscode不行, 杀掉进程node.exe就行  Port 3030 is already in use [nodemon] app crashed
  2. 卡方分布matlab函数,Matlab在抽样分布教学中的应用
  3. Endnote X4 导入enw文件设置方法
  4. 亚马逊美国站儿童玩具车、毛绒玩具办理CPC认证 ASTMF963标准
  5. NRF52832学习笔记(40)——RFID RC522使用
  6. 志愿填报时,“大城市211”or“小城市985”,你怎么选择?(下)
  7. 二分图的最小顶点覆盖 和 最大独立集 和 最大团
  8. 窗口置顶工具v2.0.0
  9. 抽丝剥茧看华为p20pro, 三星s9+, 小米8 样张低频彩噪
  10. 计算机卡 怎么检测,卡硬工具箱怎么测试CPU 轻松了解自己的处理器性能