数学建模--国赛备赛---TOPSIS算法
目录
1.准备部分
1.1提交材料
1.2MD5码相关要求
2.TOPSIS算法
2.1算法概述
2.2基本概念
2.3算法核心思想
2.4拓展思考
3.适用赛题
3.1适用赛题说明
3.2适用赛题举例
4.赛题分析
4.1指标的分类
4.2数据预处理
4.2.1区间型属性的变换
4.2.2向量规范化
4.3数据加权处理
4.4求解的相关数据含义
4.5求解过程的再次复盘
5.代码求解
5.1数据导入
5.2区间型数据变换
5.3向量规范化
5.4加权处理后求得结果
5.5完整代码
1.准备部分
1.1提交材料
数学建模论文和相应的支撑材料,这个数学建模论文pdf提交,支撑材料尽量压缩(zip格式),命名这个支撑材料合理即可;
1.2MD5码相关要求
记得去阅读这个MD5码的相关要求,这个不可以随意更改,必须严格的按照要求;
2.TOPSIS算法
2.1算法概述

2.2基本概念
正理想解和负理想解的相关说明,在这个TOPSIS算法里面,我们那这个例子来进行说明,这个里面一共就只有两个指标,这个盗窃成功次数里面的最大值我们叫做这个指标的正理想解即为4,同理我们既可以得到这个盗窃总价值里面的正理想解就是4,负理想解就是这个指标里面的最小值,分别是这个4,2;上面的完成之后,我们把两个指标的正理想解作为一个指标在二维的坐标平面里面画出来,把这个负理想解同样画出来;
可能有些同学会有疑问,问什么这个负理想解不可缺少,因为这个里面只能有一个盗圣,如果是只会绘制出来这个正理想解和其他的四个坐标,这个里面的张三和李四到达这个正理想解点的距离是一样的,这个时候我们无法评选出来,但是有了这个负理想解之后,这个负理想解的顶点到达这两个点的距离就不一样,我们就可以依据这个那个点到达这个负理想解的距离更加远去进行判断这个谁是盗圣,因为那个店距离这个负理想解越近,就说明这个点距离这个差的标准的越近,这个就不会复合盗圣的要求(在比较的情况下看来);

2.3算法核心思想
上面我们已经介绍了这个正理想解和负理想解,什么是真正的TOPSIS,这个算法的核心思想又是什么,我们介绍一下:实际上就是一句话;
根据这个不同的已知点到达这个正理想解和负理想解的距离进行判断的;

2.4拓展思考
我们上面的这个指标只有两个,而且都是正面的,无论是这个盗窃成功的次数还是这个盗窃的总价值,这个指标都是越大越可以证明这个人越接近盗圣,但是如果出现这个多个指标的情况,我们的这个二维的平面图形就显得捉襟见肘了,而且这个负面指标,例如这个盗窃失败的次数如果也是作为一个指标,我们又应该如何考虑这个问题;
这个里面的盗窃的总价值显示的就是万元作为单位,但是如果我们把这个单位给去掉,这个表格里面的数据就不在一个数量级上面了,我们这个时候如果直接进行运算,这个和盗窃的金额相比之下,这个盗窃成功的次数就显得很小,我们就会忽略不计,否则这个就会增加我们的这个计算量,我们这个时候就无法让这个盗窃成功的次数发挥它的作用;
以上的这些问题或许你觉得讲的很有道理,但是这个究竟如何解决,你可能还是没有思路,不需要着急,在下面的这个赛题的解析部分,我们将会通过在题目里面遇到这些问题并且给予你们相应的解决方案;

3.适用赛题
3.1适用赛题说明
首先我们的这个问题的评价是和客观的,还记得之前介绍的这个层次分析法的思路吗,这个就不是很客观,需要我们进行这个一致性检验之类的,因为这个对应的权重以及分数就是我们自己主观臆断的,但是这个TOPSIS算法就是很客观;

3.2适用赛题举例
我们接下来对于这个赛题的介绍,就是以这个赛题作为案例的,这个里面囊括了很多的情况,例如我们上面介绍的这个不仅仅是只有两个指标,而且不同的指标的这个数量级也是不一样的,而且每一个指标并不都是越大越好,这个下面我们还会进行分析;

