Cours-1
MCM美国数学建模大赛集训
(第一讲:优化建模软件的安装和使用)
Yi-Shuai Niu
2016 2017
目的:学习数学优化建模软件(IBM ILGO CPLEX,Matlab,Yalmip,Gurobi)的安装和使用。
常见的数学优化模型:
1.连续型模型:线性规划(Linear Programming)、二次规划(Quadratic Programming)、二
次约束规划(Quadratically Constrained Programming)、非线性规划(Nonlinear Program-
ming)、多目标规划(Multiobjective Programming)等。
2.离散型模型:整数和混合整型规划(Integer/Mixed Integer Programming)、组合优化(Combinatorial
optimization:图(graphe)、逆阵(matroid))、动态规划(Dynamic Programming)等。
常见的优化建模软件:
软件主要功能调用方式CPLEX解决线性规划、二次约束规划、二次锥规划和混合整规划问题C++,Java,Matlab,Python
Matlab Optimization Toolbox:各种线性、二次、非线性规划求解算法Matlab
Global Optimization Toolbox:遗传算法、模拟退火法等
Gurobi和CPLEX类似,综合性能方面略优,特别是求解混合整数规划Python,C++,Java,Matlab Yalmip Matlab上的优化建模语言。并提供各类优化求解器调用接口Matlab
第一章、软件安装篇
1、CPLEX
1.1、CPLEX简介
IBM R ILOG R CPLEX R Optimization Studio是一款强大的数学优化建模和决策分析支持
工具箱。旨在使用数学规划和约束规划快速开发和部署优化模型。它将集成开发环境(IDE)
1/11November-December2016巴院
与强大的优化编程语言(OPL)和高性能的ILOG CPLEX优化器求解工具结合,并且与众多
编程语言兼容(C/C++,JAVA,EXCEL,Matlab等都有接口)。其高效的求解性能,特别
是对于庞大的建模优化问题和困难的优化问题的求解一直保持全球领先地位。因此在全球工
程和科研领域应用十分广泛。使用CPLEX,可以将复杂的问题表现为数学规划(Mathematic Programming)模型并调用高级优化算法快速找到这些模型的解决方案。CPLEX目前支持的最
优化模型包括:线性规划、二次规划,二次约束规划、二次锥规划和混合整规划问题
该软件由Robert E.Bixby于1988年创建CPLEX Optimization Inc.开发销售,属于商业软件,但学术团队可以申请获得Academic license免费使用。1997年并入ILOG公司,又于2009年
被IBM收购,目前CPLEX由IBM持续开发和更新中。并分为商业版和学术版两个版本(学术版
已经完全免费了)。
1.2、CPLEX安装
这里只介绍Windows版本的获取途径和安装步骤1。
1.注册帐号:搜索IBM Academic initiative https://https://www.360docs.net/doc/d64825125.html,/academic/,并注册
学术帐号。注意注册时一定要使用学校的邮箱(如:上海交大的邮箱yourname@https://www.360docs.net/doc/d64825125.html,)。
IBM只给非盈利性学术团队或学校提供学术帐号。验证周期一般2-3天,验证通过后即可下载和安装IBM ILGO CPLEX了。
2.下载方式:进入IBM Academic initiative的主页,依次点击Educator toolkit→Resources
for members→Software Download Catalog进入学术版软件搜索和下载页面。搜索IBM ILGO CPLEX下载。目前最新版本是12.7,支持windows,Linux,OSX,AIX等各种操作系统。
3.安装方式:下载后直接双击安装即可。
1.3、在Matlab中安装和配置CPLEX
CPLEX提供了Matlab的接口,可以直接在Matlab中调用。只需把cplex/matlab/下的全部目录
添加到Matlab的路径中即可。
2、Yalmip
2.1、Yalmip简介和安装
Yalmip是Johan L?fberg开发的一款开源的Matlab优化建模软件包,可以访问Yalmip wiki下载。
地址:https://yalmip.github.io。安装方式和CPLEX类似,只需把下载解压的Yalmip目录
下的所有文件夹添加到Matlab路径中即可。
安装完成后,可以在Matlab中输入yalmiptest测试。Yalmip会检查所有支持的优化建模软件的
安装情况,并根据性能的优越程度优先选取最好的求解程序。详细细节将在下一章优化软件的
使用中介绍。
1Linux版本的获取方式相同,安装也很简单。
2/11November-December2016巴院
PS:特别注意,如果你在MCM比赛中或科研论文中使用到该软件,请务必按照作者的要求著名相关文献引用,尊重作者的劳动成果!
2.2、Yalmip支持的优化模型和求解器
Yalmip支持的优化模型很广泛,基本上包括了所有常见的优化模型,当然求解这些模型的前提条件是你已经安装了Yalmip支持的求解器。具体支持的模型和求解器请参见下表:?Linear programming(commercial):CPLEX(free for academia),GUROBI(free for academia), LINPROG,MOSEK(free for academia),XPRESS(free for academia)
?Linear programming(free):CDD,CLP,GLPK,LPSOLVE,QSOPT,SCIP
?Mixed Integer Linear programming(free):CBC,GLPK,LPSOLVE,SCIP
?Mixed Integer Linear programming(commercial):CPLEX(free for academia),GUROBI (free for academia),INTLINPROG,MOSEK(free for academia),XPRESS(free for academia)?Quadratic programming(free):BPMPD,CLP,OOQP,QPC,QPOASES,QUADPROGBB (nonconvex QP)
?Quadratic programming(commercial):CPLEX(free for academia),GUROBI(free for academia),MOSEK(free for academia),NAG,QUADPROG,XPRESS(free for academia)?Mixed Integer Quadratic programming(commercial):CPLEX(free for academia),GUROBI (free for academia),MOSEK(free for academia),XPRESS(free for academia)
?Second-order cone programming(free):ECOS,SDPT3,SEDUMI
?Second-order cone programming(commercial):CPLEX(free for academia),GUROBI(free for academia),MOSEK(free for academia)
?Mixed Integer Second-order cone programming(commercial):CPLEX(free for academia), GUROBI(free for academia),MOSEK(free for academia)
?Semide nite programming(free):CSDP,DSDP,LOGDETPPA,PENLAB,SDPA,SDPLR, SDPT3,SDPNAL,SEDUMI
?Semide nite programming(commercial):LMILAB,MOSEK(free for academia),PENBMI, PENSDP(free for academia)
?General nonlinear programming and other solvers:BARON,FILTERSD,FMINCON,GP-POSY,IPOPT,KNITRO,LMIRANK,MPT,NOMAD,PENLAB,SNOPT,SPARSEPOP 3/11November-December2016巴院
3、GUROBI
3.1、GUROBI简介
GUROBI是由美国Gurobi公司开发的新一代大规模数学规划优化器,和CPLEX类似,Gurobi支
持优化模型包括:持的最优化模型包括:线性规划、二次规划,二次约束规划、二次锥规划,
混合整数规划问题。支持多核多线程,支持并行计算,支持C++,Java,Python,.Net开发
环境,支持多种平台,包括Windows,Linux,OSX;支持AMPL,GAMS,AIMMS,Tomlab
和Windows Solver Foundation建模环境。Gurobi为学校教师和学生提供了免费版本。有便捷
的Matlab接口。
该软件由Zonghao Gu,Edward Rothberg和Robert Bixby共同开发,其中Bixby也是CPLEX的开发者。所以GUROBI和CPLEX在支持范围和使用方法等各方面都有很多相似之处。鉴
于GUROBI开发的较晚,所以在性能方面比CPLEX略有优势,特别是在求解混合整数规划
问题中GUROBI是目前性能最好的求解工具。
3.2、GUROBI安装
同样的,这里只介绍Windows版本的获取途径和安装步骤。
1.注册帐号:到Gurobi的官方网站https://www.360docs.net/doc/d64825125.html,/注册帐号。可以不用学校的邮箱
注册,但建议使用学校的邮箱。以便激活免费学术版
2.下载方式:点击Download下载安装对应版本即可。目前最新版本是7.0,支持windows,Linux,
OSX等操作系统。
3.安装方式:下载后双击安装。
4.激活方式:如果使用免费学术版请务必在学校的内网中安装和激活软件,或者使用学校
的VPN激活也可以。
3.3、在Matlab中安装和配置GUROBI
和CPLEX类似,把gurobi安装路径下的matlab文件夹内的全部子目录添加到Matlab的路径中即可。
第二章、软件使用篇
我们将通过求解几个不同类型的优化模型,分别学习一下CPLEX,Yalmip和Matlab优化工具
箱的使用方法。
4/11November-December2016巴院
1、线性规划模型
线性规划模型的矩阵形式定义如下:
(LP)min f(x):=c T.x
s.t. A.x≤b
C.x=d
x∈[u,v]?R n
其中x∈R n是决策变量,系数矩阵c∈R n,A∈M p,n,b∈R p,C∈M q,n,d∈R q,u∈R n,v∈R n(M m,n表示所有实系数m行n列矩阵的集合)。
例1:
考虑下面的线性优化问题
max5x1+4x2+6x3
s.t.x1?x2+x3≤20
3x1+2x2+4x3≤42
?3x1?2x2≥?30
x≥0,x∈R3.
1.学习使用Matlab的优化工具箱求解该问题。
2.学习使用Cplex的命令行模式求解该问题(了解LP格式)。
3.学习使用Matlab调用Cplex求解该问题。
4.学习使用Yalmip求解该问题。
解答
1.使用Matlab的linprog求解线性规划问题
Matlab
>>c=[-5;-4;-6];A=[1-11;324;320];b=[20;42;30];...
u=[0;0;0];v=[inf;inf;inf];
>>[xopt,fopt,exitflag,output]=linprog(c,A,b,[],[],u,v);
Optimization terminated.
其计算结果如下:
5/11November-December2016巴院
Matlab
xopt=
0.0000
15.0000
3.0000
fopt=
-78.0000
exitflag=
1
2.CPLEX的命令行模式代码如下:
?输入问题模型,了解LP文件格式。
Cplex
CPLEX>e
Enter name for problem:ex1
Enter new problem['end'on a separate line terminates]:
max5x1+4x2+6x3
subject to
x1-x2+x3<=20
3x1+2x2+4x3<=42
-3x1-2x2>=-30
bounds
0<=x1
0<=x2
0<=x3
end
?求解模型
6/11November-December2016巴院
Cplex
CPLEX>opt
Tried aggregator1time.
No LP presolve or aggregator reductions.
Presolve time=0.02sec.(0.00ticks)
Iteration log...
Iteration:1Dual infeasibility=0.000000
Iteration:2Dual objective=78.000000
Dual simplex-Optimal:Objective=7.8000000000e+01
Solution time=0.03sec.Iterations=2(1)
Deterministic time=0.01ticks(0.17ticks/sec)
?显示计算结果
Cplex
CPLEX>disp sol var-
Variable Name Solution Value
x215.000000
x3 3.000000
All other variables in the range1-3are0.
CPLEX>disp sol obj
Dual simplex-Optimal:Objective=7.8000000000e+01
?保存模型为LP格式文件
Cplex
CPLEX>write
Name of file to write:ex1.lp
Problem written to file'ex1.lp'.
请尝试使用其他算法求解该问题,如:primopt,tranopt,baropt。
3.CPLEX提供两种方式在Matlab上建模和求解:Toolbox functions和Class API。
?使用Toolbox function`cplexlp'求解线性规划问题。调用格式和linprog类似。
7/11November-December2016巴院
Matlab
>>c=[-5,-4,-6];A=[1-11;324;320];b=[204230];...
u=[0,0,0];v=[inf,inf,inf];
>>[x,fval,exitflag,output]=cplexlp(c,A,b,[],[],u,v);
x=
15
3
fval=
-78
exitflag=
1
output=
cplexstatus:1
cplexstatusstring:'optimal'
iterations:2
algorithm:2
time:3.0112e-04
message:'Function converged to a solution x.'
其中,exit ag和cplexstatus代表求解的质量,algorithm表示使用的算法。具
体参见Matlab的帮助文档(Function Reference-Class List-Cplex)中的相关表格。
当然,我可以尝试使用其他算法求解该问题。设置方法时使
用cplexoptimset(参见cplexoptimset的帮助文档)。例如使用primal method:
Matlab
>>ops=cplexoptimset('Algorithm','primal')
>>[x,fval,exitflag,output]=cplexlp(c,A,b,[],[],u,v,[],ops);
?通过Class API使用Cplex类生成模型。
常用的方法有以下三种:1.从lp文件中读取数据初始化类对象。2.通过problem
structure(参见cplexlp)初始化类对象。3.通过类方法(addRows或addCols,参
见Cplex类)初始化类对象。
8/11November-December2016巴院
(a)从lp文件中读取数据初始化类对象
Matlab
>>cpx2=Cplex();
>>cpx2.readModel('ex1.lp');
>>cpx2.solve();
(b)通过problem structure初始化类对象
Matlab
>>pb.f=c;pb.Aineq=A;pb.bineq=b;pb.lb=u;pb.ub=v;
>>cpx=Cplex(pb);
>>cpx.solve();
(c)通过类方法(addRows或addCols)初始化类对象
Matlab
>>cpx1=Cplex();
>>cpx1.Model.sense='maximize';
>>cpx1.addCols([5;4;6],[],[0;0;0],[inf;inf;inf],[],...
['x1';'x2';'x3']);
>>cpx1.addRows(-inf,[1-11],20,'c1');
>>cpx1.addRows(-inf,[324],40,'c2');
>>cpx1.addRows(-30,[-3-20],inf,'c3');
>>cpx1.solve();
我们还可以通过Param属性修改Cplex参数。参数的设置请参考CPLEX的
帮助文档Parameters of CPLEX。
?使用Yalmip建模和求解该问题。
(a)定义模型
Matlab
>>c=[-5;-4;-6];A=[1-11;324;320];b=[20;42;30];
>>sdpvar x(3,1)
>>c=[-5;-4;-6];A=[1-11;324;320];b=[20;42;30];
>>Cons=[A*x<=b;x>=0];
>>Obj=c'*x;
(b)设置参数
9/11November-December2016巴院
Matlab
>>ops=sdpsettings('solver','cplex');
(c)最优化求解
Matlab
>>optimize(Cons,Obj,ops);
2、二次规划模型
二次规划模型的定义如下:
(QP)min f(x):=1x T.Q.x+c T.x
s.t. A.x≤b
C.x=d
x∈[u,v]?R n
其中x∈R n是决策变量,系数矩阵Q∈S n,c∈R n,A∈M p,n,b∈R p,C∈M q,n,d∈R q,u∈R n,v∈R n(S n表示实系数n行n列对称矩阵的集合)。
例2:
考虑下面的二次规划问题
min?x2
1+x2
2
?x1x2?2x1?6x2
s.t.x1+x2≤2
x1?2x2≥?2
2x1+x2≤3
x≥0,x∈R2.
1.使用Matlab的优化工具箱求解该问题。
2.使用Cplex的命令行模式求解该问题。
3.使用Matlab调用Cplex求解该问题。
4.使用Yalmip求解该问题。
10/11November-December2016巴院
3、混合整数规划模型
混合整数规划模型的定义如下:
(QP)min f T.x+g T.y
s.t. A.x+B.y≤b
C.x+
D.y=d
x∈R n,y∈Z m
其中x∈R n是决策变量,系数矩阵f∈R n,g∈R m,A∈M p,n,B∈M p,m,b∈R p,C∈M q,n,D∈M q,m,d∈R q。
例3:
考虑下面的混合整数规划问题
max x1+2x2+3x3+x4
s.t.?x1+x2+x3+10x4≤20
x1?3x2+x3≤30
x2?3.5x4=0
0≤x1≤40,x2≥0,x3≥0,2≤x4≤5,x4∈Z.
1.使用Matlab的优化工具箱求解该问题。
2.使用Cplex的命令行模式求解该问题。
3.使用Matlab调用Cplex求解该问题。
4.使用Yalmip求解该问题。
11/11November-December2016巴院