编者按:
优化求解器对于做运筹学应用的学生来说,意义重大。
然而直到今天,放眼望去,全网(包括墙外)几乎没有一个系统的Cplex中文求解器教程。
作为华人运筹学的最大的社区,『运筹OR帷幄』 责无旁贷,我们决定承担这「吃力不讨好」的责任。
Cplex视频教程由『运筹OR帷幄』【视频】版块荣誉出品,主编留德华叫兽策划和监制,【视频】版块责编唐博编程并录制,初步设置16节课,希望能为大家扫盲数学规划求解器的编程基础,并且用实例带大家入门如今最火的人工智慧、计算机视觉(底层即优化问题)。
文章作者:?? @留德华叫兽,『运筹OR帷幄』主编视频录制、剪辑:唐博 ,『运筹OR帷幄』报道、视频版块责编视频策划、监制:??? @留德华叫兽 文章发表于微信公众号【运筹OR帷幄】:视频教程 | 用Python玩转运筹优化求解器IBM Cplex(一 )欢迎原链接转发,转载请私信 @运筹OR帷幄 获取信息,盗版必究。敬请关注和扩散本专栏及同名公众号,会邀请全球知名学者发布运筹学、人工智慧中优化理论等相关干货、知乎Live及行业动态:『运筹OR帷幄』大数据人工智慧时代的运筹学
文章作者:?? @留德华叫兽,『运筹OR帷幄』主编
当我们费劲千辛万苦对一个实际问题用数学规划建模以后,写成如下优化问题:
我们知道,数学建模完成后要求解具体的实例,下一步便需要设计相应演算法,然后导入实际数据求解。
如果问题是线性规划,因为有相应的多项式时间演算法(例如内点演算法),设计并实现一下演算法可能还不是那么的困难。
但是,如果问题是一个整数规划,其求解的基本演算法是分支定界法:
留德华叫兽:【学界】混合整数规划/离散优化的精确演算法--分支定界法及优化求解器
那么我们是否还要亲自手撸一遍指数级复杂度的分支定界法呢?
几十年前,当市场上还不存在优化求解器的时候,很不幸的告诉你:需要!
在海德堡大学读博期间,我与欧洲运筹协会主席、巴塞罗那理工Elena Fernandez教授(https://www.eio.upc.edu/en/homepages/elena)闲聊的时候,她就跟我诉苦当年她读博时期手撸分支定界演算法的「悲惨」经历。(当时作为一名运筹学研究精确演算法博士生的毕业难度/代码能力可想而知。)
而今,正因为有了优化求解器的存在,我们只需将以上整数规划模型的系数矩阵输入到优化求解器中,它就能够给我们快速求出最优解或可行解。
并且除了最基础的分支定界法,求解器通常还集成了各种「花式「的启发式和割平面演算法,使得求解效率大大提高!
因此,运筹学博士生的毕业难度大大降低!
还是一头雾水?优化求解器到底是什么呢?
从编程的角度,大家可以把它理解为一个专门求解优化/整数规划模型的演算法包(library),你可以用任何编程语言(C/C++、Java、Python)去调用这个包里的方程,只要你把你要求解的整数规划模型目标方程和系数矩阵输入进去(告诉它你要求解的具体问题),它就会给你求解出结果。
例如在Python环境下只需如下四步:
1导入CPLEX的包
import cplex
2初始化一个优化模型
prob = cplex.Cplex() # 此处的prob可以是任意变数名
3输入模型的目标函数、约束条件及变数系数
prob.objective.set_sense(...) # 设置目标方程的取值方向:求最大值/最小值
prob.variables.add(...) # 添加变数
prob.linear_constraints.add(...) # 添加约束条件
4直接调用优化求解器的求解方法(method),一键求解
prob.solve()
1. IBM ILOG Cplex
由于欧盟玛丽居里项目的缘故,我曾经在义大利Blogna Cplex的developer之一Andrea Tramontani手底下「实习」了半年
网址:http://www.ibm.com/products/ilog-cplex-optimization-studio
支持模型:混合整数(平方)规划、Constraint programming
支持语言:C/C++、Java、Python、Matlab等
特点:支持Benders分解模块(仅此一家)、速度Top2
当前版本:12.8
2. Gurobi
网址:http://www.gurobi.com
支持语言:C/C++、Java、R、Python、Matlab等
特点:速度Top2、价格最高
当前版本:8.0
3. FICO Xpress
网址:http://www.fico.com/en/products/fico-xpress-optimization
支持模型:混合整数(非线性)规划、Constraint programming
特点:速度Top3,支持鲁棒优化
当前版本:8.5
更多关于优化求解器的介绍,请参见【运筹OR帷幄】之前的一篇推文:【学界】运筹学数学规划|离散优化求解器大搜罗
因为本科和硕士都是数学背景的关系,我的编程基础很差。回想起当年我读博初期,从硕士研究优化理论到博士初次接触运筹学的应用,在建立好优化模型后,对于如何使用求解器是一头雾水,无从下手。
直到去到IBM Cplex实习,Cplex开发者之一的Dr. Andrea和IBM科学家Andrea Lodi教授,以及玛丽居里项目几个同事悉心地指导,才使我短短几个月便从Cplex最简单的应用到Cplex callback function到列生成法的实现逐一捋了一遍!
Cplex视频教程由『运筹OR帷幄』视频版块荣誉出品,主编留德华叫兽策划和监制,【视频】版块责编唐博编程并录制。
我们假设读者已有一定的Python编程基础,在传授如何用Python调用Cplex求解数学规划问题的同时,我们也试图讲解如何把一个实际问题(例如计算机视觉案例)数学建模成整数规划模型,以及一些常用的大规模优化问题的分解方法(割平面、列生成)等建模技巧。
希望这个系列视频能为大家扫盲数学规划求解器的编程基础,并且用实例带大家入门如今最火的人工智慧、计算机视觉(底层都是优化问题)。
总提纲(试行):
以上提纲仅为试行版本,随著视频录制的进行,可能会有修改或增减。
也希望优化求解器大牛们参与到我们的视频教程创作中来,或提供宝贵的建议,一起参与到运筹学的科普中~
第一期视频内容:
据@唐博说,第一期视频虽然只有不到10分钟,但是前期策划和转变,加上反复录制和剪辑,前前后后花了至少有8个小时。
不光是录制视频,其实『运筹OR帷幄』创作推文也一样,每篇文章都会花费责编/作者数小时创作/编辑。
因此,各位读者如果看到您觉得不错的推文,希望可以点个「好看」和分享,让知识传播地更远,一起科普运筹学!
郑重声明:所有Cplex Python API视频教程免费代码开源
郑重声明:
嫌手机屏幕太小,看得不够过瘾!?
没问题!欢迎关注『运筹OR帷幄』官方B站:运筹OR帷幄,Cplex Python API系列视频教程和视频直播都会首发于B站。
B站网址:https://space.bilibili.com/403058474
此外,欲获得视频中的源代码,请于『运筹OR帷幄』公众号后台回复关键词: Cplex教程
「视频」版块上线初期,将涵盖三个模块:
Part ONE:
视频教程--即类似今天这样的技术视频教程
Part TWO:
科普快照--即科普类、趣味性视频,让学科传播地更远
Part THREE:
SundayLive--即留德华叫兽担任主播,并不定期邀请行业好友/大佬,与大家谈天说地
欲知详情,请见:
号外!『运筹OR帷幄』开直播、出教程啦!「视频」版块正式开通!
温馨提示
欲获得视频中的源代码, 可以在 本公众号后台 回复关键词:「 Cplex教程 」,如果觉得有用, 请勿吝啬你的留言和赞哦!~
扫二维码关注『运筹OR帷幄』公众号:
点击查看『运筹OR帷幄』志愿者招募介绍及加入方式: