徐泽水《不确定多属性决策方法与应用》27–37页
1.对方案的偏好信息为互反判断矩阵的情形
## 1 对方案的偏好信息为互反判断矩阵的情形
library(data.table)
library(dplyr)
A = c(3.0,100,10,7,
2.5,80,8,5,
1.8,50,20,11,
2.2,70,12,9)
A= matrix(A,nrow = 4,ncol = 4,byrow = T) %>% data.table()
A # 原始决策矩阵
#> V1 V2 V3 V4
#> 1: 3.0 100 10 7
#> 2: 2.5 80 8 5
#> 3: 1.8 50 20 11
#> 4: 2.2 70 12 9
#######################################################
##### 第一步把原始决策矩阵A 利用适当的方法进行规范化为R,R为归一化后的矩阵
##########################################################
### norm_matrix()函数,根据书中收益型属性(按公式1.2)与成本型属性(按公式1.4)分别进行归一化
# 参数A表示决策矩阵,shouyi参数代表收益型属性,输入收益型属性在决策矩阵中第几列,若有多列,用数值型向量即可,
# chengben参数代表成本型属性,与收益型属性类型。
# 该参数可任选其一输入,也可同时指定。
norm_matrix = function(A,shouyi=NULL,chengben=NULL){
if(is.matrix(A))A = data.table(A)
stopifnot(!is.null(shouyi) | !is.null(chengben))
m = ncol(A)
if(is.null(chengben)) chengben =setdiff(1:m,shouyi)
if(is.null(shouyi)) shouyi = setdiff(1:m,chengben)
stopifnot(length(intersect(shouyi,chengben))==0,setequal(union(shouyi,chengben),1:m))
#对决策矩阵进行重命名
names(A)=paste0('V',1:m)
shouyi = paste0("V",shouyi)
chengben = paste0("V",chengben)
R = A
R[,':='(c(shouyi),lapply(.SD, function(x)x/max(x))),.SDcols =shouyi] # 收益型属性归一化 (书中1.2式)
R[,':='(c(chengben),lapply(.SD,function(x)min(x)/x)),.SDcol = chengben]# 成本型属性归一化 (书中1.3式)
R = as.data.frame(R)
return(R)
}
R = norm_matrix(A,chengben = c(1,3))
round(R,3)
#> V1 V2 V3 V4
#> 1 0.600 1.0 0.800 0.636
#> 2 0.720 0.8 1.000 0.455
#> 3 1.000 0.5 0.400 1.000
#> 4 0.818 0.7 0.667 0.818
#########################################################
##### 第二步 根据决策方案(即决策矩阵的行)进行成对比较,构造出判断矩阵
#################################################
# 假设如下判断矩阵
H = c(1,2,1/4,1/5,
1/2,1,1/2,1/3,
4,2,1,1/2,
5,3,2,1)
H = matrix(H, nrow = 4, ncol = 4, byrow = T)
H
#> [,1] [,2] [,3] [,4]
#> [1,] 1.0 2 0.25 0.2000000
#> [2,] 0.5 1 0.50 0.3333333
#> [3,] 4.0 2 1.00 0.5000000
#> [4,] 5.0 3 2.00 1.0000000
Q = matrix(0,nrow = 4,ncol = 4)
for(k in 1:4) {
for (l in 1:4) {
for (i in 1:4) {
for (j in 1:4) {
Q[k, l] = Q[k, l] + (H[i, j] * R[i, k] - R[i, k]) * ((H[i, j] * R[i, l] - R[i, l]))
}
}
}
}
Q
#> [,1] [,2] [,3] [,4]
#> [1,] 25.59035 19.01777 17.29175 25.45790
#> [2,] 19.01777 15.65944 14.36756 18.89730
#> [3,] 17.29175 14.36756 13.32738 17.10511
#> [4,] 25.45790 18.89730 17.10511 25.39491
e_m = matrix(rep(1,4),nrow = 1)
t(e_m)
#> [,1]
#> [1,] 1
#> [2,] 1
#> [3,] 1
#> [4,] 1
(solve(Q) %*% t(e_m) )/as.vector(e_m %*% solve(Q) %*% t(e_m))
#> [,1]
#> [1,] -8.823475
#> [2,] -6.429099
#> [3,] 7.436625
#> [4,] 8.815949
(solve(Q) %*% t(e_m) ) /0.2014189
#> [,1]
#> [1,] -8.823476
#> [2,] -6.429100
#> [3,] 7.436626
#> [4,] 8.815950
2.对方案的偏好信息为模糊互补判断矩阵的情形
(待完善)
3.对方案的偏好信息为效用值的情形
(待完善)