tokenpocket官方苹果app下载安卓|topsis评价模型
tokenpocket官方苹果app下载安卓|topsis评价模型
综合评价之TOPSIS模型 - 知乎
综合评价之TOPSIS模型 - 知乎首发于机器学习养成记切换模式写文章登录/注册综合评价之TOPSIS模型文武算法工程师一枚原文:综合评价之TOPSIS模型导读:在之前的文章里我们介绍了综合评价中的熵权法(未看请戳 综合评价之熵权法),可以帮助我们在实际应用中解决如何客观确定指标权重的问题。今天继续来介绍另一种客观综合评价方法——TOPSIS模型,并且TOPSIS可以与熵权法组合使用。1、TOPSIS基本概念TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )模型中文叫做“逼近理想解排序方法”,是根据评价对象与理想化目标的接近程度进行排序的方法,是一种距离综合评价方法。基本思路是通过假定正、负理想解,测算各样本与正、负理想解的距离,得到其与理想方案的相对贴近度(即距离正理想解越近同时距离负理想解越远),进行各评价对象的优劣排序。具体步骤及概念如下:step 1: 指标同向化、标准化并得到权重。这部分与熵权法结合,通过熵权法得到权重,避免主观因素影响,得到权重向量W及标准化矩阵P。具体内容可参照综合评价之熵权法,这里不再赘述。step 2 : 得到加权后的规范化矩阵Z。Z由P与W相乘后得到。step 3 : 确定正、负理想解。正理想解指各指标都达到样本中最好的值,负理想解指各指标都为样本中最差的值。step 4 : 计算各样本距离正、负理想解的距离。step 5 : 计算各评价对象与最优方案的贴近程度。正其中的取值范围为[0,1],越接近1表明样本评分越好。2、Python实现这里使用综合评价之熵权法中的测试数据作为演示。数据中共有4个变量,2036条样本,下面就开始用基于熵权法的TOPSIS计算样本得分。import pandas as pd
import numpy as np
#逆向指标标准化
def normalization1(data):
_range = np.max(data) - np.min(data)
return (data - np.min(data)) / _range
#正向指标标准化
def normalization2(data):
_range = np.max(data) - np.min(data)
return (np.max(data) - data) / _range
#熵权法计算权重
def entropyWeight(data):
P = np.array(data)
# 计算熵值
E = np.nansum(-P * np.log(P) / np.log(len(data)), axis=0)
# 计算权系数
return (1 - E) / (1 - E).sum()
def topsis(data, weight=None):
# 权重
weight = entropyWeight(data) if weight is None else np.array(weight)
# 最优最劣方案
Z = pd.DataFrame([(data*weight.T).min(), (data*weight.T).max()], index=['负理想解', '正理想解'])
#Z = pd.DataFrame([data.min(), data.max()], index=['负理想解', '正理想解'])
# 距离
Result = data.copy()
#Result['正理想解'] = np.sqrt(((data - Z.loc['正理想解']) ** 2 * weight).sum(axis=1))
#Result['负理想解'] = np.sqrt(((data - Z.loc['负理想解']) ** 2 * weight).sum(axis=1))
Result['正理想解'] = np.sqrt(((weight*data - Z.loc['正理想解']) ** 2 ).sum(axis=1))
Result['负理想解'] = np.sqrt(((weight*data - Z.loc['负理想解']) ** 2 ).sum(axis=1))
# 综合得分指数
Result['综合得分指数'] = Result['负理想解'] / (Result['负理想解'] + Result['正理想解'])
Result['排序'] = Result.rank(ascending=False)['综合得分指数']
return Result, Z, weight
if __name__=='__main__':
data = pd.read_csv('testdata.csv',sep = ',',encoding='gbk',header=None)
data1 = data.copy()
data1[0] = normalization1(data1[0])
data1[1] = normalization1(data1[1])
data1[2] = normalization1(data1[2])
data1[3] = normalization1(data1[3])
[result,z1,weight] = topsis(data1)最终得到的评分结果(部分)、正负理想解和权重如下:往期推荐:XGBoost(二):R语言实现疫情下,你还好吗R语言爬虫与文本分析图片相似度识别:pHash算法编辑于 2021-03-28 20:40大数据分析算法数学模型赞同 846 条评论分享喜欢收藏申请转载文章被以下专栏收录机器学习养
数学建模-Topsis综合评价(评价模型)_topsis评价-CSDN博客
>数学建模-Topsis综合评价(评价模型)_topsis评价-CSDN博客
数学建模-Topsis综合评价(评价模型)
会思想的苇草i
已于 2023-12-18 11:15:50 修改
阅读量1.5w
收藏
272
点赞数
25
分类专栏:
数学建模
文章标签:
数学
数学建模
算法
matlab
Topsis算法
于 2021-07-30 17:23:30 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ASHIYI66/article/details/119249082
版权
数学建模
专栏收录该内容
17 篇文章
16 订阅
订阅专栏
Topsis算法核心思想是逼近理想解的排序方法。正理想解,各指标都达到各候选方案的最好值,负理想解,各指标都达到各候选方案的最差值。基于有限个评价对象与理想化目标的接近程度进行排序,在现有的对象中进行相对优劣的评价。
算法步骤:
1.构造决策矩阵vij,i为各方案,j为各指标
2.对决策矩阵进行规范化处理
3.构建权重wj,可通过熵权法、FAHP、相关性等方法确定权重
4.计算加权决策矩阵
5.计算正负理想解
6.计算各方案与正负理想解间的距离
7.计算各方案与正理想解的相对贴近度
(*算法步骤参考了NHASMJ公众号*)
Topsis算法基本思想:基于归一化后的原始数据矩阵,找出有限方案中的最优方案和最劣方案(分别用最优向量和最劣向量表示),然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。
代码实现:
x=[
21584 76.7 7.3 1.01 78.3 97.5
24372 86.3 7.4 0.80 91.1 98.0
22041 81.8 7.3 0.62 91.1 97.3
21115 84.5 6.9 0.60 90.2 97.7
24633 90.3 6.9 0.25 95.5 97.9];
%矩阵
[n,m]=size(x);
%将3,4的低优指标去倒数转化为高优指标并且把所有指标换成接近的大小
x(:,1)=x(:,1)/100;
x(:,3)=(1./x(:,3))*100;
x(:,4)=(1./x(:,4))*100;
zh=zeros(1,m);
d1=zeros(1,n); %最小值矩阵
d2=zeros(1,n); %最大值矩阵
c=zeros(1,n); %接近程度
%归一化
for i=1:m
for j=1:n
zh(i)=zh(i)+x(j,i)^2;
end
end
for i=1:m
for j=1:n
x(j,i)=x(j,i)/sqrt( zh(i));
end
end
%计算距离
xx=min(x);
dd=max(x);
for i=1:n
for j=1:m
d1(i)=d1(i)+(x(i,j)-xx(j))^2;
end
d1(i)=sqrt(d1(i));
end
for i=1:n
for j=1:m
d2(i)=d2(i)+(x(i,j)-dd(j))^2;
end
d2(i)=sqrt(d2(i));
end
%计算接近程度
for i=1:n
c(i)=d1(i)/(d2(i)+d1(i));
end
关注博主即可阅读全文
优惠劵
会思想的苇草i
关注
关注
25
点赞
踩
272
收藏
觉得还不错?
一键收藏
打赏
知道了
0
评论
数学建模-Topsis综合评价(评价模型)
Topsis综合评价方法是一种常用的数学建模工具,用于多个指标下的决策评价和排序。本文将介绍Topsis方法的基本原理和应用,包括构建评价指标矩阵、计算正负理想解、计算综合评价值等步骤。我们还将通过实例演示如何利用Topsis方法解决实际问题,比如企业选址、产品选择等方面的应用。希望本文能够帮助读者理解Topsis综合评价方法在数学建模中的重要性,掌握其应用技巧,提高评价和决策分析能力。
复制链接
扫一扫
专栏目录
第二讲 综合评价分析—TOPSIS法
qq_63767210的博客
07-25
1万+
综合评价分析—TOPSIS法步骤详解
topsis综合评价法_TOPSIS综合评价法
weixin_39697096的博客
12-15
3万+
TOPSIS综合评价法TOPSIS法是多目标决策分析中一种常用的有效方法,是一种逼近于理想解的排序法,又称为优劣解距离法。它根据有限个评价对象与理想化目标的接近程度进行排序,在现有的对象中进行相对优劣的评价。例题解析1989年度西山矿务局5个生产矿井实际资料如下表,对西山矿务局五个生产矿井1989年的企业经济效益进行综合评价。解题步骤解:用x₁,…,x₉分别表示评价的指标变量原煤成本、原...
参与评论
您还未登录,请先
登录
后发表或查看评论
【综合评价分析】topsis评价 原理+完整MATLAB代码+详细注释+操作实列
m0_52474147的博客
11-28
1万+
设多属性决策方案(单元)为D={d1,d2,…,dm},衡量方案优劣的属性变量为x1,x2,…,xn,这些方案D中的每个方案di(i=1,2,…)的n个属性构成向量[ai1,ai2,…,ain],将其作为n维空间的一个点,能唯一地代表方案di。正理想解C*是一个方案D中不存在的虚拟最佳方案,它的每个属性都是决策矩阵中该属性的最优值;而负理想解C0则是虚拟的最差方案,它的每个属性都是决策矩阵中该属性的最差值。
评价与决策原理:将D中每个
TOPSIS法——利用原始数据进行综合评价
Sup星月★然的博客
01-11
9007
数学建模中TOPSIS法也被称为优劣解距离法,本文详细讲解了该方法的原理与应用,在评价类问题中,当有原始数据时用TOPSIS法进行综合评价非常合适,避免了层次分析法主观性太强的影响。
2022年五一杯C题数学建模
08-30
本文针对火灾报警系统问题,建立熵权-topsis 逻辑回归等数学模型,旨在通过所建模型来选取可靠的探测器、提高报警准确率及改进各辖区综合管理水平,从而减少我国火灾事故。
针对问题一,首先根据地址、机号和回路,确定真实火灾数为418起。接着根据题目要求,基于可靠性和故障率两个指标建立综合评价模型。由于可靠性为效益型指标,而故障率为成本型指标,故将故障率通过数学公式转换为效益型指标,即完善率。指标确定后,运用熵权法确定各指标权重,最后利用topsis法构建各类型部件评价模型,对16种部件进行综合评价,帮助政府选择最可靠的5种火灾探测器类型,分别为光束感烟、手动报警按钮、智能光电探头、点型感温探测器、线性光束感烟。
针对问题二,建立基于logistic回归的区域报警部件类型智能研判模型。本文选择故障次数、消防大队及探测器类型3个变量作为自变量,误报与否作为因变量,将消防大队和探测器类型两个无序分类变量变为虚拟变量,利用logistic 回归模型预测辖区内某类型部件发出报警信息正确的概率,经检验模型的真实性为 。经检验结果有所偏差,故进行模型优化用woe值代替原值计算,使得结果更加真实可靠。
数学建模matlab常用算法代码整理集合.rar
11-01
数学建模matlab常用算法代码整理的集合,包含神经网络图像分类代码,图论算法软件,小波神经网络预测代码,元胞自动机代码,Dijkstra算法找最短路径代码,Floyd算法求最小距离代码,GRNN的数据预测-基于广义回归神经网络货运量预测,K-means算法代码,RBF神经网络做回归预测代码,SVM分类器代码,Topsis算法综合评价代码,层次分析法代码,插值与拟合代码,多目标规划matlab程序实现,二次指数平滑及其时间序列预测代码,规划模型代码,灰色关联分析代码,灰色预测算法代码,回归预测分析MATLAB代码,聚类分析代码,蒙特卡洛算法模拟随机数代码,排队论算法代码,三次指数平滑及其时间序列预测,时间序列-滑动平均代码,数字图像处理matlab代码,图论算法代码,小波神经网络预测代码,小波特征提取算法代码,小波异常值提取代码,隐马尔可夫预测代码,元胞自动机代码演示案例,智能算法之粒子群优化算法代码,智能算法之模拟退火算法代码,智能算法之遗传算法代码,主成分分析代码,主成分分析降维代码,最小生成树MATLAB程序。
TOPSIS综合评价模型Python代码(1)1
08-08
TOPSIS综合评价模型Python代码(1)1
数学建模之综合评价模型(层次分析法+Topsis法+熵权法)
热门推荐
qq_53133234的博客
04-24
6万+
以下内容均听自清风老师的建模教程 (老师讲的很好哦,大家可以去听听,结合实例不枯燥!)
以例题进行分析:
小明同学想出去旅游,在查阅了网上的攻略后,他初步选择了苏杭,北戴河,桂林三个地方
请你确定评价指标,形成评价体系为小明同学选择最佳的方案。
第一步:确定模型
当题中出现“确定评价指标,形成评价体系”这类词眼,这就是一道层次分析题。
第二步:建立递接层次结构模型
我们从三个问题入手:
1.我们评价的目标是什么?
答:为...
数学建模笔记(七):综合评价模型
qq_52441682的博客
07-06
1万+
代表性,也就是这一指标的区分度,最具代表性就是对观测记录最具区分度
强调通行能力前后的变化
主观评价要量化,无法避免主观因素
f(3)f(3)f(3)使用了两次,其实有四个式子,才解出了四个量
即便是属于同一个类中,依然有差异,不可一概论之,直接使用定常权综合评价法是不合理的,所以引入了动态加权综合评价方法
知乎——灰色关联分析......
【数学建模】2 TOPSIS优劣解距离法
BetterBench的博客
11-09
3048
目录1 简介2 引入的目的3 简单例子引入Topsis法3.1 问题-单个指标(1)解决的思路(最简单的)(2)改进思路(3)解释构造评分公式3.2 拓展问题-增加指标个数(1)问题(2)指标正向化(3)标准化处理(4)计算每个对象的综合得分4 算法步骤4.1 第一步-将原始矩阵正向化4.2 第二步-正向化矩阵标准化7 源码和数据下载
1 简介
Topsis法(Technique for Order Preference by Similarity to Ideal solution)可翻译为逼近理想解排序
2023年五一赛B题-快递需求分析问题01-代码数据在附录
05-09
博主个人作品,代码用的是Matlab+python编写,思路可以参考博主的博客内容
对快递运输问题进行研究,运用了熵权-TOPSIS模型、ARIMA模型、Dijkstra
算法、最小二乘法等。建立模型,旨在预测和解决快递需求问题。
针对问题一,先将数据进行同趋势化处理,再使用熵权-TOPSIS 模型解出最优
和最劣矩阵向量、评价对象与正理想解距离 D+或负理想解距离 D-以及结合距离值
计算得出综合度得分 C 值,再进行排序,得出结论。
针对问题二,采用 ARIMA 模型预测时序数据,查看差分前后数据对比图,判
断是否平稳(上下波动幅度不大),同时对时间序列进行偏(自相关分析),根据截尾情
况估算其 p、q 值。查看模型检验表,根据 Q 统计量的 P 值(P>0.05)对模型白噪声进
行检验,通过模型残差 ACF/PACF 图进行分析根据模型参数表,得出模型公式结合
时间序列分析图进行综合分析,得到向后预测的阶数结果。
针对问题三,与问题二类似为预测类问题,需要对数据使用时间序列预测模型
进行处理,再使用模型判断表三中指定城市是否能正常发货,则能给出快递数量。
数学建模常用的一些评价分析模型代码
03-10
数学建模常用的一些评价分析模型代码,包括如下 Topsis综合分析法 层次分析法 模糊综合评价 灰色综合评价 熵权法
一些数学建模的模型,可供参考
最新发布
03-11
模糊综合评价模型 机器学习模型 指数预测模型 topsis模型以及aram模型 ================================================================== 以上的这些模型都是我们在日常进行数学建模的时候都会遇见的一些参考...
数学建模程序代码资料合集(包含各类MATLAB算法代码)
02-04
12.Topsis算法综合评价代码 13.层次分析法代码 14.插值与拟合代码 15.多目标规划matlab程序实现 16.二次指数平滑及其时间序列预测代码 17.规划模型代码 18.灰色关联分析代码 19.灰色预测算法代码 20.回归预测分析...
2023年五一赛B快递需求问题完整paper+代码02
05-23
评价模型,对各站点城市的综合评价指数和重要程度进行求解和综合排序。利用 Matlab 进行求解,得出排名前 5 的站点城市为 L、G、V、W、B。 针对问题二,建立了 ARIMA 模型进行求解。将附件 1 中
“美赛备战”-B站清风老师视频学习笔记
02-10
文件包括美赛常用数据网站、模型的分析与检验部分写作内容及例题讲解、简要列出美赛常用十大模型及30种...最常见的数学模型包括:层次分析法、模糊综合评价、熵值法、TOPSIS法、数据包络分析、秩和比法、灰色关联法等。
数学建模中 Matlab 40种常用算法程序包(免调试)
06-03
K-means算法代码,RBF神经网络做回归预测代码,SVM分类器代码,Topsis算法综合评价代码,层次分析法代码,插值与拟合代码,多目标规划matlab程序实现,二次指数平滑及其时间序列预测代码,规划模型代码,灰色关联...
2022年五一赛C火灾报警系统问题一等奖-西南交通大学(matlab)
06-21
多元线性回归模型、模糊综合评价模型。具有提高火灾救助效率的意义。 针对问题一,本文建立 TOPSIS 模型。处理附件 1 数据,判断发生火灾是否为同一 起火灾,得到该城市 6 月 1 日至 6 月 18 日的真实火灾起数为 120...
各种matlab算法代码及模型分类
08-09
算法代码及模型分类,包括但不限于中国大学生数学建模竞赛题解、哈密尔顿回路、图形、微积分和微分方程、数据拟合、方程求根、最大流和最小截、最小生成树Prim算法、最短路和次短路、模拟退火应用、生成全排列矩阵、...
topsis综合评价模型
07-25
TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution)模型,中文叫做"逼近理想解排序方法",是一种距离综合评价方法。该模型通过假设正理想解和负理想解,测算各样本与这两个解的距离,从而得到样本与理想方案的相对贴近度,进而进行优劣排序。具体步骤包括确定正理想解和负理想解,计算样本与这两个解的距离,计算样本的相对贴近度,最后进行排序。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* [数学建模之:TOPSIS综合评价模型python代码](https://blog.csdn.net/qq_52897257/article/details/124136980)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [数学建模——评价模型之TOPSIS](https://blog.csdn.net/muhuazuishuai/article/details/122436694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [数学建模-Topsis综合评价(评价模型)](https://blog.csdn.net/ASHIYI66/article/details/119249082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
会思想的苇草i
CSDN认证博客专家
CSDN认证企业博客
码龄3年
前端领域新星创作者
131
原创
2501
周排名
1万+
总排名
26万+
访问
等级
1985
积分
1万+
粉丝
540
获赞
77
评论
2500
收藏
私信
关注
热门文章
前端开发利器--PxCook(像素大厨)
43188
计算机组成原理基础知识点
18959
数学建模-Topsis综合评价(评价模型)
15568
数学建模-三次指数平滑法(预测模型)
9291
Java程序设计--Java入门(一)
9197
分类专栏
计算机科学与技术
9篇
博客
6篇
开发之旅
5篇
生活记录
1篇
数据结构
12篇
Java
22篇
数学建模
17篇
前端
44篇
C++
6篇
C
7篇
最新评论
前端开发利器--PxCook(像素大厨)
于过天晴:
先赞后看,养成习惯
前端开发利器--PxCook(像素大厨)
橘子味の:
注册的网页也无法跳转
前端开发利器--PxCook(像素大厨)
橘子味の:
不知道为什么我的得登录才能用????5555
前端开发利器--PxCook(像素大厨)
会思想的苇草i:
链接: https://pan.baidu.com/s/1zn10ATMPGGGWj1iTJ5LnLw
提取码:5yky
前端开发利器--PxCook(像素大厨)
努力的阿槟:
官网进不去,下载不了,博主有网盘链接分享一下吗
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
React快速入门(四)ReactHooks
React快速入门(三)动画、状态与路由
React快速入门(二)组件与函数
2024年5篇
2023年32篇
2022年72篇
2021年22篇
目录
目录
分类专栏
计算机科学与技术
9篇
博客
6篇
开发之旅
5篇
生活记录
1篇
数据结构
12篇
Java
22篇
数学建模
17篇
前端
44篇
C++
6篇
C
7篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
打赏作者
会思想的苇草i
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:¥1
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
数学建模笔记——评价类模型之TOPSIS - 知乎
数学建模笔记——评价类模型之TOPSIS - 知乎首发于数学建模笔记切换模式写文章登录/注册数学建模笔记——评价类模型之TOPSIS小白好的,今天继续研究评价类模型的相关算法。实不相瞒,虽然我才写到第二个算法,但是已经听了几十节课了,清风老师的课程确实蛮不错的,实用性比较强。相关的模型、算法基本上越往后越难,所以珍惜现在比较容易理解的评价类模型吧hhh。在这里要说明一下,小白本白只是一个即将大三的本科生,目前比较容易理解的模型我还能写得完整一些。之后很多模型会涉及较为复杂的数学推导,我可能很难完整地从原理去描述了,只能着重于实际应用方面。请各位谅解啦。ok,我们继续学习评价类模型算法。(注:以下案例均来自我所听的网课)回顾上一篇文章我们介绍了一个简单又实用的评价打分方法——层次分析法。同时我们也提到了,层次分析法有一些缺陷之处。首先就是主观性较强,层次分析法往往是专家用来打分的方法,但建模比赛中没有专家,判断矩阵只能我们自己填;其次,当指标或者方案层数量较多时,我们两两比较得出的判断矩阵和一致矩阵可能会出现较大的差异(想一想你的心理预期,有多符合那个乘法关系),判断矩阵的填写也会比较麻烦(例如要问C_{20}^2次问题);再者,层次分析法往往用于没有相关数据的问题,我们的打分也是按照判断矩阵给出的,如果已经有了数据,再主观打分就不太合适了。看看这个题目给出A—T二十条河流的水质指标及具体数据,请建立合适的模型,给这些河流的水质从高到低排排序。嗯,现在再用层次分析法,是不是就不太合适了……TOPSIS算法TOPSIS算法是解决上述问题的一个比较合适的算法,其全称是Technique\ for\ Order\ Preference\ by\ Similarity\ to\ an\ Ideal\ Solution,通俗的翻译则是“优劣解距离法”。这个翻译可以说是指向了此算法的本质,我们接下来慢慢谈。我们依然从一个简单的问题入手。小明同学考上南大之后,不知不觉就迎来了第一次高数考试,他及其舍友的分数如下。现在我们要根据他们的成绩,给他们进行打分,要求分数可以合理地表达其成绩的高低。hhh可能会有人觉得这个问题比较奇怪,成绩本身就可以作为所谓的分数了,实在不行我们还有GPA,怎么还要打分?因为这只是一个例子,事实上在许多实际问题中,我们只有数据,例如上面水质问题的含氧量,PH值,并没有这样一个分数。再者,实际问题中有很多的指标,其量纲经常不同,但我们需要通过这些数据得出一个综合的分数。因此我们很有必要对数据进行一定的处理,同时找到一个综合打分的方法。所以我们有一个很直接的想法,就是对分数进行归一化处理,例如清风的最后得分就是\frac {99}{89+60+74+99} = 0.307。嗯,这个想法很合理。即一个人的成绩占总成绩的比重,就可以作为这个人在总体中的得分。但是注意了,这里只有一个指标,所以我们可以直接用这个得分作为排序标准。如果还有一些指标,同样进行类似的操作,实际上就相当于我们对数据进行了处理,消去了量纲的影响罢了。结果就是,一番操作过后,留给我们的仍然是一个得分表格,只不过里面是已经被处理过的数据,但还是没能给出排名。这里提出一个小问题,我们把PH值作为衡量水质的一个标准,其范围是0~14,PH=7时最好,所以PH=7时相关指标得分应该最高。这时候就不能像成绩那样,直接求和算比重了吧,那应该怎么处理呢?ok,我们继续。上述的操作只是对数据进行了处理,我们还是需要一个打分的标准。有同学就会想到,赋权,然后打分。这就回到了我们层次分析法的内容。还是那些问题,主观性比较强,指标太多时操作起来不准确且麻烦,对数据的利用不充分等等。这里就可以引入TOPSIS的想法了。事实上我们的目的是对方案给出一个排序,只要数据有了,我们就可以根据这些数据,构造出一个所有方案组成的系统中的理想最优解和最劣解(我感觉最劣解和理想不搭,就直接用最劣解称呼吧)。而TOPSIS的想法就是,我们通过一定的计算,评价系统中任何一个方案距离理想最优解和最劣解的综合距离。如果一个方案距离理想最优解越近,距离最劣解越远,我们就有理由认为这个方案更好。那理想最优解和最劣解又是什么呢?很简单,理想最优解就是该理想最优方案的各指标值都取到系统中评价指标的最优值,最劣解就是该理想最劣方案的各指标值都取到系统中评价指标的最劣值。这么说可能不是很清楚,举个例子。如果我们只有一个指标,例如上图中的成绩,那么理想最优解就是99分,注意,不是满分100分,理想最优解中的数据都是各方案中的数据,而不要选择方案中没有的数据。不然如果是GDP这种上不封顶的指标,理想最优取值岂不是正无穷了……同理,该系统中的最劣解是60。那如果有两个指标呢?例如我们引入一个“与他人争吵的次数”,用来衡量情商,给出相应的数据表格。按照我们的一般想法,与他人争吵的次数应该是越小越好,所以我们可以用向量表达这个系统中的理想最优解,也就是[99,0],取清风的成绩和小王的争吵次数,最劣解就是[60,3],取小王的成绩和清风的争吵次数。现在我们知道了如何取得理想最优解和最劣解,那如何衡量某一个方案与理想最优解和最劣解的综合距离呢?TOPSIS用下面一个表达式进行衡量:\frac {某一方案 - 最劣解}{理想最优解 - 最劣解}。可以发现,如果方案取到了理想最优解,其表达式取值为1;如果方案取到了理想最劣解,其表达式取值为0。我们便可以用这个表达式来衡量系统中某一个方案距离理想最优解和最劣解的综合距离,也直接用它给方案进行打分。相信到这里大家对于TOPSIS的基本思想已经差不多理解了,之后就是实际操作的问题了。我们都知道,“方案 - 最劣解”这种东西只是方便理解,确实也是我编出来的,实际中方案根本不能做差。所以我们只能用数据来求出这么一个距离。对于某一个指标的数据,我们可以用\frac {x-min}{max-min}来衡量综合距离。如果只有成绩这一个指标,其计算很简单,例如清风的得分就是\frac {99-60}{99-60}=1,其余人的成绩可以依次给出。对于“争吵次数”这个指标,清风的得分可以是\frac {3-3}{0-3}=0,虽然也能计算,但其分母是个负值,还是不太习惯。那如果对于PH值,7是最优解,0和14哪一个看成最劣解用于计算呢?亦或者如果某个指标处在10~20之间最佳,那最优解最劣解又如何衡量呢?这便是我们遇到的问题。除此之外,由于数据的量纲不同,在实际的计算过程中也会出现这样或者那样的问题,因此我们也有必要对于原数据进行相关的处理。首先,我们解决第一个问题,有些指标的数据越大越好,有些则是越小越好,有些又是中间某个值或者某段区间最好。我们可以对其进行“正向化处理”,使指标都可以像考试分数那样,越大越好。我们可以把指标分为四类,如下表所示。 所谓的正向化处理,就是将上述的四种指标数据进行处理,将其全部转化为极大型指标数据,这样我们计算时问题就少一点,码代码时也更加统一。对于极小型指标,例如费用,争吵次数,我们可以用\hat x_i=max-x_i将其转化为极大型,如果所有元素都为正数,也可以使用\hat x_i= \frac {1}{x_i}。示例如下。对于中间型指标,如果其最佳数值是x_{best},我们可以取M=max\{|x_i - x_{best}|\},之后按照\hat x_i = 1 - \frac {x_i - x_{best}}{M},示例如下。对于区间型指标,如果其最佳区间是[a,b],我们取M=max\{a-min\{x_i\},max\{x_i\}-b\},之后按照进行转化,示例如下。至此,我们已经将所有的数据都转化为极大型数据了,可以很好地使用\frac {x-min}{max-min}来进行打分。但是为了消除不同的数据指标量纲的影响,我们还有必要对已经正向化的矩阵进行标准化。在概率统计中,标准化的方法一般是\frac {X-EX}{\sqrt {DX}},不过这里我们不采用。我们记标准化后的矩阵为Z,其中z_{ij}=\frac {x_{ij}}{\sqrt {\sum_{i=1}^n {x_{ij}}^2}},也就是\frac {每一个元素}{\sqrt {其所在列的元素的平方和}}。现在我们已经对数据进行了相应的处理,可以计算每一个方案的的得分了,也就是所谓的距离。由于我们一个方案具有多个指标,因此我们可以用向量z_i来表达第i个方案。假设有n个待评价的方案,m个指标,此时z_i=[z_{i1},z_{i2},...,z_{im}]。由这n个向量构成的矩阵也就是我们的标准化矩阵Z了。(实在是打不好这个样子……) 之后我们就可以从中取出理想最优解和最劣解了,经过了正向化处理和标准化处理的评分矩阵Z,里面的数据全部是极大型数据。因此我们取出每个指标,即每一列中最大的数,构成理想最优解向量,即z^+\ =\ [z_1^+,z_2^+,...,z_m^+]=\\ \ [max\{z_{11},z_{21},...,z_{n1}\},max\{z_{12},z_{22},...,z_{n2}\},...,max\{z_{1m},z_{2m},...,z_{nm}\}]。 同理,取每一列中最小的数计算理想最劣解向量,z^-\ =\ [z_1^-,z_2^-,...,z_m^-]=\\\ [min\{z_{11},z_{21},...,z_{n1}\},min\{z_{12},z_{22},...,z_{n2}\},...,min\{z_{1m},z_{2m},...,z_{nm}\}]。(z^+就是z_{max},z^-就是z_{min})现在我们可以计算得分了,之前我们的计算公式是\frac {z_i-z_{min}}{z_{max}-z_{min}} \ 也就是\ \frac {z_i-z_{min}}{(z_{max}-z_i)+(z_i-z_{min})},嗯,我们变形成了·\frac {z与z_{min}的距离}{z与z_{max}的距离\ +\ z与z_{min}的距离}。为什么要这样变形呢?因为大家都是这么用的……好吧,其实我们接下来是使用欧几里得距离来衡量两个方案的距离,变形前后分母的计算结果其实是不同的。我个人认为这样变形更有利于说明问题,即我们衡量的得分是考虑到某个方案距离最优解和最劣解的一个综合距离。不然的话,所有方案计算得分时分母都是相同的,相当于只衡量了分子,也就是距离最劣解的距离。那应该还是采用综合衡量的方式会好一点儿吧,你觉得呢?嗯,我就默认大家都同意这个说法了。我们继续计算得分,对于第i个方案z_i,我们计算它与最优解的距离d_i^+\ =\ \sqrt {\sum_{j=1}^m (z_j^+\ - z_{ij})^2 },与最劣解的距离为d_i^-\ =\ \sqrt {\sum_{j=1}^m (z_j^-\ - z_{ij})^2 }。我们记此方案的得分为S_i,则S_i = \frac {d_i^-}{d_i^+\ +d_i^- },也可以理解为我们上文一直在说的综合距离。很明显,0 \le S_i \le 1,且d_i^+越小,也就是该方案与最优解的距离越小时,S_i越大;d_i^-越小,也就是该方案与最劣解的距离越小时,S_i越小。这种计算方式同时考虑了该方案与最优解和最劣解的距离。这个时候我们就有了每个方案的分数了,按分数排排序,就知道哪个方案好一点儿哪个方案次一点儿了。还可以按照这个得分再进行一次归一化,不过我觉得没什么必要了。嗯,基本部分讲完啦。总结总结一下。使用TOPSIS算法的一个先决条件就是要有数据,最好全部是定量数据,如果是定性数据或者定序数据,但能够分别优劣,也可以按照定量数据来处理。之后就开始操作: a.将原始数据矩阵正向化。 也就是将那些极小性指标,中间型指标,区间型指标对应的数据全部化成极大型指标,方便统一计算和处理。b.将正向化后的矩阵标准化。 也就是通过标准化,消除量纲的影响。c.计算得分并排序 。公式就是S_i = \frac {d_i^-}{d_i^+\ +d_i^- }。这次好像还没有给一个完整的解题过程,嗯,我就把PPT里的小案例放在这里供大家参考。 这是原始数据矩阵 我们对其进行正向化 我们再对其进行标准化 最后计算得分给出排名 嗯,这个例子告诉我们,成绩很重要,但是情商更重要hhh。小王虽然只考了60分,但也及格了,而且他从不与人争吵,所以我们可以给他一个最好的评价hhh。其实我们可以看到TOPSIS的一个特点,即它使用理想最优解和最劣解作为评判方案的依据时,实际上就是在方案的系统内部进行评价,这样的评价手段也可以更好的表达出系统中方案与方案之间的差距,也比较充分地利用了数据所包含的信息。(我随便编的,别信)拓展TOPSIS是不是又简单又实用呢?其实我们还可以进行一点点儿的拓展,不想打字了,看下图。我们可以看到,在计算距离时,我们其实默认每个指标的权重是相同的,但实际问题中,不同的指标重要程度可能是不一样的。例如评奖学金的时候,成绩往往是最重要的,之后还有参与活动分,志愿服务分等等,他们的权重又低一点。因此,在实际的应用中,我们也可以给指标进行赋权,将权重放到计算距离的公式中。如图。带上了权重之后,不同的指标发挥的影响就不一样了,带权重的评价也往往是实际生活中很常见的一种评价方式。那在建模中如何确定权重呢?如果是日常生活向的评价,我们可以使用层次分析法,结合常识给出。如果是比较专业的评价指标,我们可以查询资料,看看别人怎么研究的。还有一种方法叫熵权法,也是这套课程的内容,不过限于篇幅,就留到之后再提吧。局限性TOPSIS法有什么局限性呢?其实也是有的,例如没有数据你就行不通了吧hhh。不过在实际建模中,倒也不必考虑太多的局限性,知道每个模型的适用条件就好了。到时候见招拆招,增删查改,尽力而为就好了。一个没有参加过比赛的小白说这些是不是有点儿不妥……不管了,反正就是碰到什么题用对应的模型,实在不行就试着综合综合,总能有个结果的hhh嗯,就这样,拜拜~作业我把PPT里的题目也放在这里,应该没问题。哔哩哔哩上有作业讲解的。 (如果文章有什么错误欢迎指出毕竟我就是个沙雕的小白orz)这两天知乎给我推送了一些数学建模相关的问答,其中一个是数学建模相关书籍。我把高赞回答推荐的书的电子版找了一下,如果需要的话,在微信公众号“我是陈小白”后台回复“数学建模书籍”即可。编辑于 2020-07-19 08:08数学建模赞同 68651 条评论分享喜欢收藏申请转载文章被以下专栏收录数学建模笔记一边学习一
TOPSIS(逼近理想解)算法原理详解与代码实现 - 知乎
TOPSIS(逼近理想解)算法原理详解与代码实现 - 知乎首发于11111切换模式写文章登录/注册TOPSIS(逼近理想解)算法原理详解与代码实现子木程序在公众号(不更新推文,不发广告):一个安静的资料号写在前面:个人理解:针对存在多项指标,多个方案的方案评价分析方法,也就是根据已存在的一份数据,判断数据中各个方案的优劣。中心思想是首先确定各项指标的最优理想值(正理想值)和最劣理想值(负理想解),所谓正理想值是一设想的最好值(方案),它的的各个属性值都达到各候选方案中最好的值,而负理想解是另一设想的最坏的值(方案),然后求出各个方案与正理想值和负理想值之间的加权欧氏距离,由此得出各方案与最优方案的接近程度,作为评价方案的优劣标准,最后得到各个方案的优劣值。目录一、TOPSIS算法1.1 TOPSIS算法的原理1.2 TOPSIS算法的实现二、数据预处理2.1 数据正向化处理2.1.1对于极小型指标的正向化处理2.1.2 对于中间型指标的正向化处理2.1.3对于区间型指标的正向化处理2.2数据标准化处理三、TOPSIS算法实现3.1最优解与最劣解计算3.2 TOPSIS评分计算四、TOPSIS算法总结4.1 TOPSIS算法实现步骤五、TOPSIS算法示例与扩展5.1 TOPSIS算法示例5.2 TOPSIS算法扩展六、程序源码如有专业问题或者需要仿真可以点下面付费咨询链接。一、TOPSIS算法1.1 TOPSIS算法的原理TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。为了对众多方案给出一个排序,在给出所有方案之后,可以根据这些数据,构造出一个所有方案组成的系统中的理想最优解和最劣解。而TOPSIS的想法就是,通过一定的计算,评估方案系统中任何一个方案距离理想最优解和最劣解的综合距离。如果一个方案距离理想最优解越近,距离最劣解越远,我们就有理由认为这个方案更好。那理想最优解和最劣解又是什么呢?很简单,理想最优解就是该理想最优方案的各指标值都取到系统中评价指标的最优值,最劣解就是该理想最劣方案的各指标值都取到系统中评价指标的最劣值。理想最优解中的数据都是各方案中的数据,而不要选择方案中没有的数据,理想最劣解同理。如何衡量某一个方案与理想最优解和最劣解的综合距离呢?TOPSIS基本思想是用下面这个表达式进行衡量:\frac{某一方案-最劣解}{理想最优解-最劣解} 可以发现,如果方案取到了理想最优解,其表达式取值为1;如果方案取到了理想最劣解,其表达式取值为0。我们便可以用这个表达式来衡量系统中某一个方案距离理想最优解和最劣解的综合距离,也直接用它给方案进行打分。当然这个公式只是一个基本的思路,实际上,为了更准确与合理,会对该公式进行优化。1.2 TOPSIS算法的实现在了解TOPSIS算法的基本思想后就是对相应参数的计算了,从上面的描述可以知道,除了要对该公式进行改进之外,因为涉及到数据之间的比较,还需要对方案数据进行处理,消除量纲以及范围太大带来的一系列问题。二、数据预处理2.1 数据正向化处理在处理数据时,有些指标的数据越大越好,有些则是越小越好,有些又是中间某个值或者某段区间最好。我们可以对其进行“正向化处理”,使指标都可以像考试分数那样,越大越好。将指标分为四类,如下表所示。四类指标类型正向化处理,就是将上述的四种指标数据进行处理,将其全部转化为极大型指标数据,这样我们计算时问题就少一点,码代码时也更加统一。2.1.1 对于极小型指标的正向化处理例如费用,我们可以用将其转化为极大型,如果所有元素都为正数,也可以使用2.1.2 对于中间型指标的正向化处理如果其最佳数值是 x_{best} ,我们可以取 M=max\left\{ |x_{i}-x_{best}| \right\} ,之后按照转化。PH值正向化处理2.1.3 对于区间型指标的正向化处理对于区间型指标,如果其最佳区间是[a,b],我们取M=max\left\{ a-min\left\{ x_{i} \right\}, max\left\{ x_{i} \right\}-b\right\},之后按照转化,示例如下。区间型指标正向化处理至此,已将所有的数据都转化为极大型数据了。2.2 数据标准化处理为了消除不同的数据指标量纲的影响,我们还有必要对已经正向化的矩阵进行标准化。在概率统计中,标准化的方法一般是 \frac{X-EX}{\sqrt{DX}} ,不过这里我们不采用。记标准化后的矩阵为Z,其中 z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^{n}{x_{ij}^{2}}}} ,也就是 \frac{每一个元素}{\sqrt{其所在列的元素的平方和}} 。对数据进行了相应的处理后,可以用向量z_{i}来表达第i个方案。假设有n个待评价的方案,m个指标,此时 z_{i}=[z_{i1},z_{i2},...,z_{im}] 。由这n个向量构成的矩阵也就是我们的标准化矩阵Z了。经过了正向化处理和标准化处理的评分矩阵Z,里面的数据全部是极大型数据。三、TOPSIS算法实现3.1 最优解与最劣解计算经过了正向化处理和标准化处理的评分矩阵Z,里面的数据全部是极大型数据。我们就可以从中取出理想最优解和最劣解。因此我们取出每个指标,即每一列中最大的数,构成理想最优解向量,即同理,取每一列中最小的数计算理想最劣解向量:z^{+}就是 z_{max} , z^{-} 就是 z_{min} 。在得到理想最优解和理想最劣解的基础上就能计算每个方案的评分了。根据上面的距离评分公式:对其进行变型,也就是:变型的目的是为了使用欧几里得距离来衡量两个方案的距离,变形前后分母的计算结果其实是不同的(因为这里zi是一个向量)。这样更能体现出是综合距离。否则所有方案计算得分时分母都是相同的,相当于只衡量了分子,也就是距离最劣解的距离。3.2 TOPSIS评分计算于是计算距离评分:对于第i个方案zi,我们计算它与最优解的距离:与最劣解的距离:定义第i个方案的评分为Si:也就是前面提到的综合距离。0\leq S_{i} \leq 1,且 d_{i}^{+} 越小,也就是该方案与最优解的距离越小时,S_{i} 越大;相应的,d_{i}^{-}越小,也就是该方案与最劣解的距离越小时, S_{i} 越小。 为同时兼顾了该方案与最优解与最劣解的距离的评分。这个时候我们就有了每个方案的分数了,按分数排排序,就知道哪个方案比较好哪个方案比较差。四、TOPSIS算法总结4.1 TOPSIS算法实现步骤1.将原始数据矩阵正向化。也就是将那些极小性指标,中间型指标,区间型指标对应的数据全部化成极大型指标,方便统一计算和处理。2.将正向化后的矩阵标准化。也就是通过标准化消除量纲的影响。3.计算每个方案各自与最优解和最劣解的距离:与最优解的距离:与最劣解的距离:4.根据最优解与最劣解计算得分并排序五、TOPSIS算法示例5.1 TOPSIS算法示例对一个需要根据学生智商和情商进行排名的数据:原始数据矩阵如下对其进行正向化:对其进行标准化:计算与最优解和最劣解的距离:最后计算得分给出排名:这个例子告诉我们,成绩很重要,但是情商更重要。小王虽然只考了60分,但也及格了,而且他从不与人争吵,所以我们可以给他一个最好的评价。5.2 TOPSIS算法扩展从上面计算各自与最优解和最劣解的距离时,我们看到,每一项指标的权重是一样的。在实际问题中,不同的指标重要程度可能是不一样的。例如评奖学金的时候,成绩往往是最重要的,之后还有参与活动分,志愿服务分等等,他们的权重又低一点。因此,在实际的应用中,我们也可以给指标进行赋权,将权重放到计算距离的公式中。考虑权重后,不同指标对最后的影响不一样,考虑权重的评价往往是实际生活中很常见的一种评价方式。关于权重的选取也有不同的方法,比如层次分析法(主观给出)、熵权法等等。六、程序源码TOPSIS.m程序clear all
clc
%% 导入数据
% (1)在工作区右键,点击新建(Ctrl+N),输入变量名称为X
% (2)双击进入X,输入或拷贝数据到X
% (3)关掉这个窗口,点击X变量,右键另存为,保存为mat文件
% (4)注意,代码和数据要放在同一个目录下哦,且Matlab的当前文件夹也要是这个目录。
load data_water_quality.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,4]
disp('请输入需要处理的这些列的指标类型(1:极小型, 2:中间型, 3:区间型) ')
Type = input('例如[1,3,2]: '); %[2,1,3]
% 注意,Position和Type是两个同维度的行向量
for i = 1 : size(Position,2)%对每一列进行正向化处理
X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));
% 第一个参数是要正向化处理的那一列向量 X(:,Position(i))
% 第二个参数是对应的这一列的指标类型(1:极小型, 2:中间型, 3:区间型)
% 第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列
% 返回值返回正向化之后的指标
end
disp('正向化后的矩阵 X = ')
disp(X)
end
%% 数据预处理_标准化
Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 Z = ')
disp(Z)
%% 指标权重赋值
disp("请输入是否需要增加权重向量,需要输入1,不需要输入0")
Judge = input('请输入是否需要增加权重: ');
if Judge == 1
disp(['有多少个指标就输入多少个权重数(权重和为1),如[0.25,0.25,0.5]']);
weigh = input(['请输入输入' num2str(m) '个权重: ']);
if abs(sum(weigh) - 1)<0.000001 && size(weigh,1) == 1 && size(weigh,2) == m % 这里要注意浮点数的运算是不精准的。
else
weigh = input('你输入的有误,请重新输入权重行向量: ');
end
else
weigh = ones(1,m) ./ m ; %如果不需要加权重就默认权重都相同,即都为1/m
end
%% 计算与最大值的距离和最小值的距离,并算出得分
D_P = sum([(Z - repmat(max(Z),n,1)) .^ 2 ] .* repmat(weigh,n,1) ,2) .^ 0.5; % D+ 与最大值的距离向量
D_N = sum([(Z - repmat(min(Z),n,1)) .^ 2 ] .* repmat(weigh,n,1) ,2) .^ 0.5; % D- 与最小值的距离向量
S = D_N ./ (D_P+D_N); % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S)% 归一化的得分
[sorted_S,index] = sort(stand_S ,'descend')%对得分进行排序并返回原来的位置
plot(sorted_S,'r-o')
xmin=1;xmax = size(sorted_S,1);
ymin = 0;ymax = max(sorted_S)+min(sorted_S);
axis([xmin xmax ymin ymax]); % 设置坐标轴在指定的区间
grid on
xlabel('方案');ylabel('分数');%坐标轴表示对bai象标签
title('TOPSIS算法最终评分排序')正向化处理函数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以下面这个例子为例:首先导入数据,然后运行程序,结果如下:编辑于 2022-04-18 21:54排序算法人工智能算法决策理论赞同 31814 条评论分享喜欢收藏申请转载文章被以下专栏收录1111111
什么叫做"基于熵权的 TOPSIS 综合评价法”? - 知乎
什么叫做"基于熵权的 TOPSIS 综合评价法”? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册法学什么叫做"基于熵权的 TOPSIS 综合评价法”?关注者10被浏览117,089关注问题写回答邀请回答好问题添加评论分享6 个回答默认排序疯狂绅士SAISM-夹逼对抗解释结构模型——扯蛋的表现形式 关注你这里有三个概念。只要记得topsis是什么就行!一、综合评价综合评价(Comprehensive Evaluation,CE),也叫综合评价方法或多指标综合评价方法,是指使用比较系统的、规范的方法对于多个指标、多个单位同时进行评价的方法。它不只是一种方法,而是一个方法系统,是指对多指标进行综合的一系列有效方法的总称。综合评价方法在现实中应用范围很广。综合评价是针对研究的对象,建立一个进行测评的指标体系,利用一定的方法或模型,对搜集的资料进行分析,对被评价的事物作出定量化的总体判断。综合评价的三大关键技术:其一,指标选择;其二,权数的确定;其三,方法的适宜。二、求权重的方法求权重的方法如下:求权重方法有客观法与主观法。熵权法是用的最广的客观法。三、topsis方法TOPSIS方法说明流程图中纵向的过程即为TOPSIS方法的流程。TOPSIS简介。 TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )法是C.L.Hwang和K.Yoon于1981年首次提出,TOPSIS法根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。TOPSIS法是一种逼近于理想解的排序法,该方法只要求各效用函数具有单调递增(或递减)性就行。TOPSIS法是多目标决策分析中一种常用的有效方法,又称为优劣解距离法。该方法又被称为“双基点法”TOPSIS重要基本概念与原理 “正理想解”和“负理想解”是TOPSIS法的最基本的概念。 离正理想点(最好的解、最佳点、最优解、最大极值点)的距离越远,效果最差,即为负向指标。因为其数值越大越差,数值越小越牛逼。 离负理想点(最差的解、最差点、最劣解、最差极值点)的距离越远,效果最好,即为正向指标。因为其数值越小越牛逼,数值越大越差。 贴近度、相似度是TOPSIS法的另外一个重要概念。 越贴近正理想点,即数值越大,效果最大,即为正向指标。 越贴近负理想点,即数值越大,效果最差,即为为向指标。可以把熵权法只是topsis的一部分topsis就是一种综合评价方法。发布于 2022-10-07 18:53赞同 44添加评论分享收藏喜欢收起SPSSAU已认证账号 关注举个例子进行说明。一、分析前准备1.研究背景TOPSIS法用于研究评价对象与‘理想解’的距离情况,结合‘理想解’(正理想解和负理想解),计算得到最终接近程度C值。熵权TOPSIS法核心在于TOPSIS,但在计算数据时,首先会利用熵值(熵权法)计算得到各评价指标的权重,并且将评价指标数据与权重相乘,得到新的数据,利用新数据进行TOPSIS法研究。通俗地讲,熵权TOPSIS法是先使用熵权法得到新数据newdata(数据成熵权法计算得到的权重),然后利用新数据newdata进行TOPSIS法研究。例如:当前有一个项目进行招标,共有4个承包商,分别是A,B,C,D厂。由于招标需要考虑多个因素,各个方案指标的优劣程度也并不统一。为了保证评价过程中的客观、公正性。因此,考虑通过熵权TOPSIS法,对各个方案进行综合评价,从而选出最优方案。2.数据格式熵权TOPSIS法用于研究指标与理想解的接近度情况。1个指标占用1列数据。1个研究对象为1行,但研究对象在分析时并不需要使用,SPSSAU默认会从上到下依次编号。二、SPSSAU操作(1)登录账号后进入SPSSAU页面,点击右上角“上传数据”,将处理好的数据进行“点击上传文件”上传即可。(2)拖拽分析项在“综合评价”模块中选择“熵权topsis”方法,将分析项拖拽到右侧分析框中,点击“开始分析”即可。三、SPSSAU数据处理1.数据正向化/逆向化处理如果数据中有逆向指标(数字越大反而越不好的意思),此时需要使用‘SPSSAU数据处理->生成变量’的‘逆向化’功能处理。让数据变成正向指标(即数字越大越好的意思)。‘逆向化’的数据计算公式为:(Max-X)/(Max-Min),明显可以看出,针对逆向指标进行‘逆向化’处理后,数据就会变成正向指标。【SPSSAU】数据无量纲化处理 | 数据分析常见问题解答2.数据标准化处理针对数据进行标准化处理,目的在于解决量纲化问题。常见的标准化处理方法有:‘归一化’,‘区间化’,‘均值化’等。(1)‘归一化’将所有数据压缩在0到1之间;(2)‘区间化‘将所有数据压缩在自己设定的区间;(3)‘均值化’= 当前值 / 平均值。补充说明:一般而言,如果数据全部都大于0,建议使用‘均值化’;如果数据中有负数或者0,建议做‘区间化’让数据限定在一个区间(SPSSAU默认1~2之间);当然也可以考虑‘归一化’,让数据全部介于0~1之间。具体标准化的处理方式有很多种,具体结合文献和自身数据选择使用即可。不同的处理方式肯定会带来不同的结果,但结论一般不会有太大的偏倚。(如果数据进行了正/逆向化处理就不需要再进行标准化处理。)四、SPSSAU分析背景:当前有6个国家经济技术开发区,分别在政务系统的4个指标上的评分值。数字越大表示指标越优。当前希望利用熵权TOPSIS法评价出6个开发区的政务系统排名情况。原始数据如下:本案例数据中包括4个政务系统的评价指标,而且全部都是正向指标,因此不需要进行正向化或者逆向化处理。以及接着数据标准化解决量纲问题上,本例子使用‘均值化’处理方法。操作为SPSSAU数据处理->生成变量:完成数据‘均值化’处理后,直接开始进行‘熵值TOPSIS法’分析,操作如下图:1.熵值法计算权重结果汇总上表格展示出4个政务系统指标的权重值,明显可以看出指标3的权重更大。但权重大小仅仅是过程值,熵值TOPSIS分析重心在于TOPSIS法计算出相对接近度。权重值与数据相乘,得到新数据newdata,这一过程是SPSSAU自动完成,利用newdata进行TOPSIS法计算。2.TOPSIS评价计算结果分析结果来源于SPSSAU从上表可知,利用熵权法后加权生成的数据(算法自动完成)进行TOPSIS分析,针对4个指标(MC_政务系统指标1, MC_政务系统指标2, MC_政务系统指标3, MC_政务系统指标4),进行TOPSIS评价,同时评价对象为6个(样本量数量即为评价对象数量);TOPSIS法首先找出评价指标的正负理想解值(A+和A-),接着计算出各评价对象分别与正负理想解的距离值D+和D-。根据D+和D-值,最终计算得出各评价对象与最优方案的接近程度(C值),并可针对C值进行排序。最终从上表可知:评价对象4,即开发区4,它的相对接近度C值最高为0.9995,因而说明开发区4在政务系统上的表现最优;其次是开发区3,相对接近度C起来0.8141。开发区1的政务系统表现最差。3.正负理想解4.描述统计分析数据完整并无缺失等,可通过上表格查看各分析项的平均值或标准差值等。从上表格可以看出四个分析项的样本量均为6,平均值均为1。五、其他说明1.如果分析数据中有负数或者0值如何办?如果分析数据有负数或者0,这会导致无法进行熵值法计算,SPSSAU算法默认会进行‘非负平移’处理。SPSSAU非负平移功能是指,如果某列(某指标)数据出现小于等于0,则让该列数据同时加上一个‘平移值’(该值为某列数据最小值的绝对值+0.01),以便让数据全部都大于0,因而满足算法要求。2. 面板数据如何进行熵值TOPSIS法?熵值TOPSIS法的原理是先进行熵值法,然后再进行TOPSIS法。无论是面板或者非面板数据,均可正常进行熵值TOPSIS法研究,并不需要特别处理。(当然面板数据进行分析时,也可以先筛选出不同的年份,重复进行多次均可)。六、总结熵权TOPSIS法分别涉及熵权法和TOPSIS法;熵权法计算各评价指标的权重值,然后利用权重值乘原始数据,得到newdata。系统利用newdata进行TOPSIS法进行计算,最终得到各评价对象的接近程序C值,用于判断和衡量评价对象的优劣排序等。【SPSSAU】熵权topsis法案例解读【SPSSAU】熵值法的各类应用【SPSSAU】熵值法操作及应用 | 数据分析常见问题解答今天的分享就到这里啦,更多干货请前往SPSSAU官网查看:发布于 2023-10-12 10:20赞同 10添加评论分享收藏喜欢
数学建模——评价模型之TOPSIS_topsis模型-CSDN博客
>数学建模——评价模型之TOPSIS_topsis模型-CSDN博客
数学建模——评价模型之TOPSIS
最新推荐文章于 2024-03-09 19:27:47 发布
CozyCode
最新推荐文章于 2024-03-09 19:27:47 发布
阅读量1w
收藏
102
点赞数
7
分类专栏:
数学建模
文章标签:
美国大学生数学建模竞赛
数学建模
信息熵
matlab
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/muhuazuishuai/article/details/122436694
版权
数学建模
专栏收录该内容
2 篇文章
1 订阅
订阅专栏
文章目录
一、TOPSIS的应用场景二、TOPSIS法的模型建立1.对原始决策矩阵正向化2.决策矩阵标准化3.计算得分并归一化
三、TOPSIS与(组合)赋权法结合代码
一、TOPSIS的应用场景
Topsis法,全称为Technique for Order Preference by Similarity to an Ideal Solution,中文常翻译为优劣解距离法,该方法能够根据现有的数据,对个体进行评价排序。根据有限个评价对象与理想化目标的接近程度进行排序的方法,是在现有的对象中进行相对优劣的评价。
下图中假设只有两个评价指标,因此是二维坐标。 TOPSIS法其中“理想解”和“负理想解”是TOPSIS法的两个基本概念。
所谓理想解是一设想的最优的解(方案),它的各个属性值都达到各备选方案中的最好的值负理想解是一设想的最劣的解(方案),它的各个属性值都达到各备选方案中的最坏的值。
二、TOPSIS法的模型建立
主要步骤:
原始决策矩阵正向化决策矩阵标准化计算得分并归一化
1.对原始决策矩阵正向化
构造决策矩阵
A
=
(
a
i
j
)
m
×
n
A=\left(a_{i j}\right)_{m \times n}
A=(aij)m×n,每一列是一个评价指标,每一行是一条待评价样本。
有的数据是越大越好,有的数据是靠近某个值越好,有的是在一个区间中最好,这种不同的方向和区间让分析变得混乱,为了简化分析我们将数据进行正向化处理,都让他越大越好。
最常见的四种指标:
所谓的将原始矩阵正向化,就是要将所有的指标类型统一转化为 极大型指标。
极小型指标转化为极大型指标: 使用公式
max
−
x
\max -x
max−x 如果所有的元素均为正数,那么也可以使用
1
x
\dfrac{1}{x}
x1中间型指标转化为极大型指标:
x
ˉ
i
=
1
−
∣
x
i
−
x
best
∣
max
(
∣
X
−
x
best
∣
)
\bar{x}_{i}=1-\frac{\left|x_{i}-x_{\text {best }}\right|}{\max \left(\left|X-x_{\text {best }}\right|\right)}
xˉi=1−max(∣X−xbest ∣)∣xi−xbest ∣区间型指标转化为极大型指标:
M
=
max
{
a
−
min
{
x
i
}
,
max
{
x
i
}
−
b
}
,
x
~
i
=
{
1
−
a
−
x
i
M
,
x
i
<
a
1
,
a
≤
x
i
≤
b
1
−
x
i
−
b
M
,
,
x
i
>
b
M=\max \left\{a-\min \left\{x_{i}\right\}, \max \left\{x_{i}\right\}-b\right\}, \tilde{x}_{i}= \begin{cases}1-\frac{a-x_{i}}{M}, & x_{i}b\end{cases}
M=max{a−min{xi},max{xi}−b},x~i=⎩⎪⎨⎪⎧1−Ma−xi,11−Mxi−b,xib 其中[a, b]是最佳区间。
2.决策矩阵标准化
标准化的目的是消除不同指标量纲的影响,常用方法有max-min标准化和Z-score标准化,本文介绍Z-score标准化。
假设有
n
n
n个要评价的对象,
m
m
m个要评价指标(已经正向化)构成的正向化矩阵如下:
X
=
[
x
11
x
12
⋯
x
1
m
x
21
x
22
⋯
x
2
m
⋮
⋮
⋱
⋮
x
n
1
x
n
2
⋯
x
n
m
]
X=\left[\begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1 m} \\ x_{21} & x_{22} & \cdots & x_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n 1} & x_{n 2} & \cdots & x_{n m} \end{array}\right]
X=⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎤ ,记对其进行标准化的矩阵为Z,Z中的每一个元素通过如下公式计算:
z
i
j
=
x
i
j
/
∑
i
=
1
n
x
i
j
2
z_{i j}=x_{i j} / \sqrt{\sum_{i=1}^{n} x_{i j}^{2}}
zij=xij/i=1∑nxij2
例:下表是5位同学身体相关参数,请用TOPSIS法来对同学身体情况进行一个综合的评价。
正向化后矩阵:
得到标准化后的矩阵:
3.计算得分并归一化
假设有
n
n
n个要评价的对象,
m
m
m个要评价指标构成的标准化矩阵如下:
Z
=
[
z
11
z
12
⋯
z
1
m
z
21
z
22
⋯
z
2
m
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
m
]
Z=\left[\begin{array}{cccc} z_{11} & z_{12} & \cdots & z_{1 m} \\ z_{21} & z_{22} & \cdots & z_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ z_{n 1} & z_{n 2} & \cdots & z_{n m} \end{array}\right]
Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤ 定义最大值
Z
+
=
(
Z
1
+
,
Z
2
+
,
⋯
,
Z
m
+
)
=
(
max
{
z
11
,
z
21
,
⋯
,
z
n
1
}
,
max
{
z
12
,
z
22
,
⋯
,
z
m
2
}
,
⋯
,
max
{
z
1
m
,
z
2
m
,
⋯
,
z
m
m
}
)
\begin{array}{rlr} Z^{+} & =\left(Z_{1}^{+}, Z_{2}^{+}, \cdots, Z_{m}^{+}\right) \\ & =\left(\max \left\{z_{11}, z_{21}, \cdots, z_{n 1}\right\}, \max \left\{z_{12}, z_{22}, \cdots, z_{m 2}\right\}, \cdots, \max \left\{z_{1 m}, z_{2 m}, \cdots, z_{m m}\right\}\right) \end{array}
Z+=(Z1+,Z2+,⋯,Zm+)=(max{z11,z21,⋯,zn1},max{z12,z22,⋯,zm2},⋯,max{z1m,z2m,⋯,zmm}) 定义最小值
Z
−
=
(
Z
1
−
,
Z
2
−
,
⋯
,
Z
m
−
)
=
(
min
{
z
11
,
z
21
,
⋯
,
z
n
1
}
,
min
{
z
12
,
z
22
,
⋯
,
z
n
2
}
,
⋯
,
min
{
z
1
m
,
z
2
m
,
⋯
,
z
n
m
}
)
\begin{aligned} Z^{-} &=\left(Z_{1}^{-}, Z_{2}^{-}, \cdots, Z_{m}^{-}\right) \\ &=\left(\min \left\{z_{11}, z_{21}, \cdots, z_{n 1}\right\}, \min \left\{z_{12}, z_{22}, \cdots, z_{n 2}\right\}, \cdots, \min \left\{z_{1 m}, z_{2 m}, \cdots, z_{n m}\right\}\right) \end{aligned}
Z−=(Z1−,Z2−,⋯,Zm−)=(min{z11,z21,⋯,zn1},min{z12,z22,⋯,zn2},⋯,min{z1m,z2m,⋯,znm}) 定义第
i
i
i个评价对象与最大值的距离
D
i
+
=
∑
j
=
1
m
(
Z
j
+
−
z
i
j
)
2
D_{i}^{+}=\sqrt{\sum_{j=1}^{m}\left(Z_{j}^{+}-z_{i j}\right)^{2}}
Di+=∑j=1m(Zj+−zij)2
定义第
i
i
i个评价对象与最小值的距离
D
i
−
=
∑
j
=
1
m
(
Z
j
−
−
z
i
j
)
2
D_{i}^{-}=\sqrt{\sum_{j=1}^{m}\left(Z_{j}^{-}-z_{i j}\right)^{2}}
Di−=∑j=1m(Zj−−zij)2
那么我们就可以计算得出第
i
i
i个评价对象未归一化的得分:
S
i
=
D
i
−
D
i
+
+
D
i
−
S_{i}=\frac{D_{i}^{-}}{D_{i}^{+}+D_{i}^{-}}
Si=Di++Di−Di−
很明显
0
≤
S
i
≤
1
0 \leq S_{i} \leq 1
0≤Si≤1,且
S
i
S_i
Si越大
D
i
+
D_i^+
Di+越小,即越接近最大值。
最后我们可以将得分归一化:
S
~
i
=
S
i
/
∑
i
=
1
m
S
i
\tilde{S}_{i}=S_{i} / \sum\limits_{i=1}^{m} S_{i}
S~i=Si/i=1∑mSi,可以得知
∑
i
=
1
m
S
~
i
=
1
\sum\limits_{i=1}^{m} \tilde{S}_{i} = 1
i=1∑mS~i=1
建模完毕。
三、TOPSIS与(组合)赋权法结合
假设有
n
n
n个要评价的对象,
m
m
m个要评价指标构成的标准化矩阵如下:
Z
=
[
z
11
z
12
⋯
z
1
m
z
21
z
22
⋯
z
2
m
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
m
]
Z=\left[\begin{array}{cccc} z_{11} & z_{12} & \cdots & z_{1 m} \\ z_{21} & z_{22} & \cdots & z_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ z_{n 1} & z_{n 2} & \cdots & z_{n m} \end{array}\right]
Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤ 可以使用层次分析法或者熵权法给这
m
m
m个评价指标赋权
D
i
+
=
∑
j
=
1
m
ω
j
(
Z
j
+
−
z
i
j
)
2
D_{i}^{+}=\sqrt{\sum_{j=1}^{m} \omega_{j}\left(Z_{j}^{+}-z_{i j}\right)^{2}}
Di+=j=1∑mωj(Zj+−zij)2
D
i
−
=
∑
j
=
1
m
ω
j
(
Z
j
−
−
z
i
j
)
2
D_{i}^{-}=\sqrt{\sum_{j=1}^{m} \omega_{j}\left(Z_{j}^{-}-z_{i j}\right)^{2}}
Di−=j=1∑mωj(Zj−−zij)2
代码
基于熵权法对上例进行求解(matlab)。
%基于熵权法对于TOPSIS的修正
clear;clc;
load X.mat;
%获取行数列数
r = size(X,1);
c = size(X,2);
%首先,把我们的原始指标矩阵正向化
%第二列中间型--->极大型
middle = input("请输入最佳的中间值:");
M = max(abs(X(:,2)-middle));
for i=1:r
X(i,2) = 1-abs(X(i,2)-middle)/M;
end
%第三列极小型--->极大型
max_value = max(X(:,3));
X(:,3) = abs(X(:,3)-max_value);
%第四列区间型--->极大型
a = input("请输入区间的下界:");
b = input("请输入区间的下界:");
M = max(a-min(X(:,4)),max(X(:,4))-b);
for i=1:r
在这里插入图片描述
引入一个实际例子来理解一下:
例题:下表是5位同学身体相关参数,请用TOPSIS法来对同学身体情况进行一个综合的评价
在这里插入图片描述
注意到,上面四个指标方向并不相同
在这里插入图片描述
需要对不同指标进行正向化:
1、极小型指标
在这里插入图片描述
2、中间型指标
在这里插入图片描述
3、区间型指标
在这里插入图片描述
因为不同特征的量纲不同,之后需要对指标进行标准化最优、最劣方案集的确定:1、一方面看是否该决策因素本身有限定值,要符合现实意义2、如果没有或者难以找到,就在所有评价集中找到MAX与MIN值计算距离:
1、正向距离公式:
在这里插入图片描述
2、负向距离公式:
在这里插入图片描述
3、评价指标值:
在这里插入图片描述
以小明为例计算评价指标值:
在这里插入图片描述在这里插入图片描述
进一步拓展:
上例中的计算,是默认评价因素之间重要程度相同,往往实际中并非如此,各个因素之间有重要程度之别。如何去给每个因素设置重要程度呢?
在这里插入图片描述
权重通过AHP或熵权法确定
(本专栏第三篇介绍过EXCEL的熵权法)matlab:熵权法结合TOPSIS%基于熵权法对于TOPSIS的修正
clear;clc;
load X.mat;
%获取行数列数
r = size(X,1);
c = size(X,2);
%首先,把我们的原始指标矩阵正向化
%第二列中间型--->极大型
middle = input("请输入最佳的中间值:");
M = max(abs(X(:,2)-middle));
for i=1:r
X(i,2) = 1-abs(X(i,2)-middle)/M;
end
%第三列极小型--->极大型
max_value = max(X(:,3));
X(:,3) = abs(X(:,3)-max_value);
%第四列区间型--->极大型
a = input("请输入区间的下界:");
b = input("请输入区间的下界:");
M = max(a-min(X(:,4)),max(X(:,4))-b);
for i=1:r