4.赛题分析
4.1指标的分类
我们把上面的这4个指标划分为了下面的三个不同的类型,效益型数据,成本型数据,以及这个区间型数据,很好理解不再赘述;
4.2数据预处理
4.2.1区间型属性的变换
这个就是使用的下面的这个图片里面的公式,我们的区间行变换针对的就是区间性的数据,这个生师比就是这个类型的数据,因此这个区间型属性的变换就是处理的生师比这个指标;
具体的处理方法就是直接套用这个公式,其中这个里面需要有无法容忍的下限,和无法容忍的上限,还有一个就是最优的属性区间,这个上限和下限就是不合理的比例的边界情况;

在这个最有区间里面的数值,我们记作1,超出这个上限和下限的,我们记作0,在这个上限下面,下限上面的数据,我们需要套用公式进行处理,aij就是我们已知的,需要进行处理的数据;
第一个和第二个院校都是在这个最优区间里面的,我们直接记作1,第五个院校低于这个下限,我们记作0,这个34院校就需要进行计算了;
为什么是a2,因为这个生师比在这个指标里面是属于第二个指标7这个数据需要带入分段函数的第三个进行计算,10也是需要带入第三个函数进行运算;
4.2.2向量规范化
我们的向量规范化就是在进行这个数量级的统一,经过这个处理之后达到的效果就是这个所有的数据全部位于0~1之间,我们的向量规范化是在区间型属性变换的基础上面进行的,而不是在原始的数据上面进行的,实际上只有师生比经过了区间型属性变换,其他的这个数据进行向量化规范的时候使用的还是原始的数据;
这个计算的方法公式的分母就是这个指标的每一列数据的平方和再求得算术平方根,分子就是每一个表格里面的数据;

4.3数据加权处理
就是这个也是有权重的,只不过这个权重不像之前的这个层次分析法一样对于这个结果的影响很大,这个里面我们的权重合理即可;
例如这个0.2,0.3,0.4,0.1这个权重就是我们设置的,计算的话,例如这个上面的数据预处理之后的第一个数据0.0638直接乘以这个0.2即可得到这个权重处理之后的数据;

4.4求解的相关数据含义
我们基本思路韩式求每一个点到达这个正理想解和负理想解的距离,具体这个正理想解越大,这个效益就会越好,距离负理想解越远,这个结果也会越好(对于这个效益而言);

我们最后还要求解这个综合评价指数,这个公式我们进过变形就可以发现,这个就是TOPSIS算法的核心思想(根据这个分子分母的关系即可确定);
4.5求解过程的再次复盘
我们现实对于这个原始数据进行预处理,这个里面包括了区间型属性的变换,以及这个向量的规范化,然后对于这个处理之后的数据进行甲醛处理,最后求解距离带入求解指标,指标越大,说明这个院校教育质量就越好;

5.代码求解
5.1数据导入

5.2区间型数据变换
这个就是套公式,这个里面使用到了函数句柄,这个东西我自己也是第一次见到,但是这个并不是很难理解,这个可以建立在编程C语言的逻辑判断的上面进行理解,蓝色的点表示这个是一句话,只不过我们写在多行上面;
@就是函数句柄的标志,这个下面是有3行,代表的就是分段函数的3种情况,你可能会好奇,这个分段函数不是有4种情况嘛,为什么这个函数句柄里面只有三种,因为这个0自动就是一种结果
例如这个@下面的第一行,后半部分实际上就是区间,如果在这个区间里面,我们的这一行的 表达式的就会执行,其他行的逻辑判断就是0,如果这个上面显示的三个情况都不符合,这个逻辑判断的结果都是0,那么这个a2就是0,正好对应我们的分段函数的第四种情况;

函数句柄里面实际上就有这个最优区间的变量名字,相关参数还包括了最大上限和最小下限,最后一行就是利用这个函数句柄对于这个生师比进行变换,就是把第二列的所有的数据传递进去作为函数的参数,得到新的变换之后的数据;
5.3向量规范化
这个两个点就表示所有的数据,我们这个里面使用的就是循环,我拿一个进行说明,就例如第一次循环的时候这个j=1,我们这个时候的循环语句就是b(:,1)表示的就是第一行第一列的数据和第二行第一列的数据,第三行第一列的数据,以及第四行第一列的数据,第五行第一列的数据,分别对应各自的规范化处理之后的结果;

