[助人为乐]层次分析法

news2025/7/28 3:10:26

朋友论文需要用到层次分析法。于是回顾了一下。

相关资料推荐

层次分析法(AHP)
层次分析法(AHP)详细版本
用人话讲明白AHP层次分析法(非常详细原理+简单工具实现)

层次分析法的流程图

在这里插入图片描述

构建层次结构模型(目标-准则-方案层)

深入分析实际问题,将有关因素自上而下分层。
下面以“旅游地选择问题”为例。
在这里插入图片描述

这里目标层和方案层之间只有一个准则层。其实可以有多个准则层。
在这里插入图片描述

构造各层次中的所有判断(成对比)矩阵

用成对比较法和1-9尺度,构造各层对上一层每一因素的判断较矩。
在这里插入图片描述

准则层对目标层的判断矩阵

A_Z = np.array([[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]])

方案(措施)层对准则层的判断矩阵

B_A1 = np.array([[1, 2, 5], 
              [1/2, 1, 2],
              [1/5, 1/2, 1]])
B_A2 = np.array([[1, 1/3, 1/8], 
              [3, 1, 1/3],
              [8, 3, 1]])
B_A3 = np.array([[1, 1, 3], 
              [1, 1, 3],
              [1/3, 1/3, 1]])
B_A4 = np.array([[1, 3, 4], 
              [1/3, 1, 1],
              [1/4, 1, 1]])
B_A5 = np.array([[1, 1, 1/4], 
              [1, 1, 1/4],
              [4, 4, 1]])

层次单排序及其一致性检验

层次单排序:获得同一层次因素对上一层次某因素相对重要性的排序权值的过程。
层次单排序需要经过一致性检验。

  • 一致性指标 C I CI CI C I = λ − n n − 1 CI=\frac{\lambda-n}{n-1} CI=n1λn λ \lambda λ是最大特征值
  • 随机一致性指标 R I RI RI:查表或者自己计算。(下面是表)
    在这里插入图片描述
  • 一致性比率 C R CR CR C R = C I R I CR=\frac{CI}{RI} CR=RICI

C R < 0.1 CR<0.1 CR<0.1认为通过一致性检验。

下面以”准则层对目标层的判断矩阵“为例

计算最大特征值和对应归一化特征(权)向量

def HSA(mat): # Hierarchical Single Arrangement
    index = np.argmax(np.linalg.eig(mat)[0])
    max_eig = np.round(np.real(np.linalg.eig(mat)[0][index]), 3)
    q = np.real(np.linalg.eig(mat)[1][:, index]) # 权向量
    normal_q = np.round(q/sum(q), 5)
    return max_eig, normal_q

print(f"A_Z的最大特征值为{HSA(A_Z)[0]}, 对应归一化权向量为{HSA(A_Z)[1]}" )
print(f"B_A1的最大特征值为{HSA(B_A1)[0]}, 对应归一化权向量为{HSA(B_A1)[1]}" )
print(f"B_A2的最大特征值为{HSA(B_A2)[0]}, 对应归一化权向量为{HSA(B_A2)[1]}" )
print(f"B_A3的最大特征值为{HSA(B_A3)[0]}, 对应归一化权向量为{HSA(B_A3)[1]}" )
print(f"B_A4的最大特征值为{HSA(B_A4)[0]}, 对应归一化权向量为{HSA(B_A4)[1]}" )
print(f"B_A5的最大特征值为{HSA(B_A5)[0]}, 对应归一化权向量为{HSA(B_A5)[1]}" )

在这里插入图片描述

上面是精确的计算。但是对于一致性较好的正反矩阵,可以近似计算最大特征值和对应特征向量的方法。这能简化运算。

近似求最大特征值和对应特征向量的方法1-和积法

在这里插入图片描述

和积法的python实现

def roughHSA(mat): # 和积法:列向量的算数平均来近似特征向量,然后利用A*w=lambda*w获得最大特征值
    # 列向量归一化+算数平均
    rough_normal_q = np.average(mat/np.sum(mat, axis=0), axis=1)
    # 对应的最大特征值
    rough_max_eig = np.round(np.average(mat@rough_normal_q/rough_normal_q), 3)
    return rough_max_eig, rough_normal_q

