数学建模—TOPSIS法
定义
TOPSIS法可翻译为逼近理想解排序法,国内常简称为优劣解距离法。TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。
那如何计算指标呢?
那么我们假设只有一个指标计算得分,例如
姓名 | 成绩 |
---|---|
小王 | 99 |
小陈 | 100 |
小李 | 60 |
小明 | 72 |
将此数据转化为矩阵
[
z
11
z
12
⋯
z
1
m
z
21
z
22
⋯
z
2
m
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
m
]
\left[ \begin{array}{l} z_{11}& z_{12}& \cdots& z_{1m}\\ z_{21}& z_{22}& \cdots& z_{2m}\\ \vdots& \vdots& \ddots& \vdots\\ z_{n1}& z_{n2}& \cdots& z_{nm}\\ \end{array} \right]
z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm
topsis中参数的定义
定义最大值
z
+
=
(
z
1
+
,
z
2
+
,
.
.
.
,
z
m
+
)
=
(
max
{
z
11
,
z
21
,
.
.
.
,
z
n
1
}
,
max
{
z
12
,
z
22
,
.
.
.
,
z
n
2
}
,
.
.
.
,
max
{
z
1
m
,
z
2
m
,
.
.
.
,
z
n
m
}
)
z^+=\text{(}z_{1}^{+},z_{2}^{+},...,z_{m}^{+}\text{)}=\left( \max \left\{ z_{11},z_{21},...,z_{n1} \right\} ,\max \left\{ z_{12},z_{22},...,z_{n2} \right\} ,...,\max \left\{ z_{1m},z_{2m},...,z_{nm} \right\} \right) \\
z+=(z1+,z2+,...,zm+)=(max{z11,z21,...,zn1},max{z12,z22,...,zn2},...,max{z1m,z2m,...,znm})
定义最小值
z
−
=
(
z
1
−
,
z
2
−
,
.
.
.
,
z
m
−
)
=
(
min
{
z
11
,
z
21
,
.
.
.
,
z
n
1
}
min
{
z
12
,
z
22
,
.
.
.
,
z
n
2
}
,
.
.
.
,
min
{
z
1
m
,
z
2
m
,
.
.
.
,
z
n
m
}
)
z^-=\text{(}z_{1}^{-},z_{2}^{-},...,z_{m}^{-}\text{)}=\left( \min \left\{ z_{11},z_{21},...,z_{n1} \right\} \min \left\{ z_{12},z_{22},...,z_{n2} \right\} ,...,\min \left\{ z_{1m},z_{2m},...,z_{nm} \right\} \right)
z−=(z1−,z2−,...,zm−)=(min{z11,z21,...,zn1}min{z12,z22,...,zn2},...,min{z1m,z2m,...,znm})
定义第i(i=1,2,… ,n)个评价对象与最大值的距离
D
i
+
=
∑
m
j
=
1
(
Z
j
+
−
z
i
j
)
2
D_{i}^{+}=\sqrt{\sum{\begin{array}{c} m\\ j=1\\ \end{array}\left( Z_{j}^{+}-z_{ij} \right) ^2}}
Di+=∑mj=1(Zj+−zij)2
定义第i(i=1,2,… ,n)个评价对象与最小值的距离
D
i
−
=
∑
m
j
=
1
(
Z
j
−
−
z
i
j
)
2
D_{i}^{-}=\sqrt{\sum{\begin{array}{c} m\\ j=1\\ \end{array}\left( Z_{j}^{-}-z_{ij} \right) ^2}}
Di−=∑mj=1(Zj−−zij)2
那么,我么可一计算得出第i(i=1,2,… ,n)个评价对象未归一化的得分:
S
i
=
D
i
−
D
i
+
+
D
i
−
S_i=\frac{D_{i}^{-}}{D_{i}^{+}+D_{i}^{-}}
Si=Di++Di−Di−
很明显,S越大D+越小,即最接近最大值
那我们举个例子
姓名 | 成绩 | 与同学发生吵架的次数 | 正向化吵架次数 |
---|---|---|---|
小明 | 89 | 2 | 1 |
小王 | 60 | 0 | 3 |
小张 | 74 | 1 | 2 |
小陈 | 99 | 3 | 0 |
指标类型 | 级大型 | 极小型 | 极大型 |
先对指标矩阵进行标准化,标准化处理的计算公式
假设有n个要评价的对象,m个评价指标(经过正向化)构成的正向化矩阵如下:
X
=
[
z
11
z
12
⋯
z
1
m
z
21
z
22
⋯
z
2
m
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
m
]
X=\left[ \begin{array}{l} z_{11}& z_{12}& \cdots& z_{1m}\\ z_{21}& z_{22}& \cdots& z_{2m}\\ \vdots& \vdots& \ddots& \vdots\\ z_{n1}& z_{n2}& \cdots& z_{nm}\\ \end{array} \right]
X=
z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm
那么,对其标准化的矩阵记为Z,Z中的每一个元素:
m
i
j
=
z
i
j
/
∑
n
i
=
1
x
i
j
2
m_{ij}=z_{ij}/\sqrt{\sum{\begin{array}{c} n\\ i=1\\ \end{array}x_{ij}^{2}}}
mij=zij/∑ni=1xij2
那么通过matlab:
[
89
1
60
3
74
2
99
0
]
⟹
[
0.5437
0.2673
0.3665
0.8018
0.4520
0.5345
0.6048
0
]
\left[ \begin{array}{l} 89& 1\\ 60& 3\\ 74& 2\\ 99& 0\\ \end{array} \right] \Longrightarrow \left[ \begin{array}{l} 0.5437& 0.2673\\ 0.3665& 0.8018\\ 0.4520& 0.5345\\ 0.6048& 0\\ \end{array} \right]
896074991320
⟹
0.54370.36650.45200.60480.26730.80180.53450
代码如下:
x = [89,1;60,3;74,2;99,0]
[n,m]=size(x)
x./repmat(sum(x.*x).∧0.5,n,1)
%关于repmat函数的使用,在博主的matlab使用中已经提过
那如何计算该例子得分呢?
姓名 | 成绩 | 与同学发生吵架的次数 |
---|---|---|
小明 | 0.5437 | 0.2673 |
小王 | 0.3665 | 0.8018 |
小张 | 0.4520 | 0.5345 |
小陈 | 0.6048 | 0 |
最大值:[0.6048,0.8018] 最小值:[0.3665,0]
根据matlab可计算
姓名 | D+ | D- | 未归一化的的得分 | 归一化后的得分 | 得分 |
---|---|---|---|---|---|
小明 | 0.5380 | 0.3206 | 0.3734 | 0.1857 | 3 |
小王 | 0.2382 | 0.8018 | 0.7709 | 0.3834 | 1 |
小张 | 0.3078 | 0.5413 | 0.6375 | 0.3170 | 2 |
小陈 | 0.8018 | 0.2382 | 0.2291 | 0.1139 | 4 |
代码:
x = [89 1;6,3;74,2;99,0]
[n,m] = size(x)
Z = x./repmat(sum(x.*x).∧0.5,n,1)
D_P = sum([(z-repmat(max(z),n,1)).∧2],2).∧0.5 %D+
D_N = sum([(z-repmat(min(z),n,1)).∧2],2).∧0.5 %D-
计算步骤
第一步:将原始矩阵正向化
极小型—> 极大型 max-x
中间型—>极大型
区间型—>极大型
第二步:正向化矩阵标准化
注:例题中有说明
第三步:计算得分并归一化
注:例题中有说明
作业题:
注:下期会进行讲解