【数学建模】层次分析法(AHP) |
您所在的位置:网站首页 › 层次总排序的一致性检验例题 › 【数学建模】层次分析法(AHP) |
1 前言
本文主要讲解层次分析法(AHP)的python实现,后续会跟进实例分析 2 代码实现导入包 import numpy as np 2.1 构造判断矩阵判断矩阵一般采用专家意见法,也就是德尔菲法。但是比赛的时候也没有什么专家,大家自己看着整就行,当然有很多文章对层次分析法进行了改进,大家可以自行滴进行参考。 查看矩阵的行列数 #查看行数和列数 A.shape求解特征值和特征向量的方法主要参考了下方的博客 #求特征值和特征向量 ''' https://blog.csdn.net/Strive_For_Future/article/details/109631691 w,v = numpy.linalg.eig(a) 计算方形矩阵a的特征值和右特征向量 a : 待求特征值和特征向量的方阵。 w: 多个特征值组成的一个矢量。备注:多个特征值并没有按特定的次序排列。特征值中可能包含复数。 v: 多个特征向量组成的一个矩阵。每一个特征向量都被归一化了。第i列的特征向量v[:,i]对应第i个特征值w[i]。 ''' V,D = np.linalg.eig(A) # 求特征值和特征向量 print('特征值:') print(V) print('特征向量:') print(D)输出最大特征值和最大特征向量,也就是我们需要的 #最大特征值 tzz = np.max(V) print('最大特征值为:\n', tzz) #最大特征向量 k=[i for i in range(len(V)) if V[i] == np.max(V)] tzx = -D[:,k] print('最大特征值向量为:\n',tzx)得到权重Q,这个Q也就是我们最终需要的权重矩阵,也就是每个指标的权重 # 赋权重 n = A.shape[1] quan=np.zeros((n,1)) for i in range(0,n): quan[i]=tzx[i]/np.sum(tzx) Q=quan print(Q)这个就是检验一下,咱们自己的判断矩阵是否合理。一致性检验通过了就是能用,不通过就是我们在进行专家打分的时候有问题,就得修正判断矩阵。 假设有两个对象,分数分别为: 对象A: [8 7 6 8] 对象B: [7 8 8 7] # 假设有两个目标 p = np.mat('8 7 6 8;7 8 8 7') #每一行代表一个对象的指标评分 print(p)然后使用上方得到的权重Q,对这两个对象进行打分 #显示出所有评分对象的评分值 score=p*Q for i in range(len(score)): print('object_score {}:'.format(i),float(score[i]))
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |