統計與計量‎ > ‎應用總覽‎ > ‎

群體決策共識模式與操作 (Analytic Hierarchy Process Plus)

簡說

在一般商務決策情境 (Business Decision Scenario) 中,參與人 (Participants) 或因權責分工不同,或因權力不對等關係,使得參與人意見在不同決策因子 (Decision Factor) 中效力 (Power and Influence) 不一。在此決策過程中,依照決策目標 (Goal) 特性,界定問題範圍,並針對複雜決策問題加以解構成不同權重即位階之決策因子,每個決策因子可能有次位階之數個子決策因子所組成,形成一個決策因子階層框架。同位階之決策因子經參與人表明不同之重要性認同程度,經過計算後求得各決策因子重要性之權重,以此類推求得所有位階決策因子重要性之權重。在末階決策因子中,參與人除了表明不同之重要性認同程度外,尚需針對所有決策方案 (Solution Selection) 給予不同偏好或優先權重。同時,在此決策方案組合中,可能政策預設質性或框架外之決策方案偏好,而此決策過程乃在給予理性或專業意見,假使參與人之決策足以改變政策偏好,則更能彰顯其決策力;反之,參與人之決策並不能改變政策偏好,則給予政策更具體之決策力。此決策框架與過程構想源於「階層分析法」(Analytic Hierarchy Process, AHP) ,但加入參與人決策力權重及政策偏好。同時,簡化較多決策方案時,「階層分析法」兩兩相比所造成之參與人決策程序繁複,因此又更接近商業決策實務。


程式碼


rm(list=ls())

getWeight <- function(valueList) {
  m_sum = sum(valueList)
  ans = valueList / m_sum
  ans  
}

getLevelWeight <- function(factorValueList) {
  sumAll = sum(factorValueList)
  colNum = length(factorValueList[1,])
  rowNum = length(factorValueList[,1])
  
  ans = matrix(0, nrow=1, ncol=colNum)
    
  for (i in 1:colNum) {
    colSumOfValue = sum(factorValueList[,i])
    ans[i] = colSumOfValue / sumAll
  }
  
  ans
}

# 參與人決策效力陣列
PowerOfRoleSet = getWeight(c(1, 2, 1, 2))

# 決策方案政策偏好陣列
PreferenceOfSolutionSet = getWeight(c(1, 2, 3, 2))

# 參與人 首階=3 決策因子之重要性值資料矩陣
FactorValue_F1 = matrix(0, nrow=length(PowerOfRoleSet), ncol=3, byrow=TRUE)

FactorValue_F1[1,] = c(4, 2, 3)
FactorValue_F1[2,] = c(2, 3, 3)
FactorValue_F1[3,] = c(3, 4, 3)
FactorValue_F1[4,] = c(3, 4, 2)

# 第一階決策因子權重
FactorValue_FV1 = getLevelWeight(FactorValue_F1)

# 參與人 二階第一項 4 個子決策因子 之重要性值資料矩陣
FactorValue_F21 = matrix(0, nrow=length(PowerOfRoleSet), ncol=4, byrow=TRUE)

# 參與人 1 各子決策因子
FactorValue_F21[1,] = c(3, 2, 3, 4)
# 參與人 2 各子決策因子
FactorValue_F21[2,] = c(2, 2, 4, 3)
# 參與人 3 各子決策因子
FactorValue_F21[3,] = c(1, 3, 2, 2)
# 參與人 4 各子決策因子
FactorValue_F21[4,] = c(4, 3, 2, 3)

# 第二階決策因子 1 權重
FactorValue_FV21 = getLevelWeight(FactorValue_F21)

# 參與人 二階第二項 3 個子決策因子 之重要性值資料矩陣
FactorValue_F22 = matrix(0, nrow=length(PowerOfRoleSet), ncol=3, byrow=TRUE)

FactorValue_F22[1,] = c(4, 3, 4)
FactorValue_F22[2,] = c(4, 3, 4)
FactorValue_F22[3,] = c(3, 3, 4)
FactorValue_F22[4,] = c(5, 2, 4)

# 第二階決策因子 2 權重
FactorValue_FV22 = getLevelWeight(FactorValue_F22)

# 參與人 二階第三項 2 個子決策因子 之重要性值資料矩陣
FactorValue_F23 = matrix(0, nrow=length(PowerOfRoleSet), ncol=2, byrow=TRUE)

FactorValue_F23[1,] = c(4, 2)
FactorValue_F23[2,] = c(3, 3)
FactorValue_F23[3,] = c(4, 2)
FactorValue_F23[4,] = c(3, 3)

# 第二階決策因子 3 權重
FactorValue_FV23 = getLevelWeight(FactorValue_F23)

# 產生 2 階層 x 9 決策因子之 0 矩陣
FactorMatrix = matrix(0, nrow=3, 
                      ncol=sum(length(FactorValue_F21[1,]), 
                               length(FactorValue_F22[1,]),
                               length(FactorValue_F23[1,])), 
                      byrow=TRUE)

# 第一階決策因子權重展開
FactorMatrix[1,] = c(rep(FactorValue_FV1[1], each=length(FactorValue_FV21)), 
                     rep(FactorValue_FV1[2], each=length(FactorValue_FV22)), 
                     rep(FactorValue_FV1[3], each=length(FactorValue_FV23)))

# 第二階決策因子權重
FactorMatrix[2,] = c(FactorValue_FV21,
                     FactorValue_FV22,
                     FactorValue_FV23)

# 決策因子各階層權重乘積
FactorMatrix[3,] = FactorMatrix[1,] * FactorMatrix[2,]
  
