第六章 ILOG OPL 基础 优化软件与应用 教学课件.ppt
《第六章 ILOG OPL 基础 优化软件与应用 教学课件.ppt》由会员分享,可在线阅读,更多相关《第六章 ILOG OPL 基础 优化软件与应用 教学课件.ppt(69页珍藏版)》请在沃文网上搜索。
1、第六章 ILOG OPL 基础ILOG 简 介q Founded 1987q 590 employeesq 2,000+customersq Selling in 30 countriesq NASDAQ/Euronext3002001207098990001ISV/OEMPartnersMost influential IT companies for 第六章 ILOG OPL 基础ILOG 简 介Views Component SuiteJViews Component SuiteJTGOCPLEXSolverJRulesRules第六章 ILOG OPL 基础ILOG 简 介ILOGIL
2、OG CPLEX CPLEXILOG Solver&ILOG Solver&ILOG JSolverILOG Concert TechnologyILOG Concert Technology (C+C+&Java)HybridHybridILOGILOGOPLOPLStudioStudio约束规划约束规划solver用用java表达表达运输行业用运输行业用配置、销售应用配置、销售应用第六章 ILOG OPL 基础ILOG 简 介Core EnginesILOG Solver-Constraint Programming EngineILOG CPLEX-Math Programming En
3、gineVertical Engine ExtensionsILOG Scheduler-Constraint-Based SchedulingILOG Dispatcher-Vehicle Routing,Technician DispatchingILOG Configurator-Product and Service ConfigurationModeling ToolsOPL Studio-Rapid Development of Optimization AppsAMPL-Modeling Support for CPLEXWe use OPL Studio here since
4、its high level language makes it an easy starting point第六章 ILOG OPL 基础 MonthWeekDayHourTime stepsScopeStrategicTacticalOperationalApplicationLong-termplanningPublishedScheduleOperationalSchedulingDriversEconomicsFeasibilityTechnologyLPMIP/HybridCPRange of Optimization ApplicationsILOG has optimizati
5、on technology for the entire planning horizon第六章 ILOG OPL 基础ILOG OPL 简明教程-(1-IDE简介)OPLIDE开发环境开发环境介绍介绍1)打开打开OPLIDE.第六章 ILOG OPL 基础ILOG OPL 简明教程-(1-IDE简介)2)在在OPLIDE开发环境中有两种方式可以实现运行上面的代码:开发环境中有两种方式可以实现运行上面的代码:1以建立工程的方式:以建立工程的方式:第六章 ILOG OPL 基础ILOG OPL 简明教程-(1-IDE简介)第六章 ILOG OPL 基础ILOG OPL 简明教程-(1-IDE简介
6、)2以建立模型的方式:以建立模型的方式:第六章 ILOG OPL 基础ILOG OPL 简明教程-(1-IDE简介)推荐使用以建立工程的方式进行开发,规范且方便以后开发。推荐使用以建立工程的方式进行开发,规范且方便以后开发。第六章 ILOG OPL 基础ILOG OPL 简明教程-(1-IDE简介)求解求解按钮按钮第六章 ILOG OPL 基础ILOG OPL 简明教程-(2-最简单的例子)例例:一个简单的线性规划问题一个简单的线性规划问题某公司生产氨气某公司生产氨气 (N H3N H3)and)and 氯化铵氯化铵 (N H4 ClN H4 Cl).).公司的日处理能力为公司的日处理能力为5
7、0 50 单位的单位的 氮氮 (N N),180),180 单位的氢单位的氢 (H H),40),40 单位氯单位氯 (ClCl).).氨气的利润是氨气的利润是 40 euros40 euros每单位每单位、氯氯化铵的利润是化铵的利润是50 euros 50 euros 每单位每单位.如何确定如何确定氨气氨气和和氯化铵氯化铵的产量,使利润最大的产量,使利润最大目标函数:目标函数:max z=40*Gas+50*Chloridemax z=40*Gas+50*Chloride满足约束条件:满足约束条件:Gas+Chloride=50 Gas+Chloride=50 3*Gas+4*Chlorid
8、e=180 3*Gas+4*Chloride=180 Chloride=40 Chloride=40 第六章 ILOG OPL 基础ILOG OPL 简明教程-(2-最简单的例子)OPLIDE开发环境中对应编码:开发环境中对应编码:dvarfloat+gas;dvarfloat+chloride;/constraintnaming.constraintct1;constraintct2;constraintct3;maximize40*gas+50*chloride;subjecttoct1=gas+chloride=50;ct2=3*gas+4*chloride=180;ct3=chlori
9、de=40;在在OPLIDE开发环境中开发环境中Console窗口窗口的输出结果:的输出结果:Finalsolutionwithobjective2300:gas=20;chloride=30;注意:注释语句和注意:注释语句和C语语言同,支持言同,支持/和和/*/注意:注意:OPL语言区分大语言区分大小写!小写!第六章 ILOG OPL 基础ILOG OPL 简明教程-(2-最简单的例子)说明说明:dvar,+,constraint,maximize,subjectto都是什么含义?都是什么含义?dvar:(decisionvariable)是是OPL的关键字,放在前面讲过的的关键字,放在前面
10、讲过的“定义变量定义变量”之前之前,表示此定义的变量是决策变量。表示此定义的变量是决策变量。基本格式是:基本格式是:dvar数据类型数据类型变变量名量名;例如:例如:dvarfloatgas;+:一般放在前面讲过的定义的一般放在前面讲过的定义的“决策变量决策变量”中的中的“基本数据类型基本数据类型”之后,之后,表示所定义的决策变量是正数。基本格式是:数据类型表示所定义的决策变量是正数。基本格式是:数据类型+变量名变量名;例如:例如:dvarfloat+gas;/“+”只能在决策变量中使用只能在决策变量中使用.?有没有有没有dvarfloat-gas;的用法?的用法?constraint:是是O
11、PL的关键字,定义方式同的关键字,定义方式同“定义变量定义变量”,放在定义的约,放在定义的约束变量名之前,表示此定义的变量是约束变量。基本格式:束变量名之前,表示此定义的变量是约束变量。基本格式:constraint约约束变量名束变量名;例如:例如:constraintct1;说明:例子中的程序在改写成说明:例子中的程序在改写成不加入不加入“约约束变量束变量”的情况后,仍然可以正常运行的情况后,仍然可以正常运行,在以后的例子中会发现有,在以后的例子中会发现有“约约束变量束变量”的程序要更健壮一些,所以的程序要更健壮一些,所以推荐使用推荐使用“约束变量约束变量”。第六章 ILOG OPL 基础I
12、LOG OPL 简明教程-(2-最简单的例子)maximize:是是OPL的关键字,放在表达式之前,表示求此表的关键字,放在表达式之前,表示求此表达式的最大值。基本格式:达式的最大值。基本格式:maximize表达式表达式;例如:例如:maximize40*gas+50*chloride;subjectto:是是OPL的关键字,放在一组约束之前,是用于约的关键字,放在一组约束之前,是用于约束的另一种形式。基本格式:束的另一种形式。基本格式:subjectto一组约束一组约束;例如:例如:subjecttoct1=gas+chloride=50;ct2=3*gas+4*chloride=180;
13、ct3=chloride=40;如果是最小化问题如果是最小化问题,则使用则使用minimize第六章 ILOG OPL 基础ILOG OPL 简明教程-(2-最简单的例子)将数学模型转化成将数学模型转化成OPL语言方法语言方法数学模型中的目标函数:目标函数:max z=40*Gas+50*Choride OPL语言:maximize 40*Gas+50*Chloride;第六章 ILOG OPL 基础ILOG OPL 简明教程-(2-最简单的例子)将数学模型转化成将数学模型转化成OPL语言方法语言方法数学模型中的约束条件:约束条件:Gas+Chloride=50 3*Gas+4*Chlorid
14、e=180 Chloride=40 OPL语言:subject to ct1=gas*chloride=50;ct2=3*gas+4*chloride=180;ct3=chloride=40;第六章 ILOG OPL 基础ILOG OPL 简明教程-(3-使用数组)使用数组使得模型可读性好,而且容易扩展。通过使用数组,前面的例子使用数组使得模型可读性好,而且容易扩展。通过使用数组,前面的例子可以表示为:可以表示为:stringProducts=gas,chloride;dvarfloatproductionProducts;maximize40*productiongas+50*product
15、ionchloride;subjecttoproductiongas+productionchloride=50;3*productiongas+4*productionchloride=180;productionchloride=40;对比对比LINGO的集;的集;对比对比C的数组下标的数组下标具体解释参见下页具体解释参见下页第六章 ILOG OPL 基础ILOG OPL 简明教程-(3-使用数组)说明:说明:stringProducts=gas,chloride;声明一组字串集合(声明一组字串集合(asetofstrings),表示公司的两个产品),表示公司的两个产品dvarfloatp
16、roductionProducts;声明一个决策变量数组,包含声明一个决策变量数组,包含2个变量个变量,production“gas”和和productionchloride第六章 ILOG OPL 基础ILOG OPL 简明教程-(3-使用数组)注意,很多程序员会把前面的例子简化如下:注意,很多程序员会把前面的例子简化如下:但是会导致编译出错。定义数组的语句中,但是会导致编译出错。定义数组的语句中,数组元素个数数组元素个数不能像高级语言不能像高级语言那样直接给出一个常量,而应该是一个范围那样直接给出一个常量,而应该是一个范围(Range)。正确的写法是:。正确的写法是:第六章 ILOG OP
17、L 基础ILOG OPL 简明教程-(3-使用数组)rangekinds=1.2;dvarfloatproductionkinds;maximize40*production1+50*production2;subjecttoproduction1+production2=50;3*production1+4*production2=180;production2=40;第六章 ILOG OPL 基础ILOG OPL 简明教程-(3-使用数组)看看前面的模型代码:看看前面的模型代码:stringProducts=gas,chloride;dvarfloatproductionProducts;
18、maximize40*productiongas+50*productionchloride;subjecttoproductiongas+productionchloride=50;3*productiongas+4*productionchloride=180;productionchloride=40;可读性还是不好!可读性还是不好!数据直接嵌入到了程序中,不利于扩展数据直接嵌入到了程序中,不利于扩展第六章 ILOG OPL 基础ILOG OPL 简明教程-(3-使用数组)可将数据定义部分进一步修改为:可将数据定义部分进一步修改为:stringProducts=gas,chloride;
19、stringComponents=nitrogen,hydrogen,chlorine;floatdemandProductsComponents=1,3,0,1,4,1;floatprofitProducts=40,50;floatstockComponents=50,180,40;dvarfloat+productionProducts;3种成分种成分受益系数的数组受益系数的数组库存的数组库存的数组产品和成分之间的关系的数组,即每种产产品和成分之间的关系的数组,即每种产品需要的成分的数量。品需要的成分的数量。2种产品种产品对比对比LINGO集的用法集的用法-更接近于更接近于C习惯习惯第六章
20、 ILOG OPL 基础ILOG OPL 简明教程-(3-使用数组)那么,原来的目标函数那么,原来的目标函数maximize40*productiongas+50*productionchloride;就可以修改为:就可以修改为:maximizesum(pinProducts)profitp*productionp;函数,表明针对对每一个成员函数,表明针对对每一个成员p,计算表达式,计算表达式profitp*productionp的和。的和。收益系数收益系数决策变量决策变量对比对比LINGO用法:用法:MAX=SUM(A(I):P(I)*X(I);第六章 ILOG OPL 基础ILOG OPL
21、 简明教程-(3-使用数组)同理,原来的约束同理,原来的约束subjecttoproductiongas+productionchloride=50;3*productiongas+4*productionchloride=180;productionchloride=40;可以修改为:可以修改为:constraintct;subjecttoct=forall(cinComponents)sum(pinProducts)demandpc*productionp=stockc;函数,表明针对每种成分函数,表明针对每种成分c(故共有(故共有3个约束),后面的个约束),后面的sum表达式小于表达式小
22、于stockc必须满足必须满足Sum函数的用法见上页函数的用法见上页对比对比LINGO用法:用法:FOR(WH(I):SUM(VD(J):X(I,J)=AI(I);第六章 ILOG OPL 基础ILOG OPL 简明教程-(3-使用数组)stringProducts=gas,chloride;stringComponents=nitrogen,hydrogen,chlorine;floatdemandProductsComponents=1,3,0,1,4,1;floatprofitProducts=40,50;floatstockComponents=50,180,40;dvarfloat+
23、productionProducts;/constraintnaming.constraintct;maximizesum(pinProducts)profitp*productionp;subjecttoct=forall(cinComponents)sum(pinProducts)demandpc*productionp=stockc;完整代码:完整代码:第六章 ILOG OPL 基础ILOG OPL 简明教程-(4-分离数据)接上节。目前的文件中,数据和模型代码集中在一起,都保存在接上节。目前的文件中,数据和模型代码集中在一起,都保存在mod文件文件中。好的程序结构应该将数据和模型代码分
24、离,保存在不同的文件中。中。好的程序结构应该将数据和模型代码分离,保存在不同的文件中。下面我们通过例子来说明在下面我们通过例子来说明在OPL中如何实现上述目的。中如何实现上述目的。将前面代码中带有初始化数据的部分,将前面代码中带有初始化数据的部分,全部换成全部换成3个点个点:stringProducts=.;stringComponents=.;floatdemandProductsComponents=.;floatprofitProducts=.;floatstockComponents=.;第六章 ILOG OPL 基础ILOG OPL 简明教程-(4-分离数据)如下所示,添加一个如下所
25、示,添加一个sample.dat文件到当前工程。文件到当前工程。第六章 ILOG OPL 基础ILOG OPL 简明教程-(4-分离数据)在数据文件中键入下面的内容:在数据文件中键入下面的内容:Products=gas,chloride;Components=nitrogen,hydrogen,chlorine;profit=40,50;stock=50,180,40;demand=130,141;运行程序,结果和前面的相同。运行程序,结果和前面的相同。第六章 ILOG OPL 基础ILOG OPL 简明教程-(4-分离数据)规范的完整写法:规范的完整写法:Products=gas,chlor
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 ILOG OPL 基础 优化软件与应用 教学课件 第六 优化 软件 应用 教学 课件