版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲人:雒兴刚东北高校系统工程探讨所Email:luoxinggang@Tel:83682292优化软件与应用第九章ILOG
OPL建模语言OPL数据类型1、整型:范围例:inti=25;intn=3;intsize=n*n;//留意这种初始化很特殊2、浮点型:双精度,IEEE754standardfloatf=3.2;第九章ILOG
OPL建模语言OPL数据类型3、字符串型例如{string}Tasks={"masonry","carpentry","plumbing","ceiling","roofing","painting","windows","facade","garden","moving"};定义字符串一个集合。字符串中的特殊字符:字符串换行:第九章ILOG
OPL建模语言OPL数据结构1、Range:给定最小和最大值。rangeRows=1..10;intn=8;rangeRows=n+1..2*n+1;用途1:数组定义rangeR=1..100;intA[R];//Aisanarrayof100integers用途2:循环rangeR=1..100;forall(iinR){//elementofaloop...}用途3:变量定义dvarintiinR;第九章ILOG
OPL建模语言OPL数据结构2、数组一维数组:inta[1..4]=[10,20,30,40];floatf[1..4]=[1.2,2.3,3.4,4.5];stringd[1..2]=["Monday","Wednesday"];inta[Days]=[10,20,30,40,50,60,70];即元素下标可以是字符串,如a["Monday"],...,a["Sunday"].tupleEdges{intorig;intdest;}{Edge}Edges={<1,2>,<1,4>,<1,5>};inta[Edges]=[10,20,30];即下标也可以是Tuple,a[<1,2>],a[<1,4>],anda[<1,5>]第九章ILOG
OPL建模语言OPL数据结构2、数组多维数组:inta[1..2][1..3]=...;inta[Days][1..3]=...;//混合下标{string}Warehouses=...;{string}Customers=...;tupleRoute{stringw;stringc;}{Route}routes=...;inttransp[routes]=...//事实上transp是二维数组{string}Warehouses...;{string}Customers...;tupleRoute{Warehousesw;Customersc;}{Route}routes=...;inttransp[routes]=...可能是稀疏矩阵两种哪个好些?第九章ILOG
OPL建模语言OPL数据结构3、Tuple:结构体tuplePoint{intx;inty;};Pointpoint[iin1..3]=<i,i+1>;Pointp=<2,3>;Pointpoint[iin1..3]=<i,i+1>;//Tuple数组{Point}points={<1,2>,<2,3>};//Tuple集合tupleRectangle{Pointll;Pointur;}//Tuple的TuplePointp=<2,3>;intx=p.x;//取Tuple的成员但是,Tuple的定义里不能出现Tuple集合和Tuple数组!第九章ILOG
OPL建模语言OPL数据结构4、集合:可以写成{T},或者setof(T){int}setInt=...;setof(Precedence)precedences=...;集合初始化:tuplePrecedence{intbefore;intafter;}{Precedence}precedences={<1,2>,<1,3>,<3,4>};第九章ILOG
OPL建模语言OPL决策变量和约束OPL决策变量运用关键字dvardvarinttransp[Orig][Dest]in0..100;//二维数组变量;限制决策变量范围tupleRoute{Cityorig;Citydest}{Route}routes=...:dvarinttransp[routes]in0..100;//以有限tuple集routes为索引rangeCapacity=0..limitCapacity;dvarinttransp[Orig][Dest]inCapacity;//in后面是rangedvarintaverageDelayin0..maxDelay;//in后面接变量假如不同决策变量的范围不同,可以这样定义intcapacity[route]=...;dvarinttransp[rinroutes]in0..capacity[r];第九章ILOG
OPL建模语言OPL决策变量和约束也可以用+关键字限制决策变量只能为正:dvarint+x;//nonnegativeintegerdecisionvariabledvarfloat+y;//non-negativedecisionvariabledvarbooleanz;//booleandecisionvariable上述定义等价于:dvarintxin0..maxint;dvarfloatyin0..infinity;dvarintzin0..1;其中maxint、infinity为OPL关键字。
二维决策变量数组也可以逐个元素给定范围:dvarfloattransp[oinOrig][dinDest]in0..cap[o][d];约束可以单个定义,也可以定义成数组形式,如:constraintcapCstr[Machines];第九章ILOG
OPL建模语言OPL数据初始化总的来说,OPL数据初始化可以分为2种,一种是在mod文件完成,另一种是在dat文件完成。1、数组初始化初始化多维数组:/*.modfile*/inta[1..2][1..3]=...;/*.datfile*/a=[[10,20,30],[40,50,60]];依据(index,value)的方式初始化数组:但留意要用#[…]#方式元素次序无关。参见下页例子:/*.modfile*/inta[Days]=...;/*.datfile*/a=#["Monday":1,"Tuesday":2,"Wednesday":3,"Thursday":4,"Friday":5,"Saturday":6,“Sunday”:7]#;第九章ILOG
OPL建模语言OPL数据初始化前面的整型索引数组的初始化也可以写成:/*.modfile*/inta[1..2][1..3]=...;/*.datfile*/a=#[2:[40,50,60],1:[10,20,30]]#;数组初始化也可以用ILOG脚本实现,如:rangeR=1..10;inta[R];execute{for(variinR){ a[i]=i+1;}}行下标,留意这里有意颠倒了次序,但结果相同第九章ILOG
OPL建模语言OPL数据初始化也可以用表达式方式初始化,例如上面的例子也可写为:inta[iin1..10]=i+1;多维数组也可以用这种方式,如:intm[iin0..10][jin0..10]=10*i+j;也可以用一个已知数组初始化,如:intm[Dim1][Dim2]=...;intt[jinDim2][iinDim1]=m[i][j];也可以用index:item
方式初始化,如:inta[1..10]=[i-1:i|iin2..11];//效果同前面的2个例子intm[0..10][0..10]=[i:[j:10*i+j]|i,jin0..10];第九章ILOG
OPL建模语言OPL数据初始化再如,下面的ILOG脚本初始化:GasTypegas[Gasolines];execute{for(vargingasData){ gas[]=g;}}用index:item
方式可以写成:GasTypegas[Gasolines]=[:g|gingasData];第九章ILOG
OPL建模语言OPL数据初始化2、Tuple初始化单个变量初始化干脆用<…>给出成员即可,如:Pointp=<3,2>;Tuple中含有数组的初始化:tupleRectangle{intid;Pointp[2];}Rectangler=<1,[<0,0>,<10,10>]>;Tuple中含有集合的初始化:{string}Task...;tuplePrecedence{Taskname;{string}after;}Precedencep=<a1,{a2,a3,a4,a5}>;第九章ILOG
OPL建模语言OPL数据初始化3、集合初始化结合接受一对大括号进行初始化,如:tuplePrecedence{intbefore;intafter;}{Precedence}precedences=...;precedences={<1,2>,<1,3>,<3,4>};可以在初始化时运用集合运算符,如:{int}s1={1,2,3};{int}s2={1,4,5};{int}i=s1inters2;{int}j={1,4,8,10}inters2;{int}u=s1union{5,7,9};{int}d=s1diffs2;结果是:i={1},u={1,2,3,5,7,9},d={2,3},sd={2,3,4,5}.留意inter等是集合运算符第九章ILOG
OPL建模语言OPL数据初始化可以利用range初始化集合,如:{int}s=asSet(1..10)//初始化s为{1,2,..,10}asSet是内置函数,功能是将range转换为集合也可以用表达式方式初始化,格式是pinS:condition,如:{int}s={i|iin1..10:imod3==1};//结果是{1,4,7,10}.也可以定义集合数组(数组元素为一个集合),如:{int}a[iin3..4]={e|ein1..10:emodi==0};初始化a[3]为{3,6,9},a[4]为{4,8}第九章ILOG
OPL建模语言OPL数据初始化集合很多时候可以用来表示稀疏矩阵,如:{string}Nodes...;intedges[Nodes][Nodes]=...;tupleEdge{Nodeso;Nodesd;}{Edge}setEdges={<o,d>|o,dinNodes:edges[o][d]==1};另一个稍困难一些的例子:{string}Resources...;{string}Tasks...;Tasksres[Resources]=...;tupleDisjunction{{string}first;{string}second;}{Disjunction}disj={<i,j>|rinResources,orderedi,jinres[r]};关键字,强制i<j关键字,强制i<j第九章ILOG
OPL建模语言OPL数据一样性为了保证输入数据的正确性,可以通过assert语句来判定数据的一样性。这样在程序运行前,可以通过编译系统提前发觉问题。例如,原是的需求和供应数据具有关联性(总和相等):intdemand[Customers]=...;intsupply[Suppliers]=...;assertsum(sinSuppliers)supply[s]==sum(cinCustomers)demand[c];再如,假如是多产品的状况:intdemand[Customers][Products]=...;intsupply[Suppliers][Products]=...;assertforall(pinProducts) sum(sinSuppliers) supply[s][p]==sum(cinCustomers)demand[c][p];第九章ILOG
OPL建模语言OPL数据前处理OPL前处理运用ILOG脚本,可以进行CPLEX参数设定,可以变更变量的值、决策变量的范围,但range和约束类型不能变更。下面是一个前处理的例子:intn=...;rangeR=1..n;intA[R]=...execute{ for(rinR) { if(A[r]<0){A[r]=0;} }}OPL数据处理的次序如下:1、各种数据源(如mod文件,dat文件,excel文件,ODBC等);2、execute块;3、assert块;第九章ILOG
OPL建模语言表达式和运算符整型表达式:可以运用+,-,*,div(整除),mod(or%)等运算符;可以运用abs等系统函数;整型常量maxint;浮点表达式:可以运用+,-,/,*等运算符;浮点常量infinity;条件表达式和C语言类似:语法:(condition)?thenExpr:elseExpr例:intvalue=...;intsignValue=(value>0)?1:(value<0)?-1:0;intabsValue=(value>=0)?value:-value;第九章ILOG
OPL建模语言表达式和运算符聚合表达式:可以利用聚合运算符计算和(sum),连乘(prod),最小(min),最大(max)等。例如:intcapacity[Routes]=...;intminCap=min(rinRoutes)capacity[r];集合表达式:可以利用union,inter,diff等集合运算符,也可以利用集合函数。例如,现有S是一个集合{3,6,7,9}item是S的一个集合成员n是一个整型数;第九章ILOG
OPL建模语言表达式和运算符S是一个集合{3,6,7,9}第九章ILOG
OPL建模语言表达式和运算符各类运算符总结和优先级:优先级高第九章ILOG
OPL建模语言ILOG约束约束的位置:目标函数必需位于约束之前;约束命名:虽然约束可以不命名,但不利于程序调试。约束也可以用数组方式,如:constraintcapacityCons[Resources];constraintdemandCons[Products];
minimizesum(pinProducts)(insideCost[p]*inside[p]+outsideCost[p]*outside[p]);subjectto{forall(rinResources)capacityCons[r]=sum(pinProducts)consumption[p,r]*inside[p]<=capacity[r];forall(pinProducts)demandCons[p]=inside[p]+outside[p]>=demand[p];}第九章ILOG
OPL建模语言ILOG遍历参数有多种形式和用途:1、pinS
intn=6;ints==sum(iin1..n)i*i;//用于range{string}Products={"car","truck"};floatcost[Products]=[12000,10000];floatmaxCost=max(pinProducts)cost[p];//用于stringset{string}Cities={“Paris”,“London”,“Berlin”};//用于tuplesettupleConnection{stringorig;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45024-2024云制造服务评估要求
- 延安大学《立体构成》2021-2022学年第一学期期末试卷
- 许昌学院《舞蹈学专业导论与创业基础》2021-2022学年第一学期期末试卷
- 四年级数学(四则混合运算)计算题专项练习与答案
- 四年级数学(上)计算题专项练习及答案
- 徐州工程学院《明清经典小说文化解读》2022-2023学年第一学期期末试卷
- 社区爱心助力计划
- 学校社团发展规划计划
- 徐州工程学院《服装结构设计(二)》2022-2023学年第一学期期末试卷
- 研究开发的创新项目进度安排计划
- JGJT70-2009 砌筑砂浆试验方法
- 山东省青岛市市南区2023年七年级上学期期末数学试题附答案
- 期末复习Unit+6-10+单元信息摘录专项练习 人教版英语九年级全册
- MSA-GRR数据自动生成工具演示教学
- JGT388-2012 风机过滤器机组
- 工程水文学题库及题解(全)
- 肺癌化疗临床路径
- 中南财经政法大学慕课《以案说法》MOOC章节测试题答案
- 试生产应具备的条件
- 电磁场与电磁波智慧树知到课后章节答案2023年下同济大学
- 交安工程专项施工方案
评论
0/150
提交评论