这次做一个复盘贴,刚刚参加完这次的华为杯数学建模,由于是2020级研究生所以允许跨校组队,所以选择的队友是两个外校的,沟通方面第一天至第三天每天在微信使用语音通话汇报一次进度,第四天至第五天腾讯会议共享桌面进行论文修改。

比赛时间 2020年9月17日8:00 -- 2020年9月21日12:00

第一天

9月17日上午8:00 比赛试题解压密码分发

比赛试题会在开赛前一天分发,但是解压密码并不会即时分发,而是在等到第二天早上八点。试题的信息是百度网盘链接,推荐提前下载好,不然下载需要较长时间。队友两个人都在第一二节有课,所以讨论时间推迟到了中午十一点半,题目信息如下:

A题:华为题_芯片相噪算法设计

B题:汽油辛烷值建模

C题:面向康复工程的脑电信号分析和判别模型

D题:无人机集群协同对抗

E题:能见度估计与预测

F题:飞行器质心平衡供油策略优化

6个题目都看了并且思考过,在第一遍看完所有的支持材料后,考虑到队友参赛经验较少,所以初步选定的题目是B题,D题,E题。下面对各个题目说一下自己的理解:

A题华为题确实很值得,基础概念很多,而且理解起来也需要较长时间,第一时间觉得较难,不太可做。

B题感觉就是一道大数据题目,和今年的本科生国赛题目C题类似,也是使用主成成分分析得出10个主成分,然后数据清洗求解之类的。

C题脑电工程题目,题目中说了有卷积神经网络的知识,但是看不懂,并且未使用神经网络做过类似这方面的内容,所以作罢。

D题在知网上搜了些论文后,觉得方法很多,很全面,可以做,殊不知做的过程中极其自闭,接下来会详谈。

E题也是深度学习方法,但是专业领域不太相关,所以也选择了放弃。

F题个人觉得是一道物理题,质心求解问题,联系到供油策略。物理题感觉极其缺少空气动力学,相关物理知识的支持,所以也选择了放弃。

十一点开始和队友讨论,在和队友说了自己的意见后,队友比较信任我所以也决定选择D题,殊不知这就是噩梦的开始,接下来四天都被这个问题想的头疼。

中午十二点半吃完饭,回到寝室开始思考问题的解法。

在知网上找了几篇论文后,发现在无人机拦截方面,对于无人机群的飞行轨迹确定普遍倾向于使用群体智能算法,但是第一,二,三问对于蓝色方的突防飞机都是一架,而红色方的无人机群都是五架,所以对于蓝色方突围的策略陷入了沉思。于是开始整理题目中的条件,希望找出一些思考突破点。

在当天下午16:00左右,从第二问中得到了启发。第一问求取的是蓝色方突围的最优策略,第二问询问的是蓝色方突围成功的最短时间,既然如此,何不将最短时间作为突围的最优策略,同时为了确保蓝色方飞行器的突围时间最短,于是设定在第一问中,蓝色方飞行器的飞行轨迹只会进行直线飞行,所以会出现无法突围的区域和必定会突围的区域,这样第一问的求解就化简成了一个单纯的物理问题,只需列几个方程即可求解。当天晚上22:00讨论了思路,得到队友的一致肯定后,决定开始进行编程求解,同时确定明年的目标,完善第一问以及开始查阅第二问,第一天的任务就此完成。

第二天

9月18日上午8:00 前往校医院体检 由于种种自身原因,11:00回到寝室开始编程求解,第一问的求解代码如下:

Problem1.cpp
//问题一求解 角度angle是与水平面的角度 输出结果大于L纵深说明无法突围 小于则说明可以
#include <iostream>
#include <math.h>
using namespace std;
//定义圆周率常数PI
const double PI = 3.1415926;
//垂直高度距离
const int Height_ver = 20000;
//无人机A的飞行速度
const int Speed_A = 200;
//无人机B的飞行速度
const int Speed_B = 250;
int main() {double limit_distance = INFINITY;//垂直飞行的时间 水平飞行的距离double Time_ver,Distance_hor;double angle = 0.0;for(angle = 1.0;angle <= 89.0; angle += 1.0) {Time_ver = Height_ver / (sin(angle * PI/ 180) * Speed_A);Distance_hor = Time_ver * Speed_A * cos(angle * PI/ 180);//cout<<Time_ver << " " << Distance_hor << " "<< endl;//B飞行器飞行的平行距离cout<<Distance_hor + Time_ver * Speed_B << endl;limit_distance = min(limit_distance, Distance_hor + Time_ver * Speed_B);}//cout<<limit_distance << endl;return 0;
}

