数模笔记-TOPSIS优劣解距离算法

算法概述

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)直译为逼近理想解排序法,国内常简称为优劣解距离法。

TOPSIS是一种常用评价模型,优点在于能充分利用原始数据的信息,其结果能精确反映各个评价方法之间的差距

TOPSIS和AHP(层次分析法)的主要差异在于功能和适用问题范围的差异:

  • TOPSIS法对决策因素没有限制,并且利用数据进行说明,更适用于解决原始数据相当充分几乎可以进行定量分析的情景
  • AHP的决策因素不能太多,数据已知情况下不容易用数据进行准确说明,更适用于已知条件较为模糊和复杂,难于完全定量分析的情景

两者在实际中可结合使用。


核心原理

TOPSIS 的核心原理是指标正向化标准化消除量纲影响两个方法的合理性。这两个方法也是 TOPSIS 和 AHP 的主要区别。

两个方法的合理性已经由运筹学家严格证明,因此只需要我们在使用时用合理的语言稍加阐释即可。


模型步骤

  1. 原始矩阵正向化
  2. 正向化矩阵标准化
  3. 计算得分并归一化

看到这里发现我的线性代数已经差不多忘完了…

接下来根据例题来讲解模型的步骤以及实现,并且补充相应的知识。


例题详解

例题一

小明所在宿舍共有四名同学,他们该学期的线代成绩以及与他人的干架次数如下表所示,请为这四名同学评分,使评分能合理地描述综合成绩地高低。

姓名线代成绩与他人干架次数
小明892
小王600
小张741
小李993

步骤一:原始矩阵正向化

TOPSIS中的数据可被分为四种:

  • 极大型(效益型)指标:越大(多)越好
  • 极小型(成本型)指标:越小(少)越好
  • 中间型指标:越接近某个值越好
  • 区间型指标:处在某个区间内最好,区间外的越靠近这个区间越好

例如在上述表格中,线代成绩当然是越高越好,所以是极大型指标。与他人干架次数按常理是越少越好,所以是极小型指标。(但也有人干架最多考的最好)

原始矩阵正向化指的是在TOPSIS方法中要将所有指标统一正向化,即将所有指标统一转化为极大型指标,意味着极小型指标、中间型指标、区间型指标需要转化为极大型指标。

极小型指标 —> 极大型指标

转化公式:MAX - X
如果所有元素同为正数,转化公式也可为:1/X,公式不唯一。

姓名与他人干架次数正向化后的与他人干架次数
小明23 - 2 = 1
小王03 - 0 = 3
小张13 - 1 = 2
小李33 - 3 = 0
中间型指标 —> 极大型指标

{xi} 是一组中间型指标序列,且最佳数据为xbest ,那么正向化的公式如下:
M = max{ | xi - xbest | }, xi’ = 1 - | xi - xbest | / M

区间型指标 —> 极大型指标

{xi} 是一组区间型指标序列,且最佳区间为
[a, b],那么正向化的公式如下:
M = max{a - min{xi}, max{xi} - b}
xi < a 时,xi’ = 1 - (a - xi) / M
a <= xi < = b 时,xi’ = 1
xi > b 时,xi’ = 1 - (xi - b) / M

步骤二:正向矩阵标准化

标准化的目的是消除不同量纲的影响

假设由m个要评价的对象,n个已正向化的评价指标构成的正向化矩阵如下:

Alt
标准化后的矩阵记为ZZ 中的每个元素转换公式为:

Alt

PS:标准化的方式不唯一

此处建议手算感受一下:

Alt

步骤三:计算得分并归一化

最大值:

在这里插入图片描述

最小值:

在这里插入图片描述
默认在各项指标的权重相同情况下计算:

第i个评价对象与最大值的(欧式)距离:

在这里插入图片描述
第i个评价对象与最小值的(欧式)距离:

在这里插入图片描述

实际中的评价指标都有各自的权重,利用权重修正后的距离公式如下:

在这里插入图片描述
在这里插入图片描述
ω 可以由偏主观的层次分析法得出,也可由偏客观的熵权法(熵权法我会在文末补充)得出,主客观结合算出的权重更有说服力

