层次分析法—基于R
本文以应用为主,原理不深究.
基本流程
Step1. 构造层次结构图(目标、准则、方案)
例如:
Step2. 构造成对比较矩阵
比较尺度 的含义
与 的比较尺度 | 含义 |
---|---|
1 | 与 的重要性相同 |
3 | 比 稍微重要 |
5 | 比 重要 |
7 | 比 明显重要 |
9 | 比 绝对重要 |
2, 4, 6, 8 | 与 重要性在两个相邻等级之间 |
1, 1/2, ···, 1/9 | 与 的重要性比较和以上结果相反 |
Step3. 一致性检验和权向量的计算
一致性指标:
其中 为成对比较矩阵的最大特征根,为了能用 对应的特征向量作为权向量
引入随机一致性指标 (随机模拟大量正互反阵的一致性指标的平均值得到的)
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 | 1.49 |
当
则认为不一致性在允许范围之内,即一致性检验通过. 如果一致性检验不通过,则需要对成对比较矩阵进行修正或者重新构造成对比较矩阵.
若一致性检验通过,则认为 对应的特征向量可以作为权向量 .
Step4. 计算综合权重
由上一步我们可以了准则层对目标层的权重 ,以及方案层对准则层的权重 ( 为准则层的元素个数).
构造 ,则可以得到方案层对目标层的综合权重为
由此可以得到优劣顺序.
实例
计划在三个候选房中买一套住房,考虑的因素有交通条件、环境因素、性价比和物业服务. 假设对这四个因素的重视程度可以用成对比较矩阵
另一方面,这三套候选房在四个因素之中的优劣程度可以分别用成对比较矩阵
刻画,请用层次分析法得出这三套房子的优劣.
模型求解
Step1. 构造层次结构图(目标、准则、方案)
Step2. 构造成对比较矩阵
已知
Step3. 一致性检验和权向量的计算
RI <- c('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, '10' = 1.49) fun1 <- function(M) { n <- sqrt(length(M)) ri <- RI[n] # 对应数值n的随机一致性指标 M_eig <- eigen(M) # 矩阵M所对应的特征根和特征向量 value_max <- Re(M_eig$values[1]) # 最大特征值实部 eig_vec_M = M_eig$vectors # 特征向量 cat('特征向量为:\n') print(eig_vec_M) # 输出特征向量 cat('\n') x_M <- eig_vec_M[,1] w_M <- x_M/(sum(x_M)) # 归一化 if ((value_max-n)/(n-1) < 0.1*ri) { cat('一致性检验通过, 权向量为:\n') cat(Re(w_M)) # 输出权向量 } else cat('一致性检验未通过') }
检验成对比较矩阵 :
A = matrix(c(1,1/4,5,1/2,4,1,7,1,1/5,1/7,1,1/6,2,1,6,1), ncol = 4) fun1(A)
特征向量为: [,1] [,2] [,3] [,4] [1,] -0.2821127+0i -0.11029704+0.29898239i -0.11029704-0.29898239i 0.06265520+0i [2,] -0.1076275+0i -0.08262200-0.06504082i -0.08262200+0.06504082i -0.06044221+0i [3,] -0.9443907+0i 0.93948420+0.00000000i 0.93948420+0.00000000i -0.97860015+0i [4,] -0.1302110+0i 0.02485836-0.06433420i 0.02485836+0.06433420i 0.18644788+0i 一致性检验通过, 权向量为: 0.1926549 0.07349887 0.644925 0.08892118
检验成对比较矩阵 :
B1 = matrix(c(1,1/2,1/2,2,1,1,2,1,1), ncol = 3) fun1(B1)
特征向量为: [,1] [,2] [,3] [1,] 0.8164966 -0.9428090 0.0000000 [2,] 0.4082483 0.2357023 -0.7071068 [3,] 0.4082483 0.2357023 0.7071068 一致性检验通过, 权向量为: 0.5 0.25 0.25
检验成对比较矩阵 :
B2 = matrix(c(1,1/3,1/2,3,1,2,2,1/2,1), ncol = 3) fun1(B2)
特征向量为: [,1] [,2] [,3] [1,] 0.8467969+0i 0.8467969+0.0000000i 0.8467969+0.0000000i [2,] 0.2564554+0i -0.1282277-0.2220969i -0.1282277+0.2220969i [3,] 0.4660103+0i -0.2330052+0.4035768i -0.2330052-0.4035768i 一致性检验通过, 权向量为: 0.5396146 0.1634241 0.2969613
检验成对比较矩阵 :
B3 = matrix(c(1,5,4,1/5,1,1,1/4,1,1), ncol = 3) fun1(B3)
特征向量为: [,1] [,2] [,3] [1,] 0.1559633+0i -0.0779817+0.1350682i -0.0779817-0.1350682i [2,] 0.7239177+0i 0.7239177+0.0000000i 0.7239177+0.0000000i [3,] 0.6720257+0i -0.3360128-0.5819913i -0.3360128+0.5819913i 一致性检验通过, 权向量为: 0.1004979 0.4664699 0.4330323
检验成对比较矩阵 :
B4 = matrix(c(1,1/2,1/3,2,1,1/2,3,2,1), ncol = 3) fun1(B4)
特征向量为: [,1] [,2] [,3] [1,] 0.8467969+0i -0.8467969+0.0000000i -0.8467969+0.0000000i [2,] 0.4660103+0i 0.2330052-0.4035768i 0.2330052+0.4035768i [3,] 0.2564554+0i 0.1282277+0.2220969i 0.1282277-0.2220969i 一致性检验通过, 权向量为: 0.5396146 0.2969613 0.1634241
Step4. 计算综合权重
由 Step3 可知一致性检验均通过,且
则 即为综合权重.
w_0 = c(0.1926549, 0.07349887, 0.644925, 0.08892118) w_1 = c(0.5, 0.25, 0.25) w_2 = c(0.5396146, 0.1634241, 0.2969613) w_3 = c(0.1004979, 0.4664699, 0.4330323) w_4 = c(0.5396146, 0.2969613, 0.1634241) W = matrix(c(w_1,w_2,w_3,w_4), ncol = 4) W %*% w_0
[,1] [1,] 0.2487853 [2,] 0.3874195 [3,] 0.3637953
于是三所房屋的优劣顺序为 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下