python实现ahp层次分析法 ci
时间: 2025-01-04 22:18:23 浏览: 14
### Python 实现 AHP 层次分析法 CI 计算
在层次分析法 (AHP) 中,一致性指标 (Consistency Index, CI) 的计算对于评估判断矩阵的一致性至关重要。下面展示了一个完整的 Python 函数来实现这一功能。
#### 判断矩阵构建与特征向量求解
为了得到最大特征根及其对应的特征向量,可以利用 `numpy` 库中的线性代数模块:
```python
import numpy as np
def calculate_eigen(matrix):
eigenvalues, eigenvectors = np.linalg.eig(matrix)
max_index = np.argmax(eigenvalues.real)
lambda_max = eigenvalues[max_index].real
weight_vector = eigenvectors[:, max_index].real / sum(eigenvectors[:, max_index].real)
return lambda_max, weight_vector
```
此函数接收一个正互反矩阵作为输入参数,并返回该矩阵的最大特征值以及相应的权重向量[^1]。
#### 一致性检验
接下来定义用于计算一致性的辅助函数,包括一致性比率 CR 和一致性指数 CI:
```python
def consistency_ratio(lambda_max, n):
RI_values = {1:0, 2:0, 3:0.58, 4:0.9, 5:1.12, 6:1.24, 7:1.32, 8:1.41, 9:1.45}
if n not in RI_values or n <= 2:
return None
ri = RI_values[n]
ci = (lambda_max - n) / (n - 1)
cr = ci / ri
result = {
'ci': ci,
'cr': cr,
'ri': ri
}
return result
```
上述代码片段实现了基于给定阶数 \( n \) 及其对应随机一致性指标 RI 值表的一致性比例 CR 和一致性索引 CI 的计算逻辑。
#### 完整示例流程
最后提供一段综合运用以上两个方法的例子程序,模拟实际应用场景下的操作步骤:
```python
if __name__ == "__main__":
# 构建样本判断矩阵
sample_matrix = np.array([
[1, 3, 5],
[1/3, 1, 3],
[1/5, 1/3, 1]])
# 执行特征分解并获取结果
lambda_max, weights = calculate_eigen(sample_matrix)
print(f"最大特征值 Lambda Max={lambda_max}")
print(f"各因素相对重要度 Weight Vector={weights}")
# 进行一致性检测
cons_result = consistency_ratio(lambda_max, len(sample_matrix))
if cons_result is not None:
print(f"一致性比率 CR={cons_result['cr']:.4f}, "
f"当CR<0.1时认为具有满意的一致性")
if cons_result['cr'] < 0.1:
print("通过了一致性测试.")
else:
print("未通过一致性测试,请重新调整判断矩阵.")
else:
print("无需进行一致性验证(通常针对二阶以下矩阵)。")
```
这段脚本展示了如何创建一个简单的三层结构模型,并对其进行了基本的一致性和权重视图输出处理。
阅读全文