Topsis算法核心思想是逼近理想解的排序方法。正理想解,各指标都达到各候选方案的最好值,负理想解,各指标都达到各候选方案的最差值。基于有限个评价对象与理想化目标的接近程度进行排序,在现有的对象中进行相对优劣的评价。
算法步骤:
1.构造决策矩阵vij,i为各方案,j为各指标
2.对决策矩阵进行规范化处理
3.构建权重wj,可通过熵权法、FAHP、相关性等方法确定权重
4.计算加权决策矩阵
5.计算正负理想解
6.计算各方案与正负理想解间的距离
7.计算各方案与正理想解的相对贴近度
(*算法步骤参考了NHASMJ公众号*)
Topsis算法基本思想:基于归一化后的原始数据矩阵,找出有限方案中的最优方案和最劣方案(分别用最优向量和最劣向量表示),然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。
代码实现:
x=[
21584 76.7 7.3 1.01 78.3 97.5
24372 86.3 7.4 0.80 91.1 98.0
22041 81.8 7.3 0.62 91.1 97.3
21115 84.5 6.9 0.60 90.2 97.7
24633 90.3 6.9 0.25 95.5 97.9];
%矩阵
[n,m]=size(x);
%将3,4的低优指标去倒数转化为高优指标并且把所有指标换成接近的大小
x(:,1)=x(:,1)/100;
x(:,3)=(1./x(:,3))*100;
x(:,4)=(1./x(:,4))*100;
zh=zeros(1,m);
d1=zeros(1,n); %最小值矩阵
d2=zeros(1,n); %最大值矩阵
c=zeros(1,n); %接近程度
%归一化
for i=1:m
for j=1:n
zh(i)=zh(i)+x(j,i)^2;
end
end
for i=1:m
for j=1:n
x(j,i)=x(j,i)/sqrt( zh(i));
end
end
%计算距离
xx=min(x);
dd=max(x);
for i=1:n
for j=1:m
d1(i)=d1(i)+(x(i,j)-xx(j))^2;
end
d1(i)=sqrt(d1(i));
end
for i=1:n
for j=1:m
d2(i)=d2(i)+(x(i,j)-dd(j))^2;
end
d2(i)=sqrt(d2(i));
end
%计算接近程度
for i=1:n
c(i)=d1(i)/(d2(i)+d1(i));
end