数学建模--国赛备赛---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'表示降序排序,得分高的放在第一位

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Three.js 的 3D 模型加载优化

作者&#xff1a;来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目&#xff0c;从用户打开页面到最终模型的渲染需要经过多个流程&#xff0c;加载的时间也会比普通的H5项目要更长一些&#xff0c;从而造成大量的用户流失。为了提升首屏加载的转化率&#xff0c;需要尽可能…

IDEA的断点调试(Debug)

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …

【内网安全】横向移动-Kerberos-SPN-WinRM-RDP

目录 环境介绍与横向移动前置域横向移动-WinRM-WinRS移动条件&#xff1a; 步骤0、攻击机开启winrm服务&#xff1a;1.CS探针5985端口&#xff1a;2.连接目标主机并执行命令&#xff1a;3.上线CS&MSF:4.CS内置横向移动-winrm 域横向移动-RDP简介与条件RDP横向移动连接的三种…

TCP状态转换详解

1.什么是TCP的状态转换 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议。在 TCP 连接的生命周期中&#xff0c;连接的状态会随着不同阶段的通信而发生变化&#xff0c;这些变化被称为状…

嵌入式Linux入门知识点汇总-启动过程、设备树、设备框架、锁

目录 1.BootLoader启动过程? 引导加载程序(Bootloader) 补充u-boot的理解 通用的bootloader 2.系统调用过程? 3.设备驱动模型的三个重要成员? 4.驱动和设备注册是否存在先后顺序? 5.framebuffer机制? 6.字符设备和块设备的区别并分别举例? 1.字符设备 2.块设备…

SVN 服务 安装部署 Docker(compose) 方式

通过 dockerhub 或者 命令行运行 &#xff1a; docker search svn 查看 svn 的镜像 如命令行&#xff1a; [rootSGP ~]# docker search svn NAME DESCRIPTION STARS OFFICIAL AUTOMATED garethflower…

景联文科技构建高质量心理学系知识图谱,助力大模型成为心理学科专家

心理大模型正处于快速发展阶段&#xff0c;在临床应用、教育、研究等多个领域展现出巨大潜力。 心理学系知识图谱能够丰富心理大模型的认知能力&#xff0c;使其在处理心理学相关问题时更加精确、可靠和有洞察力。这对于提高心理健康服务的质量和效率、促进科学研究以及优化教育…

【Django】网上蛋糕商城后台-订单管理

概念 前面通过多篇文章以完全实现了用户在网上蛋糕商城平台上的所有功能和操作&#xff0c;从本文开始&#xff0c;实现网站的后台管理功能的介绍和操作。 导入静态资源 在static文件夹下&#xff0c;创建admin文件夹&#xff0c;在该文件夹下导入静态资源 在templates文件夹…

cs224w笔记(p5)

链接预测任务的两种类型&#xff1a;随机缺失边&#xff1b;随时间演化边。 第一种假设可以以蛋白质之间的交互作用举例&#xff0c;缺失的是研究者还没有发现的交互作用。 第二种假设可以以社交网络举例&#xff0c;随着时间流转&#xff0c;人们认识更多朋友。 基于相似性进…

zookeeper+kafka消息队列集群部署

一.消息队列 1、什么是消息队列 消息&#xff08;Message&#xff09;是指在应用间传送的数据。消息可以非常简单&#xff0c;比如只包含文本字符串&#xff0c;也可以更复杂&#xff0c;可能包含嵌入对象。 消息队列&#xff08;MessageQueue&#xff09;是一种在软件系统中用…

1、springboot3 vue3开发平台-后端-项目构建

文章目录 1. 创建项目1.1 前置环境条件1.2 项目创建 2. 模块配置2.1 父工程配置概述2.2 配置启动模块2.3 父工程相关依赖管理 1. 创建项目 1.1 前置环境条件 idea2023, jdk17 1.2 项目创建 创建父工程并删除不需要的文件目录&#xff1a; 右键父工程依次创建其他模块 最…

Windows 、Linux、MacOS 进程管理机制

本心、输入输出、结果 文章目录 Windows 、Linux、MacOS 进程管理机制前言Windows 进程管理机制Linux 进程管理macOS 进程管理内存不够了,几个操作系统如何处理Windows 、Linux、MacOS 进程管理机制 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 …

【Qt】窗口

文章目录 QMainWindow菜单栏工具栏状态栏浮动窗口对话框自定义对话框Qt内置对话框QMessageBox QMainWindow Qt中的主窗口以QMainWindow表示&#xff0c;其总体结构如下&#xff1a; 菜单栏 菜单栏MenuBar&#xff0c;可包含多个菜单Menu&#xff0c;每个菜单也可以包含多个菜…

03 Git的基本使用

第3章&#xff1a;Git的基本使用 一、创建版本仓库 一&#xff09;TortoiseGit ​ 选择项目地址&#xff0c;右键&#xff0c;创建版本库 ​ 初始化git init版本库 ​ 查看是否生成.git文件&#xff08;隐藏文件&#xff09; 二&#xff09;Git ​ 选择项目地址&#xff0c…

【LeetCode】相同的树

目录 一、题目二、解法完整代码 一、题目 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3],…

FastGPT 知识库搜索测试功能解析

目录 一、代码解析 1.1 searchTest.ts 1.2 controller.ts 本文接上一篇文章FastGPT 知识库搜索测试功能解析 对具体代码进行解析。 一、代码解析 FastGPT 知识库的搜索测试功能主要涉及两个文件&#xff0c;分别是 searchTest.ts 和 controller.ts 文件&#xff0c;下面分…

运行springboot项目报错:java: java.lang.NoSuchFieldError: members_field

项目场景&#xff1a; 在idea中运行从git上拉取的基于springboot框架的项目运行报错 问题描述 运行spingboot项目报错 java: java.lang.NoSuchFieldError: members_field原因分析&#xff1a; 检查你所使用的java版本&#xff08;我这里是在idea上运行的&#xff0c;可以很直…

ArkTS语言---基础知识

ArkTS是一种为构建高性能应用而设计的编程语言。ArkTS在继承TypeScript语法的基础上进行了优化&#xff0c;以提供更高的性能和开发效率。目前流行的编程语言TypeScript是在JavaScript基础上通过添加类型定义扩展而来的&#xff0c;而ArkTS则是TypeScript的进一步扩展。TypeScr…

DETR算法解读——Transformer在目标检测任务的首次应用

论文&#xff1a;End-to-End Object Detection with Transformers 作者&#xff1a;Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, Sergey Zagoruyko 机构&#xff1a;Facebook AI 链接&#xff1a;https://arxiv.org/abs/2005.12…

git教程, 命令行版

前言 git就是代码版本管理系统&#xff0c;很简单的作用就是每一次commit之后&#xff0c;修改文件都是跟上一次commit的仓库文件做对比&#xff0c;也可以调出历史的文件查看某次commit修改了什么东西 0环境准备&#xff1a; 安装git, 百度一下&#xff0c;然后打开cmd&…