print(f"A_Z的最大特征值为{roughHSA(A_Z)[0]}, 对应归一化权向量为{roughHSA(A_Z)[1]}" )
print(f"B_A1的最大特征值为{roughHSA(B_A1)[0]}, 对应归一化权向量为{roughHSA(B_A1)[1]}" )
print(f"B_A2的最大特征值为{roughHSA(B_A2)[0]}, 对应归一化权向量为{roughHSA(B_A2)[1]}" )
print(f"B_A3的最大特征值为{roughHSA(B_A3)[0]}, 对应归一化权向量为{roughHSA(B_A3)[1]}" )
print(f"B_A4的最大特征值为{roughHSA(B_A4)[0]}, 对应归一化权向量为{roughHSA(B_A4)[1]}" )
print(f"B_A5的最大特征值为{roughHSA(B_A5)[0]}, 对应归一化权向量为{roughHSA(B_A5)[1]}" )

在这里插入图片描述

可以看到结果是近似的
关于和积法的理论依据可以参考:层次分析法中和积法(ANC)排序结果的理论推导

近似求最大特征值和对应特征向量的方法1-方根法(略)

计算CI、查RI、并计算CR,检验一致性是否通过

对于准则层对目标层的判断矩阵A_Z,其最大特征值为5.073,对应n=5,可以得到CR=0.016<0.1,通过一致性检验。

层次总排序及其一致性检验

层次总排序:计算某一层次所有因素对最高层(目标层)相对重要性的权重

计算权向量

在这里插入图片描述

层次总排序的一致性检验

在这里插入图片描述

代码实现

import numpy as np
# 准则层对目标层的判断矩阵
A_Z = np.array([[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]])
# 方案(措施)层对准则层的判断矩阵
B_A1 = np.array([[1, 2, 5], 
              [1/2, 1, 2],
              [1/5, 1/2, 1]])
B_A2 = np.array([[1, 1/3, 1/8], 
              [3, 1, 1/3],
              [8, 3, 1]])
B_A3 = np.array([[1, 1, 3], 
              [1, 1, 3],
              [1/3, 1/3, 1]])
B_A4 = np.array([[1, 3, 4], 
              [1/3, 1, 1],
              [1/4, 1, 1]])
B_A5 = np.array([[1, 1, 1/4], 
              [1, 1, 1/4],
              [4, 4, 1]])
def roughHSA(mat): # 和积法:列向量的算数平均来近似特征向量,然后利用A*w=lambda*w获得最大特征值
    # 列向量归一化+算数平均
    rough_normal_q = np.average(mat/np.sum(mat, axis=0), axis=1)
    # 对应的最大特征值
    rough_max_eig = np.round(np.average(mat@rough_normal_q/rough_normal_q), 3)
    return rough_max_eig, rough_normal_q
    
def CI_RI(mat):
    lamb = roughHSA(mat)[0]
    n = mat.shape[0]
    CI = (lamb-n)/(n-1)
    RI = [0, 0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51]
    return CI, RI[n]

# 准则层对目标层
for mat in ['A_Z']:
    print(f"{mat}的最大特征值为{roughHSA(eval(mat))[0]}, 对应归一化权向量为{roughHSA(eval(mat))[1]}" )
    A = roughHSA(eval(mat))[1]
    CI, RI = CI_RI(eval(mat))
    if CI/RI<0.1:
        print('层次单排序通过一致性检验')
    else:
        print('层次单排序未通过一致性检验')

# # 方案(措施)层对准则层
B = []
CI_list = []
RI_list = []
for mat in ['B_A1', 'B_A2', 'B_A3', 'B_A4', 'B_A5']:
    print(f"{mat}的最大特征值为{roughHSA(eval(mat))[0]}, 对应归一化权向量为{roughHSA(eval(mat))[1]}" )
    B.append(roughHSA(eval(mat))[1])
    CI, RI = CI_RI(eval(mat))
    CI_list.append(CI)
    RI_list.append(RI)
    if CI/RI<0.1:
        print('层次单排序通过一致性检验')
    else:
        print('层次单排序未通过一致性检验')

B=np.array(B)
print("B层的层次总排序为", B.T@A)