至此第一问求解完成,开始思考第二问。两个队友今天满课,所以白天差不多一直是自己在孤军奋战,下面贴一下第二问的思考过程:

晚上10:00 和队友再次开始讨论,对于第二问的解法发表意见,同时布置第二天的任务,但是当时队友给出的反馈很小,基本上觉得听不懂这一问的解法,在半懵半懂的过程中,就定下了第二问的基本解题步骤。

第三天

9月19日 上午8:00

开始求解第二问,第二问求解过程中做了以下几个假设:

首先是划分上下半区,红色方的无人机群有两个,两个分别只追踪其所属半区中的蓝色方飞行器,如果在追踪过程中,蓝色方的飞行器脱离了半区的范围,则红色方的无人机会暂停在原地,停止行动。初始情况,在蓝色方飞机未飞到极限范围之前,红色方无人机不进行任何的行动,而当其进入之后,红色方才开始进行行动。

原因在于:因为在蓝色方的飞机到达第一问所求的极限处距离之前,红色方的飞机无论如何都可以根据其所处半区采取相应的拦截策略,而且假设蓝色方在任何地点开始进行对于红色方无人机拦截的操作,那么在某一时刻当其成功绕过之后,其最终的飞机轨迹为了使得时间最短,依旧需要进行直线飞行。所以无论其在整个区域当中的何处进行飞行操作,不如将其直接设置成在极限处开始进行飞行操作。

其次,红色方无人机群的初始位置,为各个半区的中点,即CD中的两个四分之一点。这样的目的是红方无人机在各自半区的拦截过程中,相较于其他的点具有更加均衡的、快速的反应时间,同时对于飞行器B只飞行于中间横线的情况,也会比其他的位置部分具有更好的表现。

第二问的求解过程中遇到了三个问题:

第一 蓝色方飞行器的飞行轨迹如何确定。

解决:查找论文,了解到可以使用卷积神经网络对于飞行轨迹进行预测,既然如此,那就先确定红色方的无人机群的飞行轨迹,然后在通过网络训练之后,得到能够准确预测飞行轨迹的卷积神经网路,之后运用于蓝色方飞行器的飞行轨迹确定,至此问题得到解决。

第二 红色方无人机群的飞行轨迹如何确定。

解决:这里可以使用群体智能算法,有三种,蚁群算法,蜂群算法,粒子群算法。这里在综合考虑之后,选择使用粒子群算法,该算法通过思考整体和部分的最优解,然后通过个体最优解影响整体最优解,在通过整体最优解修正个体最优解,直至到达迭代结束条件。这里的目标就是拦截蓝色方的飞行器,在飞行过程中只需要朝着目标进行最接近的飞行方式就可以了。

第三 蓝色方飞行器和红色方无人机群在进行转弯的时候如何计算时间。

解决:前面的题目中设定了蓝色方飞行器的转弯半径和红色方无人机群的转弯半径,这里在转弯的时候只需要考虑转弯的偏角即可。同时由于理想情况下,思考计算该问题相较于实际情况会存在一定的偏差数值,所以决定在后续的计算过程中引入影响因子解决这一问题。

第二问求解之后得到的飞行轨迹是如下图所示的:

可能不太规范,但是是一个波峰值不断收敛的简协振动,通过在上下半区不断的穿梭,使得红色方的无人机不断的丢失目标从而在下一次再次回到该区域的时候,原本所属这一半区的无人机群无法追踪上。

第二问的求解过程绘制的图如下:

近似的理想追踪情况是这样的一幅图,通过求解这样的图中的变量,最后得出Mmin的值。其实变量包括两个,角度和角度,编程求解,代码如下:

