目录
- 理想解法
- 原理简介
- 算法步骤
- 属性值规范化方法
- 代码示例
理想解法
原理简介
TOPSIS(Technique for Order Preference by Simi larity to IdealSolution)法是一种逼近理想解的排序方法。其基本的处理思路是:首先建立初始化决策矩阵,而后基于规范化后的初始矩阵,找出有限方案中的最优方案和最劣方案(也就是正、负理想解),然后分别计算各个评价对象与最优方案和最劣方案的距离,获得各评价方案与最优方案的相对接近程度,最后进行排序,并以此作为评价方案优劣的依据。
设多属性决策方案集为 D = { d 1 , d 2 , . . . , d m } D=\left \{ d_1,d_2,...,d_m \right \} D={d1,d2,...,dm},衡量方案优劣的属性变量为 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn。,这时方案集 D D D中的每个方案 d i ( i = 1 , 2 , ⋯ , m ) d_i(i=1,2,⋯,m) di(i=1,2,⋯,m)的 n n n个属性值构成的向量是 [ a i 1 , a i 2 , . . . , a i n ] \left [ a_{i1},a_{i2},...,a_{in} \right ] [ai1,ai2,...,ain],它作为 n n n维空间中的一个点,能唯一地表征方案 d i d_i di。正理想解 C ∗ C^* C∗是一个方案集 D D D中并不存在的虚拟的最佳方案,它的每个属性值都是决策矩阵中该属性的最优值;而负理想解 C 0 C^0 C0则是虚拟的最差方案,它的每个属性值都是决策矩阵中该属性的最差值。在 n n n维空间中,将方案集 D D D中的各备选方案 d i d_i di.与正理想解 C ∗ C^* C∗和负理想解 C 0 C^0 C0的距离进行比较,既靠近正理想解又远离负理想解的方案就是方案集D中的最优方案,并可以据此排定方案集D中各备选方案的优先序。对比备选方案和理想解需要定义适合的距离测度,TOPSIS所用的是欧几里得距离。
算法步骤
假设初始的决策矩阵
A
A
A为:
A
=
[
a
11
…
a
1
j
…
a
1
n
⋮
⋮
⋮
⋮
⋮
a
i
1
…
a
i
j
…
a
i
n
⋮
⋮
⋮
⋮
⋮
a
m
1
…
a
m
j
…
a
m
n
]
A=\begin{bmatrix} a_{11}& \dots& a_{1j}& \dots &a_{1n} \\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{i1}& \dots& a_{ij}& \dots &a_{in}\\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{m1}& \dots& a_{mj}& \dots &a_{mn}\\ \end{bmatrix}
A=⎣⎢⎢⎢⎢⎢⎢⎡a11⋮ai1⋮am1…⋮…⋮…a1j⋮aij⋮amj…⋮…⋮…a1n⋮ain⋮amn⎦⎥⎥⎥⎥⎥⎥⎤
(1)对初始决策矩阵
A
A
A的所有备选方案的每一个属性进行规范化处理,即对
A
A
A的每一个列向量
[
a
1
j
,
a
2
j
,
.
.
.
,
a
m
j
]
T
,
j
∈
1
,
.
.
.
,
n
\left [ a_{1j},a_{2j},...,a_{mj} \right ]^T,j\in 1,...,n
[a1j,a2j,...,amj]T,j∈1,...,n规范化处理得到规范化的决策矩阵
B
=
(
b
i
j
)
m
×
n
B=\left ( b_{ij} \right )_{m\times n}
B=(bij)m×n.
b
i
j
=
a
i
j
∑
i
=
1
m
a
i
j
2
,
i
=
1
,
.
.
.
,
m
,
j
=
1
,
.
.
.
,
n
b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2}},i=1,...,m,j=1,...,n
bij=∑i=1maij2aij,i=1,...,m,j=1,...,n
(2)构造加权规范阵,假设
n
n
n个属性的权重构成的权重向量为
ω
=
[
ω
1
,
ω
2
,
.
.
.
,
ω
n
]
⊤
\omega=\left [ \omega_1,\omega_2,...,\omega_n \right ]^\top
ω=[ω1,ω2,...,ωn]⊤,将规范化的决策矩阵
B
=
(
b
i
j
)
m
×
n
B=\left ( b_{ij} \right )_{m\times n}
B=(bij)m×n的每一行与权重向量对应相乘即得到加权规范阵
C
=
(
c
i
j
)
m
×
n
C=\left ( c_{ij} \right )_{m\times n}
C=(cij)m×n。
c
i
j
=
b
i
j
∗
ω
j
,
j
=
1
,
.
.
.
,
n
,
i
=
1
,
.
.
.
,
m
c_{ij}=b_{ij}\ast \omega_j,j=1,...,n,i=1,...,m
cij=bij∗ωj,j=1,...,n,i=1,...,m
(3)确定正理想解
C
∗
C^*
C∗和负理想解
C
0
C^0
C0,对于成本型属性,选择最小值,对于效益型属性,选择最大值。遍历
C
C
C的每一列
C
j
(
j
=
1
,
.
.
.
,
n
)
C_j(j=1,...,n)
Cj(j=1,...,n),根据指标类型选择每一列的最大值或最小值。
c
j
∗
=
{
max
{
C
j
}
,
j
为
效
益
型
指
标
min
{
C
j
}
,
j
为
成
本
型
指
标
c_{j}^*=\begin{cases} \max\left \{ C_{j} \right \},j为效益型指标 \\ \min\left \{ C_{j} \right \},j为成本型指标 \end{cases}
cj∗={max{Cj},j为效益型指标min{Cj},j为成本型指标
c j 0 = { min { C j } , j 为 效 益 型 指 标 max { C j } , j 为 成 本 型 指 标 c_{j}^0=\begin{cases} \min\left \{ C_{j} \right \},j为效益型指标 \\ \max\left \{ C_{j} \right \},j为成本型指标 \end{cases} cj0={min{Cj},j为效益型指标max{Cj},j为成本型指标
其中 c j ∗ , c j 0 c_j^*,c_j^0 cj∗,cj0分别表示正、负理想解的第 j j j个元素取值。
(4)计算各方案到两个理想解的距离,即计算加权规范阵 C C C的每一行 C i ( i = 1 , . . . , m ) C_i(i=1,...,m) Ci(i=1,...,m)与理想解 C ∗ , C 0 C^*,C^0 C∗,C0的距离。
-
距离正理想解的距离 s i ∗ s_i^* si∗
s i ∗ = ∑ j = 1 n ( c i j − c j ∗ ) 2 s_i^*=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^* \right )^2 } si∗=j=1∑n(cij−cj∗)2 -
距离负理想解的距离 s i 0 s_i^0 si0
s i 0 = ∑ j = 1 n ( c i j − c j 0 ) 2 s_i^0=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^0 \right )^2 } si0=j=1∑n(cij−cj0)2
(5)计算各方案的排序指标值,按照指标值大小确定方案排序
f
i
∗
=
s
i
0
s
i
0
+
s
i
∗
,
i
=
1
,
.
.
.
,
m
f_i^*=\frac{s_i^0}{s_i^0+s_i^*},i=1,...,m
fi∗=si0+si∗si0,i=1,...,m
属性值规范化方法
数据的预处理又称属性值的规范化。
作用:
- 在综合评价之前将属性的类型作一致化处理使得表中任-属性下性能越优的方案变换后的属性值越大;
- 在用各种多属性决策方法进行分析评价时需要排除量纲的选用对决策或评估结果的影响;
- 为了便于采用各种多属性决策与评估方法进行评价’需要把属性值表中的数值归一化,即把表中数值均变换到 [ 0 , 1 ] \left [ 0,1 \right ] [0,1]区间上。
常见方法:
设原始的决策矩阵为 A = ( a i j ) m × n A=\left ( a_{ij} \right )_{m\times n} A=(aij)m×n,变化后的决策矩阵为 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij)m×n。
-
标准化处理
在实际问题中,不同变量的测量单位往往不同,为了消除量纲效应,使每个变量都具有同等的表现力,数据分析中常对数据进行标准化处理,即
b i j = a i j − μ j s j , i = 1 , . . . , m , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-\mu_{j}}{s_j},i=1,...,m,j=1,...,n bij=sjaij−μj,i=1,...,m,j=1,...,n
其中 μ j = 1 m ∑ i = 1 m a i j \mu_{j}=\frac{1}{m}\sum_{i=1}^{m}a_{ij} μj=m1∑i=1maij表示第 j j j列均值, s j = 1 m − 1 ∑ i = 1 m ( a i j − u j ) 2 s_j=\sqrt{\frac{1}{m-1}\sum_{i=1}^{m}\left ( a_{ij}-u_j \right )^2} sj=m−11∑i=1m(aij−uj)2表示第 j j j列方差, j = 1 , . . . , n j=1,...,n j=1,...,n。 -
线性变换
-
效益型属性
b i j = a i j a j m a x , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{a_j^{max}},j=1,...,n bij=ajmaxaij,j=1,...,n
其中 a j m a x a_j^{max} ajmax表示决策矩阵 A A A第 j j j列的最大值。 -
成本型属性
b i j = 1 − a i j a j m a x , j = 1 , . . . , n b_{ij}=1-\frac{a_{ij}}{a_j^{max}},j=1,...,n bij=1−ajmaxaij,j=1,...,n
-
-
标准0-1变换
-
效益型属性
b i j = a i j − a j m i n a j m a x − a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-a_j^{min}}{a_j^{max}-a_j^{min}},j=1,...,n bij=ajmax−ajminaij−ajmin,j=1,...,n
其中 a j m a x , a j m i n a_j^{max},a_j^{min} ajmax,ajmin分别表示初始的决策矩阵 A A A第 j j j列的最大值、最小值。 -
成本型属性
b i j = a j m a x − a i j a j m a x − a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_j^{max}-a_{ij}}{a_j^{max}-a_j^{min}},j=1,...,n bij=ajmax−ajminajmax−aij,j=1,...,n
-
-
区间属性变换
对于区间属性,设第 j j j个属性最优属性区间为 [ a j 0 , a j ∗ ] \left [ a_j^0,a_j^* \right ] [aj0,aj∗],无法容忍下限为 a j l b a_j^{lb} ajlb,无法容忍上限为 a j u b a_j^{ub} ajub,则
b i j = { 1 − ( a j 0 − a i j ) ( a j 0 − a j l b ) , a j l b ≤ a i j < a j 0 1 , a j 0 ≤ a i j ≤ a j ∗ 1 − ( a i j − a j ∗ ) ( a j u b − a j ∗ ) , a j ∗ < a i j ≤ a j u b 0 , o t h e r b_{ij}=\begin{cases} 1-\frac{\left ( a_j^0-a_{ij} \right ) }{\left ( a_j^0-a_j^{lb} \right )} & \text{ , } a_j^{lb}\le a_{ij}< a_j^0 \\ 1& \text{ , } a_j^{0}\le a_{ij}\le a_j^* \\ 1-\frac{\left ( a_{ij}-a_{j}^* \right ) }{\left ( a_j^{ub}-a_j^{*} \right )}& \text{ , } a_j^*< a_{ij}\le a_j^{ub} \\ 0& \text{ , } other \end{cases} bij=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧1−(aj0−ajlb)(aj0−aij)11−(ajub−aj∗)(aij−aj∗)0 , ajlb≤aij<aj0 , aj0≤aij≤aj∗ , aj∗<aij≤ajub , other -
向量规范化
b i j = a i j ∑ i = 1 m a i j 2 , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2} },j=1,...,n bij=∑i=1maij2aij,j=1,...,n
规范化后,各方案同一属性值的平方和为1。
代码示例
假设现有5个高校的数据,需要根据这些数据对高校进行评估。
人均专著/(本/人) | 生师比 | 科研经费/(万元每年) | 逾期毕业率/% | |
---|---|---|---|---|
1 | 0.1 | 5 | 5000 | 4.7 |
2 | 0.2 | 6 | 6000 | 5.6 |
3 | 0.4 | 7 | 7000 | 6.7 |
4 | 0.9 | 10 | 10000 | 2.3 |
5 | 1.2 | 2 | 400 | 1.8 |
对上面的4个指标进行分析,人均专著、科研经费属于效益型指标,逾期毕业率属于成本型指标,而生师比属于区间型指标,假设生师比最优区间为 [ 5 , 6 ] \left [ 5,6 \right ] [5,6],无法容忍下限为2,无法容忍上限为12,需要对其中一些指标进行转换。给出python代码如下:
import numpy as np
A = np.array([[0.1, 5, 5000, 4.7],
[0.2, 6, 6000, 5.6],
[0.4, 7, 7000, 6.7],
[0.9, 10, 10000, 2.3],
[1.2, 2, 400, 1.8]])
# 师生比的最优区间
opt_range = [5, 6]
# 师生比的容忍上下限
to_lb = 2
to_ub = 12
# 属性的权向量
omega = np.array([0.2, 0.3, 0.4, 0.1])
# 对师生比进行区间属性进行规范化处理
def range_trans(param, opt_range, lb, ub):
"""
:param param: 待转换的元素值
:param opt_range: 最优区间
:param lb: 无法容忍下限
:param ub: 无法容忍上限
:return:
"""
if lb <= param < opt_range[0]:
return 1 - (opt_range[0] - param)/(opt_range[0] - lb)
elif param <= opt_range[1]:
return 1
elif param <= ub:
return 1 - (param - opt_range[1])/(ub - opt_range[1])
else:
return 0
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
# 方案数m,属性数n
m, n = np.shape(A)
# 对师生比作区间变换
for i in range(m):
A[i, 1] = range_trans(A[i, 1], opt_range, to_lb, to_ub)
# 对逾期毕业率做标准0-1变换
a4_max = max(A[:, 3])
a4_min = min(A[:, 3])
for i in range(m):
A[i, 3] = (a4_max - A[i, 3])/(a4_max - a4_min)
# 属性进行向量规范化
B = np.zeros([m, n])
for i in range(m):
for j in range(n):
B[i, j] = A[i, j] / np.linalg.norm(A[:, j])
# 构建加权规范阵
omega_mat = np.tile(omega, (m, 1))
C = B * omega_mat
# 求正、负理想解。前两个属性以及第三个
max_vec = np.amax(C, axis=0)
min_vec = np.amin(C, axis=0)
# 计算各方案与正、负理想解之间的距离
res_array = np.zeros([m])
for i in range(m):
d0 = np.linalg.norm(max_vec - C[i, :])
d1 = np.linalg.norm(min_vec - C[i, :])
res_array[i] = d1/(d0 + d1)
print(res_array.tolist())
运行结果如下:
[0.5240156414355697, 0.5725615802335773, 0.61086314578445, 0.7027067250301631, 0.32916727350419983]
从运行结果上来看,数值越大说明对该高校的评估结果越好,具体的排名为 [ 4 , 3 , 2 , 1 , 5 ] \left [ 4,3,2,1,5 \right ] [4,3,2,1,5],因此第4所高校总体来说评价最好。