# 參與人決策方案重要性值比序資料矩陣
SolutionMatrix = matrix(0, nrow=length(PreferenceOfSolutionSet), 
                        ncol=sum(length(FactorValue_FV21[1,]), 
                                 length(FactorValue_FV22[1,]),
                                 length(FactorValue_FV23[1,])), 
                        byrow=TRUE)

# 參與人 1 各決策因子下 所有方案比序
SolutionMatrix_1 = SolutionMatrix
SolutionMatrix_1[,1] = c(2, 3, 1, 4)
SolutionMatrix_1[,2] = c(3, 1, 2, 4)
SolutionMatrix_1[,3] = c(3, 2, 1, 4)
SolutionMatrix_1[,4] = c(2, 3, 4, 1)
SolutionMatrix_1[,5] = c(4, 3, 2, 3)
SolutionMatrix_1[,6] = c(2, 4, 1, 3)
SolutionMatrix_1[,7] = c(1, 4, 2, 3)
SolutionMatrix_1[,8] = c(2, 1, 4, 3)
SolutionMatrix_1[,9] = c(4, 4, 1, 2)

# 參與人 2 各決策因子下 所有方案比序
SolutionMatrix_2 = SolutionMatrix
SolutionMatrix_2[,1] = c(2, 3, 1, 4)
SolutionMatrix_2[,2] = c(3, 1, 2, 4)
SolutionMatrix_2[,3] = c(3, 2, 1, 4)
SolutionMatrix_2[,4] = c(2, 3, 4, 1)
SolutionMatrix_2[,5] = c(4, 3, 2, 3)
SolutionMatrix_2[,6] = c(2, 4, 1, 3)
SolutionMatrix_2[,7] = c(1, 4, 2, 3)
SolutionMatrix_2[,8] = c(2, 1, 4, 3)
SolutionMatrix_2[,9] = c(4, 4, 1, 2)

# 參與人 3 各決策因子下 所有方案比序
SolutionMatrix_3 = SolutionMatrix
SolutionMatrix_3[,1] = c(2, 1, 3, 4)
SolutionMatrix_3[,2] = c(1, 2, 4, 3)
SolutionMatrix_3[,3] = c(4, 1, 3, 2)
SolutionMatrix_3[,4] = c(1, 3, 4, 2)
SolutionMatrix_3[,5] = c(4, 3, 2, 1)
SolutionMatrix_3[,6] = c(2, 4, 1, 3)
SolutionMatrix_3[,7] = c(3, 4, 2, 1)
SolutionMatrix_3[,8] = c(2, 3, 4, 1)
SolutionMatrix_3[,9] = c(1, 3, 4, 2)

# 參與人 4 各決策因子下 所有方案比序
SolutionMatrix_4 = SolutionMatrix
SolutionMatrix_4[,1] = c(3, 1, 2, 4)
SolutionMatrix_4[,2] = c(3, 2, 4,	1)
SolutionMatrix_4[,3] = c(2, 1, 3,	4)
SolutionMatrix_4[,4] = c(1, 2, 4,	3)
SolutionMatrix_4[,5] = c(2, 3, 1,	4)
SolutionMatrix_4[,6] = c(2, 4, 1,	3)
SolutionMatrix_4[,7] = c(2, 4, 3,	1)
SolutionMatrix_4[,8] = c(2, 3, 4,	1)
SolutionMatrix_4[,9] = c(3, 2, 4,	1)

SolutionMatrix_1[1,2] * FactorMatrix[3,2]

# 決策方案 x 決策因子
SolutionMatrix_AllFactor = rbind(SolutionMatrix_1[1,], 
                          SolutionMatrix_2[1,], 
                          SolutionMatrix_3[1,], 
                          SolutionMatrix_4[1,])

# 決策方案 1
SolutionMatrix_F1 = SolutionMatrix_AllFactor[1,] * FactorMatrix[3,]
SolutionMatrix_S1 = sum(SolutionMatrix_F1)
SolutionMatrix_V1 = SolutionMatrix_S1 * PowerOfRoleSet
SolutionMatrix_A1 = prod(SolutionMatrix_V1) ^ (1/length(PowerOfRoleSet))

# 決策方案 2
SolutionMatrix_F2 = SolutionMatrix_AllFactor[2,] * FactorMatrix[3,]
SolutionMatrix_S2 = sum(SolutionMatrix_F2)
SolutionMatrix_V2 = SolutionMatrix_S2 * PowerOfRoleSet
SolutionMatrix_A2 = prod(SolutionMatrix_V2) ^ (1/length(PowerOfRoleSet))

# 決策方案 3
SolutionMatrix_F3 = SolutionMatrix_AllFactor[3,] * FactorMatrix[3,]
SolutionMatrix_S3 = sum(SolutionMatrix_F3)
SolutionMatrix_V3 = SolutionMatrix_S3 * PowerOfRoleSet
SolutionMatrix_A3 = prod(SolutionMatrix_V3) ^ (1/length(PowerOfRoleSet))

# 決策方案 4
SolutionMatrix_F4 = SolutionMatrix_AllFactor[4,] * FactorMatrix[3,]
SolutionMatrix_S4 = sum(SolutionMatrix_F4) 
SolutionMatrix_V4 = SolutionMatrix_S4 * PowerOfRoleSet
SolutionMatrix_A4 = prod(SolutionMatrix_V4) ^ (1/length(PowerOfRoleSet))

# 決策方案 幾何平均數

# 決策方案總分數
SolutionMatrix_A = c(SolutionMatrix_A1,
                     SolutionMatrix_A2,
                     SolutionMatrix_A3,
                     SolutionMatrix_A4) * PreferenceOfSolutionSet

# 尋找極大值位置
ans = which.max(SolutionMatrix_A)
ans
ċ
AHP-Plus-Example.R
(6k)
李智,
2015年7月21日 上午7:50