Problem2.cpp
//问题二的求解//Mmin = 54623.8m 54.623km#include <iostream>#include <math.h>using namespace std;//圆周率常数const double PI = 3.1415926;//无人机A的拦截半径const double Interception_radius_of_A = 3;//极限距离的最小值。距离CD轴//const double Min_limit_distance = 25352.9;//无人机A的飞行速度const int Speed_A = 200;//无人机B的飞行速度const int Speed_B = 250;int main() {//通道宽度M的临界最大值double M_max = 0.0;//暂定为未知量double Mmin = 0.0;//水平夹角度数1for(double angle1 = 0.1;angle1 <= 89.1; angle1 += 0.1) {//水平夹角度数2for(double angle2 = 0.1;angle2 <= 89.1 ;angle2 += 0.1) {//转弯过程时间double Time_of_Turn = (2 * PI * (1.0 / 4))/ Speed_B;//下降过程时间double Time_of_Fall = (300.0 / tan(angle2 * PI / 180.0));//爬升至最高点时间double Time_of_Up_for_Top = (Mmin / 2) / sin(angle1 * PI / 180.0);//不等式左边double Left_of_unequality = PI + 300.0 / (Speed_B * cos(angle2 * PI / 180.0));//不等式右边double Right_of_unequality = (1.0 / 0.09732 * sin((angle2 * PI) / 180.0) - 1.0/(1.21 * Speed_B * sin((angle1 * PI) / 180.0)));//取不等式的最大值 作为能恰好突破拦截的临界值M_max = max(M_max, Left_of_unequality / Right_of_unequality);}}//显示最大值cout<<M_max<<endl;return 0;}

求解得出答案,这里提一下之前提到的影响因子,这个参数根据问题二和问题三的实际情况会再进行改变,具体修正是因为无人机群如果时时刻刻的飞行轨迹都是朝着B的最短距离,那么应该会在B上升的过程中有转弯行为,为了克服这种情况,简化模型的计算,方便求解,所以使用来计算不等式,求的结果。

晚上10:00 和队友开会,讨论这一问如何求解并且如何描述论文,11:00睡觉,准备求解第三问。

第四天

9月20日,上午8:00,开始思考第三问。第三问其实和第二问的求解方法类似,包括红色方无人机群的飞行轨迹,蓝色方飞行器的飞行策略,上下半区的划分,红色方的具体行动时间等。求解的图形也会类似,这次两波无人机群的红色方,半区再划分就是在已有半区的前提下划分出前后,在前后的情况下再进行具体的求解。这一问求解的是红色方的最佳拦截策略,其实可以进行一个思维的转换,当M大于Mmax,红色方一定能拦截成功,当M小于Mmax,蓝色方一定能突防成功,这样转换之后,求解的还是蓝色方的突防策略。只是不知道这样算不算求解这一问,感觉从这一步的思考开始,就开始偏了,思绪开始理不清楚了,就开始晕了。然后求解的过程和第二问基本相同,只是对于影响因子的大小值改变了一下,其他的没有任何的变化,反正挺裂开的.....

从这一问开始,论文基本开始乱写了,另外两名队友表示这思考太难了,不太懂我为什么这么想,但是还是根据这么硬写了这一部分,这一部分的论文写的也很少,基本上没有前面的论文逻辑清楚。

第三问求解代码:

Problem3.cpp
//问题三的求解
//Mmax = 83350.3m 83.35km
#include <iostream>
#include <math.h>
using namespace std;
//圆周率常数
const double PI = 3.1415926;
//无人机A的拦截半径
const double Interception_radius_of_A = 3;
//极限距离的最小值。距离CD轴
//const double Min_limit_distance = 25352.9;
//无人机A的飞行速度
const int Speed_A = 200;
//无人机B的飞行速度
const int Speed_B = 250;
int main() {//通道宽度M的临界最大值double M_max = 0.0;//暂定为未知量double Mmin = 0.0;//水平夹角度数1for(double angle1 = 0.1;angle1 <= 89.1; angle1 += 0.1) {//水平夹角度数2for(double angle2 = 0.1;angle2 <= 89.1 ;angle2 += 0.1) {//转弯过程时间double Time_of_Turn = (2 * PI * (1.0 / 4))/ Speed_B;//下降过程时间double Time_of_Fall = (300.0 / tan(angle2 * PI / 180.0));//爬升至最高点时间double Time_of_Up_for_Top = (Mmin / 2) / sin(angle1 * PI / 180.0);//不等式左边double Left_of_unequality = PI + 300.0 / (Speed_B * cos(angle2 * PI / 180.0));//不等式右边double Right_of_unequality = (1.0 / 0.09987 * sin((angle2 * PI) / 180.0) - 1.0/(0.87 * Speed_B * sin((angle1 * PI) / 180.0)));//取不等式的最大值 作为能恰好突破拦截的临界值M_max = max(M_max, Left_of_unequality / Right_of_unequality);}}//显示最大值cout<<M_max<<endl;return 0;
}

