首页 > 编程知识 正文

cplex中文教程(python混合整数非线性规划)

时间:2023-05-03 17:12:08 阅读:97252 作者:2055

作者:mldej叫野兽,《战略还是战略》主编

视频录制编辑:dpdjm,《运营策划人》报道,视频版块编辑。

视频,制作人:mldej叫野兽

编者按:

优化器对于正在做运筹学应用的学生来说意义重大。

然而直到今天,全网(包括墙外)几乎没有一个系统的Cplex中文Solver教程。

作为中国运筹学最大的社群,它义不容辞的“策划者”,我们决定承担起这个“吃力不讨好”的责任。

Cplex视频教程由“战略”[视频]版块荣誉出品。主编mldej被称为野兽策划人和制作人。“Video”版块负责dpdjm的编程和录制,初步设置了16节课,希望能帮助大家了解数学编程求解器的编程基础,并以实例为大家介绍最热门的人工智能和计算机视觉(底部是优化问题)。

01优化求解器概述

当我们努力用数学编程为一个实际问题建模时,我们写了以下优化问题:

我们知道数学建模完成后,需要解决具体的例子,下一步就是设计相应的算法,然后导入实际数据进行求解。

如果问题是线性规划,因为有对应的多项式时间算法(比如内点算法),设计实现算法可能没有那么难。

然而,如果问题是整数规划,解决它的基本算法是分枝定界法:

叫做野兽的Mldej学术界]混合整数规划/离散优化的精确算法——分支定界法和优化求解器

那么,我们是不是必须手动过指数复杂度的分支定界法?

几十年前,市场上没有优化器的时候,我很不幸的告诉你:有!

