数学建模--层次分析法(AHP)的Python实现

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示

1.算法流程简介

"""
AHP:层次分析法,层次分析法还是比较偏向于主观的判断的,所以在建模的时候尽可能不要去使用层次分析法
不过在某些创新的评价方法上,也是能够运用层次分析使得评价变得全面一些,有可能险中求胜,获得评委的青睐的
"""
具体流程如下:
#1.首先进行预备信息的求解便于一致性检验
#2.进行一致性检验,判断是否可以使用层次分析法
#3.求解权重的三种方法(算术平均值法,几何平均值法,特征向量法)

2.算法核心代码

"""
AHP:层次分析法,层次分析法还是比较偏向于主观的判断的,所以在建模的时候尽可能不要去使用层次分析法
不过在某些创新的评价方法上,也是能够运用层次分析使得评价变得全面一些,有可能险中求胜,获得评委的青睐的
"""
import numpy as np
class AHP:
#1.首先进行预备信息的求解便于一致性检验def __init__(self,cmatrix):self.arr=cmatrix#导入比较矩阵#获取比较矩阵的相关数据self.n=cmatrix.shape[0]#比较矩阵的大小#设置RI便于一致性检验self.RI= [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]#求解特征值和特征向量np.linalg.eig()会一起返回self.eig_val, self.eig_vector = np.linalg.eig(self.arr)#求解矩阵的最大特征值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[self.n - 1])
#2.进行一致性检验,判断是否可以使用层次分析法def consist_test(self):#一致性指标CIprint("比较矩阵的CI值为:",str(self.CI_val))#一致性指标CRprint("比较矩阵的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),"<0.1,通过一致性检验!")return Trueelse:print("比较矩阵CR值为:",str(self.CR_val),">0.1,未通过一致性检验,不能使用层次分析法!")return False
#3.求解权重的三种方法:
#1.算术平均法def Arithmetic_averaging_method(self):#求每一列的和sum_col=np.sum(self.arr,axis=0)#归一化处理array_std=self.arr/sum_col#计算权重向量weight_Arithmetic_averaging=np.sum(array_std,axis=1)/self.nprint("算术平均法求得的权重为:",weight_Arithmetic_averaging)return weight_Arithmetic_averaging#2.几何平均法def Geometric_averaging_method(self):# 求矩阵的每列的积col_plus = np.product(self.arr, axis=0)# 将得到的积向量的每个分量进行开n次方array_power = np.power(col_plus, 1 / self.n)# 将列向量归一化weight_Geometric_averaging = array_power / np.sum(array_power)# 打印权重向量print("几何平均法求得的权重为:", weight_Geometric_averaging)# 返回权重向量的值return weight_Geometric_averaging#3.特征值权重法def Eigenvalue_weighting_method(self):# 将矩阵最大特征值对应的特征向量进行归一化处理就得到了权重weight_Eigenvalue_weighting = self.max_eig_vector / np.sum(self.max_eig_vector)# 打印权重向量print("特征值权重法法求得的权重为:", weight_Eigenvalue_weighting)# 返回权重向量的值return weight_Eigenvalue_weightingdef test_run_demo():#comparsion_matrix可以随意修改comparsion_matrix=np.array([[1,1/4,1/9],[4,1,1/2],[9, 2, 1]])weight1 = AHP(comparsion_matrix).Arithmetic_averaging_method()weight2 = AHP(comparsion_matrix).Geometric_averaging_method()weight3 = AHP(comparsion_matrix).Eigenvalue_weighting_method()#运行区域:
test_run_demo()

3.算法效果展示

算术平均法求得的权重为: [0.07243906 0.30125047 0.62631047]
几何平均法求得的权重为: [0.7374984  0.17727613 0.08522547]
特征值权重法法求得的权重为: [0.07239208 0.30116321 0.62644471]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/69369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全带你练爬虫-100练】第23练:文件内容的删除+写入