晚上18:00,开始求解第四问,队友开始写第三问的部分,之前完善了第一问和第二问的论述部分。

第四问感觉蓝色方的飞行轨迹,终于不再需要之前的了,也可以使用群体智能算法,有点开始,对比了蜂群和蚁群之后,决定使用蜂群。在蜂群算法中对应是这样对应的:

使用改进的蜂群算法。其中定义侦察机和目标机两个概念。侦察机的作用和定位等同于蜂群算法中的侦查蜂,在本问中,其作用在于侦查红色方无人机群的目前时刻的飞行速度和飞行位置,为目标机吸引其即将进去或已经进入的半区中红色方无人机群,为目标机开辟出相对于快捷的突防通道,使得目标机能够成功的完成突围任务。必要的时候,可以以自身被拦截作为相应的代价,保证目标机可以完成突围任务。目标机的目标为尽可能的躲避红色方无人机群的追踪,成功的完成突防任务。

由于队友不懂,自己也是第一次接触这个算法,所以看了概念之后,又看了看别人的代码,觉得,嗯,老倒霉蛋了,变量好多,变化情况好频繁,而且在代入这一问的算法中,蜜蜂的种类减少了,由于侦察机最后需要的是掩护目标机,所以在中途中也存在被拦截,从而导致目标机能突围的数目减少的情况。

第四问19:00开始查阅资料,22:00开始尝试编程,第五天上午6:00也无法完成期待,这期间越发的急躁,厌烦,心态开始崩塌,思考开始停滞,挺难受的。而且时隔一年多再次熬夜,身体还是有点吃不消,当时没什么反应,中午截止后吃完饭就开始睡觉了,当然这都是后话了。

第五天

9月21日 上午8:00 放弃第四问,和队友简单叙述了怎么写第四问之后,开始补充队友的之前缺的模型假设,模型评价与推广,参考文献部分,最终,在上午11:55,完成论文,上传MD5码,结束了这次的建模比赛。

总结:

这篇博文的本意就是想记录一下这次比赛的过程,队友两个一个第一次参加建模比赛,一个不懂算法和模型,只能写论文和查资料,整体下来建模和编程的任务都在我这里,感觉全程都有点压得喘不过气的感觉。同时第一天的选题有问题,选了一个看起来好做但是最后做到自闭的题目,感觉自己判定失误,直接把队友带进了沟中,自己要负主要责任。这次比赛就当积累经验了,重在参与,明年争取再来,加油,冲。

