运筹学从何学起?如何快速入门精确式算法?

相信各位小伙伴在看到运筹学时,第一反应肯定是:

前面我们聊过,如何学习启发式算法。那么今天就聊聊如何学习精确式算法吧。

和启发式算法不同的是,精确式算法不仅需要数学基础,还需要运筹基础,代码基础等。

所以相对来说精确式算法相对会难一些。但是当你学完整个知识体系,会发现,其实精确式算法也差不多是那些套路。而且比启发式算法更加固定。学习顺序可参照以下:

运筹学基础

首先需要学习的是运筹学基础,包括整数规划、单纯型法、混合整数规划、建模思想、常见的运筹学问题以及算法等。

推荐书籍:Operations Research Applications and Algorithms, Wayne L. Winston(书籍下载请在后台留言【运筹学书籍】不包括【】即可下载)。可参考的公众号文章(可按顺序学习)。

基础部分:

  1. 运筹学教学|十分钟快速掌握单纯形法(附C++代码及算例)

  2. 运筹学教学|修正单纯形法(revised simplex algorithm)代码分享及详细注释

  3. 运筹学教学|运输问题代码分享(C++代码及详细注释)

  4. 运筹学教学 | 十分钟教你求解分配问题(assignment problem)

  5. 运筹学教学 | 十分钟快速掌握最短路算法(附C++代码及算例)

  6. 运筹学教学 | 十分钟快速掌握最大流算法(附C++代码及算例)

  7. 基础算法 | 关于图论中最小生成树(Minimum Spanning Tree)那些不可告人的秘密

进阶部分:

  1. 运筹学教学|动态规划例题分析(一)

  2. 干货|十分钟教你用动态规划算法解Travelling Salesman Problem(TSP)问题,附代码……

求解器Solver

有了基础知识以后,就可以做更深入的学习。首先要熟悉至少一款商业求解器的使用以便能方便快速地对数学模型进行检验,包括后面学习更高级的精确算法,也要用到求解器。可参考的文章如下:

  1. 干货 | 运筹学、数学规划、离散优化求解器大PK,总有一款适合你

  2. MOSEK,一个专注而卓越的优化求解器(一)

  3. 干货 | 关于数学规划求解器lp_solve 这里有份超全面超详细的教程,你离lpsolve高手只有一步之遥!

  4. 干货 | 嘿,双11快递,这里有份数学规划求解器SCIP超详细的使用教程,请你收下

  5. 干货 | cplex介绍、下载和安装以及java环境配置和API简单说明

  6. 干货 | JAVA调用cplex求解一个TSP模型详解

  7. 干货|十分钟快速掌握CPLEX求解VRPTW数学模型(附JAVA代码及CPLEX安装流程)

精确式算法-基础

有了运筹学的基础+求解器的熟悉使用,就可以开始精确式算法的学习了。这部分的算法包括最基础的branch and bound,column generation,branch and price,branch and cut,branch price and cut等等。可参考的文章如下:

  1. 干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇

  2. 干货 | 10分钟搞懂branch and bound算法的代码实现附带java代码

  3. 干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题

  4. 运筹学教学|分枝定界求解旅行商问题

  5. 干货 | 10分钟带你彻底了解Column Generation(列生成)算法的原理附java代码

  6. 运筹学教学|列生成(Column Generation)算法(附代码及详细注释)

  7. 干货 | 从下料问题看整数规划中的列生成方法(Python2.7调用gurobi进行求解,附代码)

  8. 干货 | 10分钟带你掌握branch and price(分支定价)算法超详细原理解析

  9. 干货 | 10分钟掌握branch and cut算法原理附带C++求解TSP问题代码

  10. 运筹学教学|快醒醒,你的熟人拉格朗日又来了!!

精确式算法-进阶

学习了各种算法的原理和部分实现代码后,可以进一步学习这些算法如何应用到具体问题中的,以及一些更高级的技术,参考的文章如下:

  1. 运筹学教学|分支定界法解带时间窗的车辆路径规划问题(附代码及详细注释)

  2. 干货 | 10分钟教你使用Column Generation求解VRPTW的线性松弛模型

  3. 干货 | VRPTW子问题ESPPRC的介绍及其求解算法的C++代码

  4. 干货 | 求解VRPTW松弛模型的Column Generation算法的JAVA代码分享

  5. 运筹学教学|Benders decomposition(一)技术介绍篇

  6. 运筹学教学|Benders decomposition (二)应用实例及算法实现(附源代码及详细的代码注释)

Additional

此部分当作扫盲和了解:

  1. 用单纯形法求解线性规划(linear programming)问题,速度到底有多快呢?

  2. 线性规划&整数规划求解速度PK

  3. 利用动态规划求解旅行商问题(Travelling Salesman Problem)时空复杂度分析以及相关实验验证

目前该提纲是基于公众号已有文章进行整理的,可能还会有很多关于这方面知识没有涉及。也随时欢迎大家指正。毕竟小编也只是做了一个暑假这方面的研究而已。

最后的最后,祝大家学有所成。

posted @ 2020-04-09 22:35  短短的路走走停停  阅读(2662)  评论(1编辑  收藏  举报