文章目录

  • (1)、算数平均值法求权重
  • (2)、几何平均值法求权重
  • (2)、特征值法

关于Python数据分析在数学建模中的更多相关应用: Python数据分析在数学建模中的应用汇总(持续更新中!)

(1)、算数平均值法求权重

步骤:

  1. 判断矩阵按列求和,得到新矩阵a_axis_0_sum
  2. 把判断矩阵中的每一个数都除以列和,得到新的矩阵b
  3. 计算新矩阵b行和,得到新矩阵b_axis_1_sum
  4. 将b_axis_1_sum每一个值除以总和,获得权重W
  5. 求解最大特征值
  6. 计算C_R判断矩阵的一致性,如果检验通过就输出结果
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 25 21:01:54 2019@author: lenovo
"""import numpy as np#  建立平均随机一致性指标R.I
RI_dict = {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49}def get_w(array):# 1、计算出阶数 看这个数组是几维的 也就是后面对应字典查询!row = array.shape[0]  # 2、按列求和a_axis_0_sum = array.sum(axis=0) # 3、得到新的矩阵b 就是把每一个数都除以列和 b = array / a_axis_0_sum  # 4、计算新矩阵b行和b_axis_1_sum = b.sum(axis=1)  # 5、将b_axis_1_sum每一个值除以总和W = b_axis_1_sum / sum(b_axis_1_sum)# 6、将原始矩阵乘以Wa_W = np.dot(array, W)# 7、求解最大特征值 lambda_max = 0for i in range(len(a_W)):lambda_max += (a_W[i] / W[i])lambda_max = lambda_max / len(a_W)      #求最大特征值# 8、检验判断矩阵的一致性C_I = (lambda_max - row) / (row - 1)R_I = RI_dict[row] C_R = C_I / R_I if C_R < 0.1:print('矩阵 %s 一致性检验通过' % (array))print('判断矩阵对应的指标的权重为:%s' % W)print('判断矩阵对应的最大特征值为 %.2f' % lambda_max)print('大功告成!!!')return Welse:print('矩阵 %s 一致性检验未通过,需要重新进行调整判断矩阵' % (array))def main(array):if type(array) is np.ndarray:return get_w(array)else:print('请输入正确的numpy对象')if __name__ == '__main__':a = np.array([[1, 1 / 3, 1 / 8], [3, 1, 1 / 3], [8, 3, 1]])
#    b = np.array([[1, 3, 6], [1 / 3, 1, 4], [1 / 5, 1 / 2, 1]])
#    c = np.array([[1, 1, 3], [1, 1, 3], [1 / 3, 1 / 3, 1]])
#    d = np.array([[1, 3, 4], [1 / 3, 1, 1], [1 / 4, 1, 1]])
#    e = np.array([[1, 2, 7, 5, 5], [1 / 2, 1, 4, 3, 3], [1 / 7, 1 / 4, 1, 1 / 2, 1 / 3], [1 / 5, 1 / 3, 2, 1, 1], [1 / 5, 1 / 3, 3, 1, 1]])
#    f = np.array([[1, 4, 1 / 2], [1 / 4, 1, 1 / 4], [2, 4, 1]])main(a)
#    main(b)
#    main(c)
#    main(d)
#    main(e)
#    main(f)

(2)、几何平均值法求权重

步骤:

  1. 将判断矩阵array的元素按照行相乘得到一个新的列向量
  2. 将新的向量的每个分量开n次方
  3. 对列向量求和
  4. 归一化处理,得到权重
  5. 求解最大特征值
  6. 计算C_R判断矩阵的一致性,如果检验通过就输出结果
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 25 21:01:54 2019@author: lenovo
"""import numpy as np#  建立平均随机一致性指标R.I
RI_dict = {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49}def get_w(array):row = array.shape[0]    #计算个数x_list = np.prod(array,axis = 1)        #axis=1,将array的元素按照行相乘得到一个新的列向量y_list = np.power(x_list, 1/np.size(array,1))   #将新的向量的每个分量开n次方y_sum = y_list.sum(axis=0)      #对列向量求和answer_sum = y_list/y_sum       #归一化处理,得到权重a,b=np.linalg.eig(array)        #a是特征值数组,b是特征值向量lambda_max=np.max(a)            #求最大特征值# 8、检验判断矩阵的一致性C_I = (lambda_max - row) / (row - 1)R_I = RI_dict[row]C_R = C_I / R_I if C_R < 0.1:print('矩阵 %s 一致性检验通过' % (array))print('判断矩阵对应的指标的权重为:%s' % answer_sum)print('判断矩阵对应的最大特征值为 %.2f' % lambda_max)print('大功告成!!!')return answer_sumelse:print('矩阵 %s 一致性检验未通过,需要重新进行调整判断矩阵' % (array))def main(array):if type(array) is np.ndarray:return get_w(array)else:print('请输入正确的numpy对象')if __name__ == '__main__':# 由于地方问题,矩阵我就写成一行了# 检验以下判断矩阵的一致性并输出权重a = np.array([[1,2,5], [1/2,1,2], [1/5,1/2,1]])b = np.array([[1, 3, 6], [1 / 3, 1, 4], [1 / 5, 1 / 2, 1]])c = np.array([[1, 1, 3], [1, 1, 3], [1 / 3, 1 / 3, 1]])d = np.array([[1, 3, 4], [1 / 3, 1, 1], [1 / 4, 1, 1]])e = np.array([[1, 2, 7, 5, 5], [1 / 2, 1, 4, 3, 3], [1 / 7, 1 / 4, 1, 1 / 2, 1 / 3], [1 / 5, 1 / 3, 2, 1, 1], [1 / 5, 1 / 3, 3, 1, 1]])f = np.array([[1, 4, 1 / 2], [1 / 4, 1, 1 / 4], [2, 4, 1]])main(a)
#    main(b)
#    main(c)
#    main(d)
#    main(e)
#    main(f)

