文章目录

  • (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. windows串口控制linux,linux及windows下串口的使用.doc
  2. DG1062可编程信号源
  3. 64位系统上使用*** Client端
  4. 「操作系统」《自己动手写操作系统》1.1前期准备工作
  5. github Git 原理简介
  6. TiDB 架构及设计实现
  7. jvm的发展历程:classic、exact、hotspot、BEA的JRockit、IBM的J9、 KVM和CDC/CLDC Hotspot、Azul VM、Liquid VM
  8. 解决cc1plus.exe: out of memory allocating bytes
  9. gradle排除依赖_如何从Gradle中的所有依赖项中排除库
  10. 一图胜千言,8 张图理解 Java
  11. Mysql 远程自动化备份
  12. CSS:transform
  13. php数组倒排,js中数组倒序排列的方法
  14. 语音验证码接口PYTHO语言
  15. 六自由度工业机器人 机械手臂 3D2D结构图纸 工业机器人
  16. java获取一定距离以内的经纬度值_java 根据经纬度计算两地间的距离
  17. Win7 SP1 旗舰版
  18. mysql+check+男或女_关于MYSQL 检察check约束
  19. 基于python的房地产数据分析_基于Python的数据分析
  20. cordova build android 出错问题汇总

热门文章

  1. Reinforcement Learning An Introduction~The 10-armed Testbed
  2. wps里的html怎么保存,WPS网页复制保存文档文字技巧
  3. java卡 apdu_将applet安装到java卡的APDU命令的顺序是什么?
  4. 计算机控制系统直流电机闭环调速实验,直流电机闭环调速控制系统
  5. imdisk虚拟光驱装linux,怎么样通过虚拟光驱装Ubuntu系统?
  6. 微信小程序学习笔记:选项卡
  7. VMware虚拟机12个使用技巧
  8. vue3-antd-admin开源学习-后台管理框架
  9. vue后台管理框架(iview + vue)
  10. 自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建