Matlab实现优劣解距离法(TOPSIS法)

阅读: 评论:0

Matlab实现优劣解距离法(TOPSIS法)

Matlab实现优劣解距离法(TOPSIS法)

文章目录

  • 1 构造归一化初始矩阵
  • 2 确定最优方案和最劣方案
  • 3 计算各评价对象与最优、最劣方案的距离
  • 4 计算各评价对象与最优方案的贴近程度 C i C_i Ci​
  • Matlab代码参考

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} ⎣⎢⎢⎢⎡​x11​x21​⋮xn1​​x12​x22​⋮xn2​​⋯⋯⋱⋯​x1m​x2m​⋮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=1n​xij2​ ​xij​​
根据专家知识(经验)判定法,得到每个指标的权重 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=⎣⎢⎢⎢⎡​z11​z21​⋮zn1​​z12​z22​⋮zn2​​⋯⋯⋱⋯​z1m​z2m​⋮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_ito1 Ci​→1表明评价对象越优。

Matlab代码参考

% X 原始数据矩阵
%%
X = [272.4177072	1	7.355278093	4347332.577	0	31.12372304	0.227014756375.6157635	1	76.97044335	615763.5468	1582.512315	4.618226601	3.60529556732.53308412	0	1.498814173	176331.0792	347.4603916	1.995186162	0.839309487194.1872098	0	0	0	128.2610369	0	050.35513622	0	0	0	1275.840136	0.265027033	0.17120746331.03355222	0	13.61540883	69735.54016	242.0841954	2.097013583	0.75582441349.18393814	0	0	0	154.1586121	0	0.489392419283.7729816	0	6.039168665	199840.1279	1613.709033	5.40567546	0.80735411739.11678419	0	18.52900304	77204.17932	607.8542385	4.632250759	0.319110608481.0996564	1	0	0	3161.512027	8.987575998	0.52868094144.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);
endZplus = 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
endfor i = 1 : sizeX(1)Dplus_i(i) = sqrt(sum(Zplus_ij(i, :)));Dminus_i(i) = sqrt(sum(Zminus_ij(i, :)));
endCi = Dminus_i ./ (Dminus_i + Dplus_i);

输出结果:

>> CiCi =0.65820.35220.06940.07260.07820.06020.03480.16270.06550.28780.2615>> 

欢迎大家批评指正!

本文发布于:2024-02-02 17:28:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170686610145333.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:优劣   距离   Matlab   TOPSIS
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23