用Python计算AHP
时间: 2024-11-20 21:42:50 浏览: 6
层次分析法Python数模代码.txt
在Python中,AHP (Analytic Hierarchy Process)是一个层次分析法,用于解决决策问题中的优先级排序。它由Thomas Saaty提出,通过构建层次结构并赋予各层次、属性以及备选方案相对权重来进行评估。以下是使用Python计算AHP的基本步骤:
1. 安装必要的库:首先需要安装`pandas`库来处理数据,`numpy`库做数值计算,如果需要用到可视化,还可以安装`matplotlib`。
```bash
pip install pandas numpy matplotlib
```
2. **创建层次结构矩阵**:将问题分解成各个层,并定义它们之间的关系。例如,如果你要决定旅行目的地,可能会有“评价因素”层(如舒适度、价格等),再下级可以有“酒店”和“度假村”两个子层。
3. **构造一致性检验矩阵**:对每个决策层级内的元素进行两两比较,形成判断矩阵(比如从1到9的等级表示偏好程度)。然后转换成一致性比率(CR)小于0.1的标准一致性矩阵。
4. **计算特征向量**:对一致性矩阵应用幂运算,直到矩阵趋于一致。特征值反映了各个级别的重要性,而对应的单位特征向量就是该层的权重。
5. **加权求和**:按照子层的权重,对所有备选方案进行加权求和,得出最终的排名。
```python
from scipy.linalg import eigvals, norm
import numpy as np
def ahp_analysis(matrix, max_iter=100):
# 检查一致性
consistency_ratio = check_consistency(matrix)
# 若不满足一致性,则迭代调整
if consistency_ratio > 0.1:
for _ in range(max_iter):
matrix = normalize_rows(matrix) @ matrix
consistency_ratio = check_consistency(matrix)
# 计算特征值和单位特征向量
eigenvalues, eigenvectors = eigvals(matrix), matrix.dot(np.eye(len(matrix)))
return eigenvalues, eigenvectors, consistency_ratio
# 辅助函数:检查一致性
def check_consistency(matrix):
n = len(matrix)
lambda_max = max(eigvals(matrix))
consistency_ratio = (lambda_max - n) / (n - 1)
return consistency_ratio
# 示例:
comparison_matrix = np.array([[1, 3, 6], [1/3, 1, 2], [1/6, 1/2, 1]])
eigenvalues, eigenvectors, cr = ahp_analysis(comparison_matrix)
print(f"特征值:{eigenvalues}")
print(f"一致性比率:{cr:.4f}")
```
阅读全文