数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)

目录

一.总述

二.引子

 三.TOPSIS的算法

四.问题解决

五.模型改进


一.总述

    TOPSIS法(Technique for Order Preference by Similarity to an Ideal Solution 亦称为理想解法,由C.L.Hwang和K.Yoon于1981年首次提出,是一种简单易行的多指标评价方法。

    TOPSIS法通过构造评价问题的正理想解和负理想解,即各指标的最优解和最劣解,通过计算每个方案到理想解的相对贴近度(relative closeness),来对不同样本进行比较和排序。

二.引子

    假设咱们要对5个国家的经济发展水平进行排序,现在有4个指标来衡量国家的经济发展水平。其中,指标1和指标3为效益性指标(值越大,说明发展水平越好),指标2为区间型指标(值落在某个区间最好),指标4为成本型指标(值越小,说明发展水平越好),那么我们怎么根据下表的数据来对这5个国家的经济发展水平进行排序?

表1:5个国家的经济发展情况

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第1张图片

 三.TOPSIS的算法

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第2张图片

 图1:TOPSIS算法流程图

 (一)规范化处理

1.正向化的方法

(1)极小型指标

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第3张图片

(2)中间型指标

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第4张图片

 (3)区间型指标

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第5张图片

 (设本文中问题的指标2的最优区间为[4,6],无法容忍下限为3,无法容忍上限为12)

 2.向量规范化

    无论成本型属性还是效益型属性,向量规范化如下式进行变换:

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第6张图片

 (二)确定正理想解和负理想解

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第7张图片

 (三)计算各对象到正理想解与负理想解的距离

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第8张图片

 (四)计算各对象的综合评价指数

 (五)按照对象的综合评价指数进行排序

四.问题解决

1.向量规范化

 a=[0.3  6  3000  3.8
      0.5  8  2000  4.7
      1.7  10  4000  5.5
      0.2  7  2500  6.8
      0.8  2  6000  2.1];

[m,n]=size(a);
x2=@(range,lb,ub,x)(1-(range(1)-x)./(range(1)-lb)).*...
(x>=lb & x=range(1) & x<=range(2))+...
(1-(x-range(2))./(ub-range(2))).*(x>range(2) & x<=ub);
range=[4,6];lb=3;ub=12;
a(:,2)=x2(range,lb,ub,a(:,2));%对指标2进行变换
b=a./vecnorm(a)  %向量规范化

表2:规范化后的5个国家的经济发展情况    数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第9张图片

 2.确定正理想解和负理想解

Cstar=max(b);  %求正理想解
Cstar(4)=min(b(:,4))%指标4为成本型指标

得到的正理想解为

C0=min(b);%求负理想解
C0(4)=max(b(:,4))%指标4为成本型指标

 得到的负理想解为

 3.计算各对象到正理想解与负理想解的距离

Sstar=vecnorm(b-Cstar,2,2) %逐行计算二范数得到正理想解的距离
S0=vecnorm(b-C0,2,2) %逐行计算二范数得到负理想解的距离

 4.计算综合评价指数

f=S0./(Sstar+S0)
[sf,ind]=sort(f,'descend')%求排序结果

最终结果:

表3:5个国家的经济发展排序数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第10张图片

 完整代码:

a=[0.3  6  3000  3.8
      0.5  8  2000  4.7
      1.7  10  4000  5.5
      0.2  7  2500  6.8
      0.8  2  6000  2.1];

[m,n]=size(a);
x2=@(range,lb,ub,x)(1-(range(1)-x)./(range(1)-lb)).*...
(x>=lb & x=range(1) & x<=range(2))+...
(1-(x-range(2))./(ub-range(2))).*(x>range(2) & x<=ub);
range=[4,6];lb=3;ub=12;
a(:,2)=x2(range,lb,ub,a(:,2));%对指标2进行变换
b=a./vecnorm(a)  %向量规范化

Cstar=max(b);  %求正理想解
Cstar(4)=min(b(:,4))%指标4为成本型指标

C0=min(b);%求负理想解
C0(4)=max(b(:,4))%指标4为成本型指标

Sstar=vecnorm(b-Cstar,2,2) %逐行计算二范数得到正理想解的距离
S0=vecnorm(b-C0,2,2) %逐行计算二范数得到负理想解的距离

f=S0./(Sstar+S0)
[sf,ind]=sort(f,'descend')%求排序结果

五.模型改进

    TOPSIS法的局限性:默认了所有指标对最终打分的重要程度是相同的,即权重相同,但在实际问题中,不同的指标往往具有不同的权重大小。

    因此,我们常常在TOPSIS法的基础上,使用层次分析法、熵权法等等方法对不同指标赋予权重。本文使用客观权重赋权法(CRITIC法)对问题中的4个指标进行赋权,此处参考了知乎博主和wt一起快乐学习的Python代码(https://zhuanlan.zhihu.com/p/439207297),得到赋权结果:

数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第11张图片

     在上面MATLAB代码的基础上加入指标的权重矩阵即可得到排序结果,完整代码如下:

 a=[0.3  6  3000  3.8
      0.5  8  2000  4.7
      1.7  10  4000  5.5
      0.2  7  2500  6.8
      0.8  2  6000  2.1];

[m,n]=size(a);
x2=@(range,lb,ub,x)(1-(range(1)-x)./(range(1)-lb)).*...
(x>=lb & x=range(1) & x<=range(2))+...
(1-(x-range(2))./(ub-range(2))).*(x>range(2) & x<=ub);
range=[4,6];lb=3;ub=12;
a(:,2)=x2(range,lb,ub,a(:,2));%对指标2进行变换

b=a./vecnorm(a)  %向量规范化

w=[0.39935266  0.14388528  0.26744244  0.18931962]; %加权矩阵
c=b.*w;

Cstar=max(c);  %求正理想解
Cstar(4)=min(c(:,4))%指标4为成本型指标

C0=min(c);%求负理想解
C0(4)=max(c(:,4))%指标4为成本型指标

Sstar=vecnorm(c-Cstar,2,2) %逐行计算二范数得到正理想解的距离
S0=vecnorm(c-C0,2,2) %逐行计算二范数得到负理想解的距离

f=S0./(Sstar+S0)
[sf,ind]=sort(f,'descend')%求排序结果

模型改进后的结果:

表4:5个国家的经济发展排序(模型改进后)数学建模:用TOPSIS法解决评分排序问题(附MATLAB代码)_第12张图片

你可能感兴趣的:(matlab,算法)