TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首次提出,TOPSIS法根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。
该方法对数据分布及样本含量没有严格限制,数据计算简单易行。基本计算过程:
1 构造归一化初始矩阵
假设有
n
n
n个评价对象(单元),每个对象都有
m
m
m个指标(属性),则原始数据矩阵为:
[
x
11
x
12
⋯
x
1
m
x
21
x
22
⋯
x
2
m
⋮
⋮
⋱
⋮
x
n
1
x
n
2
⋯
x
n
m
]
\begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1m} \\ x_{21} & x_{22} & \cdots & x_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{nm} \end{bmatrix}
⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎤
构造加权规范矩阵,进行属性向量归一化:
P
i
j
=
x
i
j
∑
k
=
1
n
x
i
j
2
P_{ij} = \cfrac{x_{ij}}{\sqrt{\sum_{k=1}^n x_{ij}^2}}
Pij=∑k=1nxij2xij
根据专家知识(经验)判定法,得到每个指标的权重
w
j
w_j
wj,进行向量定权:
z
i
j
=
w
j
∗
P
i
j
z_{ij}=w_{j}*P_{ij}
zij=wj∗Pij
据此得到归一化和定权后的标准化矩阵
Z
Z
Z:
Z
=
[
z
11
z
12
⋯
z
1
m
z
21
z
22
⋯
z
2
m
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
m
]
Z=\begin{bmatrix} 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{bmatrix}
Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤
2 确定最优方案和最劣方案
最优方案
Z
+
Z^+
Z+由
Z
Z
Z中每列元素的最大值构成:
z
j
+
=
m
a
x
(
z
1
j
,
z
2
j
,
.
.
.
,
z
n
j
)
z_j^+=max(z_{1j},z_{2j},...,z_{nj})
zj+=max(z1j,z2j,...,znj)
最劣方案
Z
−
Z^-
Z−由
Z
Z
Z中每列元素的最小值构成:
z
j
−
=
m
i
n
(
z
1
j
,
z
2
j
,
.
.
.
,
z
n
j
)
z_j^-=min(z_{1j},z_{2j},...,z_{nj})
zj−=min(z1j,z2j,...,znj)
3 计算各评价对象与最优、最劣方案的距离
D
i
+
=
∑
j
m
(
z
j
+
−
z
i
j
)
2
D_i^+=\sqrt{\sum_{j}^m (z_j^+-z_{ij})^2}
Di+=∑jm(zj+−zij)2
D
i
−
=
∑
j
m
(
z
j
−
−
z
i
j
)
2
D_i^-=\sqrt{\sum_{j}^m (z_j^--z_{ij})^2}
Di−=∑jm(zj−−zij)2
式中:
D
i
+
D_i^+
Di+——各评价对象与最优方案的距离;
D
i
−
D_i^-
Di−——各评价对象与最劣方案的距离。
4 计算各评价对象与最优方案的贴近程度 C i C_i Ci
C
i
=
D
i
−
D
i
+
+
D
i
−
C_i=\cfrac{D_i^-}{D_i^++D_i^-}
Ci=Di++Di−Di−
其中,
0
≤
C
i
≤
1
0≤C_i≤1
0≤Ci≤1,
C
i
→
1
C_i\to1
Ci→1表明评价对象越优。
Matlab代码参考
% X 原始数据矩阵
%%
X = [
272.4177072 1 7.355278093 4347332.577 0 31.12372304 0.227014756
375.6157635 1 76.97044335 615763.5468 1582.512315 4.618226601 3.605295567
32.53308412 0 1.498814173 176331.0792 347.4603916 1.995186162 0.839309487
194.1872098 0 0 0 128.2610369 0 0
50.35513622 0 0 0 1275.840136 0.265027033 0.171207463
31.03355222 0 13.61540883 69735.54016 242.0841954 2.097013583 0.755824413
49.18393814 0 0 0 154.1586121 0 0.489392419
283.7729816 0 6.039168665 199840.1279 1613.709033 5.40567546 0.807354117
39.11678419 0 18.52900304 77204.17932 607.8542385 4.632250759 0.319110608
481.0996564 1 0 0 3161.512027 8.987575998 0.528680941
44.26064221 0 200.1127877 17089.05104 187.6377805 0.854452552 0.017089051
];
sumZi = sqrt(sum(X .^ 2));
sizeX = size(X);
Zij = X - X;
% 权重
w = [0.132 0.132 0.132 0.3 0.099 0.099 0.099];
% 构造加权规范矩阵,进行属性向量归一化,获取Zij
for i = 1 : sizeX(2)
Zij(:, i) = X(:, i) / sumZi(i) * w(i);
end
Zplus = max(Zij);
Zminus = min(Zij);
Dplus_i = zeros(sizeX(1), 1);
Dminus_i = Dplus_i;
Zplus_ij = X - X;
Zminus_ij = X - X;
for i = 1 : sizeX(2)
for j = 1 : sizeX(1)
Zplus_ij(j, i) = (Zplus(i) - Zij(j, i)) ^ 2;
Zminus_ij(j, i) = (Zminus(i) - Zij(j, i)) ^ 2;
end
end
for i = 1 : sizeX(1)
Dplus_i(i) = sqrt(sum(Zplus_ij(i, :)));
Dminus_i(i) = sqrt(sum(Zminus_ij(i, :)));
end
Ci = Dminus_i ./ (Dminus_i + Dplus_i);
输出结果:
>> Ci
Ci =
0.6582
0.3522
0.0694
0.0726
0.0782
0.0602
0.0348
0.1627
0.0655
0.2878
0.2615
>>
欢迎大家批评指正!