一个周末的傍晚,你窝在沙发里,准备挑一部好电影来打发这个美好的时光。但是,你面前有成堆的电影选项,喜剧、动作、爱情、科幻……各种类型应有尽有。您的脑海中有几个标准:电影得够有趣,得有好评,时长也不能太长。这些标准构成了您的“电影完美指南”。
现在,让我们把TOPSIS算法比作一面神奇的镜子。你只需对这面镜子说出您的心愿:“给我一部有趣、评价高、时间合适的电影。”镜子便开始它的魔法了。
首先,它会审视你提供的所有电影,给它们根据乐趣、评论和时长打分。就像是在电影的海洋中,给每一部电影贴上了乐趣指数、口碑标签和时长贴纸。
接着,这面魔镜会在这些电影中,找到得分最高的电影和得分最低的电影,分别代表了您的理想之选和最不想看的电影。
接下来,魔镜会为每一部电影计算出两个值。一个是每部电影与最理想电影的接近程度,另一个是与最差电影的远离程度。最后,它会排一个最终的电影列表,最接近理想电影和最远离最差电影的那部电影就在最顶部。
这样,TOPSIS算法就像是您的个人电影顾问,帮您在五彩斑斓的电影世界中,找到那个最贴近您心中所愿的宝藏。下次当您再在选择中迷茫时,不妨想象有这么一面神奇的镜子,帮您做出最理想的选择。
你在街上逛夜市,摊位上堆满了各种各样的小吃:有烤串、炸鸡、泡泡冰...哎呀,看得我口水都要流下来了。你肚子饿了,但是只能挑一样来吃,这可怎么办呢?
你平时最爱吃烤猪蹄了,味道好吃又价格实惠,可不知怎么的,今天烤猪蹄的摊子前面排了好长的队伍,少说也要一个小时才能排到你。仔细想想,烤羊肉串也不错,味道虽然稍逊色于猪蹄,可是一口一串实在是过瘾,你跑到烧烤摊一看,嘿,正巧人不多,刚想找老板点单,结果你发现羊肉串居然涨价了,从5块钱一串涨到了10块钱!这这这实在是过分,不能因为现在夜市人流量大,就涨价宰客吧,你愤愤离去。走着走着,你的肚子已经咕咕叫了,这时候突然有一阵香味,你不由自主地顺着味道来到一家炸鸡店前。你发现这家的炸鸡色泽诱人,香气扑鼻,价格还适中,最重要的是这家店所在的地理位置一般,几乎没什么人来。这可正和你意!当即你掏出钱包,买了一个炸鸡腿。
一边啃炸鸡腿,你一边想,你挑选美食其实是有一定的原则的,看烤猪蹄的队伍依旧那么长,你发现其实有的人为了自己觉得好吃的美食,等再长时间也是愿意的;烧烤摊那里依旧人声鼎沸,老板在卖力吆喝,你发现有的人为了美食,可以不那么在乎价格。但是你不一样,在你心目中,再好吃的美食,你也不愿意等那么长时间;你也不会愿意为了想吃的东西付上高昂的费用。如果有种美食能兼顾味道好吃、价格公道、不用排太长时间队,那自然是最好,可是大多时候你没那么幸运,遇不上这种美食。其实你的心里有杆秤,美食的等待时间比价格重要,价格比味道重要。
TOPSIS就像是你脑子里的一个小秤,帮你衡量每个小吃的得失。它先是给每样小吃打分,味道好的得高分,价格低的也得高分,排队人少的同样得高分。然后,它会量一量,看这个小吃离你心目中的“美食天堂”有多近,再看看它离“糟糕食物地狱”有多远。
最后,TOPSIS就是拿这两个距离做个对比。如果一种小吃离天堂近而且离地狱远,那它就是你的不二之选。换句话说,TOPSIS就是那个帮你从一大堆看起来都不错的选择里,精准挑出那个最合你心意的小秘书。
简而言之,TOPSIS就是那个懂你,在你犹豫不决时给你指明方向的老铁。下次选东西,有了它,就不用担心挑花眼啦!
TOPSIS(逼近理想解排序法)是一种用于多准则决策的分析工具,用于评估和比较一系列备选方案。TOPSIS的核心理念是:最优的选择应当是与理想最优方案最为接近,同时与最差方案最为疏远的那个选项。
步骤1:建立评价矩阵
首先,确定一系列评价准则,并将备选方案按照这些准则的评价值进行排列,形成评价矩阵 。其中, 表示第 个备选方案在第 个准则上的具体评价值。
步骤2:数据标准化
为了消除不同评价指标之间的量纲影响,需要对评价矩阵进行标准化处理,使得所有数据都在同一个尺度上进行比较。标准化的计算公式如下:
为标准化后得到的数值。
步骤3:计算加权矩阵
根据每个准则的重要性分配权重,然后用这些权重来加权标准化后的矩阵,计算公式如下:
为考虑权重后的数据。
步骤4:确定正理想解和负理想解
正理想解()和负理想解()分别代表所有备选方案中最理想和最不理想的情况。正理想解是每个准则上备选方案得分的最大值,负理想解是每个准则上的最小值,即:
其中, 和 分别是第 个准则的最大值和最小值。
步骤5:计算各备选方案与正、负理想解的距离
计算每个备选方案到正理想解和负理想解的欧氏距离,计算公式为:
步骤6:计算接近度
根据每个方案与正理想解的接近程度以及与负理想解的疏离程度来评估其优劣。接近度越高,方案越优。计算公式如下:
计算出所有备选方案的接近度后,就可以根据这个值的大小来对方案进行排序,从而得出最优的选择。
假设您是一家手表经销商,计划从3个供应商中选出最佳供应商。您根据价格、质量、交货时间和服务四个指标对每个供应商进行了打分,得到的评分矩阵如下:
供应商 | 价格 | 质量 | 交货时间 | 服务 |
---|---|---|---|---|
1 | 3 | 2 | 2 | 1 |
2 | 2 | 2 | 3 | 2 |
3 | 2 | 3 | 2 | 3 |
同时,对于这四个指标,您认为质量和交货时间比较重要,因此给出了对应的权重:[0.2,0.3,0.3,0.2] ,而于价格评价,您期望价位更低更好(即负理想化),其余三项期望得分越高越好(即正理想化)。
我们就可以用Python代码来计算相对接近度,最后选择相对接近度最大的供应商作为采购来源。
1import numpy as np
2
3def topsis(a,w, I):
4 # 转化为array
5 a = np.array(a, dtype=np.float)
6 w = np.array(w, dtype=np.float)
7
8 # 归一化
9 a = a/np.sqrt((a**2).sum(axis=0))
10
11 # 加权
12 a_w = a * w
13
14 # 最优最劣方案
15 z_pos = [a_w[:,i].max() if I[i]=='+' else a_w[:,i].min() for i in range(a_w.shape[1])]
16 z_neg = [a_w[:,i].min() if I[i]=='+' else a_w[:,i].max() for i in range(a_w.shape[1])]
17
18 # 曼哈顿距离
19 d_pos = abs(a_w - z_pos).sum(axis=1)
20 d_neg = abs(a_w - z_neg).sum(axis=1)
21
22 # 相对接近度
23 p = d_neg/(d_pos + d_neg)
24
25 return p
26
27# 测试数据
28a = [[3,2,2,1],[2,2,3,2],[2,3,2,3],[2,4,4,3]] # 数据矩阵
29w = [0.2,0.2,0.3,0.3] # 权重
30I= ['-','+','+','+'] #最大化还是最小化
31
32result = topsis(a,w,I)
33for i,p in enumerate(result, start=1):
34 print(f'方案{i}的相对接近度:{p}')
1import numpy as np
2
3def topsis(a,w, I):
4 # 转化为array
5 a = np.array(a, dtype=np.float)
6 w = np.array(w, dtype=np.float)
7
8 # 归一化
9 a = a/np.sqrt((a**2).sum(axis=0))
10
11 # 加权
12 a_w = a * w
13
14 # 最优最劣方案
15 z_pos = [a_w[:,i].max() if I[i]=='+' else a_w[:,i].min() for i in range(a_w.shape[1])]
16 z_neg = [a_w[:,i].min() if I[i]=='+' else a_w[:,i].max() for i in range(a_w.shape[1])]
17
18 # 曼哈顿距离
19 d_pos = abs(a_w - z_pos).sum(axis=1)
20 d_neg = abs(a_w - z_neg).sum(axis=1)
21
22 # 相对接近度
23 p = d_neg/(d_pos + d_neg)
24
25 return p
26
27# 测试数据
28a = [[3,2,2,1],[2,2,3,2],[2,3,2,3],[2,4,4,3]] # 数据矩阵
29w = [0.2,0.2,0.3,0.3] # 权重
30I= ['-','+','+','+'] #最大化还是最小化
31
32result = topsis(a,w,I)
33for i,p in enumerate(result, start=1):
34 print(f'方案{i}的相对接近度:{p}')
输出结果:
1方案1的相对接近度:0.0
2方案2的相对接近度:0.46209857181885894
3方案3的相对接近度:0.5937865049144532
4方案4的相对接近度:1.0
1方案1的相对接近度:0.0
2方案2的相对接近度:0.46209857181885894
3方案3的相对接近度:0.5937865049144532
4方案4的相对接近度:1.0