5.4加权处理后求得结果
我们这个里面使用到了repmat函数,这个函数实际上的作用就是矩阵的复制,第三个参数1表示这个矩阵的复制是在列的方向上进行的,w就是我们自己设置的权重这个矩阵,m是我们之前求解的这个原始数据的行数和列数(在整个程序的最开始部分);
因为这个里面的正理想解和负理想解有不同类型的数据,例如这个延毕率就是越小越好,其他的各项指标都是越大越好的,我们进行其他的指标处理的时候,正理想解直接取得这个最大值即可,但是这个延毕率的最小值才是正理想解,在求解负理想解的时候也是如此;

接下来我们利用循环求解这个到达正理想解,负理想解的距离,带入这个公式得到综合评价指数f最后使用sort函数,加上这个descend参数表示这个结果是按照降序进行排列的,我们就可以得到这几个院校的最终排名;
5.5完整代码
clc, clear% 输入原始数据
a=[0.1 5 5000 4.70.2 6 6000 5.60.4 7 7000 6.70.9 10 10000 2.31.2 2 400 1.8];
[m,n]=size(a); % m是行数(方案数),n是列数(属性数)%区间型属性变换% 定义函数句柄b2,相当于在此定义了一个函数
% @(qujian,lb,ub,x)意味着调用b2时,需要给它括号里的四个参数
% (x>=lb & x<qujian(1))是逻辑与,如果&符号左右两边的条件都满足,则为1,否则为0
% 四种情况是互斥的,所以可以乘以各自区间条件逻辑计算后相加
a2=@(qujian,lb,ub,x)...
(1-(qujian(1)-x)./(qujian(1)-lb)).*(x>=lb & x<qujian(1))...
+(x>=qujian(1) & x<=qujian(2))...
+(1-(x-qujian(2))./(ub-qujian(2))).*(x>qujian(2) & x<=ub); % 设最优区间等参数
qujian=[5,6]; lb=2; ub=12;
a(:,2)=a2(qujian,lb,ub,a(:,2)); % 对生师比进行变换%向量规范化for j=1:nb(:,j)=a(:,j)/norm(a(:,j)); %向量规划化
end%加权求解w=[0.2 0.3 0.4 0.1];
ww = repmat(w,m,1); % repmat复制得到m个权重矩阵w,在矩阵下面排列
c=b.*ww; %求加权后的矩阵;% 注意正理想解和负理想解的定义
% max(c)是包含矩阵c每一列的最大值的行向量
Cstar=max(c); %求正理想解
Cstar(4)=min(c(:,4)) %属性4为成本型的!!!专门修改它
C0=min(c); %q求负理想解
C0(4)=max(c(:,4)) %属性4为成本型的!!!专门修改它for i=1:mSstar(i)=norm(c(i,:)-Cstar); %求到正理想解的距离S0(i)=norm(c(i,:)-C0); %求到负理想的距离
end% 综合评价指数f
f=S0./(Sstar+S0);
[sf,ind]=sort(f,'descend') % 'descend'表示降序排序,得分高的放在第一位
相关文章:
数学建模--国赛备赛---TOPSIS算法
目录 1.准备部分 1.1提交材料 1.2MD5码相关要求 2.TOPSIS算法 2.1算法概述 2.2基本概念 2.3算法核心思想 2.4拓展思考 3.适用赛题 3.1适用赛题说明 3.2适用赛题举例 4.赛题分析 4.1指标的分类 4.2数据预处理 4.2.1区间型属性的变换 4.2.2向量规范化 4.3数据加…...
均值滤波算法及实现
均值滤波器的使用场景: 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区(也即延时周期),使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…...
【Apache Doris】周FAQ集锦:第 16 期
【Apache Doris】周FAQ集锦:第 16 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户…...
单例模式_Golang
目录 一、单例模式 1.1 基本概念 1.2 使用场景 二、Golang实现 2.1 懒汉模式(Lazy Loading) 一、单例模式 1.1 基本概念 一个类只能生成一个实例,且该类能自行创建这个实例的一种模式,这个定义个人感觉可以拆的通俗一些,在项目的生命周…...
代码随想录 day 18 二叉树
第六章 二叉树part06 详细布置 530.二叉搜索树的最小绝对差 需要领悟一下二叉树遍历上双指针操作,优先掌握递归 题目链接/文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%B…...
降雨量预测 | Matlab基于ARIMA-RBF降雨量预测
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 降雨量预测 | Matlab基于ARIMA-RBF降雨量预测 注:程序和数据放在一个文件夹。 程序语言为matlab,程序可出预测效果图,指标图; 代码特点:参数化编程、参数可方便更改、代…...
包含示例和模板的流程文档指南
当您的业务扩展时,您会得到越来越多的移动部件,并且需要有人来跟踪复杂性。人员和任务需要以尽可能最高效的方式进行组织,并且您必须找到某种方法让员工知道如何执行有效完成工作所需的流程。 为了使流程可重复,需要对其进行记录…...
51单片机嵌入式开发:15、STC89C52RC操作蜂鸣器实现一个music音乐播放器的音乐盒
STC89C52RC操作蜂鸣器实现一个music音乐播放器的音乐盒 1 概述2 蜂鸣器操作方法3 蜂鸣器发出音声4 硬件电路5 软件实现6 整体工程:7 总结 1 概述 要实现一个基于STC89C52RC单片机的音乐盒,可以按照以下步骤进行: (1)硬…...
B树(B-Tree)数据结构
1. 什么是B树? B树(B-Tree)是一种多路搜索树,用于存储和检索大量数据。它是自适应的,适用于各种存储设备和各种数据量。B树的特点是高效的搜索、插入和删除操作,且可以在各种情况下保持树的平衡。 2. B树…...
【BUG】已解决:ModuleNotFoundError: No module named ‘torch‘
已解决:ModuleNotFoundError: No module named ‘torch‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市…...
数据结构——队列(链式结构)
一、队列链式结构定义 队列的链式存储结构是一种用链表实现的队列,它不像顺序存储结构那样需要预先分配固定大小的空间。链式存储结构的队列由节点组成,每个节点包括数据和指向下一个节点的指针。队列的链式存储结构可以动态地分配内存,更灵活地处理数据。在链式存储结构中…...
解决GoLand添加GOROOT提示The selected directory is not a valid home for Go Sdk的问题
现象 解决 在Go安装路径下找到zversion.go文件,我的在D:\Program Files\Go1.21.1\src\runtime\internal\sys下面 打开文件,添加如下内容: const TheVersion go1.21.1保存后再重新添加GOROOT即可...
51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式
本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图:STC8H8K64URA8889开发板,使用P2口I2C接口: 2.实物连…...
【Python其他检查字符串占字节数的方法】
在Python中,检查字符串在特定编码下占用的字节数,最标准且常用的方法是通过字符串的.encode()方法将字符串转换为字节串,然后使用len()函数来获取这个字节串的长度。这是因为字符串(在Python 3中)是以Unicode形式存储的…...
梧桐数据库: 数据库技术中的重写子查询技术
数据库技术中的重写子查询技术,是数据库查询优化的一种重要手段。该技术主要通过改变子查询的形式,使其在执行效率和性能上得到优化。以下是对重写子查询技术的详细解析: 一、定义与目的 定义:重写子查询技术是指在数据库查询优…...
PHP连接MySQL数据库
PHP本身不具备操作MySQL数据库的能力,需要借助MySQL扩展来实现。 1、PHP加载MySQL扩展:php.ini文件中。(不要用记事本打开) 2、PHP中所有扩展都是在ext的文件夹中,需要指定扩展所在路径:extension_dir。 3、…...
STM32自己从零开始实操:PCB全过程
一、PCB总体分布 以下只能让大家看到各个模块大致分布在板子的哪一块,只能说每个人画都有自己的理由: 电源:从外部接入电源,5V接到中间,向上变成4V供给无线,向下变成3V供给下面的接口(也刻意放…...
error `slot` attributes are deprecated vue/no-deprecated-slot-attribute
旧的代码如下: <template slot"title">{{ item.title }}</template> {{ item.title }} 是一个模板标签,它在模板中插入了一个元素(slot),并指定了元素的名称为 “title”。这个标签在模板中显示…...
Websocket自动消息回复服务端工具
点击下载《Websocket自动消息回复服务端工具》 1. 前言 在进行Websocket开发时,前端小伙伴通常是和后端开发人员同步进行项目开发,经常会遇到后端开发人员接口还没开发完,也没有可以调试的环境,只能按照接口文档进行“脑回路开发…...
【软考】UML中的关联关系
目录 一、说明二、具体类型2.1 普通关联2.2 单向关联2.3 双向关联2.4 自关联2.4 聚合关系(Aggregation)2.5 组合关系(Composition) 三、关联关系中的多重性 一、说明 1.UML(Unified Modeling Language,统一…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...


