首页 > 编程语言 >数学建模——层次分析法 AHP(Python代码)

数学建模——层次分析法 AHP(Python代码)

时间:2024-07-07 19:58:30浏览次数:11  
标签:判断 权重 Python 矩阵 建模 AHP 归一化 np CR

层次分析法

       层次分析法是由美国运筹学家、匹兹堡大学教授T.L.Saaty于20世纪70年代创立的一种系统分析与决策的综合评价方法,是在充分研究了人类思维过程的基础上提出来的,它较合理地解决了定性问题定量化的处理过程。

        AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作的重要度的比较上面。

步骤

第一步 构造系统的递阶层次结构

构造目标层、准则层、方案层。如果用到了层次分析法,需要把层析结构图放在建模论文中~

第二步 构造判断矩阵

对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较矩阵(判断矩阵)。

根据重要程度构造判断矩阵:

准则层-方案层的判断矩阵的数值要结合实际来填写,如果题目中有其他数据,可以考虑利用这些数据进行计算。

第三步 一致性检验

对判断矩阵进行一致性检验

(1)计算一致性指标CI

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

(2)查找对应的平均随机一致性指标RI

n123456789101112131415
RI000.520.891.121.261.361.411.461.491.521.541.561.581.59

(3)计算一致性比例CR

CR=\frac{CI}{RI}

         如果CR<0.1,则可认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。

         CR>0.1如何修正?往一致矩阵上调整,一致矩阵各行成倍数关系。

第四步 计算准则权重

由判断矩阵计算被比较元素对于该准则的相对权重,计算权重的方法有如下三种:

1、算术平均法

(1)将判断矩阵按照列归一化(每一个元素除以其所在列的和)

(2)将归一化的各列相加(按行求和)

(3)将相加后得到的向量中每个元素除以n即可得到权重向量

2、几何平均法

(1)将判断矩阵的元素按照行相乘得到一个新的列向量

(2)将新的向量的每个分量开n次方

(3)对该列向量进行归一化即可得到权重向量

3、特征值法

(1)求出矩阵A的最大特征值以及其对应的特征向量

(2)对求出的特征向量进行归一化即可得到我们的权重

第五步 计算得分

根据权重矩阵计算得分,并进行排序。

总结

层次分析法的一些局限性:

(1)评价的决策层不能太多,太多的话n会很大,判断矩阵和一致矩阵差异可能会很大。

(2)如果决策层中指标的数据是已知的,可能已经存在重要程度的关系,那么使用层次分析法进行评价可能不够准确。

Python代码实现

(替换判断矩阵即可)

import numpy as np

# 构造判断矩阵
A = np.array([[1, 2, 3, 5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 2], [1/5, 1/2, 1/2, 1]])

# 一致性检验
# 计算最大特征值
values, vectors = np.linalg.eig(A)
max_value = np.max(values)
# 获取CI、RI
n = A.shape[0]
CI = (max_value - n)/(n - 1)
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]
ri = RI[n-1]    # RI下标从0开始
# 计算CR
CR = CI/ri
print(CR)

# 判断CR是否小于0.1
if CR < 0.1:
    print('CR<0.1,构造的判断矩阵合理')
else:
    print('CR>=0.1,构造的判断矩阵不合理')

# 计算权重
# 算术平均法
# 判断矩阵归一化
Asum = np.sum(A, 0)
StandA = A/Asum
# 归一化后按行相加
StandAsum = np.sum(StandA, 1)
# 计算权重向量
n, m = A.shape
W1 = StandAsum/n
print(f'算术平均法权重{W1}')

# 几何平均法
# 按行相乘
Aprod = np.prod(A, 1)
# 开n次方
n, m = A.shape
Aprod_n = np.power(Aprod, 1/n)
# 归一化
Aprod_nsum = np.sum(Aprod_n, 0)
W2 = Aprod_n/Aprod_nsum
print(f'几何平均法权重{W2}')

# 特征值法
# 求出最大特征值及对应的特征向量
values, vectors = np.linalg.eig(A)
maxvalue_id = np.argmax(values)
max_vector = vectors[:, maxvalue_id]
W3 = max_vector/np.sum(max_vector, 0)
print(f'特征值法权重{W3}')

内容参考:清风数学建模

标签:判断,权重,Python,矩阵,建模,AHP,归一化,np,CR
From: https://blog.csdn.net/2301_76716143/article/details/140224880

相关文章

  • 数学建模——Topsis法(Python代码)
    Topsis法    Topsis法是一种常用的综合评价方法,能充分利用原始数据的信息,其结果能精确反映各评价方案之间的差距。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。    基本过程为先将原始数据矩阵统一指标类型(一般正向化处理)得到正向化的矩阵,再对......
  • python 调用 bat,传入参数,bat中实现如果有参数传入则读取参数,没有的话就使用内部的变量
    以下是一个Python调用BAT脚本并向其传递参数的示例,同时BAT脚本中会判断是否有参数传入并进行相应处理:Python代码:pythonimportsubprocess#定义要传递的参数parameter="example_parameter"#调用BAT脚本并传递参数subprocess.run(["your_bat_script.b......
  • Python极简美学:用一行代码完成的26个日常任务!
    Python以其简洁优雅著称,能够用最少的代码行数实现强大的功能。本文特别为Python初学者设计,旨在展示Python如何以一行代码解决常见的编程任务,让你体验Python的极简美学。通过这些实例,你不仅能够学习到Python的基础知识,还能掌握一些高效编码的小技巧。1.计算列表平均值number......
  • Python和MATLAB微机电健康推导算法和系统模拟优化设计
    ......
  • 基于Python实现的博客内容推荐系统
    前言大家好!今天来给大家分享一个基于Python实现的博客内容推荐系统。这个项目源自于一个想法:如何为博客用户提供他们最感兴趣的内容。正如大家所知道的,内容推荐系统在电商、视频平台和社交媒体中应用广泛,能显著提升用户体验和平台粘性。那么,如何为我们的博客(比如你自己的W......
  • Python算法模版:图论中的最小生成树算法
        最小生成树具有什么特性,相信学过相关知识的同学知道(没学过的可以自己了解一下),就是说最小生成树的边权值之和最小,相对应的其最大边权也是最小的,适合解决n个城市,m条边,然后叫你求最小划分路径是什么样的。Kruskal算法模版    首先,肯定要对题目所给的数据进......
  • python函数和c的区别有哪些
    Python有很多内置函数(buildinfunction),不需要写头文件,Python还有很多强大的模块,需要时导入便可。C语言在这一点上远不及Python,大多时候都需要自己手动实现。C语言中的函数,有着严格的顺序限制,如果要调用函数,该函数需要在本次调用之前就需要被实现,或者在程序开头事先声明,而Py......
  • python如何查看内置函数
    如何通过命令查看python中的所有内置函数和内置常量举例python版本:利用python中的语句输出python中的所有内置函数及内置常量名:dir(__builtin__)输出一个列表:In [1]: dir(__builtin__)Out[1]:['ArithmeticError','AssertionError','AttributeError','BaseEx......
  • SpringBoot-校园疫情防控系统-93033(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    springboot校园疫情防控系统摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对校园疫情防控等问题,对校园疫情防控进行研究分析,然后开发设计出......
  • Python——习题练习 part1
     本人于下学期该学习python,在听黑马程序员网课后,在此总结记录我的在课程学习后的习题练习。没有详细的解题过程,仅有代码和注释,如有错误希望大家多多指出。目录一,字符串格式化 二,条件判断01if语句 02ifelse语句 03ifelif组合 04判断语句综合案例 三,循环01......