目录 0x00 前言&#xff1a; 0x02 解决&#xff1a; 0x00 前言&#xff1a; 本篇博文可能会有一点点的超级呆 0x02 解决&#xff1a; 你是不是也会想&#xff1a; 使用pyrhon将指定文件夹位置里面的1.txt中数据全部删除以后---->然后再将参数req_text的值写入到1.txt …

HDFS HA 高可用集群搭建详细图文教程

目录 一、高可用&#xff08;HA&#xff09;的背景知识 1.1 单点故障 1.2 如何解决单点故障 1.2.1 主备集群 1.2.2 Active、Standby 1.2.3 高可用 1.2.4 集群可用性评判标准&#xff08;x 个 9&#xff09; 1.3 HA 系统设计核心问题 1.3.1 脑裂问题 1.3.2 数据状…

Pytorch从零开始实战01

Pytorch从零开始实战——MNIST手写数字识别 文章目录 Pytorch从零开始实战——MNIST手写数字识别环境准备数据集模型选择模型训练可视化展示 环境准备 本系列基于Jupyter notebook&#xff0c;使用Python3.7.12&#xff0c;Pytorch1.7.0cu110&#xff0c;torchvision0.8.0&…

【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「冀科数字」解题思路

第十届CCF大数据与计算智能大赛&#xff08;2022 CCF BDCI&#xff09;已圆满结束&#xff0c;大赛官方竞赛平台DataFountain&#xff08;简称DF平台&#xff09;正在陆续释出各赛题获奖队伍的方案思路&#xff0c;欢迎广大数据科学家交流讨论。 本方案为【大规模金融图数据中…

Android10 SystemUI系列(一)概述

一、前言 由于笔者之前负责过SystemUI,之前没有抽空把很多东西整理出来,趁着最近不太忙,就慢慢动手梳理一下,顺便把自己遇到的问题也整理一下,当然自己之前主要看的是android11 之后的源码。这次主要是Android10 的源码,当然原理大差不差,也算是自己沉淀一下了 二、Sy…

Github 下载指定文件夹(git sparse-checkout)

比如要下载这里的 data_utils 步骤 1、新建空文件夹&#xff0c;并进入新建的空文件夹。 2、git init 初始化 3、git remote add origin 添加远程仓库 4、git config core.sparsecheckout true 允许稀疏检出 5、git sparse-checkout set 设置需要拉取的文件夹&#xff08;可…

面试问题记录一 --- C++(Qt方向)

以下是我于2023年6~7月间换工作时遇到的面试题目,有需要的小伙伴可以参考下。约100个题目。 1 C和C++的区别 1) 文件区别:C源文件后缀 .c;C++源文件后缀 .cpp 2) 返回值: C默认返回int型;C++ 若无返回值,必须指定为void 3) 参数列表:C默认接收多个…

zookeeper-3.6.4集群搭建

1、上传zookeeper安装包并解压 上传路径&#xff1a;/opt/software/ 解压路径&#xff1a;/opt/module/ 2、创建数据目录及日志目录 #数据目录&#xff1a;/data/zookeeper/data/ #3台机器创建存储目录&#xff1a; sudo mkdir -p /data/zookeeper/data#日志目录&#xff1a…

Docker Desktop 设置镜像环境变量

点击run 展开Optional settings container name &#xff1a;容器名称 Ports&#xff1a;根据你需要的端口进行输入&#xff0c;不输入则默认 后面这个 比如我这个 5432 Volumes&#xff1a;卷&#xff0c;也就是做持久化 需要docker 数据保存的地方 Environment variables…

Mysql中having语句与where语句的用法与区别

