运筹优化学习资料整理——从小白到入坑
之前写过一篇文章,简单介绍了运筹优化算法工程师的从业情况和能力要求。最近有不少管理科学与工程(物流与供应链,工业工程)、交通运输工程、控制科学与工程(系统工程等)、应用数学(系统科学、统计、运筹)等学科的同学问我小白该怎么入坑,成长路径怎么规划。这里简单分享一下我的学习资料,供大家参考。根据上篇文章提到的四方面能力,我整理了适合新手入坑的相关资源。分别涉及:1)启发式算法,2)精确解算法,3)机器学习算法入门,4)编程与计算机基础。供大家参考~
启发式算法
首先,推荐两本适合新手小白的书:1)matlab智能算法30个案例分析,2)现代优化技术。这两本书比较简单,且注重应用和算法的实现。
然后,安利一下coursera上离散优化建模的网课,那个是香港中文大学和墨尔本大学合作的课程,通俗易懂非常适合小白新手,推荐重点关注从局部搜索到大邻域搜索那几节视频。
最后,推荐两个微信公众号1)华科秦虎老师团队运作的“数据魔术师”,2)业界大佬汇集的“运筹OR帷幄”,这两个公众号都有很多相关的学习资源,涉及启发式算法、精确解算法、机器学习算法等。
其中,数据魔术师启发式算法相关的代码比较全面,由浅入深很适合新手学习。推荐重点关注VRPTW相关的例子,重点参考一下,约束怎么处理,邻域算子怎么设计等。公众号启发式算法整理链接如下:
“运筹OR帷幄”有各路业界学界的运筹大佬不定期分享经验,B站有相关的直播录播,这里扔出链接如下:
精确解算法
这部分内容,其实就是大学与研究生的运筹学课程,基础理论方面主要涉及整数规划、凸优化、非线性规划等。相关教材很多,这里推荐几本适合新手的中文经典教材:1)孙小玲老师的《整数规划》,2)Stephen Boyd(王书宁译)的《凸优化》,3)清华大学肖勇波老师译的《运筹学》,4)叶荫宇老师的《线性与非线性规划》。
当然,经典的英文教材可能更适合希望进一步钻研的同学,这里同样扔出几本:1)Introduction to Linear Optimization, 2) Integer Programming, 3)Model Building in Mathematical Programming.
网课方面,推荐台湾交通大学的公开课,比如孙小玲老师的整数规划,方述诚老师的非线性规划,另外,中科大的凸优化网课也很不错~
1)孙小玲老师的整数规划
2)方述诚老师的非线性规划
3)中科大的凸优化网课
精确解算法主要通过cplex和gurobi求解器来实现,新手建议直接去刷cplex和gurobi求解器的使用教程和help文档。尤其推荐gurobi中文官网的学习资源,质量很高,另外github上也有相关的学习资源。
利用求解器实现精确解算法,建议重点关注大规模优化技术,如列生成(D/W分解),Benders分解,分支定价等。精确解算法,与其说是算法,不如说是模型分解技巧。当模型的变量和约束超过几十万时,直接输到求解器里,通常很难直接快速求解,需要先做模型分解,构建容易求解的子问题等。关于列生成,同济大学梁哲老师在天池做过相关的直播,链接如下:
1)【运筹学直播1】同济教授分享应用算法优化航空运营
2)【运筹学直播2】列生成1
3)【运筹学直播3】列生成2:万变不离其宗,强大的并行机排程!
4)【运筹学直播4】dantzig-wolfe 分解
最后上点私货,我的一个朋友搞了个运筹优化论坛,分享了一些学习资料,感兴趣的可以关注一下:
机器学习算法入门
这方面资料网上很多,相信每个人都能找到适合自己的新手教程。推荐几本非常经典的入坑书,李航的统计学习方法,周志华的西瓜书,深度学习花书。
考虑到前面几部分都分享了网课,基于结构完整性,这里随便给出一些我使用过的学习资料,大家根据自己的需求合理使用,链接如下:
1)《机器学习与深度学习》基础
2)《机器学习与深度学习》进阶
3)唐宇迪:python数据分析与机器学习实战
4)唐宇迪资源汇总
5)基于python机器学习方向最佳学习路线(全套)
6)python3实用编程技巧进阶
上述链接若失效,可私聊我索取最新资源链接~
编程与计算机基础
编程与计算机基础主要涉及计算机组成原理、操作系统、计算机网络和数据结构四部分。非计算机科班出身的同学,这部分可以根据需求走马观花。计算机组成原理、操作系统、计算机网络三部分,推荐非计算机科班的新手一门网课,慕课网:编程必备基础知识,链接如下:
数据结构和数据库方面,推荐去牛客网刷题,剑指offer的78道题,leetcode的数据结构与算法常见题刷一两百道,数据库sql题全部刷一遍,基本就差不多了,这里推荐两个B站UP主的讲解视频,链接如下:
1)大雪菜(主要使用C++刷题)
2)Michelle小梦想家(主要使用python刷题)
运筹优化算法工程师建议懂一门常见的编译性语言(比如C++)和一门脚本语言(一般要求使用python)。前者运行速度比较快,适合用来编写启发式算法,而后者(Python)适合用来调用cplex,gurobi等求解器实现精确解算法,或者是调用sklearn,tensorflow等机器学习包,实现相关功能。
运筹优化目前来看还相对小众,各方面学习资料不如机器学习等热门方向完善,这篇文章暂时先分享这么多,希望能给想入坑的同学一点帮助,同时欢迎各路大佬补充~ 谢谢学长,赞! 很实用,非常感谢! 港虾 请问下具体实践有什么平台吗? 这么难[大哭] 居然淘到一个同院宝藏学长,太幸运了!刚好需要这些干货,谢谢
[棒] 请问大佬为找工作集中准备多久时间哇,我也是管理科学与工程专业的,下半年秋招,现在准备不知道是否来得及,目前的基础是会Python,数据结构已经学完,在leecode刷了六七十道题,启发式算法和机器学习算法还在入门阶段。😂😂 很有启发,觉得老师研究很深入。但是,对于纯粹的小白来说,入手还是有点难,再看现代优化技术这本书。老师这么优秀,期待老师在B上来讲!! 赞同,有时候看书真的很难理解,需要别人讲一讲会更好[捂脸][捂脸][捂脸]