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

这篇具有很好参考价值的文章主要介绍了数学建模--层次分析法(AHP)的Python实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示文章来源地址https://www.toymoban.com/news/detail-695344.html

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
    #矩阵的一致性指标CI
    self.CI_val = (self.max_eig_val - self.n) / (self.n - 1)
    #矩阵的一致性比例CR
    self.CR_val = self.CI_val / (self.RI[self.n - 1])
#2.进行一致性检验,判断是否可以使用层次分析法
 def consist_test(self):
    #一致性指标CI
    print("比较矩阵的CI值为:",str(self.CI_val))
    #一致性指标CR
    print("比较矩阵的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 True
        else:
            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.n
    print("算术平均法求得的权重为:",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_weighting

def 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]

到了这里,关于数学建模--层次分析法(AHP)的Python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数学建模学习】matlab实现评价模型——层次分析法(AHP)

    目录 1概述  2算法实现流程 3实例  4matlab实现层次分析法 5计算结果 层次分析法,简称AHP,是评价模型中的一种算法,指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。层次分析法的缺陷在于判断矩阵是主观决定的,

    2024年02月04日
    浏览(49)
  • 数学建模学习笔记(1):层次分析法(AHP)(附有详细使用步骤)

    层次分析法是由美国运筹学家T.L.Saaty于20世纪七十年代创立的一种系统分析与决策的综合评价方法,是在充分研究了人类思维过程的基础上提出的较为合理的解决定性问题定量化的处理过程。 层次分析法的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因素两两

    2024年02月07日
    浏览(43)
  • 数学建模——层次分析法

    正互反矩阵:若矩阵中每个元素a(ij)0且满足a(ij)*a(ji)=1。 层次分析法中,我们构造的判断矩阵均是正互反矩阵。 一致矩阵:若正互反矩阵满足a(ij)*a(jk)=a(ik)。 一致矩阵的秩为1。 一致矩阵有一个特征值为n,其余特征值均为0。 判断矩阵越不一致时,最大特征值与n相差越大。 一

    2024年02月16日
    浏览(35)
  • 数学建模:层次分析法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 将问题条理化,层次化,构建出一个有层次的结构模型。层次分为三类: 目标层,准则(指标)层,方案层 。 比较指标层中不同指标之间的相对重要程度,并且构建一个 成对比较矩阵 。 自行判断两个不同指标的相对重要程

    2024年02月10日
    浏览(38)
  • 数学建模学习笔记||层次分析法

    解决评价类问题首先需要想到一下三个问题 我们评价的目标是什么 我们为了达到这个目标有哪几种可行方案 评价的准则或者说指标是什么 对于以上三个问题,我们可以根据题目中的背景材料,常识以及网上收集到的参考资料进行结合,从而筛选出最合适的指标 优先选择知

    2024年01月23日
    浏览(49)
  • 五、数学建模之层次分析法

    1.概念 2.例题    层次分析法 (Analytic Hierarchy Process,AHP)是一种多 标准决策分析方法 ,用于帮助人们在面对复杂的决策问题时 进行定量和定性的比较和评估 。它最初由美国运筹学家和管理学家托马斯·萨蒙(Thomas L. Saaty)于20世纪70年代提出,并在后来得到广泛应用。层

    2024年02月07日
    浏览(49)
  • 数学建模常用模型(三):层次分析法

    层次分析法(Analytic Hierarchy Process,AHP)是一种用于多准则决策分析的方法,由美国运筹学家托马斯·L·赛蒂(Thomas L. Saaty)于1970年提出。它通过对决策问题进行层次化,将复杂的问题拆分为多个层次和准则,并使用定量化的方法进行比较和权重分配,最终得出综合评价和决

    2024年02月13日
    浏览(40)
  • 清风老师数学建模笔记——层次分析法

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

    2024年02月02日
    浏览(40)
  • 清风数学建模学习笔记(一)层次分析法

    目录 一、基本介绍 二、利用层次分析法解决评价类问题 2.1判断矩阵 2.2判断矩阵一致性检验  2.3计算权重  2.4算数平均法求权重  2.5几何平均法求权重  2.6特征值求权重 三、总结  层次分析法是评价类模型中的一种常见算法,它是用来根据多种准则,或是说因素从候选方案

    2024年02月16日
    浏览(40)
  • 数学建模(层次分析法 python代码 案例)

    目录 介绍:  模板: 例题:从景色、花费、饮食,男女比例四个方面去选取目的地  准则重要性矩阵:  每个准则的方案矩阵:​  一致性检验:  特征值法求权值: 完整代码: 运行结果:

    2024年04月29日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包