【数据分析】Matlab实现熵权TOPSIS

1 内容介绍

TOPSIS法用于研究评价对象与‘理想解’的距离情况,结合‘理想解’(正理想解和负理想解),计算得到最终接近程度C值。熵权TOPSIS法核心在于TOPSIS,但在计算数据时,首先会利用熵值(熵权法)计算得到各评价指标的权重,并且将评价指标数据与权重相乘,得到新的数据,利用新数据进行TOPSIS法研究。

通俗地讲,熵权TOPSIS法是先使用熵权法得到新数据newdata(数据成熵权法计算得到的权重),然后利用新数据newdata进行TOPSIS法研究。

例如:当前有一个项目进行招标,共有4个承包商,分别是A,B,C,D厂。由于招标需要考虑多个因素,各个方案指标的优劣程度也并不统一。为了保证评价过程中的客观、公正性。因此,考虑通过熵权TOPSIS法,对各个方案进行综合评价,从而选出最优方案。

2 完整代码

clearvars
clc
format short
format compact
X = 0.5*log(abs(100*(rand(300,4))))+sqrt(abs(100*(rand(300,4))));                     % 基于仿真梅森算法生成300*9的随机数矩阵。300行为样本容量,可以是时间、截面及面板数据。
Variable = {'X1','X2','X3','X4','权重之和'}';                                          % 划重点:'权重之和'不能少;转置!!!
[Wj2,T1,T2_sort] = ShangTopsis(X,Variable)

function [Wj2,T1,T2_sort,Ej] = ShangTopsis(X,Variable)
[m,n] = size(X);
X_PO = (X-min(X))./range(X);                                               % 正向化数据
X_NE = (max(X)-X)./range(X);                                               % 负向化数据

Pij = X_PO./sum(X_PO);                                                     % 计算m省份n指标的特征比重
logPij = log(Pij);
logPij(logPij==-inf) = 0;
Ej = (-1/log(m))*sum(Pij.*logPij);                                         % 计算j项指标的熵值Ej
Dj = 1-Ej;                                                                 % 计算j项指标的差异系数Dj
Wj = (Dj/sum(Dj))';                                                        % 根据差异系数确定第j项指标的权重

Wj2 = [Wj;sum(Wj)];
disp("各变量权重并检验和是否为1: ")
T1 = table(Variable,Wj2);                                                

for i = 1:n
   V(:,i) = Wj(i)*X_PO(:,i);                                               % 此处有两个方向,第一个方向为继续使用正向化数据(我个人倾向于这种,有始有终贯穿全文嘛),第二个方向为将原始数据标准化
end

PO_Ideal = max(V);                                                         % 计算正理想解
NE_Ideal = min(V);                                                         % 计算负理想解
PO_D = sqrt(sum((V-PO_Ideal).^2,2));                                       % 计算正理想解距离
NE_D = sqrt(sum((V-NE_Ideal).^2,2));                                       % 计算负理想解距离
C = NE_D./(PO_D+NE_D);                                                     % 计算贴近度

City_ID = [1:m]';
disp('排名结果(城市序号、正理想解距离、负理想解距离、贴近度): ')
T2 = table(City_ID,PO_D,NE_D,C);
T2_sort = sortrows(T2,4,'descend');

end

3 运行结果

 

4 参考文献

博主简介:擅长智能优化算法神经网络预测信号处理元胞自动机图像处理路径规划无人机雷达通信无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天Matlab科研工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值