基于AHP模型指标权重分析python整理
一 背景介绍
- 日常会有很多定量分析的场景,然而也会有一些定性分析的场景
- 针对定性分析的场景,预测者只能通过主观判断分析能力来推断事物的性质和发展趋势
- 然而针对个人的直觉和虽然能够有一定的协助判断效果,但是很难量化到指标做后期的复用 AHP层次分析法可以将定性分析和定量分析更好地融合
二 AHP简单介绍
AHP(Analytic Hierarchy Process,简称AHP)中文名称为层次分析法,是美国运筹学匹兹堡大学教授萨蒂于20世纪70年代提出,用于将决策相关的因素划分不同层次,做定性和定量分析结合的方法。
其主要的思路为将决策分层三个层次:
- 最高层:最终决策的目的、要解决的问题,即目标层
- 中间层:主因素,考虑的因素、决策的准则层
- 最低层:决策时的备选方案,也可为中间层的子因素,方案层
整体决策的思路为:
1.构建层次评价模型:有明确的准则(指标)、可选方案、目标
2.基于AHP确定指标定权重
3.基于指标权重,计算量化后的方案选择
其中指标权重确认的整个步骤为:
1.构建指标判断矩阵(也就是指标两两比较,用数字区分重要程度)
2.进行权重的计算
3.进行一致性校验(保证比较是合理的)
4.进行层次总排序
5.进行方案选择
计算原理详细步骤细节建议可以参考相关书籍内容
三 相关代码
说明:
- 由于做测试数据结果验证,做了特殊的手工入口录入
- 可以根据实际录入需求做导入对象替换,或者原始数据数组粘贴对象替换
调试代码参考
import numpy as np# 计算指标权重的判断矩阵
def calculate_weights(comparison_matrix):num_indicators = comparison_matrix.shape[0]eigenvalues, eigenvectors = np.linalg.eig(comparison_matrix)max_eigenvalue_index = np.argmax(eigenvalues)max_eigenvector = eigenvectors[:, max_eigenvalue_index]weights = max_eigenvector / np.sum(max_eigenvector)return weights# 输入当前指标对应不同方案的打分判断矩阵
def input_comparison_matrix(indicator):num_solutions = len(indicator)comparison_matrix = np.zeros((num_solutions, num_solutions))for i in range(num_solutions):for j in range(i+1, num_solutions):comparison = float(input("{}相对{}的比较重要性为:".format(indicator[i], indicator[j])))comparison_matrix[i][j] = comparisoncomparison_matrix[j][i] = 1 / comparisonreturn comparison_matrix# 进行一致性检验
def consistency_check(comparison_matrix):num_criteria = comparison_matrix.shape[0]# 计算特征向量eigenvalues, eigenvectors = np.linalg.eig(comparison_matrix)max_eigenvalue = max(eigenvalues)max_eigenvector = eigenvectors[:, np.argmax(eigenvalues)].real# 计算一致性指标CIconsistency_index = (max_eigenvalue - num_criteria) / (num_criteria - 1)# 计算随机一致性指标RIrandom_index = {1: 0,2: 0,3: 0.58,4: 0.90,5: 1.12,6: 1.24,7: 1.32,8: 1.41,9: 1.45,10: 1.49,11: 1.51,12: 1.48,13: 1.56,14: 1.57,15: 1.59}random_index_value = random_index.get(num_criteria)# 计算一致性比例CRconsistency_ratio = consistency_index / random_index_valuereturn consistency_ratio#主程序
# 计算指标的权重结果
num_indicators = int(input("请输入指标的数量:"))
indicators = []
for i in range(num_indicators):indicator = input("请输入第{}个指标:".format(i+1))indicators.append(indicator)
# 进行指标权重的比较,并计算指标的权重结果
indicator_comparison_matrix = input_comparison_matrix(indicators)
indicator_weights = calculate_weights(indicator_comparison_matrix)#计算录入不同方案的比较矩阵
num_solutions = int(input("请输入方案的数量:"))
solutions = []
for i in range(num_solutions):solution = input("请输入第{}个方案:".format(i+1))solutions.append(solution)#计算不同方案在同一指标下评估占比的权重
solution_weight_matrix = np.zeros((num_indicators, num_solutions))
solution_check_list = []
for indicator in range(num_indicators):print("请根据{}对不同方案的重要程度进行比较:".format(indicators[indicator]))comparison_matrix = input_comparison_matrix(solutions)solutions_weight = calculate_weights(comparison_matrix)solution_check = consistency_check(comparison_matrix)solution_weight_matrix[indicator] = solutions_weightsolution_check_list.append(solution_check)# 计算不同方案综合比较结果
scores = np.dot(indicator_weights,solution_weight_matrix)# 进行一致性检验
indicator_check = consistency_check(indicator_comparison_matrix)# 输出评估结果
print("指标权重结果为:")
print(indicator_weights)
print("不同指标对应方案的综合打分结果为:")
print(solution_weight_matrix)
print("方案综合评选结果为:")
print(scores)
print("指标检验和方案检验,进行一致性检验结果如下:")
print(indicator_check,solution_check_list)
输出结果参考:
请输入指标的数量:3
请输入第1个指标:指标1
请输入第2个指标:指标2
请输入第3个指标:指标3
指标1相对指标2的比较重要性为:3
指标1相对指标3的比较重要性为:2
指标2相对指标3的比较重要性为:2
请输入方案的数量:2
请输入第1个方案:方案1
请输入第2个方案:方案2
请根据指标1对不同方案的重要程度进行比较:
方案1相对方案2的比较重要性为:2
请根据指标2对不同方案的重要程度进行比较:3
请根据指标3对不同方案的重要程度进行比较:
方案1相对方案2的比较重要性为:3
指标权重结果为:
[0.54721643+0.j 0.26307422+0.j 0.18970934+0.j]
不同指标对应方案的综合打分结果为:
[[0.66666667 0.33333333][0.75 0.25 ][0.75 0.25 ]]
方案综合评选结果为:
[0.70439863+0.j 0.29560137+0.j]
指标检验和方案检验,进行一致性检验结果如下:
(-0.7451630649499623+0j) [-inf, -inf, -inf]
相关文章:
基于AHP模型指标权重分析python整理
一 背景介绍 日常会有很多定量分析的场景,然而也会有一些定性分析的场景针对定性分析的场景,预测者只能通过主观判断分析能力来推断事物的性质和发展趋势然而针对个人的直觉和虽然能够有一定的协助判断效果,但是很难量化到指标做后期的复用 …...
用python实现基本数据结构【02/4】
*说明 如果需要用到这些知识却没有掌握,则会让人感到沮丧,也可能导致面试被拒。无论是花几天时间“突击”,还是利用零碎的时间持续学习,在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢?列表、字典、集…...
蓝牙Mesh专有DFU
蓝牙Mesh专有DFU Mesh专有DFU协议介绍特征DFU模式和类型角色并发传输混合设备的网络传输速率后台操作传输分区内存映射安全DFU固件IDApplication firmware IDSoftDevice firmware IDBootloader firmware ID 设备页面格式内容 Mesh专有DFU协议介绍 设备固件更新(Device Firmwar…...
浅谈综合管廊智慧运维管理平台应用研究
贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要:为提升综合管廊运维管理水平,实现管理的数字化转型,采用综合监测系统、BIMGIS 可视化系统、智能机器人巡检、结构安全监测等技术,搭建实时监控、应急管理、数据分析等多功能…...
Httpservletrequest与Httpservletresponse
目录 一、Httpservletrequest 1.1什么是Httpservletrequest 1.2Httpservletrequest中的方法 二、Httpservletresponse 1.1什么是Httpservletresponse 1.2Httpservletresponse的方法 一、Httpservletrequest 1.1什么是Httpservletrequest HttpServletRequest(…...
文件上传之图片码混淆绕过(upload的16,17关)
目录 1.upload16关 1.上传gif loadup17关(文件内容检查,图片二次渲染) 1.上传gif(同上面步骤相同) 2.条件竞争 1.upload16关 1.上传gif imagecreatefromxxxx函数把图片内容打散,,但是不会…...
Jetsonnano B01 笔记5:IIC通信
今日继续我的Jetsonnano学习之路,今日学习的是IIC通信,并尝试使用Jetson读取MPU6050陀螺仪数据。文章提供源码。文章主要是搬运的官方PDF说明,这里结合自己实际操作作笔记。 目录 IIC通信: IIC硬件连线: 安装IIC库文…...
【网络爬虫笔记】爬虫Robots协议语法详解
Robots协议是指一个被称为Robots Exclusion Protocol的协议。该协议的主要功能是向网络蜘蛛、机器人等搜索引擎爬虫提供一个标准的访问控制机制,告诉它们哪些页面可以被抓取,哪些页面不可以被抓取。本文将进行爬虫Robots协议语法详解,同时提供…...
MATLAB 2022b 中设置关闭 MATLAB 之前进行询问
在 MATLAB 2022b 中可以进行设置,在关闭 MATLAB 之前进行询问,防止意外关闭 MATLAB。如图:...
在SpringBoot框架下,接口有读个实现类,在不改变任何源码的情况下,SpringBoot怎么知道给接口注入哪个实现类的依赖呢?
在Spring Boot框架下,当一个接口有多个实现类时,Spring Boot 默认情况下不知道要注入哪个实现类的依赖。因此,你需要使用一些方法来明确告诉Spring Boot应该注入哪个实现类的依赖。 以下是一些常用的方法: 1.使用Qualifier注解&a…...
探索数据库管理的利器 - PHPMyAdmin
有一个项目,后端由博主独自负责,最近需要将项目交接给另一位同事。在项目初期,博主直接在数据库中使用工具创建了相关表格,并在完成后利用PhpMyAdmin生成了一份数据字典,供团队使用。然而,在随后的开发过程…...
大数据技术原理与应用学习笔记第1章
黄金组合访问地址:http://dblab.xmu.edu.cn/post/7553/ 1.《大数据技术原理与应用》教材 官网:http://dblab.xmu.edu.cn/post/bigdata/ 2.大数据软件安装和编程实践指南 官网林子雨编著《大数据技术原理与应用》教材配套大数据软件安装和编程实践指…...
算法从未放弃你,放弃你的只有你自己
在人生的旅程中,我们常常会遇到各种挫折和困难。有些人在面对困境时,会选择放弃,将责任归咎于命运或外部环境。然而,算法教给我们一个重要的道理:永远不要放弃 当我们遇到问题或挑战时,算法可以帮助我们找到…...
[Linux 基础] linux基础指令(1)
文章目录 1、Linux下基本指令1.ls指令2.pwd指令3.cd指令4.touch指令5.mkdir指令6.rmdir指令 && rm指令7.man指令8.cp指令9.mv指令10.cat指令11.more指令12.less指令 Linux学习笔记从今天开始不断更新了。第一篇我们从基础指令开始学起。 1、Linux下基本指令 好多人都说…...
ESP32蓝牙主从站模式:主站发送,从站接收,同时附加简单通信协议
主站发送:WXAiBj,六个字符 蓝牙模式是一个字符一个字符发送 主站和从站设置通信协议 使得六个字符一句话完整接收,同时打印出接收完成信息 硬件电路连接如下: 主从站为两个ESP32,只使用了其中的蓝牙功能 代码如下: 主站: //主机模式 #include <Arduino.h> …...
Redis布隆过滤亿级大数据
场景描述 小程序用户的openid作为最主要的业务查询字段,在做了缓存设计之后仍有非常高频的查询,通过埋点简单统计约在每日1000w次。 其中:由于有新增用户原因,导致请求的openid根本不存在MySQL数据库中,这部分统计约占…...
车联网仿真工具Veins学习1
准备条件 假如你是一个小白,先找到相关的参考资料(已根据上一篇博客安装好Veins),主要是官方文档和相关的博客,官方提供了一个example,我找到的资料如下: Frequently Asked Questions (FAQ) O…...
封闭岛屿数量 -- 二维矩阵的dfs算法
1254. 统计封闭岛屿的数目 这道题和 岛屿数量 – 二维矩阵的dfs算法 类似,区别在于不算边缘部分的岛屿,那其实很简单,把上⼀题中那些靠边的岛屿排除掉,剩下的就是「封闭岛屿」了。 关于岛屿的相似题目: 岛屿数量 –…...
C语言_指针(1)
文章目录 前言一、指针数组1.1利用指针数组模拟出二维数组 二、数组指针2.1数组名是数组首元素的地址2.2 二维数组传参2.3 一级指针传参2.4 二级指针传参 三. 函数指针四 . typedef 重命名 前言 指针数组是由指针组成的数组。它的每个元素都是一个指针,可以指向任何…...
建站系列(一)--- 网站基本常识
目录 相关系列文章前言一、因特网二、网站三、服务器四、IP五、域名六、DNS七、Hosts文件八、端口号九、URL十、静态网站十一、动态网站 相关系列文章 建站系列(一)— 网站基本常识 建站系列(二)— 域名、IP地址、URL、端口详解 …...
Codeforces Round 895 (Div. 3) A ~ F
Dashboard - Codeforces Round 895 (Div. 3) - Codeforces A 问多少次能使a 和 b相等,就是abs(a - b) / 2除c向上取整,也就是abs(a - b)除2c向上取整。 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #de…...
【前端知识】Axios——请求拦截器模板
Axios——请求拦截器模板 Axios是一个基于Promise的HTTP客户端,用于发送HTTP请求。它可以在浏览器和Node.js环境中使用,并且提供了许多强大的功能,例如拦截请求和响应、转换请求和响应数据、取消请求等。 Axios具有简单易用的API,…...
企业架构LNMP学习笔记16
基于IP的访问控制: 基于ngx_http_access_module模块,默认可使用。 语法是: deny ip 禁止IP访问 allow ip 允许IP访问 上面是允许的,下面是deny的。 老师建议写在server段中是比较合适的。 基于用户的访问控制: …...
redis实现消息队列
背景 消息队列(Message Queue)是一种常见的软件架构模式,用于在分布式系统中传递和处理异步消息。它解耦了发送消息的应用程序和接收消息的应用程序之间的直接依赖关系,使得消息的发送者和接收者可以独立地演化和扩展。 消息队列…...
JVM指令集
概述 JVM,Java Virtual Machine,Java虚拟机器,作为一台独立的机器,一般包括独立的指令集、独立的存储体系以及适合机器自身的运算方式,本章节主要是描述JVM指令的功能与作用。 JVM的每个指令的格式是【指令 操作数1操…...
如何用SSH克隆GitHub项目
诸神缄默不语-个人CSDN博文目录 使用场景:由于不可知的网络问题,无法用HTTPS克隆GitHub项目。 报错fatal: unable to access https://github.com/PolarisRisingWar/llm-throught-ages.git/: GnuTLS recv error (-110): The TLS connection was non-pro…...
sqlx库使用指南
sqlx库使用指南 在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子,介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。 sqlx介绍 在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认为是Go…...
算法篇汇总
文章浏览 I https://leetcode.cn/problems/article-views-i/description/?envTypestudy-plan-v2&envId30-days-of-pandas&langpythondata 我的题解: import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:dfviews[views[auth…...
typeScript 学习笔记(二)
类接口 TypeScript 入门教程 (xcatliu.com) 十四.类 ① 类 类:定义了一件事物的抽象特点,包含它的属性和方法对象:类的实例,通过new生成面向对象(OOP)的三大特性:封装、继承、多态封装&…...
redis集群架构详解
一、集群架构搭建 1、配置 在一台机器上模拟多台机器搭建redis集群,一个集群代表一台物理机 集群1路径: /usr/local/redis/redis-cluster/cluster1/9001/redis.conf/usr/local/redis/redis-cluster/cluster1/9004/redis.conf/usr/local/redis/redis-…...
兰州网站seo收费/b站视频推广
POJ2689 Prime Distance题解题目题目描述英文题目中文题意输入输出格式输入格式输出格式输入输出样例输入样例输出样例题解题目 题目描述 原题 英文题目 The branch of mathematics called number theory is about properties of numbers. One of the areas that has captu…...
seo竞争对手网站分析/惠州百度推广优化排名
文章目录前言一、微信支付小程序确认支付结果和退款功能实现1.确认支付结果2.退款功能实现前言 微信小程序在支付成功后会给注册的接口发消息来通知订单支付成功的状态,下面是微信和接口通信的数据格式: 微信通知频率为: 15s/15s/30s/3m/10m/20m/30m/…...
微信端微网站怎么做/seo网站管理
2.1 问题 沿用练习一,通过调整Nginx服务端配置,实现以下目标: 访问Web页面需要进行用户认证 用户名为:tom,密码为:1234562.2 方案 通过Nginx实现Web页面的认证,需要修改Nginx配置文件&#x…...
商务网站设计/百度网页版链接
作者:贾春生,http://dwz.win/mygSELECT COUNT( * ) FROM TABLE 是个再常见不过的 SQL 需求了。在 MySQL 的使用规范中,我们一般使用事务引擎 InnoDB 作为(一般业务)表的存储引擎,在此前提下,COUNT( * )操作的时间复杂度…...
肥西县建设官方局网站/熊猫关键词工具
业务是否依赖COPY命令加载数据?PostgreSQL12提供了一个新特性,大大加快了加载速度。COPY:Loading and unloading data as fast as possible细看PostgreSQL12的COPY语法,发现有两处变动:1)\h 会有手册文档链…...
婚纱网站布局ppt怎么做/seo关键词推广公司
看了很多文档资料和博文心得分享,各有千秋。总结一下个人理解,以便后期查阅。 首先一开始不是特别了解微服务的骨架模式,查阅资料了解微服务可以说是: 微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自…...