B层的层次总排序为 [0.29900738 0.24541338 0.45557924]
所以选方案3。

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

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

相关文章

认证服务---OAuth2.0基本介绍,微博登录整合到实际项目中【下篇】

前言 上一篇简单介绍了它的基本使用&#xff0c;这一篇就粗略说明一下如何在项目中实际应用 1、核心代码 1.1 认证微服务 当你进行了授权之后&#xff0c;跳转到一个新的地址。这个地址应该是你访问接口的地址。在这个接口中完成相应的access_token获取&#xff0c;以及调用…

docker-compose容器编排使用详解+示例

文章目录一、docker-compose概述1、产生的背景2、核心概念3、使用的三个步骤4、常用命令二、下载安装1、官方文档2、下载3、卸载三、使用compose1、前置知识&#xff0c;将一个springboot项目打包为镜像2、编写docker-compose.yml文件3、启动docker-compose4、停止一、docker-c…

[Linux]进程控制精讲,简单实现一个shell

目录 前言 进程创建 fork函数初识 写时拷贝 fork常见用法 fork调用失败的原因 进程终止 进程退出场景 进程退出码 查看进程退出码 退出码的含义 进程常见退出方法 exit VS _exit exit函数 _exit函数 二者的区别 return退出 进程等待 进程等待必要性 进程等待…

【Java文件操作】手把手教你拿捏IO 流

哈喽&#xff0c;大家好~我是保护小周ღ&#xff0c;本期为大家带来的是 Java 文件操作&#xff0c;理解文件的概念以及&#xff0c;常用的操作文件的类和方法&#xff0c;FileInputStream 类 和 FileOutputStream , PrintWriter and Scnner, Reader and Wirter 确定不来看看…

Python机器学习:集成学习

前两天看了SVM、逻辑回归、KNN、决策树、贝叶斯分类这几个很成熟的机器学习方法&#xff0c;但是&#xff0c;今天不看方法了&#xff0c;来看一种思想&#xff1a;集成学习&#xff1a; 先来看一下集成学习的基本原理&#xff1a;通过融合多个模型&#xff0c;从不同的角度降…

3.4 随机变量的相互独立性

学习目标&#xff1a; 要学习二维随机变量的相互独立性&#xff0c;我会按照以下步骤进行&#xff1a; 学习独立性的概念&#xff1a;在概率论中&#xff0c;两个事件A和B是相互独立的&#xff0c;当且仅当它们的概率乘积等于它们的联合概率&#xff0c;即P(A∩B)P(A)P(B)。将…

【Java EE】-网络编程(二) Socket(套接字) + Udp版本客户端服务器 +Tcp版本客户端服务器

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 主要内容&#xff1a;传输层协议对应Socket编程&#xff0c;DatagramSocket&#xff0c;DatagramPacket&#xff0c;Udp版本的客户端和服务器&#xff0c;UdpEchoSeve…

大力出奇迹——GPT系列论文学习(GPT,GPT2,GPT3,InstructGPT)

目录说在前面1.GPT1.1 引言1.2 训练范式1.2.1 无监督预训练1.2.2 有监督微调1.3 实验2. GPT22.1 引言2.2 模型结构2.3 训练范式2.4 实验3.GPT33.1引言3.2 模型结构3.3 训练范式3.4 实验3.4.1数据集3.5 局限性4. InstructGPT4.1 引言4.2 方法4.2.1 数据收集4.2.2 各部分模型4.3 …

【轻NAS】Windows搭建可道云私有云盘,并内网穿透公网访问

文章目录1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置5. 公网访问测试6.结语1.前言 云存储作为近些年兴起的概念&#xff0c;成功吸引了各大互联网厂商下场&…

thingsboard ARM网关

G5501边缘计算网关 G5501是采用中高端的通用型 SOC&#xff0c;一款4 核 arm 架构 A55 处理器的 网关设备。标配处理器为 Cortex-A55 四核&#xff0c;最高主频 2GHz 的处理器&#xff0c; 内置 4GB DDR4 内存&#xff0c;32GB eMMC 存储。 集成Mali G52 2EE 图形处理器GPU&am…

matplotlib设置中文字体为微软雅黑

