目前大一安徽农业大学在读,在一个很棒的实验室做项目,寒假经过地狱选拔进入的,有一定编程能力,熟练计算机视觉图像处理,python,matlab,目前正在学习,机器学习(吴恩达,西瓜书),深度学习(吴恩达),数学建模(清风,司守奎)相关的知识,说来奇怪我是一个车辆工程专业的学生,不过热爱努力就好!“区区穿堂风,何以引山洪”,虚心学习,不断提高自己吧!
审题
MathorCup建模比赛试题是2022年4月14日8:00至4月18日9:00。题目有为A,B,C,D三个,我们只需选出一个来做。因为题目是实际问题,非常长,也不够清晰,因此我们应该给出足够的时间来读题。况且数模比赛的题目是面向各个专业的,因此有些题目中的名词我们不一定听过,这时候就要查找资料,想思路,因此这样下来,前前后后至少有半天时间了。最终我们选择的D题。基于聚类和迭代搜索的网络站址规划 。
论文摘要
随着信息技术的繁荣发展,通信的带宽不断增大,但基站能覆盖的范围却在逐渐减小,导致目前覆盖相同面积的区域,需要的基站数量增多。同时,基站和天线的种类也在随之增加,使得通信基站站址的选择变得更加复杂。本文我们拟通过研究弱覆盖区域的坐标和业务量,在覆盖高业务量和使用低成本的前提下建立新的基站,为基站站址的选择提供自身的意见
针对问题一:首先我们通过SPSS软件对数据进行描述性统计,发现我们要研究的数据量非常大且各弱覆盖点的业务量分布极不均匀,业务量小的弱覆盖点非常多,于是我们考虑去除噪点并使用K-means++算法进行聚类,将数据分为50块,以减小运算量。之后,我们抓住先覆盖业务量大的区域的原则,在最大业务量的弱覆盖点(假设为A)周围寻找基站站址,该站址不仅覆盖了A,同时需要满足覆盖的总业务量比周边各点作为基站时覆盖的多,然后我们剔除已经建立的基站和该基站覆盖的点,去寻找下一最大业务量对应的弱覆盖点,重复以上步骤,边搜索边剔除进行求解。最终,我们使用matlab对该迭代搜索过程进行实现,计算出共需要建立2622个微基站,3077个宏基站,总成本为33392,覆盖业务量也超过了90%的总业务量。新建基站坐标见附件。
针对问题二:问题二在问题一的基础上,改变了基站的覆盖形状,同时考虑基站的三个扇形过于复杂,于是我们一个一个进行扇形区域的放置,沿用问题一的方法,首先对第一问中建立的基站周围的点运用matlab筛选出来,接着让每一个点和中心连线均作为一个主方向,并计算每个点作为主方向的业务量,找出最大的业务量对应的主方向确定为第一个扇形放置的位置,并用扇形主方向线的斜率记录位置,接着剔除该扇形区域内的所有点,去找下一个主方向的位置,边剔除边搜索,最终得到了所有扇区的位置信息,最终的覆盖业务量仍然超过总业务量的90%。扇形放置信息见附录。
针对问题三:问题三要求我们在满足给定距离门限的条件下,选出总时间复杂度最低的聚类方法对弱覆盖点进行聚类。考虑到数据量很大,直接用不同方法聚类很难实现,我们先使用K-means++聚类、系统(层次)聚类、DBSCAN算法对其中两千个数据进行聚类,先初步判断哪个方法的总时间复杂度最低,接着我们查找文献,确立了两个评价总时间复杂度的指标,分别为运行时间和数据离散度,通过层次分析法对不同方法进行进一步选择。结果发现K-means++算法的运行时间最短,DBSCAN的运行时间会出现维度灾难,系统(层次)聚类的算法复杂度最大。AHP得到K-means++的得分最高,于是最终选择K-means++算法对所有的弱覆盖点进行聚类。
建模
因为这是第一次参加数学建模比赛,当看到今年的赛题后还是很激动的,题目A 是计算机视觉方面的,指纹识别,虽然我在实验室也做得这一块,但是到看了具体赛题后,发现这里面学问很大,自己还有很长的路要走,B 题是无人仓的搬运机器人调度问题,C题是自动泊车问题,当看完问题后其实想尝试一下的,因为目前在项目组做的正好是农田路径规划,但是在与队员讨论后最后还是保稳,第一次参加比赛选择了一个相对容易一些的D题。总的来说建模的过程很顺畅,应为针对问题一只有思路,然后后面用代码去实现这些思路就行,用到了数据重现画图用到了python,应为之前搞农田杂草的热力图做过,所以很顺畅,别的编程matlab和python都用到了。最后除了第二问还没有很好的把程序编好,其他都搞得差不多了,我们每天早上七点五十到晚上九点半图书馆熄灯一直在准备讨论算法思路论文,独立思考后要多和队友交流。虽然我们有分工,但分工并不是绝对的,各个部分我们都会参与。多交流能够减少自己陷入误区,也能够使大家统一进度,这样才不至于编程和写论文不知从何入手。这就是为什么说一个人可以跑得很快,但一群人可以走得更远!这个过程学习到了很多,编程能力也提高了很多,也收获了友谊,一个学长一个学姐都是全专业第一第二名,我也要努力了,上学期没有进实验室,学习态度不是很投入,绩点3.8多,全专业十几名,但是还是不够,要努力。
编程
有些人认为学会一门计算机语言就会建模了,也有些人认为建模主要还是思路,程序只是辅助。没错,编程就像工具,没有建模思路是编不了程序的。但工欲善其事,必先利其器。在很多问题上,编程也是必不可少的,尤其是解决一些数据分析的问题。
建模常用的编程语言或软件挺多,像Matlab、SPSS,python等。就拿Matlab举例,它的功能非常强的。比如画Bode图等专业性的图线,再比如simulink仿真,matlab卷积网络工具箱等这些建模可能都用不上。想都掌握是不切实际的,也是不需要的。学习编程最好的方法就是在用中学习。在项目中学习。熟能生巧。代码总的写了两三百行,以前可以说是没有这种锻炼的机会的,所以说比赛,项目能极大地提高自己。
因为5.1数学建模九点发布赛题,所以早上在这之前写了这篇总结!
剩下的三天,就需要各位各显神通,八仙过海了。
预祝我们顶峰相见!!