08- ILOG OPL进阶功能 优化软件与应用 教学课件.ppt
《08- ILOG OPL进阶功能 优化软件与应用 教学课件.ppt》由会员分享,可在线阅读,更多相关《08- ILOG OPL进阶功能 优化软件与应用 教学课件.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主讲人:雒兴刚东北大学系统工程研究所Email:luoxinggangise.neu.edu Tel:83682292优化软件与应用优化软件与应用第八章 ILOG OPL进阶功能ILOG 数据库连接1、与、与ODBC数据源的连接数据源的连接OPL支持通过支持通过ODBC数据源读取数据库中的数据,下面是数据库连接的语数据源读取数据库中的数据,下面是数据库连接的语句,都以大写的句,都以大写的DB开头:开头:DBconnectiondb(odbc,DRIVER=MicrosoftAccessDriver(*.mdb);DBQ=.examplesoploilDB.mdb/);功能:翻开数据库,建立数据
2、库连接;功能:翻开数据库,建立数据库连接;Db-数据库连接的名字;数据库连接的名字;“odbc-指明以指明以ODBC方式连接;方式连接;OPL也同时支持也同时支持Oracle等等RDB直连;直连;“Driver=-连接字符串;不同数据库对应的连接字符串不同,有的需连接字符串;不同数据库对应的连接字符串不同,有的需要提供用户名称和密码,具体请参阅要提供用户名称和密码,具体请参阅ODBC文档;文档;第八章 ILOG OPL进阶功能ILOG 数据库连接Mod文件:文件:stringGasolines=.;Dat文件:文件:DBconnectiondb(odbc,DRIVER=MicrosoftAcc
3、essDriver(*.mdb);DBQ=.examplesoploilDB.mdb/);GasolinesfromDBread(db,SELECTnameFROMGasData);Db必须通过前面的必须通过前面的DBconnection初始化完毕初始化完毕第八章 ILOG OPL进阶功能ILOG 数据库连接Mod文件:文件:tupleGasTypestringname;floatdemand;floatprice;floatoctane;floatlead;GasTypegasData=.;Dat文件:文件:DBconnectiondb(odbc,DRIVER=MicrosoftAccess
4、Driver(*.mdb);DBQ=.examplesoploilDB.mdb/);gasDatafromDBread(db,SELECT*FROMGasData);注意:字段名称要和注意:字段名称要和tuple定义成员的名称相同!定义成员的名称相同!第八章 ILOG OPL进阶功能ILOG 数据库连接利用利用DB语句删除表:语句删除表:DBexecute(db,droptableResult);新建一个表:新建一个表:DBexecute(db,createtableResult(oilvarchar(10),gasvarchar(10),blendreal,areal);输出运行结果到数据库
5、:输出运行结果到数据库:第八章 ILOG OPL进阶功能ILOG 数据库连接例如,例如,mod文件为文件为tupleResultstringoil;stringgas;floatblend;floata;stringOils=.;stringGasolines=.;Resultresult=|oinOils,ginGasolines;Dat文件为文件为DBconnectiondb(odbc,DRIVER=MicrosoftAccessDriver(*.mdb);DBQ=.examplesoploilDB.mdb/);GasolinesfromDBread(db,SELECTnameFROMGa
6、sData);OilsfromDBread(db,SELECTnameFROMOilData);resulttoDBupdate(db,INSERTINTOResult(oil,gas,blend,a)VALUES(?,?,?,?);第八章 ILOG OPL进阶功能ILOG 数据库连接2、与、与Excel的连接的连接OPL通过通过SheetConnection连接连接Excel表:表:SheetConnectionsheet(e:oilSheet.xls);功能:翻开数据库,建立数据库连接;功能:翻开数据库,建立数据库连接;“oilSheet.xls-文件名称,路径是文件名称,路径是OPL运行
7、路径;也可以给出全路径;运行路径;也可以给出全路径;sheet-连接的名称;连接的名称;第八章 ILOG OPL进阶功能ILOG 数据库连接读取读取Excel里的数据里的数据Mod文件:文件:stringGasolines=.;Dat文件:文件:SheetConnectionsheet(e:oilSheet.xls);GasolinesfromSheetRead(sheet,gas!A2:A4);注意注意“gas!A2:A4中,中,gas表示表示Excel的的worksheet的名字,的名字,A2:A4表示取表示取这个范围内的单元格。这个范围内的单元格。sheet必须通过前面的必须通过前面的D
8、Bconnection初始化完毕初始化完毕第八章 ILOG OPL进阶功能ILOG 数据库连接Mod文件:文件:tupleGasTypefloatdemand;floatprice;floatoctane;floatlead;GasTypegasData=.;intblend=1,2;Dat文件:文件:SheetConnectionsheet(e:oilSheet.xls);gasDatafromSheetRead(sheet,gas!B2:E4);类似的,可以用类似的,可以用SheetWrite将数据写到将数据写到Excel:blendtoSheetWrite(sheet,RESULT!B2
9、:B3);第八章 ILOG OPL进阶功能ILOG Script 介绍OPL语言主要着眼于模型的建模、表达约束和目标等。但是,优化应用很语言主要着眼于模型的建模、表达约束和目标等。但是,优化应用很多时候需要更强的功能去控制算法求解的流程和更强的处理数据的方法。多时候需要更强的功能去控制算法求解的流程和更强的处理数据的方法。作为一种非建模语言,作为一种非建模语言,ILOG脚本提供了这方面的功能。脚本提供了这方面的功能。主要的功能包括:主要的功能包括:数据前处理;数据前处理;数据后处理;数据后处理;流程控制;流程控制;第八章 ILOG OPL进阶功能ILOG Script介绍ILOG脚本和脚本和O
10、PL结合主要有两种方式,一种是嵌入结合主要有两种方式,一种是嵌入Execute语句,一种语句,一种是用是用main函数。二者都在函数。二者都在mod文件中。前者主要是用于设置参数、数据的文件中。前者主要是用于设置参数、数据的前处理如数组初始化和后处理,后者可以提供很强的综合能力,例如前处理如数组初始化和后处理,后者可以提供很强的综合能力,例如参数设置、数据处理、控制程序运行流程、设置改变模型参数重新运行模参数设置、数据处理、控制程序运行流程、设置改变模型参数重新运行模型等等。型等等。例如,可以用下面的例如,可以用下面的Execute语句设置语句设置Options里的参数仅对当前运行的里的参数仅
11、对当前运行的模型有效:模型有效:executeCPX_PARAMcplex.preind=0;cplex.simdisplay=2;注意注意CPX_PARAM不是关键字,是不是关键字,是execute块的名字,同一个文件里的块的名字,同一个文件里的execute块不要重名就可以了。块不要重名就可以了。第八章 ILOG OPL进阶功能ILOG Script 介绍下面的语句输出一行下面的语句输出一行HelloWorld提示信息:提示信息:executeHELLOwriteln(HelloWorld.);运行后在运行后在Output窗口的窗口的Console标签页会看到标签页会看到“Hellowor
12、ld字样。字样。另外,另外,execute语句在模型中的位置可以在约束和目标之前,也可以在后。语句在模型中的位置可以在约束和目标之前,也可以在后。如果在前,就在模型求解之前运行;如果之后,那么在模型求解后运行;如果在前,就在模型求解之前运行;如果之后,那么在模型求解后运行;可以用于数组的初始化。例如:可以用于数组的初始化。例如:intnNum=10;rangerSample=1.nNum;floatfMyArrayrSample;executeMy_Initfor(vari=1;i=nNum;i+)fMyArrayi=i*i;writeln(Array,i,=,fMyArrayi);第八章 I
13、LOG OPL进阶功能ILOG Script 介绍结果输出以下信息:结果输出以下信息:Array1=1Array2=4Array3=9Array4=16Array5=25Array6=36Array7=49Array8=64Array9=81Array10=100这里用到了这里用到了ILOG脚本的脚本的for语句,语法和语句,语法和C语言的用法类似。语言的用法类似。第八章 ILOG OPL进阶功能ILOG Script 介绍另外一种方式就是使用另外一种方式就是使用main函数。如果函数。如果mod文件中含有文件中含有main函数,函数,IDE就就会:会:执行约束和目标前的执行约束和目标前的ex
14、ecute语句;语句;不自动执行模型求解,也不会执行约束和目标后的不自动执行模型求解,也不会执行约束和目标后的execute语句;语句;执行执行main函数,然后结束;函数,然后结束;例如,可以在一个翻开的例如,可以在一个翻开的mod文件中输入一个文件中输入一个main函数:函数:mainthisOplModel.generate();这里的这里的thisOplModel是脚本的一个关键字,表示当前是脚本的一个关键字,表示当前mod文件里的模型和文件里的模型和附带的附带的dat文件数据如果有文件数据如果有dat文件。文件。第八章 ILOG OPL进阶功能ILOG Script 介绍可以尝试下面
15、的可以尝试下面的main函数:函数:mainthisOplModel.generate();with(thisOplModel)writeln(HelloWorld.);和和executeHELLOwriteln(“HelloWorld.);功能相同。功能相同。另一个重要的关键字是另一个重要的关键字是cplex,表示当前模型对应的算法实例。参见下例:,表示当前模型对应的算法实例。参见下例:mainthisOplModel.generate();with(thisOplModel)writeln(HelloWorld.);cplex.solve();curr=cplex.getObjValue(
16、);writeln(Optimal=:,curr);第八章 ILOG OPL进阶功能ILOG Script 介绍也可以在也可以在main中,根据已有的中,根据已有的mod和和dat文件,重新建立新的模型,例如:文件,重新建立新的模型,例如:mainvarmySrc=newIloOplModelSource(production.mod);varmyDef=newIloOplModelDefinition(mySrc);varmyCplex=newIloCplex();varmyOpl=newIloOplModel(myDef,myCplex);varmyData=newIloOplDataSo
17、urce(production.dat);myOpl.addDataSource(myData);myOpl.generate();myCplex.solve();myOpl.postProcess();curr=myCplex.getObjValue();writeln(Optimal=:,curr);第八章 ILOG OPL进阶功能ILOG Script 介绍脚本也支持函数的定义和调用,语法和脚本也支持函数的定义和调用,语法和C语言类似,但不支持递归和嵌套。语言类似,但不支持递归和嵌套。例如,下面的定义了一个打印的函数,并在后面调用:例如,下面的定义了一个打印的函数,并在后面调用:func
18、tionmyPrint(myPara)for(vinmyOpl.Products)writeln(inside,v,=,myPara.insidev);writeln(outside,v,=,myPara.outsidev);myPrint(myOpl);同时,可以设置断点,并用同时,可以设置断点,并用stepinto、stepoutside等命令进行调试。等命令进行调试。第八章 ILOG OPL进阶功能ILOG Script 介绍下面是一个循环调用求解的例子。每次修改面粉的下面是一个循环调用求解的例子。每次修改面粉的capacity,重新求解模型。,重新求解模型。mainvarmySrc=n
19、ewIloOplModelSource(production.mod);varmyDef=newIloOplModelDefinition(mySrc);varmyCplex=newIloCplex();varmyOpl=newIloOplModel(myDef,myCplex);varmyData=newIloOplDataSource(production.dat);myOpl.addDataSource(myData);myOpl.generate();for(varv=1;v=10;v+)myCplex.solve();curr=myCplex.getObjValue();writel
20、n(Optimal=:,curr);varmyBidingData=myOpl.dataElements;myBidingData.capacityflour+=10;myOpl=newIloOplModel(myDef,myCplex);myOpl.addDataSource(myBidingData);myOpl.generate();本例未加出错处理!本例未加出错处理!StartingScriptexecution.Optimal=:372Optimal=:368Optimal=:364Optimal=:360Optimal=:355Optimal=:355Optimal=:355Opt
21、imal=:355Optimal=:355FinishedScriptexecution第八章 ILOG OPL进阶功能ILOG Script 介绍为了在迭代过程中使用上次求解的信息,可以使用为了在迭代过程中使用上次求解的信息,可以使用CplexBasis,程序修改如下:,程序修改如下:mainvarmyBasis=newIloOplCplexBasis();varmySrc=newIloOplModelSource(production.mod);varmyDef=newIloOplModelDefinition(mySrc);varmyCplex=newIloCplex();varmyOp
22、l=newIloOplModel(myDef,myCplex);varmyData=newIloOplDataSource(production.dat);myOpl.addDataSource(myData);myOpl.generate();for(varv=1;vGeneralSettings设置图形显示界面、编辑区特性、设置图形显示界面、编辑区特性、OPL的显示等。的显示等。启动;启动;最近文件;最近文件;文件关联;文件关联;缺省目录;缺省目录;第八章 ILOG OPL进阶功能ILOG 选项卡1、界面和语言选项、界面和语言选项OptionsGeneralSettings第八章 ILOG
23、 OPL进阶功能ILOG 选项卡1、界面和语言选项、界面和语言选项OptionsGeneralSettings显示的都是用于预览显示的都是用于预览的的samplefont!第八章 ILOG OPL进阶功能ILOG 选项卡1、界面和语言选项、界面和语言选项OptionsGeneralSettingsDisplayedmatrix是是否用正方形显示;否用正方形显示;Displayedmatrix中中的零是否显示;的零是否显示;第八章 ILOG OPL进阶功能ILOG 选项卡1、界面和语言选项、界面和语言选项OptionsProjectOptions最下边最下边第八章 ILOG OPL进阶功能ILO
24、G 选项卡Displaywidth:每行多少字符;:每行多少字符;Displayprecision:显示小数点后的位数;:显示小数点后的位数;Errorlimit:显示最多的错误数量;:显示最多的错误数量;Bigmapnamingthreshold:超过此值,输出数组按照:超过此值,输出数组按照“大图方式即一大图方式即一种简略的显示方式;种简略的显示方式;Displayarrayindices:是否显示数组下标;:是否显示数组下标;Displaycomponentnames:tuple里的成员名称是否显示;里的成员名称是否显示;Displayonecomponentperline:成员是否占一
25、行;:成员是否占一行;Forceelementusage:如果选中,那么没用的变量会自动警示;:如果选中,那么没用的变量会自动警示;Postprocesspartialsolutions:partialsolutions也参与也参与Postprocess;Displaysolution:如果不选,那么只显示目标值;:如果不选,那么只显示目标值;Displayrelaxations:如果无解,显示:如果无解,显示CPLEX建议的松弛方案;建议的松弛方案;Displayconflicts:如果无解,显示检测到的冲突;:如果无解,显示检测到的冲突;Collectprofilinginformatio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08- ILOG OPL进阶功能 优化软件与应用 教学课件 08 OPL 进阶 功能 优化 软件 应用 教学 课件
限制150内