matplotlib无法设置任何中文字体怎么办&#xff1f; 如何在linux系统下让matplotlib显示中文&#xff1f; 下载微软雅黑字体&#xff0c;把它放在某个目录下。 链接&#xff1a; https://pan.baidu.com/s/1SCLYpH_MzY7vn0HA0wxxAw?pwdft2j 提取码&#xff1a;ft2j 在代码中加…

Learning C++ No.18【STL No.8】

引言&#xff1a; 北京时间&#xff1a;2023/3/18/21:47&#xff0c;周末&#xff0c;不摆烂&#xff0c;但是欠钱终于还是遭报应了&#xff0c;导致坐牢7小时&#xff08;上午3.5&#xff0c;下午3.5&#xff09;&#xff0c;难受&#xff0c;充分意识到行哥是那么的和蔼可亲…

DLRover: 云上自动扩缩容 DeepRec 分布式训练作业

背景 如今&#xff0c;深度学习已广泛应用在搜索、广告、推荐等业务中&#xff0c;这类业务场景普遍有两个特点&#xff1a; 1&#xff09;训练样本量大&#xff0c;需要分布式训练提升训练速度&#xff1b; 2&#xff09;模型稀疏&#xff0c;即模型结构中离散特征计算逻辑占…

强训之【走方格的方案数和另类加法】

目录1.走方格的方案数1.1题目1.2思路讲解1.3代码展示2.另类加法2.1题目2.2思路讲解2.3代码展示3.选择题1.走方格的方案数 1.1题目 链接: link 描述 请计算n*m的棋盘格子&#xff08;n为横向的格子数&#xff0c;m为竖向的格子数&#xff09;从棋盘左上角出发沿着边缘线从左上…

第⑦讲:Ceph集群RGW对象存储核心概念及部署使用

文章目录1.RadosGW对象存储核心概念1.1.什么是RadosGW对象存储1.2.RGW对象存储架构1.3.RGW对象存储的特点1.4.对象存储中Bucket的特性1.4.不同接口类型的对象存储访问对比2.在集群中部署RadosGW对象存储组件2.1.部署RGW组件2.2.集群中部署完RGW组件后观察集群的信息状态2.3.修改…

【2023】Kubernetes之Pod与容器状态关系

目录简单创建一个podPod运行阶段&#xff1a;容器运行阶段简单创建一个pod apiVersion: v1 kind: pod metadata: name: nginx-pod spec:containers:- name: nginximages: nginx:1.20以上代码表示创建一个名为nginx-pod的pod资源对象。 Pod运行阶段&#xff1a; Pod创建后&am…

搜索引擎测试报告

文章目录一、项目背景二、项目功能三、测试目的四、测试环境五、测试计划1、功能测试2、自动化测试六、测试结果一、项目背景 java官方文档是我们在学习java语言中不可或缺的权威资料。相比于各种网站的Java资料&#xff0c;官方文档无论是语言表达还是组织方式都要更加全面和…

ThingsBoard开源物联网平台智慧农业实例快速部署教程(Ubuntu、CentOS适用)

ThingsBoard部署教程文档 文章目录ThingsBoard部署教程文档1. JDK环境安装2. 安装thingsBoard2.1 ThingsBoard软件包安装2.2 PostgreSQL安装2.3 PostgreSQL初始化配置3. 修改ThingsBord的配置4. 运行安装脚本测试5. 访问测试6. 导入一个仪表盘库6.1 导出仪表盘并导入自己的项目…

Spring —— Spring Boot 配置文件

JavaEE传送门JavaEE Spring —— Bean 作用域和生命周期 Spring —— Spring Boot 创建和使用 目录Spring Boot 配置文件Spring Boot 配置文件格式properties配置文件properties 基本语法properties 缺点yml 配置文件yml 基本语法yml 配置不同类型数据及 nullyml 配置对象yml…

【SQL Server】数据库开发指南(一)数据库设计

文章目录一、数据库设计的必要性二、什么是数据库设计三、数据库设计的重要性五、数据模型5.1 实体-关系&#xff08;E-R&#xff09;数据模型5.2 实体&#xff08;Entity&#xff09;5.3 属性&#xff08;Attribute&#xff09;5.5 关系&#xff08;Relationship&#xff09;六…