(2)、特征值法

步骤:

  1. 求出判断矩阵array的最大特征值以及特征向量
  2. 求解最大特征值
  3. 计算C_R判断矩阵的一致性,如果检验通过就继续下一步
  4. 对求出的特征向量进行归一化处理,即可得到权重
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 25 20:42:58 2019@author: lenovo
"""import numpy as np#  建立平均随机一致性指标R.I
RI_dict = {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49}def get_w(array):row = array.shape[0]    #计算个数a,b=np.linalg.eig(array)        #a是特征值数组,b是特征值矩阵lambda_max=np.max(a)            #求最大特征值#8、检验判断矩阵的一致性C_I = (lambda_max - row) / (row - 1)R_I = RI_dict[row]C_R = C_I / R_I if C_R < 0.1:x = b[:,0].sum(axis=0)      #对列向量求和,对于第一列求和y = b[:,0]/x          #第一列进行归一化处理print('矩阵 %s 一致性检验通过' % (array))print('判断矩阵对应的指标的权重为:%s' % y)print('判断矩阵对应的最大特征值为 %.2f' % lambda_max)print('大功告成!!!')return yelse:print('矩阵 %s 一致性检验未通过,需要重新进行调整判断矩阵' % (array))def main(array):if type(array) is np.ndarray:return get_w(array)else:print('请输入正确的numpy对象')if __name__ == '__main__':# 由于地方问题,矩阵我就写成一行了# 检验以下判断矩阵的一致性并输出权重a = np.array([[1,2,5], [1/2,1,2], [1/5,1/2,1]])
#    b = np.array([[1, 3, 6], [1 / 3, 1, 4], [1 / 5, 1 / 2, 1]])
#    c = np.array([[1, 1, 3], [1, 1, 3], [1 / 3, 1 / 3, 1]])
#    d = np.array([[1, 3, 4], [1 / 3, 1, 1], [1 / 4, 1, 1]])
#    e = np.array([[1, 2, 7, 5, 5], [1 / 2, 1, 4, 3, 3], [1 / 7, 1 / 4, 1, 1 / 2, 1 / 3], [1 / 5, 1 / 3, 2, 1, 1], [1 / 5, 1 / 3, 3, 1, 1]])
#    f = np.array([[1, 4, 1 / 2], [1 / 4, 1, 1 / 4], [2, 4, 1]])main(a)
#    main(b)
#    main(c)
#    main(d)
#    main(e)
#    main(f)

层次分析法(AHP)——算数平均值法、几何平均值法、特征值法(Python实现,超详细注释)相关推荐

  1. java不同工厂生产不同电器_完整案例分析再加知识整合——艾特抽象工厂模式,超详细的...

    抽象工厂模式 模式动机与定义 模式动机 产品等级结构:产品等级结构即产品的继承结构,例如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产 ...

  2. 数学建模之层次分析法AHP

    层次分析法(Analytic Hierarchy Process,AHP)这是一种定性和定量相结合的.系统的.层次化的分析方法.这种方法的特点就是在对复杂决策问题的本质.影响因素及其内在关系等进行深入 ...

  3. 1 层次分析法(The analytic hierarchy process, AHP)

    1.层次分析法(The analytic hierarchy process, AHP) 1.1 层次分析法模型部分 建模比赛最基础模型之一,主要解决评价类问题(eg.选择哪种方案好.哪位运动员或者员 ...

  4. 第一讲 综合评价分析—层次分析法(AHP)

    写在前面:本文仅用于记录清风数模课程的笔记总结 AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因 素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作的重 要度的比较上面.在 ...

  5. 数学建模竞赛知识点汇总(一)——层次分析法

    文章目录 简介 步骤 建立层次结构模型 构造判断矩阵 计算权重 算术平均值法 几何平均值法 特征值法 一致性检验 合并排序 层次分析法的局限性 后续 简介 ​ 层次分析法(AHP)这是一种定性和定量相 ...

  6. 【数学建模】Day01——层次分析法

    文章目录 1. 引出层次分析法 1.1 思考问题 1.2 平台借力 1.3 分而治之的思想 1.4 一致矩阵 1.5 一致性检验 1.6 一致矩阵计算权重 1.7 判断矩阵求权重 2. 层次分析法 2 ...

  7. 学习笔记----层次分析法

    层次分析法(MATLAB实现) 定义 例题 步骤 细节补充 应用实例 定义   层次分析法是指将一个复杂的多目标决策问题作为一个系统,将目标分解为多个目标或准则,进而分解为多指标(或准则.约束)的若干 ...

  8. 层次分析法--matlab

    层次分析法 第一步:建立递阶层次结构 第二步:构造两两判断矩阵 准则层 方案层 第三步:计算权重(一致性检验)和得分 计算权重 一致性检验 算术平均法 几何平均法 特征值法 计算得分 代码: 第一步: ...

  9. 【数学模型】层次分析

    Hello大家好,今年数学建模国赛将于9月中旬举行,是时候提前做一些准备了. 本次模型非常简单,只是介绍比较得详细,我下次注意,争取限制下字数. 文末准备了 层次分析-python  模型的实现,简单 ...

  10. [清风数学建模]层次分析法(AHP)笔记及代码实现

    本文章是学习清风老师数学建模视频后所做的笔记,其中一些图片及代码实现来源于清风老师的B站视频: [强烈推荐]清风:数学建模算法.编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilib ...

最新文章

  1. qt初学者 第一个小程序 小界面
  2. 最新综述:基于Transformer的NLP预训练模型已经发展到何种程度?
  3. 如何上传本地图片到PictureBox控件
  4. linux misc device字符杂项设备驱动
  5. 《C++ Primer》8.2.1节练习(部分)
  6. [转].net仿传奇机器人配置文件
  7. mysql的jar包文件在哪找_java连接mysql要导入的jar包在哪。
  8. php开放源码的时机商计 (CK-ERP) 发布 0.15.1 版
  9. 博途数据类型wstring怎么用_解析博图数据块(昆仑通态触摸屏自动命名)
  10. pktgen:DPDK流量生成器
  11. windows下配置apache和php,Windows系统下Apache和PHP的安装和基本配置
  12. OmniPlan Pro 4 for Mac(项目流程管理)
  13. Android中WebView和JavaScript进行简单通信
  14. 数字全息实验-实例演示
  15. po+selenium+unittest自动化测试项目实战
  16. 计算机232接口接线,RS232串口的简单介绍_RS232接线方法及电气特性
  17. Java NIO笔记05
  18. QQ发送网址链接 安全性未知
  19. MYSQL查看进程和kill进程
  20. SPSS Modeler 18.0 基本介绍

热门文章

  1. 确定手机imsi号码的方法
  2. springSecurity分离资源服务器分析
  3. TIA WinCC Professional入门经典
  4. 树莓派与阿里云服务器进行socket通信
  5. QT 如何在QPushButton上加载gif动图
  6. Ramdisk(内存盘)虚拟磁盘设置使用
  7. python主函数怎么写_python主方法怎么写
  8. 搜索巨头百度深耕中国量子产业
  9. 怎么使用biopython_Biopython简单应用程序
  10. 学习笔记(01):10小时掌握区块链开发教程-2小时构建以太坊智能合约-1