计算得出第i个评价对象未归一化的得分:

在这里插入图片描述
由上式定义可得 0 <= Si <= 1 ,Si 越大 Di 越小,该评价对象与最大值的距离越小。

得分的计算公式等价于:

在这里插入图片描述

回到题目中,先看一下标准化后的矩阵,免得大家往上拉了:

姓名线代成绩与他人干架次数
小明0.54370.2673
小王0.36650.8018
小张0.45200.5345
小李0.60480

那么最大值 Z+ = [0.6048, 0.8018], Z- = [0.3665, 0]

真男人来手算一下:

在这里插入图片描述
归纳为表格:

姓名D+D-未归一化得分归一化后得分
小明0.53800.32060.37340.1857
小王0.23830.80180.77090.3834
小张0.30790.54130.63740.3170
小李0.80180.23830.22910.1139

模型总结

TOPSIS 优劣解距离算法,主要利用数据信息精确反映评价方案之间的优劣差距。

TOPSIS 法多用于解决多指标的决策性问题,实现原理为计算各方案与正负理想解之间的相对距离进行排序并评分选择。主要步骤及作用如下:

  1. 原始矩阵正向化:统一指标
  2. 正向化矩阵标准化:消除量纲影响
  3. 计算得分并归一化:计算方案得分

模型代码

topsis.m

%%  加载数据
clear;clc
load data.mat	%data.mat为原始数据矩阵,行为评价对象,列为评价指标

%%  第一步:正向化(极小型、中间型、区间型转极大型)
[n,m] = size(X);
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标']) 
Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理,需要请输入1 ,不需要输入0:  ']);
if Judge == 1
    Position = input('请输入需要正向化处理的指标所在的列,例如第2、3、6三列需要处理,那么你需要输入[2,3,6]: '); %[2,3,4]
    disp('请输入需要处理的这些列的指标类型(1:极小型, 2:中间型, 3:区间型) ')
    Type = input('例如:第2列是极小型,第3列是区间型,第6列是中间型,就输入[1,3,2]:  '); %[2,1,3]
        for i = 1 : size(Position,2)  %这里需要对这些列分别处理,因此我们需要知道一共要处理的次数,即循环的次数
            X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));
        end
    disp('正向化后的矩阵 X =  ')
    disp(X)
end

%%  第二步:对正向化矩阵标准化
Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 Z = ')
disp(Z)

