找回密码
 立即注册
楼主: KaaPexei

有一些超级难的算法比如遗传算法,蚁群算法,看了数学建模国赛感觉好难写,那些人怎么写出来的?

[复制链接]
发表于 2021-9-19 17:02 | 显示全部楼层
遗传算法也叫难吗...
发表于 2021-9-19 17:10 | 显示全部楼层
有一次边馥萍老师来我们学校讲过一次,说过竞赛重点在于“建模”。也就是说重要的在于挖掘问题背后的原理,而不是算法本身。而使用什么深度学习,神经网络等不能揭示本质的算法是不被推荐的。
发表于 2021-9-19 17:13 | 显示全部楼层
刚开始接触启发式算法的时候,就是从遗传算法开始的
那时候老师让我看了一个月的书籍资料
然后依据自己的理解用c++又撸了一个月
修修改改才把遗传攻破
后来接触到更多的启发式算法
套路其实差不多,有了遗传基础,其他的就很容易上手了
曾经有个哥们找我写蚁群求解问题
我一周左右就写好了,当然在这之前我没接触过蚁群
总之,想要入坑,就得花时间扎扎实实搞懂一个点
再由点及面,就很得心应手了

现在自己写的算法比较少了
要么用之前自己写好的框架
要么找一个算法,自己修修改改
也知道算法瓶颈在哪里,改起来也比较容易省时间
我正打算慢慢把一些基本的算法框架整理做成资源分享给我公众号读者
也算是对自己专业能力的鞭策吧

Python—短信轰炸机)
发表于 2021-9-19 17:22 | 显示全部楼层
那不是国赛评委巨恶心的东西吗…………

学起来也不是很难,也别啥都乱套用的那种
发表于 2021-9-19 17:30 | 显示全部楼层
其实这些算法都是看着难,当深入了解一下过程以后,自己理解一遍后就可以明白原理了。
明白原理之后再自己尝试去完成一个粗糙版本的程序,就可以理解得更加深刻,也可以明白坑在哪里,不过这可能要花一个星期的时间。听起来很长,但是一旦投入进去,其实也就是短短几天的时间,收获的却是很多知识。
一旦自己完成过一个完整的算法程序,之后做东西的时候就明白一个问题如何和你的程序对接起来。因为是你亲手写出来的,再自然不过知道要怎么去增加接口去修改程序。
不过大多数人都卡在第一步,一看到很难,就直接放弃,连尝试都不肯尝试,也不思考这个算法的原理,再以谣传谣的说很难,就越来越多的人不敢尝试。
我当初便是鼓起勇气去理解一下遗传算法,结果发现原来原理很简单,就是一个循环、一个数组的事,只不过我们把它赋予了一种很高端的“遗传进化”的概念而已,本质上仍然是一种随机采点的算法,只不过可以让好的结果更好而已。
为了能够让更多的人理解,我当初也写了一个博客用来解释遗传算法,并且一步一步的用MATLAB和Python进行实现,每一步的过程都在博客上写有,包括我当初是如何思考这一步,为什么要增加一个变量,如何设置迭代循环。
并且对当时网上存在的遗传算法的结构进行改进,删去了一些故弄玄虚、对于新手没有必要的步骤,令整个算法的整体更加容易理解。
并且用了一个简单的求函数极值与找最短路径的例子用来对我写的程序进行运用,应该算得上是深入浅出了(自认为)。
CSDN博客地址:https://blog.csdn.net/Hanpu_Liang/article/details/78169525
知乎文章地址:https://zhuanlan.zhihu.com/p/29939914
两年前知乎的文章机制还不完全,所以遗传算法我只放了第一章的介绍部分,后面的代码都在CSDN上,所以可以的话还尽量移步去CSDN,有更清楚的公式描述。
最后祝题主好好学习天天向上。
发表于 2021-9-19 17:35 | 显示全部楼层
初次接触比较困难,看懂之后模仿写,之后再模仿写更高难度的仿生学算法等概率寻优算法,之后会发现这些算法并不困难。但是这个模仿思考的时间会持续一年多
国赛并不推荐使用智能算法
发表于 2021-9-19 17:42 | 显示全部楼层
熟能生巧吧,SO下的演化计算方法基本都是一个套路,大多数证明都没,练练几个经典题就能记住了。
16届研究生建模的一道干扰路径规划我看完题立马就整理好目标函数,选了个最喜的DE直接从0开始撸的,一天就写完了。不过算法设计的太烂,DE里面还嵌套了一个DE,,导致四台工作站一天才跑完一问。。。。。
最后让一个师弟一个师妹整理完就交了,最后才得了个二等
实际上挺惭愧,当时博二,听说这个可以上海落户加分就去考了,有些人还靠着加分卖钱,哎亏我通宵了一夜啥也没捞着(不过因为我个人感觉我那个模型确实很新,所以在半年后改了篇SCI出来,也算是一点补偿)
总之积累是肯定有用的,这些算法不需要很强的技巧,甚至看完原理就能上手
发表于 2021-9-19 17:51 | 显示全部楼层
这就是为啥国赛美赛组队会推荐找个编程的队友。几年前我也参加过几场,队伍配置永远是三人分别做算法,编程,撰写
发表于 2021-9-19 17:56 | 显示全部楼层
都是学习别人的代码然后形成自己用的模板
既然能复制,为什么要自己写,不会抄的程序员不是好程序员
这是我学习蚁群算法时写的,欢迎围观
零独叶:蚁群算法(含MATLAB代码)
发表于 2021-9-19 18:03 | 显示全部楼层
如果你仅仅是拿来用这个算法,那有很多库可以供你调用,你也没必要一步步实现这个算法,根据api文档的说明,拿来使用就可以了。
如果你想从零开始构建一个算法,那就得分几步来,并不是一蹴而就的:
1.充实自己的高等数学、概率与统计等知识;
2.你要用什么语言来实现就要有扎实的语言功底;
3.搞清楚你要实现算法的原理,实现细节;
4.手动编写代码,不断debug;
5.不断去用自己的算法解决问题,发现问题,再去优化。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 15:50 , Processed in 0.092042 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表