想学习启发式优化算法,不知从何学起?

前言

大家好呀!

我是你们好久不见的帅气可爱的小编

不知道你萌是不是时常面临着这样的问题

下定决心想要学习优化算法

奈何,资料太多太杂

更无人指路,根本无从学起

看书?

看论文??

看代码???

最后最后还是放开了手

不想再爱过头,成了痛。

哈哈哈玩笑就此打住

那么

就没有好办法学习优化算法了吗?

当然不是辣

今天就跟着小编步伐一起学习!

走呀!!!

先说两点

  1. 本文面向的是刚入门学习算法的小白。

  2. 本文介绍的是启发式算法的学习大纲,基于本公众号上的学习资料。

    为什么先学启发式算法呢?因为启发式算法不需要运筹学的基础,只要具备一定的思维能力都能很快上手学习。

  3. 学习算法需要一定的编程基础,要能看懂C++/JAVA的代码。

    当然,语言层面的知识也不需要太深,毕竟算法更多的是在于思想和架构。

基础篇

公众号介绍的启发式算法主要分为两类:邻域搜索类和群体仿生类。常用的也基本上是这两类。每一类都介绍了非常经典的一些算法,大家基础一定要好好打扎实。学习顺序参考如下。

邻域搜索类

  1. 干货|迭代局部搜索算法(Iterated local search)探幽(附C++代码及注释)

  2. 干货 | 用模拟退火(SA, Simulated Annealing)算法解决旅行商问题

  3. 干货 | 变邻域搜索算法(Variable Neighborhood Search,VNS)超详细一看就懂

  4. 干货 | 变邻域搜索算法(VNS)求解TSP(附C++详细代码及注释)

  5. 干货 | 变邻域搜索算法解决0-1背包问题(Knapsack Problem)代码实例

群体仿生类

  1. 干货 | 遗传算法(Genetic Algorithm) (附代码及注释)

  2. 干货 | 遗传算法(Genetic Algorithm) Java 详细代码及注释

  3. 干货 | 嘿!你和遗传算法的距离也许只差这一文(附C++代码和详细代码注释)

  4. 干货|十分钟快速get蚁群算法(附代码)

  5. 干货 | 【算法】粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解

  6. 干货 | 人工鱼群算法 超详细解析附JAVA代码

image

进阶篇

学习完了上面的基础篇,相信大家已经对邻域搜索和群体进化等有了一个清晰的认识,再接再厉,继续学习更复杂的算法框架。学习顺序参考如下。

邻域搜索类

  1. 干货|十分钟快速复习禁忌搜索(c++版)

  2. 干货 | 到底是什么算法,能让人们如此绝望?

  3. 干货 | 自适应大邻域搜索(Adaptive Large Neighborhood Search)入门到精通超详细解析-概念篇

  4. 代码 | 自适应大邻域搜索系列之(1) - 使用ALNS代码框架求解TSP问题

  5. 代码 | 自适应大邻域搜索系列之(2) - ALNS算法主逻辑结构解析

  6. 代码 | 自适应大邻域搜索系列之(3) - Destroy和Repair方法代码实现解析

  7. 代码 | 自适应大邻域搜索系列之(4) - Solution定义和管理的代码实现解析

  8. 代码 | 自适应大邻域搜索系列之(5) - ALNS_Iteration_Status和ALNS_Parameters的代码解析

  9. 代码 | 自适应大邻域搜索系列之(6) - 判断接受准则SimulatedAnnealing的代码解析

  10. 代码 | 自适应大邻域搜索系列之(7) - 局部搜索LocalSearch的代码解

  11. 自适应大邻域 | 用ALNS框架求解一个TSP问题 - 代码详解

  12. Greedy Randomized Adaptive Search 算法超详细解析,附代码实现TSP问题求解

群体仿生类

  1. 基于MPI的并行遗传算法

image

应用篇

主要介绍应用前面所学的框架,来求解各类问题,包括如何设计算子,如何创新算法框架等等。

  1. 干货 | 十分钟掌握禁忌搜索算法求解带时间窗的车辆路径问题(附C++代码和详细代码注释)

  2. 论文拾萃 | 基于树表示法的变邻域搜索算法求解考虑后进先出的取派货旅行商问题(附C++代码和详细代码注释)

  3. 干货|变邻域搜索(VNS)算法求解Max-Mean Dispersion Problem(附代码及详细注释)

  4. 遗传算法求解混合流水车间调度问题(附C++代码)

image

小结

好了,以上的学习过程大概就是这样,小编差不多也是按照这个历程走过来的。最后再多说几句,启发式算法我觉得更注重是代码的能力吧。很多人学习启发式算法,光是纠结理论而不肯动手去写代码,就容易陷入牛角尖死胡同。在启发式的世界里,没有绝对这一说,很可能你这个算法框架对于一个问题效果很好,但是另一个问题效果却奇差,这都是有可能的。

还有,代码实现也是非常重要的,就拿VRPTW这类问题来说,同一份伪代码,实现同样的效果,不同人的算法运行时间可能就差几十倍甚至几百倍都有的。为什么呢?因为在搜索的过程很多人没有做去重优化。导致时间大幅度上升。这些都是需要靠代码和实践经验得出来的。所以希望大家千万不要眼高手低,小编之所以敢说这样的话,是写了无数个算法代码的心得体会,绝不是螃蟹生儿子--虾BB哦。最后的最后,祝大家学有所成。

原文地址:https://www.cnblogs.com/dengfaheng/p/12670132.html