层次分析法—基于R

本文以应用为主,原理不深究.

基本流程

Step1. 构造层次结构图(目标、准则、方案)
例如:
层次分析流程图

Step2. 构造成对比较矩阵
比较尺度 aij 的含义

XiXj 的比较尺度 aij 含义
1 XiXj 的重要性相同
3 XiXj 稍微重要
5 XiXj 重要
7 XiXj 明显重要
9 XiXj 绝对重要
2, 4, 6, 8 XiXj 重要性在两个相邻等级之间
1, 1/2, ···, 1/9 XiXj 的重要性比较和以上结果相反

Step3. 一致性检验和权向量的计算
一致性指标:

CI=λnn1

其中 λ 为成对比较矩阵的最大特征根,为了能用 λ 对应的特征向量作为权向量 w

引入随机一致性指标 RI (随机模拟大量正互反阵的一致性指标的平均值得到的)

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

CR=CIRI<0.1

则认为不一致性在允许范围之内,即一致性检验通过. 如果一致性检验不通过,则需要对成对比较矩阵进行修正或者重新构造成对比较矩阵.

若一致性检验通过,则认为 λ 对应的特征向量可以作为权向量 w.

Step4. 计算综合权重

由上一步我们可以了准则层对目标层的权重 w0,以及方案层对准则层的权重 w1,w2,,wn (n 为准则层的元素个数).

构造 W=[w1,w2,,wn],则可以得到方案层对目标层的综合权重为

W(0)=Ww0

由此可以得到优劣顺序.

实例

计划在三个候选房中买一套住房,考虑的因素有交通条件、环境因素、性价比和物业服务. 假设对这四个因素的重视程度可以用成对比较矩阵

A=[141521411715716121161]

另一方面,这三套候选房在四个因素之中的优劣程度可以分别用成对比较矩阵

B1=[12212111211],B2=[132131121221],B3=[11514511411],B4=[123121213121]

刻画,请用层次分析法得出这三套房子的优劣.

模型求解

Step1. 构造层次结构图(目标、准则、方案)

Step2. 构造成对比较矩阵

已知

A=[141521411715716121161]B1=[12212111211],B2=[132131121221],B3=[11514511411],B4=[123121213121]

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:

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:

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:

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:

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:

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 可知一致性检验均通过,且

w0=(0.1926549,0.07349887,0.644925,0.08892118)w1=(0.5,0.25,0.25)w2=(0.5396146,0.1634241,0.2969613)w3=(0.1004979,0.4664699,0.4330323)w4=(0.5396146,0.2969613,0.1634241)

(w1,w2,w3,w4)3×4×w0 即为综合权重.

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

于是三所房屋的优劣顺序为 B,C,A.

posted @   只会加减乘除  阅读(594)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示