代码 / 数学建模

TOPSIS法

5 分钟阅读
代码数学建模TOPSIS数学建模

TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)
可翻译为逼近理想解排序法,也称优劣解距离法
TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确的反映各评价方案之间的差距

层次分析法的局限性

1) 决策层不能太多,太多n会很大,潘多矩阵和一致矩阵差距大
2)对于已知的指标数据,我们如何利用数据使之更加准确

一个例子

对于如下表格

姓名 成绩 排名 修正后的排名 评分
小明 89 2 3 3/10=0.3
小王 60 4 1 1/10=0.1
小张 74 3 2 2/10=0.2
99 1 4 4/10=0.4

对于这种评价系统我们可以发现,只要保证排名不变,那么评分就不会改变

优化的想法

我们可以取最高的成绩max = 99
最低的成绩min = 60
构造计算评分的公式: ( x - min ) / ( max - min )
然后对于每一个数据进行归一化处理即可
但同时最高分与最低分的评价是一定的,1&0

说明

为什么不直接将各自的分数除以100再进行归一化处理,这样对于数据的关联性还更强
原因有三点

  1. 比较对象一般远大于两个
  2. 比较的指标往往不是一个方面的
  3. 有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指标:GDP增速
    故我们最好使用上述优化的想法

拓展问题:增加指标个数

姓名 成绩 与他人争吵的次数
小明 89 2
小王 60 0
小张 74 1
清风 99 3

成绩是越大越好,这样的指标称为极大型指标(效益型指标)
与他人争吵的次数越少越好,这样的指标称为极小型指标(成本型指标)

如果我们直接将这些数据加以利用显然是不合适的,因为指标类型不一样
所以我们应当统一指标类型
一般我们将所有的指标转化为极大型称为指标正向化(最常用)

姓名 成绩 与他人争吵的次数 正向化后的争吵次数
小明 89 2 1
小王 60 0 3
小张 74 1 2
清风 99 3 0

极小型指标转换为极大型指标的公式:max - x

标准化处理

显然成绩的大小与争吵次数的大小不是一个量级上的比较
为了消去不同指标量纲的影响,需要对已经正向化的矩阵进行标准化处理
图像链接:
我们得到了标准化处理后的指标,那么我们怎么去联系这些值呢

如何计算得分

我们对于最开始的式子:( x - min ) / ( max - min )
我们可以将其变形= ( x - min ) / [ ( max - x ) + ( x - min ) ]
可以看作是:x与最小值的距离 / ( x与最大值的距离 + x与最小值的距离 )
类比可以得出:
图像链接:

上面的一大串公式可以这样理解,我们对于只有一个指标时,我们将这一列的数据找出它的最大值和最小值,对于多个指标,同理,我们先将每一列的最大值和最小值找出来。
对于每一个评价对象,我们要找出它与最小值的距离可以看成一个平面直角坐标系,它的值所对应的点距离原点(最小值)的距离长度,也就是他的我们所要找的值
对于最大值的寻找也同理

计算出未归一化的得分后我们将其进行归一化处理,就可得到他们的排名了

这下子再回到TOPSIS算法,我们就不难理解它为什么是优劣解距离法了吧

梳理

第一步将原始矩阵正向化

最常见的四种指标

指标 名称 指标特点 例子
极大型(效益型) 指标越大越好 成绩、GDP增速、企业利润
极小型(成本型) 指标越小越好 费用、坏品率、污染程度
中间型指标 越接近某个值越好 水质量评估ph值
区间型指标 落在某个区间最好 体温、水中植物性营养物量

正向化就是将所有指标类型转化为极大型指标

我们介绍了极小型转化为极大型,那么另外两种指标该如何转换呢

中间型指标

{xi}是一组中间型指标序列,且最佳的数值为xbest,那么正向化的公式如下
M = max { | xi - xbest | } , xi’ = 1 - | xi - xbest | / M
我们可以画图去理解这个公式,也是利用距离去计算,思想大致与极小型相同

区间型指标

我们设最佳区间为[a,b]
M = max { a - min { xi } , max { xi } - b }
xi = 1 - ( a - x ) / M , x < a
1 , a <= x <= b
1 - ( x - b ) / M , x > b
思路与中间型指标也是差不多的,画图也可以理解

第二步:正向化矩阵标准化

第三步:归一化处理并排名

带权重的TOPSIS

对于之前我们所用到的TOPSIS我们默认了指标之间的权重为1 ,然而实际情况可能更为复杂
有n个要评价的对象,m个评价指标的标准化矩阵
可以利用层次分析法给这m个评价指标确定权重,每个指标的权重加起来显然是为1的。
我们在计算评价对象与最大值之间的距离是可以直接针对每个j(即每个指标)乘以响应的权重wj再进行开方
可能有人就要问了,那你这样加起来的距离显然是要小于之前的距离呀,会对得出正确的结论有影响吗
其实是没有影响的
我们可以理解为对于我们建立的直角坐标系对于某个轴进行了压缩,压缩后虽然大小改变了,但是并不影响我们得出正确的结论

关于TOPSIS的代码见下一篇博客