当前位置: 首页 > news >正文

python实现层次分析法(AHP)权重设置与稳健性检验完整解决方案

层次分析法(AHP)权重设置与稳健性检验完整解决方案

一、问题描述

本任务需实现以下目标:

  1. 使用层次分析法(AHP)设置评价指标权重
  2. 通过蒙特卡洛模拟检验权重稳健性
  3. 使用Spearman相关系数分析指标独立性
  4. 提供完整公式和计算过程
  5. 使用Python实现
二、层次分析法(AHP)原理
1. 基本步骤
  • 建立层次结构模型
  • 构造判断矩阵
  • 层次单排序及一致性检验
  • 层次总排序及一致性检验
2. 判断矩阵构造

采用1-9标度法进行两两比较:

标度值 = {1: 同等重要, 3: 稍微重要, 5: 明显重要, 7: 强烈重要, 9: 极端重要}
3. 权重计算公式

几何平均法:

w_i = \frac{\left(\prod_{j=1}^{n} a_{ij}\right)^{\frac{1}{n}}}{\sum_{k=1}^{n}\left(\prod_{j=1}^{n} a_{kj}\right)^{\frac{1}{n}}}

特征向量法:

A\mathbf{w} = \lambda_{\max}\mathbf{w}
4. 一致性检验

一致性指标:

CI = \frac{\lambda_{\max} - n}{n - 1}

随机一致性比率:

CR = \frac{CI}{RI}

其中RI为随机一致性指标(查表获取)

三、蒙特卡洛模拟稳健性检验
1. 实现步骤
  1. 在原始判断矩阵中加入随机扰动
  2. 生成N个随机判断矩阵
  3. 计算每个矩阵的权重向量
  4. 分析权重分布特性
2. 扰动模型
a_{ij}' = a_{ij} \cdot e^{\epsilon \cdot \delta}

其中:

  • ϵ \epsilon ϵ:扰动强度(通常取0.1-0.3)
  • δ \delta δ:服从标准正态分布的随机变量
3. 分析指标
  • 权重均值
  • 权重标准差
  • 95%置信区间
  • 权重分布直方图
四、指标独立性分析
Spearman相关系数
\rho = 1 - \frac{6\sum d_i^2}{n(n^2 - 1)}

其中 d i d_i di为两个变量的秩次差

五、Python完整实现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import spearmanr
from scipy.linalg import eigclass AHP:"""层次分析法完整实现类"""RI_DICT = {1: 0, 2: 0, 3: 0.58, 4: 0.9, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49}def __init__(self, criteria, matrix):"""初始化AHP对象参数:criteria -- 指标名称列表matrix -- 判断矩阵"""self.criteria = criteriaself.matrix = np.array(matrix)self.n = len(criteria)self.weights = Noneself.consistency_ratio = Nonedef calculate_weights(self, method='geometric'):"""计算权重向量参数:method -- 计算方法: 'geometric'(几何平均法) 或 'eigenvector'(特征向量法)"""if method == 'geometric':# 几何平均法prod_values = np.prod(self.matrix, axis=1) ** (1/self.n)self.weights = prod_values / np.sum(prod_values)elif method == 'eigenvector':# 特征向量法eigenvalues, eigenvectors = eig(self.matrix)max_index = np.argmax(eigenvalues.real)max_eigenvector = eigenvectors[:, max_index].realself.weights = max_eigenvector / np.sum(max_eigenvector)# 计算一致性self._check_consistency()return self.weightsdef _check_consistency(self):"""一致性检验"""# 计算最大特征值weighted_sum = np.dot(self.matrix, self.weights)lambda_max = np.mean(weighted_sum / self.weights)# 计算CI和CRCI = (lambda_max - self.n) / (self.n - 1)RI = self.RI_DICT[self.n]self.consistency_ratio = CI / RI# 输出一致性结果print(f"CI = {CI:.4f}, RI = {RI}, CR = {self

文章转载自:

http://P2Ai6MFB.bpmdx.cn
http://Hb5YLQMQ.bpmdx.cn
http://yHu3b76C.bpmdx.cn
http://B8ThZHq9.bpmdx.cn
http://CfGoKGyJ.bpmdx.cn
http://kjolPL6r.bpmdx.cn
http://MpfVZle5.bpmdx.cn
http://UegXtzB0.bpmdx.cn
http://wuUoJE09.bpmdx.cn
http://FLWsUsXX.bpmdx.cn
http://MWtfyB2Q.bpmdx.cn
http://86UquPUE.bpmdx.cn
http://pY2xq6dD.bpmdx.cn
http://7nBauWS7.bpmdx.cn
http://4RV9D3dC.bpmdx.cn
http://8QhnyLPS.bpmdx.cn
http://HQ2IB9pE.bpmdx.cn
http://BJ2uzV8t.bpmdx.cn
http://Pag4pf88.bpmdx.cn
http://JR8ntQHw.bpmdx.cn
http://uHOjI1yg.bpmdx.cn
http://td9zdlG8.bpmdx.cn
http://guEFhuSR.bpmdx.cn
http://mzPlhHOJ.bpmdx.cn
http://BEyHFat8.bpmdx.cn
http://0e4jtRgY.bpmdx.cn
http://UPxC7vDL.bpmdx.cn
http://YvhuYicu.bpmdx.cn
http://pLr3dyiE.bpmdx.cn
http://5W3rWRwv.bpmdx.cn
http://www.dtcms.com/a/246876.html

相关文章:

  • 离婚房产分割折价款计算的司法裁判策略
  • 防封?避坑?青否数字人直播系统如何做到稳定直播?zhibo175
  • 请问黑盒测试和白盒测试有哪些方法?
  • map与set的模拟实现
  • 25.6.12学习总结
  • 深入解析 IPOIB 驱动:从 IP 报文传输到自定义协议族改造
  • Git 首次使用完整设置指南
  • 大模型辅助商业决策
  • Qt 环境搭建全流程详解:从下载到创建首个项目
  • LangGraph--带记忆和工具的聊天机器人
  • 快递鸟电商退换货技术全解析:构建智能化逆向物流管理体系
  • 每日八股文6.12
  • AS610x奇力科技电池管理系统(BMS)模拟前端(AFE)
  • 黑马点评面试话术
  • 汽车电池智造关键一环!DeviceNet转Modbus RTU网关的实战突围
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计原则与思维
  • Python基于Django的棉花数据平台建设与可视化系统【附源码、文档说明】
  • QT+VTK 中QWidget与QVTKOpenGLNativeWidget的使用
  • 下载量飙升153.6%,《Solvely》如何成为出海AI教育应用新晋“黑马“?
  • riverpod最基本例子:在一个组件里更新状态,在另一个组件里获取更新的数据
  • Python训练营打卡 Day52
  • 实战解析:如何用克魔(KeyMob)等工具构建iOS应用稳定性与数据可观测体系
  • windows下tokenizers-cpp编译
  • 【leetcode】104. 二叉树的最大深度
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计流程与要素
  • 在 IntelliJ IDEA 中运行时出现“Log already in use? tmlog in ./“
  • 面对3倍流量激增,「纽约时报」如何既稳又省?
  • 楼宇自控新方向:电力载波技术——低成本、高兼容性的智能未来
  • cocos android打包 错误总结
  • 瑞芯微 MIPI D-PHY 接收器(RX)驱动学习笔记