层次分析法实例Python
时间: 2023-11-05 11:56:37 浏览: 48
层次分析法是一种用于确定评价模型中各评价因子/准则的权重,并进一步选择最优方案的方法。在Python中,可以使用numpy库来实现层次分析法。
首先,我们需要构造一个矩阵p,其中每一行代表一个对象的指标评分。然后,构造输入判别矩阵A,该矩阵由自己确定的评价因子/准则组成。可以使用numpy的mat函数和array函数来构造矩阵p和矩阵A。
接下来,我们可以计算矩阵A的特征值和特征向量。可以使用numpy的linalg.eig函数来计算特征值和特征向量。
然后,我们可以找到最大特征值和对应的最大特征向量。可以使用numpy的max函数来找到最大特征值,并使用列表推导式和切片操作来找到对应的最大特征向量。
接着,我们可以计算权重向量,即最大特征向量的归一化值。可以使用numpy的sum函数来计算最大特征向量的和,并使用除法操作来归一化。
进行一致性检验,计算一致性指标CI和一致性比例CR。如果CR大于等于0.1,则没有通过一致性检验;否则,通过一致性检验。
最后,根据评分矩阵p和权重向量Q,计算每个评分对象的评分值。可以使用numpy的matmul函数来计算矩阵乘法,并使用for循环打印每个评分对象的评分值。
以下是一个层次分析法的实例代码:
```python
import numpy as np
# 构造评价模型中的矩阵p和矩阵A
p = np.mat('8 7 6 8;7 8 8 7') # 每一行代表一个对象的指标评分
A = np.array([[1,3,1,1/3],[1/3,1,1/2,1/5],[1,2,1,1/3],[3,5,3,1]]) # 输入判别矩阵
# 计算特征值和特征向量
V, D = np.linalg.eig(A)
# 找到最大特征值和对应的最大特征向量
k = [i for i in range(len(V)) if V[i] == np.max(V)]
tzx = -D[:, k]
# 计算权重向量
quan = np.zeros((len(tzx), 1))
for i in range(len(tzx)):
quan[i] = tzx[i] / np.sum(tzx)
Q = quan
# 进行一致性检验
CI = (np.max(V) - len(V)) / (len(V) - 1)
RI = [0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59]
CR = CI / RI[len(V) - 1]
if CR >= 0.1:
print('没有通过一致性检验\n')
else:
print('通过一致性检验\n')
# 计算每个评分对象的评分值
score = np.matmul(p, Q)
for i in range(len(score)):
print('object_score {}: {}'.format(i, float(score[i])))
```