多准则决策是指在具有相互冲突、不可共度的有限(无限)方案集中进行选择的决策。它是分析决策理论的重要内容之一。机理特点概述:
多准则决策(MCDM)根据决策方案是有限还是无限,而分为多属性决策(MADM)与多目标决策(MODM )两大类。[ —— 维基百科]
名称 | 英文 | 缩写 |
---|---|---|
多准则决策 | Multiple Criteria Decision Making | MCDM |
↓ | ↓ | ↓ |
多属性决策 | Multi-Attribute Utility Theory | MADM |
多目标决策 | Multiple Objective Decision Making | MODM |
MADM :为了一个特定的目的在若干备选方案中确定一个最优的,或者对这些方案按照优劣进行排序,或者给出优劣程度的数量结果, 而方案的优劣由若干属性给以定量或定性的表述。
MODM :为了若干特定的(一般是相互矛盾的)目标在若干备选方案中确定一个一定意义下最优的,而备选方案集合由一些约束条件给定。
MADM :国家综合实力评价、大学排名榜、公司新厂址选择、教师绩效考核、2011B题各区交警平台设置的合理性评价、2010D题学生宿舍设计方案的评价 、2009B题病床安排的合理性指标等。
MODM :选择收益大且风险小的投资组合、照顾乘客和航空公司双方利益的航班安排、 2011B题交警平台设置要考虑出警时间和工作量均衡、2009B题病床安排方案要考虑公平和效率两方面、2009 D题会议筹备要考虑预订宾馆、会议室的数量、费用、距离等。
多属性决策有四种常用方法SAW、WP、TOPSIS、ELECTRE
TOPSIS — 接近理想解的排序法由Yoon和Hwang开发,又称逼近理想解排序法(Technique for Order Preference by Similarity to Ideal Solution)。这种方法通过构造多属性问题的理想解和负理想解,以方案靠近理想解和远离负理想解两个基准作为方案排序的准则,来选择最满意方案。
- 理想解:就是设想各指标属性都达到最满意值的解;
- 负理想解:就是设想各指标属性都达到最不满意值的解。
视n个属性、m个方案为n维空间中m个点的几何系统,则:
MCDM=function (decision = NULL, weights = NULL, impacts = NULL) #决策矩阵,权重向量,影响因子
{
if (missing(weights))
stop("缺少'权重向量-weights'")
if (missing(impacts))
stop("缺少'影响因子-impacts'")
if (!is.matrix(decision) | is.data.frame(decision))
stop("'决策矩阵-decision'必须是矩阵或数据框")
if (length(weights) != ncol(decision))
stop("权重向量长度错误")
if (length(impacts) != ncol(decision))
stop("影响因子长度错误")
if (!all(weights > 0))
stop("权重必须大于零")
if (!is.character(impacts))
stop("影响因子必须是字符型 '+'或'-' 符号")
if (!all(impacts == "+" | impacts == "-"))
stop("影响因子只能是字符型 '+'或'-' 符号")
weights <- weights/sum(weights)
N <- matrix(nrow = nrow(decision), ncol = ncol(decision)) #建一个空矩阵
for (i in 1:nrow(decision)) {
for (j in 1:ncol(decision)) {
N[i, j] <- decision[i, j]/sqrt(sum(decision[, j]^2))
}
} #决策矩阵标准化
W = diag(weights) #建权重对角矩阵
V = N %*% W #构造加权规范化矩阵
#确定理想方案和负理想方案
u <- as.integer(impacts == "+") * apply(V, 2, max) + as.integer(impacts ==
"-") * apply(V, 2, min)
l <- as.integer(impacts == "-") * apply(V, 2, max) + as.integer(impacts ==
"+") * apply(V, 2, min)
#构建理想方案和负理想方案距离公式
distance_u = function(x) {
sqrt(sum((x - u)^2))
}
distance_l = function(x) {
sqrt(sum((x - l)^2))
}
#计算相对接近度并排序
du <- apply(V, 1, distance_u)
dl <- apply(V, 1, distance_l)
score <- dl/(dl + du)
outcome <- data.frame("方案"= 1:nrow(decision), 得分 = score,
排名 = rank(-score))
return(outcome)
}
例: 选择战斗机 (4种型号)
变量 | 含义 | 单位 |
---|---|---|
X1 | 最高速度 | 马赫 |
X2 | 航程 | 千海里 |
X3 | 最大载荷 | 千磅 |
X4 | 价格 | 百万美元 |
X5 | 可靠性 | – |
X6 | 机动性 | – |
对X5, X6表述的量化: “很高”、“高”、“中”、“低”、“很低” 记分9,7,5,3,1。则:
#决策矩阵d,权重向量w,影响因子i
dm=c(2.0,1.5,20,5.5,5,9,
2.5,2.7,18,6.5,3,5,
1.8,2.0,21,4.5,7,7,
2.2,1.8,20,5.0,5,5)
d <- t(matrix(dm, ncol = 4))
w <- c(3, 1, 2,1, 1, 2)
i <- c("+", "+", "+", "-", "+", "+")
outcome=MCDM(d, w, i)
plot(1:nrow(outcome),outcome[,2],ylim=c(0,1),
cex.axis=1.5,xaxt="n",xlab="方案",ylab="得分",
main="多准则决策模型-TOPSIS评价方法", pch = 20,
cex =10*outcome[,2],col = rainbow(nrow(outcome)))
text(1:nrow(outcome),outcome[,2],as.character(outcome[,3]))
axis(1,labels=c("A","B","C","D"),at=1:4,las=1)
输出结果
方案 | 得分 | 排名 |
---|---|---|
A1 | 0.56 | 1 |
A2 | 0.43 | 3 |
A3 | 0.48 | 2 |
A4 | 0.36 | 4 |
注意:属性权重应根据决策目标通过主观经验、调查等先验地给出,或者通过客观量化标准获取,以及两种方法的综合,本例权重向量w,影响因子i纯虚构,旨在演示方法。
提示:想了解更多,请查看Multiple-criteria decision analysis—-维基百科。