%%  第三步:计算与最大值和最小值的距离,并计算得分
D_P = sum([(Z - repmat(max(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D+ 与最大值的距离向量
D_N = sum([(Z - repmat(min(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D- 与最小值的距离向量
S = D_N ./ (D_P+D_N);    % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S)
[sorted_S,index] = sort(stand_S ,'descend');
disp('标准化后得分为:')
disp(sorted_S)
disp('对应的下标为:')
disp(index)

Inter2Max.m

function [posit_x] = Inter2Max(x,a,b)
    r_x = size(x,1);  % row of x 
    M = max([a-min(x),max(x)-b]);
    posit_x = zeros(r_x,1);   %zeros函数用法: zeros(3)  zeros(3,1)  ones(3)
    % 初始化posit_x全为0  初始化的目的是节省处理时间
    for i = 1: r_x
        if x(i) < a
           posit_x(i) = 1-(a-x(i))/M;
        elseif x(i) > b
           posit_x(i) = 1-(x(i)-b)/M;
        else
           posit_x(i) = 1;
        end
    end
end

Mid2Max.m

function [posit_x] = Mid2Max(x,best)
    M = max(abs(x-best));
    posit_x = 1 - abs(x-best) / M;
end

Min2Max.m

function [posit_x] = Mid2Max(x,best)
    M = max(abs(x-best));
    posit_x = 1 - abs(x-best) / M;
end

Positivization.m

function [posit_x] = Positivization(x,type,i)
% 输入变量有三个:
% x:需要正向化处理的指标对应的原始列向量
% type: 指标的类型(1:极小型, 2:中间型, 3:区间型)
% i: 正在处理的是原始矩阵中的哪一列
% 输出变量posit_x表示:正向化后的列向量
    if type == 1  %极小型
        disp(['第' num2str(i) '列是极小型,正在正向化'] )
        posit_x = Min2Max(x);  %调用Min2Max函数来正向化
        disp(['第' num2str(i) '列极小型正向化处理完成'] )
        disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
    elseif type == 2  %中间型
        disp(['第' num2str(i) '列是中间型'] )
        best = input('请输入最佳的那一个值: ');
        posit_x = Mid2Max(x,best);
        disp(['第' num2str(i) '列中间型正向化处理完成'] )
        disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
    elseif type == 3  %区间型
        disp(['第' num2str(i) '列是区间型'] )
        a = input('请输入区间的下界: ');
        b = input('请输入区间的上界: '); 
        posit_x = Inter2Max(x,a,b);
        disp(['第' num2str(i) '列区间型正向化处理完成'] )
        disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
    else
        disp('没有这种类型的指标,请检查Type向量中是否有除了1、2、3之外的其他值')
    end
end

补充:熵权法

算法定义

熵权法(Entropy Weight Method, EWM)是源自于信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量(我只在化学里学过…)

熵权法的基本思路是根据指标变异性的大小来确定客观权重。

一般来说,若某个指标的信息熵越小,表明指标值得变异程度越大,提供的信息量越大,在综合评价中所能起到的作用也越大,权重也就越大;相反,某个指标的信息熵越大,表明指标值得变异程度越小,提供的信息量也越少,在综合评价中所起到的作用也越小,其权重也就越小。

算法步骤

先直接对原始矩阵进行标准化操作,即进行上述TOPSIS算法步骤中的步骤二基础上,再进行归一化(在上述步骤三中提及)计算,得到已经归一化矩阵:

在这里插入图片描述
第j项指标下第i个样本值占该指标的比重:

在这里插入图片描述

第j项指标的熵值:

在这里插入图片描述
第j项指标的差异系数:

在这里插入图片描述
第j项指标的权重:

在这里插入图片描述

参考文献

以上笔记内容基于学习:

[1] 数学建模算法与应用/司守奎, 孙兆亮主编. —2版. —北京:国防工业出版社,2015.4
[2] https://blog.csdn.net/qq_58602552/article/details/129960986
[3] https://zhuanlan.zhihu.com/p/545071388
[4] https://www.zhihu.com/question/357680646/answer/943628631

仅供参考学习

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
熵权法-TOPSIS-灰色关联度综合算法是一种多目标优化的数学方法,用于评价方案的优劣程度。这个方法结合了熵权法、TOPSIS法和灰色关联度分析法的特点。 熵权法是一种确定权重的方法,它通过计算每个因素的熵值来确定其重要性。熵值越大,表示该因素对决策结果的影响越大。 TOPSIS法是一种评价方案优劣的方法,它通过计算每个方案与最优方案和最劣方案之间的距离,来确定方案的优劣程度。距离越小,表示方案越接近最优。 灰色关联度分析法是一种用于评价方案的相似度的方法,它通过计算每个方案与其他方案之间的关联度,来确定方案的相似程度。关联度越大,表示方案越相似。 综合使用这三种方法,可以得到一个综合评价结果,用于评价方案的优劣程度。 具体步骤如下: 1. 确定评价因素和权重:使用熵权法确定每个评价因素的权重。 2. 构建决策矩阵:将每个方案的评价因素值组成一个决策矩阵。 3. 归一化决策矩阵:对决策矩阵进行归一化处理,将所有因素的值映射到0-1之间。 4. 计算正理想和负理想:根据归一化后的决策矩阵,计算正理想和负理想。 5. 计算方案与正理想和负理想距离:根据归一化后的决策矩阵,计算每个方案与正理想和负理想距离。 6. 计算方案的相似度:根据灰色关联度分析法,计算每个方案与其他方案的关联度。 7. 综合评价:根据TOPSIS法,综合考虑方案与正理想和负理想距离以及方案的相似度,得到最终的评价结果。 这种方法可以应用于各种决策问题,例如项目选择、供应商评价等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值