2020年华为杯第十七届中国研究生数学建模竞赛---回顾记录相关推荐

  1. 2020年“华为杯”第十七届中国研究生数学建模竞赛B题心得(满纸荒唐言,一把辛酸泪)

    满纸荒唐言,一把辛酸泪. 都云作者痴,谁解其中味? --纪念2016-2020所有的数学建模论文 古人说得好:"书到用时方恨少,事非经过不知难".做数学建模的我:"方法用 ...

  2. 华为杯数学建模2020什么时候出结果_关于组织参加“华为杯”第十七届中国研究生数学建模竞赛通知...

    亲爱的NNUers 2020年大家期待已久的 "华为杯"第十七届中国研究生数学建模竞赛 重磅来袭 遇见"华为杯" "华为杯"第十七届中国研究 ...

  3. “华为杯”第十七届中国研究生 数学建模竞赛-【华为杯】D题:无人机集群协同对抗(附优秀论文及python代码实现)

    目录 摘 要: 1 问题重述 1.1 问题背景 1.2.1 问题一:逃逸区与最优突防策略求解

  4. “华为杯”第十七届中国研究生 数学建模竞赛-【华为杯】B题:降低汽油精制过程中的辛烷值损失模型(附优秀论文)

    目录 摘 要: 一.问题重述 二.基本假设 三.本题研究流程 四.数据处理过程与分析

  5. “华为杯”第十七届中国研究生 数学建模竞赛-【华为杯】F题:质心平衡供油策略设计:贪心和搜索的结合(附优秀论文和代码实现)

    目录 摘 要: 1.问题重述 1.1 背景介绍与问题描述 1.2 问题提出 2.模型假设 3.

  6. “中国光谷·华为杯”第十九届中国研究生数学建模竞赛开赛公告

    各培养单位.各参赛队: 为了保证2022年"中国光谷·华为杯"第十九届中国研究生数学建模竞赛顺利举行,现将竞赛开赛的相关事项通知如下: 一.时间节点 1.加密题目开始下载时间: 1 ...

  7. 2020年第十七届中国研究生数学建模竞赛B题 -解题思路

    题目B:汽油辛烷值建模 随着当今计算机与各类程序软件的开发使用,化学计量学不断发展,人们可以在近红外光谱区内采集大量的数据,并使用各种有效的统计方法,把近红外光谱技术应用于定性与定量.近红外光谱为分子 ...

  8. 2020年第十七届中国研究生数学建模竞赛C题 面向康复工程的脑信号分析和判别建模

    面向康复工程的脑电信号分析和判别模型 背景和意义 大脑是人体中高级神经活动的中枢,拥有着数以亿计的神经元,并通过相互连接来传递和处理人体信息.脑电信号按其产生的方式可分为诱发脑电信号和自发脑电信号. ...

  9. 2020年第十七届中国研究生数学建模竞赛B题 汽油辛烷值建模

    降低汽油精制过程中的辛烷值损失模型 一.背景 汽油是小型车辆的主要燃料,汽油燃烧产生的尾气排放对大气环境有重要影响.为此,世界各国都制定了日益严格的汽油质量标准(见下表).汽油清洁化重点是降低汽油中的 ...

最新文章

  1. dropbear环境搭建
  2. html region 折叠,js代码折叠的方法//#region 代码 //#endregion
  3. hana studio版本和hana版本的区别
  4. 计算机网络(二十五)-IP数据报格式
  5. 【C++基础学习】二维数组的动态分配及参数传递
  6. 第 37 章 ACOS - CLI
  7. Linux---单例模式
  8. STM32CubeMX使用(一)之实现点灯点灯
  9. java人脸识别开源算法,就是这么简单
  10. Macbook 黑白打印pdf设置
  11. stata绘制地理分布图的spmap命令
  12. 本地iis部署之后网页无法打开
  13. GoDaddy域名过户PUSH攻略
  14. FRM-92050:连接服务器失败
  15. 基于tensorflow、CNN网络识别花卉的种类(图像识别)
  16. [转贴]去除迅雷广告和弹出广告窗口
  17. 基于selenium+scrapy爬取复仇者联盟4豆瓣影评数据
  18. 惹恼程序员的十件事(转)
  19. 干货 | 携程酒店搜索引擎AWS上云实践
  20. C# WEB OFFICE 在綫編輯 Excel 等

热门文章

  1. Java去掉标点符号的方法
  2. 定义一个动物类java_Java问题利用接口继承完成对生物、动物、人三个接口的定义,其中生物接口定义呼吸抽象方法,动物接口定义了吃饭和睡觉两个抽...
  3. Dashboard是什么意思 Dashboard怎么用?
  4. Token的基本介绍
  5. 硬核探厂|数字原生中压真空断路器生产揭秘
  6. 【软件使用】去除图片上一些文字之类的:
  7. (玩具箱)unity游戏——maze(简介,代码,链接)
  8. Modern Robotics串联机器人常见的奇异构型
  9. 好系统教你如何更改Windows 10中的用户帐户控制(UAC)设置
  10. BugkuCTF~Misc~WriteUp