快捷搜索:  汽车  科技

学习运筹学的经验总结(主编推荐:千里之行始于足下)

学习运筹学的经验总结(主编推荐:千里之行始于足下)01下面谈谈运筹学专业学生的常规课程路线图:首先学习运筹学所需要的基础知识,只需微积分和线性代数,因此可以说门槛很低(其实高中代数课我们就学过运筹学中的线性规划问题,详情见我的专栏)。其次学习一门学科的目的与动机(为什么要学这门课,学了这门课有什么用,以后可以从事哪些方面的工作?) 我觉得尤其重要。而这些,需要在运筹学的第一门课中,由一个经验丰富的运筹学者讲述,以引起学生们对这个学科足够的兴趣和重视。有兴趣的可以看下面链接,分享了我与运筹学以及一位整数规划大师的渊源:运筹学在航空业有哪些应用? - 知乎(https://www.zhihu.com/question/58488186/answer/157770873)

编者按:

很多小伙伴刚入门运筹学不知道该如何学习运筹学?截止到2019年3月10日该问题在知乎上有4341人关注,37万浏览量。我们整理了三个高赞的热门回答。方便小伙伴们学习研讨。

文章作者:留德华叫兽,六点钟苹果,王源

责任编辑:王源

文章发表于微信公众号【运筹OR帷幄】No 1 作者知乎ID:留德华叫兽

学习运筹学的经验总结(主编推荐:千里之行始于足下)(1)

首先学习运筹学所需要的基础知识,只需微积分和线性代数,因此可以说门槛很低(其实高中代数课我们就学过运筹学中的线性规划问题,详情见我的专栏)。

其次学习一门学科的目的与动机(为什么要学这门课,学了这门课有什么用,以后可以从事哪些方面的工作?) 我觉得尤其重要。而这些,需要在运筹学的第一门课中,由一个经验丰富的运筹学者讲述,以引起学生们对这个学科足够的兴趣和重视。有兴趣的可以看下面链接,分享了我与运筹学以及一位整数规划大师的渊源:

运筹学在航空业有哪些应用? - 知乎(https://www.zhihu.com/question/58488186/answer/157770873)

下面谈谈运筹学专业学生的常规课程路线图:

01

基础课程

微积分、线性代数、编程语言(C C Python等)、图论(可选)、算法

02

核心课程

线性规划(最核心课程)、非线性规划(机器学习应用广泛)、(凸优化--工程系的必修课)、整数规划(决策问题中变量通常是整数,例如0 1变量)、网络流优化(物流、电网、通讯网络应用)、数学建模(可选)。下面是俩本免费教材,当然是英文版的:

Linear Programing简略版,UCLA教授著:

https://www.math.ucla.edu/~tom/LP.pdf

Numerical Optimization,西北大学和美国阿贡实验室著(他引2w次):

http://www.bioinfo.org.cn/~wangchao/maa/Numerical_Optimization.pdf

03

高级课程(Advanced)

多目标优化、随机优化、鲁棒优化、启发式算法、近似算法、半正定规划等

以上通常是数学系下运筹学专业的必修和选修科目,工业工程、管理科学、物流工程、数据科学、人工智能等偏应用的专业,可能会额外开一些该方向的偏实际应用的课程,例如管理信息系统、生产与运营管理、运营计划和控制、供应链管理、物流仓储技术等。

其次需要注意的是,数学系的课程往往偏理论,有时有非常多的数学证明和算法理论,如线性规划的单纯型法,整数规划中的Total Unimodular和NP难问题的证明。对于偏运筹应用的学生来说,则应把注意力放在数学建模以及优化软件的使用上。

数学建模指的是如何把一个实际问题转换成优化模型(和小学里做应用题类似)。例如我们用的GPS导航软件,从一地到另一地的最短路径问题,就是一个典型的运筹学问题。该问题优化目标是找到最短的驾驶路径 (或驾驶时间最短的路径),转化成优化模型时,约束条件往往有单行路段以及每条路段的限速等等(都可以写成严格的数学表达式)。而该优化模型又是建立在一个更为广泛的优化模型(网络流模型Network Flow Problem)基础上的。

下面是运筹学中最基础的线性规划模型,即目标函数和约束条件都是线性形式,自变量y1...yn是连续变量:

学习运筹学的经验总结(主编推荐:千里之行始于足下)(2)

优化软件(Optimization Solver)指的求解优化模型最优解的软件或算法库(Library),其中(混合)整数规划的求解器是最难开发的,市面上Top 4求解器依次为:IBM Cplex Gurobi FICO Xpress ZIB SCIP。前三个为商业软件,最后一个为柏林ZIB Institute开发的开源软件,但是这四个用作学术或科研用途都是免费的。除了四个整数规划的求解器,线性规划的求解器有Lindo,Lingo 等等。非线性规划、二次规划、启发式算法等问题有许多开源软件,另外还有AMPL和GAMS这些商业软件,他们把绝大多数求解器集成在一起并且简易化他们的使用。推荐俩个网站NEOS Solver和COIN-OR,它们汇总了绝大多数的开源优化软件。

NEOS Solvers

(https://neos-server.org/neos/solvers/)

04

实战演练

最后 应用或工程学科的朋友应更关心用运筹解决实际问题的流程,增加项目经验

1,拿到实际问题和数据,先搜索已有的经典模型(例如网络流模型),看看能不能往经典模型上靠。因为经典模型经过几十年的研究,模型和算法都已相当成熟,求解效率往往很高。

2,实在没有已有模型,就尝试自己建立新的优化模型,建模的思路函数是尽量线性化、少整数变量、big M尽量小(把二次函数线性化的trick)、低次函数(Polynomial)。

3,把优化问题编程到优化软件或编程调用优化Library,导入问题数据,然后运行软件得出最优解。

4,根据求解速度和最优解,不断优化算法和模型,以提高求解效率。

No 2 作者知乎ID:六点钟苹果

学运筹学之前,在知乎查过运筹学入门方面的问题,没有得到想要的答案。现在过运筹学了,自己提问,自己回答。

涉及到专业入门书籍、资料的推荐,因为萝卜青菜各有所爱,难以保证所推荐的适合大多人。仅供参考。

说到运筹学入门书籍,似乎离不开 Frederick

S. Hillier 和 Gerald J. Lieberman 的《Introduction to Operations Research》(Introduction to Operations Research (豆瓣)(https://book.douban.com/subject/2250362/)),在国内由哈工大的胡运权翻译成《运筹学导论》(运筹学导论 (豆瓣)(https://book.douban.com/subject/2253276/)),但是只是截取了部分章节,重点选取了线性规划的章节。这本书英文版网上有电子书,百度或者谷歌一下 “Introduction to Operations Research pdf ”就没问题的。

我谷歌百度了一下运筹学入门书籍,无论是英文搜索还是中文搜索,大多都提到《运筹学导论》这本书,因此最开始是使用的这本书作为入门。另外,自己偏爱 Coursera,因此选了 Coursera 上科罗拉多大学波德分校开设的《线性和整数规划》(Coursera.org(www.coursera.org/course/linearprogramming))作为主要教学视频。

一般而言,对于专业课,教材加教学视频,外加不懂时谷歌搜索,就可以很好地自学了。

非常可惜的是,这本书和这个视频都不适合用于入门,对于我。《运筹学导论》在学生还没入门的时候讲了太多运筹学的复杂运用,对于最基本的单纯形法讲解跳跃性太大,行文还不加介绍直接使用“超平面”、“凸集”等等概念,反复看都难以理解。此书基本内容都难以理解,作者却还同时介绍 MPL、LINGO、LINDO 编程,Excel解决线性规划问题,如果能力没有达到这样水平,只会越学越没有兴趣。顺带提一句,如果中英文对照着看的人,会发现这本书翻译瑕疵太多,部分地方直接影响阅读(比如第九版第165页将“Corner-Point Infeasible Solution” 翻译成“角点可行解”)。

另外要补充说明,我在读《运筹学导论》非单纯形法介绍部分,即运输问题、指派问题、整数规划、动态规划、决策分析的时候,觉得读的很顺,而且有实际运用的介绍,感觉学习非单纯形法部分用这本书作为第一教材,确实合适。

再说说 Coursera 上的《线性和整数规划》,此教学视频最大的优势在于有视频教学和课后习题搭配,加之介绍了 Excel 和 Python 解决线性规划问题,另外有 Python 代码,有兴趣的可以学习一下。不过课程由两人讲授,其中一人讲得是印度口音英语,他还是主讲,实在让人难受。

下面进入正题,运筹学如何入门?

我最推荐的入门视频:DrSalimian (http://t.cn/Eicuzgy)的线性规划系列视频(资源地址:MOOCOR - Masud Salimian's Operations Research Course)(http://t.cn/Eicu5Rz),讲得非常基础,而且十分清晰,基本上是 Step By Step的讲解,为我扫清了好多好多的疑惑。跟着他把线性规划的各个子内容(Simplex Big-M Technique Two-Phase Technique Matrix Form Simplex Revised Simplex Duality)学好了,一步步跟下来是很简单顺畅,基本上Simplex就掌握了。

在学习 Simplex 的时候,DrSalimian的教程是主线,利用《运筹学导论》还有谷歌搜索作为补充。比如听 Big-M 不太了解,就搜索 Big-M Method,然后看看其他大学放在网上的 pdf,这样效果甚好。

学习完 Simplex 之后,《运筹学导论》就开始发挥作用了,这本书从第10章动态规划开始,是可以作为第一教材。然后有不太理解的地方,用网上资料,以及 Youtube 上的视频来补充。

---------------其他一些资源--------------

  • 《Linear Programming 1: Introduction》(http://t.cn/EicuWSL) George B. Dantzig Mukund N. Thapa: 这本书是Simplex Method发明人Dantzig写的,书,可以在一些问题不懂的时候参考,不过同样不适合作为入门的第一教材。可能因为Dantzig是数学家,书中思维很严谨,很多Lemma,Theorem,Corrolary,以及证明和推导。
  • Transportation Problems
  • (http://t.cn/EicuBG1),一个小专题 pdf,帮我理解了运输问题,把解法一步步讲得很清楚,初始化阶段介绍了三个方法:North-West Russell Vogel。
  • 印度理工推出的系列视频,从入门到进阶十分详细,对印度英语不熟悉的同学可能会听着很难受,Salimian为我们整理了这一系列视频:Masud Salimian's Operations Research Course(http://t.cn/Eic3PS1)。

No 3 作者知乎ID:文雨之(王源)

学习运筹学的经验总结(主编推荐:千里之行始于足下)(3)

我们这里暂且不谈学好了运筹学能够走上人生巅峰,迎娶白富美的事情。这里只谈一小点学了运筹学的人和没有学运筹学的人的细微差别。我认为运筹学影响了我做事的方式。运筹学的基本套路是把实际问题建立模型,然后确定决策变量,其次确定优化目标和约束条件。其实在我们工作中和生活中去处理每一件事情的时候,都是可以通过这种方法来迅速抓住事物的本质,达到很高的做事效率的。而没有学过运筹优化的人,则不会有这样的思维,以至于他们在做事情的时候并往往是不能有一套高效的运行机制。我想这个是学习运筹学给我带来的最大的一个启示。

01

基础课程

老生常谈了,要入门运筹学最起码要有基本的数学知识。基本的要求也不高,微积分,线性代数,外加一门编程语言即可。

微积分和线性代数是所有理工科本科生的基础课程,所以这里也就不再赘述了。至于编程语言掌握一门主流编程语言即可,例如C C Python Java Julia,因为最终优化问题的求解都要利用一些solver,都需要一门基础的编程语言做支撑。

如果上面所提的几个数学内容不是很自信的同学可以参考如下的视频课程,

Essence of calculus(http://t.cn/RmyG5oS),作者以拉风的动画,深入的理解带你回顾一下微积分的关键概念。该课程的好处是直观清晰,都是短视频,适合曾经学过微积分但是又比较模糊的同学。

线性代数也是一样的 Essence of linear algebra(http://t.cn/Rmyqe5E)以非常直观的角度审视了线性代数的重要概念,直观但不失深刻,配合上高大上的动画效果,让人体会到了大道至简的感觉。一共15个视频,每段视频大约十分钟左右,花费不了多少时间就能看完。

02

中级课程

线性规划(Linear Programming) 凸优化(Convex Optimization) 数值优化(Numerical Optimization)

(1) 线性规划就是目标和约束条件都是线性的了,其问题形式非常的简单,所以说线性规划是最基本的内容。线性规划肯定也是凸优化的一种,但是线性规划有着一些非常特殊的性质。个人感觉线性规划是基础的基础,往后边整数规划,鲁棒优化,半定规划,锥优化等都离不开线性规划这个基础。学习线性规划需要 几何的直观感受 代数的精确描述 一些计算机的编程实际 三个维度吧。几何的直观感受可以给我们提供非常好的理解线性规划理论的途径,所以千万不要一上来就一顿代数计算,什么单纯型表一顿计算,一定要先理解几何的直观意义是什么,然后在用代数把直观感受严密表述出来,这时候一堆枯燥的代数公式就非常好理解了。最后当然需要一点计算机的实践,用solver求解一些问题获得一些应用的感受。

线性规划首推Dimitris Bertsimas / John N. Tsitsiklis (http://t.cn/RmyG5oS)的 Introduction to Linear Optimization.pdf

(https://b-ok.org/book/1263070/ad9008),这本书是一个比较现代的观念看线性规划了,包括了椭球法,单纯形法,内点法,以前一些拓展内容和future work的方向。

线性规划的课程我推荐 台湾交通大学的公开课,方述诚老师讲的线性规划(很不幸发现这个课程下架了 这里无法给出链接,有需要的后期我可以放网盘链接)。方老师每次都从几何的直观出发,然后用代数去严密化直观的东西,具备一定的线性代数知识完全就能理解。

(2) 世界不总是线性的,优化问题向前一步就是凸优化了,相对非凸优化,凸优化要相对容易一点。这里就绕不开 Stephen Boyd的convex optimization那本书了。这本书是主要分为理论、应用和算法三个层面。其实初学者的困惑有几个,1是书中会用到一些矩阵变换或者不等式放缩的东西。这说明你的数学基础有待提高,2很多同学即使能看懂推导过程也不明白为何要有这些一大堆的理论。这个问题就比较困难一点说明你在优化领域涉及不深,同时对实际应用问题感悟也很少。

其实对于凸优化而言真正的难点是在实际的科研和工程问题中,怎么把你的模型建立成凸优化问题,或者怎么样变换成凸优化问题。这个技巧往往是一门艺术了,没有很一般的方法,具体问题具体看待,好在Stephen Boyd的convex optimization这本书在应用这部分给我们举了很多例子,初学者还一下子get不到这里边的妙处,只有真正做过应用问题的回来再看就很有感受。

Stephen Boyd的 Convex optimization,与之配套的视频课程也有Convex optimization

(http://t.cn/Eic3rCx)

如果想深入一点可以看 Introductory Lectures on Convex Programming.pdf

(http://t.cn/Eic14Be)

(3) 数值优化是我个人比较推荐的一个课程,其实数值优化侧重算法一点,而不像前面的线性规划和凸优化需要一大堆的理论框架(虽然这些理论都很美)。数值优化很大一部分就是基于导数的优化方法,这类方法在机器学习里边是最常见应用最广泛的。数值优化的理论分析一般侧重于收敛性和收敛速率,所以它的理论是比较单纯一些的。

数值优化推荐的书自然是 Numerical Optimization.pdf (http://t.cn/Eic1BmV)

国内有一个相关的视频课程讲得也不错可供参考:数值优化-复旦大学吴立德 (http://t.cn/EicBhGv)

03

高级课程

多目标优化、随机优化、鲁棒优化、整数规划,混合整数规划,元启发式算法、半正定规划等等高级课程这里就无法一一去点评了,如果具备了之前的基础相信去学这些高级课程会轻松一些。

相关文章推荐

关于运筹学优化求解器的介绍可参考如下文章:

点击 蓝色标题,即可阅读《【学界】运筹学数学规划|离散优化求解器大搜罗》

—— 完 —

猜您喜欢: