2019“华为杯”第十六届研究生数模竞赛F题一等奖7/2790方案

2019“华为杯”第十六届研究生数模竞赛F题一等奖7/2790方案


“华为杯”第十六届研究生数模竞赛最近颁奖也结束了,总结一下,(* /ω\*)防止以后不知道忘到哪里去了。

题目

F题:飞行器航迹快速规划.
论文.

问题1

给定2个场地的校正点数据,规划路径。需要满足最基本的水平,垂直限制高度,属于引导上手的问题。

方案

把限制条件和目标量化以后直接使用搜索算法搜索即可,这里会涉及到一个矫正点数量与总路程长度的trade off。

结果

在这里插入图片描述

场景一路线:A→50369237115338457555436→B
长度:104898

在这里插入图片描述

场景二路线:A→163114830930512345160929361292→B
长度:109342

问题2

在问题1的基础上增加了转弯半径的路线限制。

方案

在问题1当中,由于不考虑转弯半径的问题,因此路径规划只需知道出发点和目的地点的座标,即可轻易模拟出飞行轨迹,计算飞行的代价等相关数据,这个小题增加了对转弯半径的约束,使得飞行器不能在点与点直接以直线的轨迹飞行。第一个思路想到的是泛函,求导相关的思路,转弯半径问题就可以转化为限制导数的大小的问题,但是后来由于数学菜鸡有很多地方想不明白,并且算法实现起来非常有难度。
这个小题是我们队当时花费时间最久的一个小题,甚至我们是先完成的第三小题,在解决的第二小题。
本着写不来,就查论文的指导方针,找了很久论文,还真找到了一个非常切合问题的解决技术,Dubins曲线

在1957年, Lester Eli Dubins (1920–2010)
证明任何路径都可以由最大曲率和/或直线段组成(两点之间的路径必须存在)。
换句话说,连接两点的最短路径将通过最大曲率的曲的圆弧和直线段的构成。 后来Pontryagin的最大原则证明了相同的结果。

因此借助dubins的相关理论,转弯的地方出现的弧线要使距离最短,出现的弧线的曲率要最大,即最小的转弯半径的圆。因此可以不用考虑是否曲线是不是为圆弧或者曲率是否合适等问题,需要转弯的地方,直接用最大曲率的圆弧代替即可,这样问题就被简化为已知入射角和出射角,利用已知圆弧的一部分将角度转过来的问题。
在这里插入图片描述
dubins曲线研究的是二维平面的性质,我们利用投影的实现,将xyz空间上的一系列校正点,分别投影到xOy平面(底面)和zOy平面(后面),将三维空间的路径规划分解为两个正交的二维的平面的优化问题。分别计算出xOy平面和zOy平面的轨迹之后,统一x座标,取对应的y,z座标,即可合并为一条三维的路线。

结果

在这里插入图片描述

场景一路线:A→50369237233598561448485→B
长度:104935

在这里插入图片描述

场景二路线:A→163114830930512345160929361292→B
长度:109411

由于最小转弯半径为200m,图示的距离却在100000m的维度,因此拐角十分不明显,不过由于增加了这个限制,在第一问中原本规划的路径由于在某几个校正点之前十分极限(误差仅仅相差零点零几米),导致原本路径规划无法正常通过,从而重新规划了对第一小题来说的次优路径(误差相对宽松)

问题3

在第一问的基础上增加了校正成功的概率问题。

方案

这个小题我感觉我们的解法存在相当大的问题,非常之暴力(太菜了没办法╮(╯▽╰)╭)。我们这边采用了一种说起来非常高大上的方法来解决概率问题,蒙特卡洛方法求解概率。说穿了就是一遍又一遍的模拟,然后统计成功和不成功的次数来逼近真实的概率。这导致我们第三问的算法非常低效,因为前两问没有变量一个路径只要跑一次,第三问因为有概率,因此我们设定了一旦路径中包含含有概率的矫正点,就让他模拟跑k次,来算这条路径成功的概率( ′ 3`) 。

结果

在这里插入图片描述

场景一路线:A → 5784178023760733194450448485302612 → B
航迹长度为 108439 m,误差校正点 12,成功抵达终点概率 100%

在这里插入图片描述

场景一路线:A → 1693221001371941902962502437382442113212793013828799326 → B
航迹长度为 147271 m,误差校正点 19,成功抵达终点概率 64.01%

由于我们秉持成功抵达优先(其实是因为路径包含不稳定点的话要进行重复模拟太费时间╮(╯▽╰)╭),因为不稳定点的关系,饶了很多远路,但是场景一还是能绕出来,场景二因为点设置的非常极限,必须要经过不稳定点(主办方应该也不想我们可以完全绕过吧,不然就退化成减少了校正点的第一问了),导致最后成功率只有65%。这个已经比第一问的时候的场景二的路线多绕了将近4w米了,可以看到路线十分曲折╥﹏╥

写在最后

本次比赛我是负责代码的构建与数值解的求解过程,(这里说的是我求解的思路,并且过去有点久了,有可能和文章中的描述有些许的出入)另外两位队友分别负责问题的数学公式化和文章的写作。感觉数模分工明确还是挺重要的(有全能大佬的除外),不然一个人肯定是来不及的。
顺便说一句,我们比赛几天做下来,竟然没有通宵(≧∇≦)ノ,简直不敢相信,有可能太菜,有很多要注意的点没有注意到吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章