分析&回答 我们在写sql语句的时候,经常会使用where语句,很少会用到having,其实在mysql中having子句也是设定条件的语句与where有相似之处但也有区别。having子句在查询过程中慢于聚合语句(sum,min,max,avg,count)。而where子句在查询过程中则快于聚合语句(sum,min,max,avg…

解决C++ 遇笔试题输入[[1,2,3,...,],[5,6,...,],...,[3,1,2,...,]]问题

目录 0 引言1 思路2 测试结果3 完整代码4 总结 0 引言 现在面临找工作问题&#xff0c;做了几场笔试&#xff0c;遇到了一个比较棘手的题目就是题目输入形式如下&#xff1a; [ [3,1,1], [3,5,3], [3,2,1] ] 当时遇到这个问题还是比较慌的&#xff0c;主要是之前没有遇到这样的…

【STM32】锁存器

问题背景 在学习FSMC控制外部NOR存储器时&#xff0c;看到在NOR复用接口模式下&#xff0c;AD信号[15:0]是复用的。也就是说&#xff0c;若不使用锁存器:当NADV为低时&#xff0c;ADx(x0…15)上出现地址信号Ax&#xff0c;当NADV变高时&#xff0c;ADx上出现数据信号Dx。若使用…

9.3.3网络原理(网络层IP)

一.报文: 1.4位版本号:IPv4和IPv6(其它可能是实验室版本). 2.4位首部长度:和TCP一样,可变长,带选项,单位是4字节. 3.8位服务类型 4.16位总长度:IP报头 IP载荷 传输层是不知道载荷长度的,需要网络层来计算. IP报文 - IP报头 IP载荷 TCP报文 TCP载荷 IP载荷(TCP报文) …

Golang编写客户端SDK,并开源发布包到GitHub,供其他项目import使用

目录 编写客户端SDK&#xff0c;并开源发布包到GitHub1. 创建 GitHub 仓库2. 构建项目&#xff0c;编写代码Go 代码示例&#xff1a;项目目录结构展示&#xff1a; 3. 提交代码到 GitHub仓库4. 发布版本5. 现在其他人可以引用使用你的模块包了 编写客户端SDK&#xff0c;并开源…

Vue项目案例-头条新闻

目录 1.项目介绍 1.1项目功能 1.2数据接口 1.3设计思路 2.创建项目并安装依赖 2.1创建步骤 2.2工程目录结构 2.3配置文件代码 3.App主组件开发 3.1设计思路 3.2对应代码 4.共通组件开发 4.1设计思路 4.2对应代码 5.头条新闻组件开发 5.1设计思路 5.2对应代码 …

Xcode打包ipa文件,查看app包内文件

1、Xcode发布ipa文件前&#xff0c;在info中打开如下两个选项&#xff0c;即可在手机上查看app包名文件夹下的文件及数据。

postman9.12.汉化版(附有下载链接)

想用英文版本的可以直接点击下载最新版本 这里直接付上9.12.2版本的下载链接&#xff0c;如果大家要下载别的版本&#xff0c;可以直接修改链接里面的版本号即可 &#xff0c;下面是汉化包下载 链接&#xff1a;https://pan.baidu.com/s/1izK3HfqlfXJdq6KIYeJ2zw?pwdpetk 提…

【数据结构】2015统考真题 6

题目描述 【2015统考真题】求下面的带权图的最小&#xff08;代价&#xff09;生成树时&#xff0c;可能是Kruskal算法第2次选中但不是Prim算法&#xff08;从v4开始&#xff09;第2次选中的边是&#xff08;C&#xff09; A. (V1, V3) B. (V1, V4) C. (V2, V3) D. (V3, V4) …

划分Vlan时需要注意的问题

网络部分2019年才开始学习的&#xff0c;在学习过程中配置了整个公司的网络&#xff0c;心里才有了一点把握&#xff0c;算是掌握了最基本的。 不会的就上网学&#xff0c;反正网络上什么知识都有&#xff0c;只要有需求就对照着学&#xff0c;很长时间没有学习网络了&#xff…

567. 字符串的排列

我写了首诗&#xff0c;把滑动窗口算法变成了默写题 | labuladong 的算法小抄 (gitee.io) windows放窗口里需要统计的元素 class Solution { public:bool checkInclusion(string s1, string s2) {int left 0;int right 0;int flag 0;map<char, int> need;for (int …