前言
大家好呀!
我是你们好久不见的帅气可爱的小编
不知道你萌是不是时常面临着这样的问题
下定决心想要学习优化算法
奈何,资料太多太杂
更无人指路,根本无从学起
看书?
看论文??
看代码???
最后最后还是放开了手
不想再爱过头,成了痛。
哈哈哈玩笑就此打住
那么
就没有好办法学习优化算法了吗?
当然不是辣
今天就跟着小编步伐一起学习!
走呀!!!
先说两点
-
本文面向的是刚入门学习算法的小白。
-
本文介绍的是启发式算法的学习大纲,基于本公众号上的学习资料。
为什么先学启发式算法呢?因为启发式算法不需要运筹学的基础,只要具备一定的思维能力都能很快上手学习。
-
学习算法需要一定的编程基础,要能看懂C++/JAVA的代码。
当然,语言层面的知识也不需要太深,毕竟算法更多的是在于思想和架构。
基础篇
公众号介绍的启发式算法主要分为两类:邻域搜索类和群体仿生类。常用的也基本上是这两类。每一类都介绍了非常经典的一些算法,大家基础一定要好好打扎实。学习顺序参考如下。
邻域搜索类
群体仿生类
进阶篇
学习完了上面的基础篇,相信大家已经对邻域搜索和群体进化等有了一个清晰的认识,再接再厉,继续学习更复杂的算法框架。学习顺序参考如下。
邻域搜索类
-
干货 | 自适应大邻域搜索(Adaptive Large Neighborhood Search)入门到精通超详细解析-概念篇
-
代码 | 自适应大邻域搜索系列之(5) - ALNS_Iteration_Status和ALNS_Parameters的代码解析
群体仿生类
应用篇
主要介绍应用前面所学的框架,来求解各类问题,包括如何设计算子,如何创新算法框架等等。
小结
好了,以上的学习过程大概就是这样,小编差不多也是按照这个历程走过来的。最后再多说几句,启发式算法我觉得更注重是代码的能力吧。很多人学习启发式算法,光是纠结理论而不肯动手去写代码,就容易陷入牛角尖死胡同。在启发式的世界里,没有绝对这一说,很可能你这个算法框架对于一个问题效果很好,但是另一个问题效果却奇差,这都是有可能的。
还有,代码实现也是非常重要的,就拿VRPTW这类问题来说,同一份伪代码,实现同样的效果,不同人的算法运行时间可能就差几十倍甚至几百倍都有的。为什么呢?因为在搜索的过程很多人没有做去重优化。导致时间大幅度上升。这些都是需要靠代码和实践经验得出来的。所以希望大家千万不要眼高手低,小编之所以敢说这样的话,是写了无数个算法代码的心得体会,绝不是螃蟹生儿子--虾BB哦。最后的最后,祝大家学有所成。