# 依赖: numpy import numpy as np RI = {1: 0.0, 2: 0.0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45} def ahp(matrix): A = np.asarray(matrix, dtype=float) if A.ndim != 2 or A.shape[0] != A.shape[1] or not 1 <= A.shape[0] <= 9: raise ValueError('示例支持 1~9 阶方阵') if not np.isfinite(A).all() or np.any(A <= 0) or not np.allclose(A*A.T, 1): raise ValueError('判断矩阵必须是有限、正值的互反矩阵') n = A.shape[0] w = np.power(np.prod(A, axis=1), 1.0 / n) # 几何平均法求权重 w = w / w.sum() lam_max = float(np.mean((A @ w) / w)) cr = (lam_max - n) / (n - 1) / RI[n] if n > 2 else 0.0 return w.round(4), round(cr, 4) A = [[1, 1 / 2, 1 / 3], [2, 1, 1 / 2], [3, 2, 1]] # 上三角与下三角必须互反 w, cr = ahp(A) print(f'权重={w} CR={cr}', '通过' if cr < 0.1 else '不通过,需重新打分')