层次分析法求权重python
时间: 2023-11-28 14:45:03 浏览: 50
以下是使用层次分析法求权重的Python代码:
```python
import pandas as pd
import numpy as np
# 按指定路径导入判断矩阵(文件路径需按实际情况更换)
matrix = pd.read_excel(r'C:/Users/AROUS/Desktop/综合评价数据.xlsx', index_col='判断矩阵', sheet_name='层次分析')
# 计算判断矩阵的特征向量
eig_val, eig_vec = np.linalg.eig(matrix)
max_eig_val = max(eig_val)
max_eig_val_index = np.where(eig_val == max_eig_val)[0][0]
weight = eig_vec[:, max_eig_val_index] / sum(eig_vec[:, max_eig_val_index])
# 输出权重
print('权重为:')
for i in range(len(weight)):
print(matrix.index[i], ':', weight[i])
```
其中,`matrix`是一个判断矩阵,`eig_val`和`eig_vec`分别是判断矩阵的特征值和特征向量,`max_eig_val`是特征值中的最大值,`max_eig_val_index`是最大特征值对应的特征向量的下标,`weight`是计算得到的权重向量。
相关问题
层次分析法特征值法求权重python代码
层次分析法(Analytic Hierarchy Process,AHP)是一种用于决策分析的方法,特征值法是AHP的一种求解权重的方法。下面是使用Python实现AHP特征值法求权重的代码示例:
```python
import numpy as np
def ahp_eigenvalue(matrix):
# 计算矩阵的特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(matrix)
# 计算特征向量的归一化权重
weights = eigenvectors[:, 0] / np.sum(eigenvectors[:, 0])
return weights
# 示例矩阵
matrix = np.array([[1, 3, 5],
[1/3, 1, 2],
[1/5, 1/2, 1]])
# 调用函数计算权重
weights = ahp_eigenvalue(matrix)
# 输出结果
for i, weight in enumerate(weights):
print(f"权重{chr(65+i)}: {weight}")
```
这段代码实现了AHP特征值法求解权重的功能。首先,定义了一个`ahp_eigenvalue`函数,该函数接受一个矩阵作为输入,并返回计算得到的权重。在函数内部,使用`np.linalg.eig`函数计算矩阵的特征值和特征向量,然后将特征向量的第一列进行归一化处理得到权重。最后,调用该函数并输出结果。
python 层次分析法 多层权重
在Python中,可以使用层次分析法来计算多层权重。下面是一个示例代码:
```python
import numpy as np
# 构造判断矩阵
judgment_matrix = np.array([[1, 3, 5],
[1/3, 1, 2],
[1/5, 1/2, 1]])
# 计算相对权重
eigenvalues, eigenvectors = np.linalg.eig(judgment_matrix)
max_eigenvalue_index = np.argmax(eigenvalues)
weights = eigenvectors[:, max_eigenvalue_index / np.sum(eigenvectors[:, max_eigenvalue_index])
# 进行一致性检验
consistency_ratio = (np.max(eigenvalues) - judgment_matrix.shape - 1)
if consistency_ratio < 0.1:
# 通过一致性检验,计算权重
final_weights = weights
# 根据权重进行排序
sorted_indices = np.argsort(final_weights)[::-1]
sorted_weights = final_weights