当我和欧洲运筹学协会主席、巴塞罗那理工学院院长埃琳娜费尔南德斯教授(https://www . eio . UPC . edu/en/home page/Elena)聊天时,我在海德堡大学读书时,她向我抱怨她在大学读书时对分支定界算法的“悲惨”经历。(当时一个运筹学博士研究生对精确算法的毕业难度/代码能力可想而知。)

现在,正是因为优化求解器的存在,我们只需要将上述整数规划模型的系数矩阵输入到优化求解器中,它就能快速为我们找到最优解或可行解。

求解器除了最基本的分支定界方法外,通常还集成了各种“花式”启发式和切割平面算法,大大提高了求解效率!

因此运筹学博士生的毕业难度大大降低!

还困惑吗?优化器到底是什么?

从编程的角度,我们可以把它理解为一个致力于求解优化/整数规划模型的算法库。你可以用任何编程语言(C/C、Java、Python)调用这个包中的方程。只要你输入你要求解的整数规划模型的目标方程和系数矩阵(告诉它你要求解的具体问题),它就会为你解出结果。

例如,在Python环境中,只需要以下四个步骤:

1个用于导入CPLEX的包

导入cplex

2初始化优化模型

Prob=cplex。这里的Cplex() # prob可以是任何变量名。

3.输入模型的目标函数、约束和可变系数。

Prob.objective.set_sense(.)#设置目标方程的取值方向:求最大/最小值。

Prob.variables.add(.)#添加变量

Prob.linear _ constraints.add(.)#添加约束

4.直接调用优化求解器的求解方法,一键求解。

prob.solve()

02商业整数规划求解器

="ql-align-justify">1. IBM ILOG Cplex

由于欧盟俏皮的太阳项目的缘故,我曾经在意大利Blogna Cplex的developer之一Andrea Tramontani手底下“实习”了半年

网址:www.ibm.com/products/ilog-cplex-optimization-studio

支持模型:混合整数(平方)规划、Constraint programming

支持语言:C/C++、Java、Python、Matlab等

特点:支持Benders分解模块(仅此一家)、速度Top2

当前版本:12.8

2. Gurobi

网址:www.gurobi.com

支持模型:混合整数(平方)规划、Constraint programming

支持语言:C/C++、Java、R、Python、Matlab等

特点:速度Top2、价格最高

当前版本:8.0

3. FICO Xpress

网址:www.fico.com/en/products/fico-xpress-optimization

支持模型:混合整数(非线性)规划、Constraint programming

特点:速度Top3,支持鲁棒优化

当前版本:8.5

更多关于优化求解器的介绍,请参见【运筹OR帷幄】之前的一篇推文:【学界】运筹学数学规划|离散优化求解器大搜罗

03Cplex视频教程(Python API)

因为本科和硕士都是数学背景的关系,我的编程基础很差。回想起当年我读博初期,从硕士研究优化理论到博士初次接触运筹学的应用,在建立好优化模型后,对于如何使用求解器是一头雾水,无从下手。

直到去到IBM Cplex实习,Cplex开发者之一的Dr. Andrea和IBM科学家Andrea Lodi教授,以及俏皮的太阳项目几个同事悉心地指导,才使我短短几个月便从Cplex最简单的应用到Cplex callback function到列生成法的实现逐一捋了一遍!

优化求解器对于做运筹学应用的学生来说,意义重大。

然而直到今天,放眼望去,全网(包括墙外)几乎没有一个系统的Cplex中文求解器教程。

作为华人运筹学的最大的社区,『运筹OR帷幄』 责无旁贷,我们决定承担这“吃力不讨好”的责任。

Cplex视频教程由『运筹OR帷幄』视频版块荣誉出品,主编mldej叫兽策划和监制,【视频】版块责编dpdjm编程并录制。

我们假设读者已有一定的Python编程基础,在传授如何用Python调用Cplex求解数学规划问题的同时,我们也试图讲解如何把一个实际问题(例如计算机视觉案例)数学建模成整数规划模型,以及一些常用的大规模优化问题的分解方法(割平面、列生成)等建模技巧。

希望这个系列视频能为大家扫盲数学规划求解器的编程基础,并且用实例带大家入门如今最火的人工智能、计算机视觉(底层都是优化问题)。

总提纲(试行):

CPLEX的下载和安装CPLEX Python API的安装和调用数学规划模型lp、mps格式文件的读写线性规划问题建模及求解线性规划问题敏感性分析线性规划问题优化器选择混合整数规划问题建模及求解混合整数规划问题求解策略设置混合整数二次规划问题求解模型修改和重新优化进阶版--绝对值不等式转线性进阶版--高次不等式转线性进阶版--大M不等式及其伤害进阶版--数学建模的艺术之一题多解进阶版--割平面法之计算机视觉实例进阶版--列生成法之计算机视觉实例

以上提纲仅为试行版本,随着视频录制的进行,可能会有修改或增减。

也希望优化求解器xddrg们参与到我们的视频教程创作中来,或提供宝贵的建议,一起参与到运筹学的科普中~

第一期视频内容:

用CPLEX制作图像处理工具之展望CPLEX学术版申请CPLEX下载及安装Anaconda环境下安装CPLEX Python APICPLEX Python API的调用

据@dpdjm说,第一期视频虽然只有不到10分钟,但是前期策划和转变,加上反复录制和剪辑,前前后后花了至少有8个小时。

不光是录制视频,其实『运筹OR帷幄』创作推文也一样,每篇文章都会花费责编/作者数小时创作/编辑。

因此,各位读者如果看到您觉得不错的推文,希望可以点个“好看”和分享,让知识传播地更远,一起科普运筹学!

郑重声明:

所有Cplex Python API视频教程

免费代码开源

好了,千呼万唤使出来,下面便是第一期的视频教程:

嫌手机屏幕太小,看得不够过瘾!?

没问题!欢迎关注『运筹OR帷幄』官方B站:运筹OR帷幄,Cplex Python API系列视频教程和视频直播都会首发于B站。

B站网址:https://space.bilibili.com/403058474

此外,欲获得视频中的源代码,请于『运筹OR帷幄』公众号后台回复关键词: Cplex教程

强烈建议大家下载源代码,跟着dpdjm一起手撸Cplex的Python源代码喔!~

04运筹OR帷幄【视频】版块成立啦

「视频」版块上线初期,将涵盖三个模块:

Part ONE:

视频教程--即类似今天这样的技术视频教程

Part TWO:

科普快照--即科普类、趣味性视频,让学科传播地更远

Part THREE:

SundayLive--即mldej叫兽担任主播,并不定期邀请行业好友/大佬,与大家谈天说地

欲知详情,请见:

号外!『运筹OR帷幄』开直播、出教程啦!「视频」版块正式开通!

【视频】版块主编/责编火热招募中

【视频】版块现招募版块(副)主编,欢迎对运筹学/数据科学/AI科普有热情的小伙伴加盟,将学科知识传播给平台10W+的同行,共同学习和成长。

最后,如果对于【视频】版块或者Cplex教程的提纲有任何建议或想法,都欢迎在评论区指出!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。