TOPSIS算法

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)

即逼近理想解排序法,或优劣解距离法


目录

1 TOPSIS算法的优势

2 引例

 3 算法步骤

3.1 第一步:原始矩阵正向化

3.1.1 极小型转到极大型

3.1.2 中间型到极大型

 3.1.3 区间型转极大型

 3.2 第二步:标准化(消除量纲)

3.3 第三步:归一化


1 TOPSIS算法的优势

这里对照层次分析法局限性来看

  1. 层次分析法中决策层不能太多,不然N太大,判断矩阵和一致性矩阵差异会很大,而且平均随机一致性指标RI的表格中n最多也只有15。
  2. 层次分析法中的数据是“专家”给出的,会有很强的主观性(从层次分析法的笔记可以看出来)。TOPSIS算法一般用于题目给好了数据,或者数据来的很客观,然后根据客观数据进行评价。

2 引例

 我们给出四个人的成绩与对应的排名:

 如果要依据排名进行评分的话,排名当然是越小越好,但是评分是越大越好,所以我们进行一个修正。

修正方法很简单捏,如上图所示, 评分其实就是归一化。

但是不难发现一个问题:

 即使小王和清风成绩发生了变化,评分也不会改变,也就是说刚刚的算法与成绩相关性不强。

那么我们不妨这样来评分:

 我们用每个人的成绩减去最小的成绩,得到一组新的数,但是数字太大了,我们再除以最大值减去最小值,这样子所有的数字就都存在于0到1之间了,最后归一化:

 但是这样子会出现一个问题,最后一名的评分永远是0,第一名的评分永远是1,无论他的成绩怎么变化,评分都不变,我们不妨设想一种这样子的解决办法:

 我们不使用样本最高分与最低分,我们用100和0,这样子得到如图:

 但是不难发现这种方法的问题:

  1. ⭐核心问题:不一定存在理论上的最大与最小,例如GDP增速。
  2. 比较对象中只有第一名和最后一名得分不变,其余都会变。
  3. 指标也往往不是一个方面,倘若指标大于两个,不变的情况就更少了(现在不理解没关系,接着看)。

现在我们加一个指标:

 可以看出两个指标有明显的区别:

成绩是越高越好,即极大型指标(效益型指标)

而与他人争吵的次数越少越好,即极小型指标(成本型指标)

那么为了方便处理,我们来统一一下类型:

即指标正向化(论文里用到的话要写明方法)

现在我们可以直接把成绩和争吵次数相加,然后计算得分嘛?

显然不可以,量纲都不一样,所以接下来我们消去量纲(标准化):

 即用元素除以所在列的元素平方和开根号

标准化后如下:

 但是如何计算得分呢?

我们先来看一下只有一个指标的时候

也就是所谓的优劣解距离

那我们类比一下:

假设矩阵n行m列,我们现在只要明确最小值是什么,最大值是什么,x与最小值的距离,x与最大值的距离就好。

 n个要评价的对象就是n行,m个评价的指标就是m列,那怎么定义最小值呢?

原来只有一个指标时,最小值就是那一列里面最小的,那现在我们把它拓展一下:

 我们把每列的最小值都拿出来,组成一个向量,这个就是我们的新的最小值(最大值同理)

那怎么定义x与最小值的距离呢?

比如我们取第i行,那第i个指标与最小值的距离,不就是欧氏距离嘛

 注意到这里默认权重是相同的

 从这里不难看出,想让成绩改变而得分不变,只有当正好每列最大值/最小值出现再同一行时才可能,而随着指标的增加,这种情况发生的概率会越来越小。

好的那么我们回到原来的问题:如何计算得分

 结果如下:

 

 

 3 算法步骤

3.1 第一步:原始矩阵正向化

最常见的四种指标:

而正向化就是统一成越大越好就行,转换形式不唯一

 

3.1.1 极小型转到极大型

 不过有0的话也没办法取倒数,这里主要是想说明转化方式不止一种。

 

3.1.2 中间型到极大型

 什么意思捏:

这样会让所有的数据都限制在0到1上

而越接近xbest就越好,我们就想让正向化之后的数据越大,那你看,如果Xi越接近Xbest,那样是不是绝对值会越小,那么再来一步极小型转极大型就可以了,即:

 

 例如:

 

 3.1.3 区间型转极大型

 与刚刚类似:

 距离区间越近得分越高,与刚刚思路一致,我们来看一个例子:

 

 

 3.2 第二步:标准化(消除量纲)

 

3.3 第三步:归一化

 关于权重问题,可以用层次分析法来确定权重,即带权重的TOPSIS方法。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TOPSIS(技术排序法)是一种用于决策分析的多准则评价方法。该方法旨在确定一组备选方案的最佳选择。 TOPSIS算法的实现可以使用Java编程语言来完成。下面是一个用Java实现TOPSIS算法的简单示例。 首先,我们需要定义几个重要的输入参数,包括备选方案的评价矩阵、正向指标的权重和负向指标的权重。 评价矩阵可以是一个二维数组,其中每一行表示一个备选方案,每一列表示一个评价指标。正向指标的权重和负向指标的权重可以是一个一维数组,其中权重之和为1。 接下来,我们需要计算标准化后的评价矩阵。对于每个评价指标,我们将其值除以该指标在所有备选方案中的最大值,得到标准化后的值。 然后,我们需要计算正负理想解。对于每个评价指标,我们需要找到所有备选方案中的最大值和最小值,分别作为正理想解和负理想解。 接着,我们可以计算每个备选方案与正负理想解之间的欧几里德距离。对于每个备选方案,我们将其与正理想解的欧几里德距离减去其与负理想解的欧几里德距离,得到该备选方案的综合得分。 最后,我们可以根据综合得分对备选方案进行排序,选择得分最高的方案作为最佳选择。 以上是一个简单的Java实现TOPSIS算法的步骤。实际应用中可能会有更复杂的情况和要求,需要根据具体需求进行适当的调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值