09-第九章-ILOG-OPL-建模语言

上传人:彩** 文档编号:252485220 上传时间:2024-11-16 格式:PPT 页数:28 大小:123.50KB
收藏 版权申诉 举报 下载
09-第九章-ILOG-OPL-建模语言_第1页
第1页 / 共28页
09-第九章-ILOG-OPL-建模语言_第2页
第2页 / 共28页
09-第九章-ILOG-OPL-建模语言_第3页
第3页 / 共28页
资源描述:

《09-第九章-ILOG-OPL-建模语言》由会员分享,可在线阅读,更多相关《09-第九章-ILOG-OPL-建模语言(28页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,主讲人:雒兴刚,东北大学系统工程争论所,Email:,Tel:83682292,优化软件与应用,第九章,ILOG,OPL,建模语言,OPL 数据类型,1、整型:范围,例:,int i=25;,int n=3;,int size=n*n;/留意这种初始化很特殊,2、浮点型:双精度,IEEE 754 standard,float f=3.2;,第九章,ILOG,OPL,建模语言,OPL 数据类型,3、字符串型,例如string Tasks=“masonry“,“carpentry“,“plumbing“,“ce

2、iling“,“roofing“,“painting“,“windows“,“facade“,“garden“,“moving“;,定义字符串一个集合。,字符串中的特殊字符:,字符串换行:,第九章,ILOG,OPL,建模语言,OPL 数据构造,1,、,Range,:给定最小和最大值。,range Rows=1.10;,int n=8;range Rows=n+1.2*n+1;,用途,1,:数组定义,range R=1.100;,int AR;/A is an array of 100 integers,用途,2,:循环,range R=1.100;,forall(i in R)/element

3、 of a loop.,用途,3,:变量定义,dvar int i in R;,第九章,ILOG,OPL,建模语言,OPL 数据构造,2、数组,一维数组:,int a1.4=10,20,30,40;,float f1.4=1.2,2.3,3.4,4.5;,string d1.2=“Monday“,“Wednesday“;,int aDays=10,20,30,40,50,60,70;,即元素下标可以是字符串,如a“Monday“,.,a“Sunday“.,tuple Edges int orig;int dest;,Edge Edges=,;,int aEdges=10,20,30;,即下标也

4、可以是Tuple,a,a,and a,第九章,ILOG,OPL,建模语言,OPL 数据构造,2,、数组,多维数组:,int a1.21.3=.;,int aDays1.3=.;/,混合下标,string Warehouses=.;,string Customers=.;,tuple Route string w;string c;,Route routes=.;,int transproutes=./,实际上,transp,是二维数组,string Warehouses.;,string Customers.;,tuple Route Warehouses w;Customers c;,Rou

5、te routes=.;,int transproutes=.,可能是稀疏矩阵,两种哪个好些?,第九章,ILOG,OPL,建模语言,OPL 数据构造,3、Tuple:构造体,tuple Point int x;int y;,Point pointi in 1.3=;,Point p=;,Point pointi in 1.3=;/Tuple数组,Point points=,;/Tuple集合,tuple Rectangle Point ll;Point ur;/Tuple的Tuple,Point p=;,int x=p.x;/取Tuple的成员,但是,Tuple的定义里不能消逝Tuple集合和

6、Tuple数组!,第九章,ILOG,OPL,建模语言,OPL 数据构造,4,、集合:可以写成,T,或者,setof(T),int setInt=.;,setof(Precedence)precedences=.;,集合初始化:,tuple Precedence int before;int after;,Precedence precedences=,;,第九章,ILOG,OPL,建模语言,OPL 决策变量和约束,OPL决策变量使用关键字dvar,dvar int transpOrigDest in 0.100;/二维数组变量;限制决策变量范围,tuple Route City orig;Ci

7、ty dest,Route routes=.:,dvar int transproutes in 0.100;/以有限tuple集routes 为索引,range Capacity=0.limitCapacity;,dvar int transpOrigDest in Capacity;/in 后面是range,dvar int averageDelay in 0.maxDelay;/in 后面接变量,假设不同决策变量的范围不同,可以这样定义,int capacityroute=.;,dvar int transpr in routes in 0.capacityr;,第九章,ILOG,OPL

8、,建模语言,OPL 决策变量和约束,也可以用关键字限制决策变量,只能为正,:,dvar int,+,x;/non negative integer decision variable,dvar float,+,y;/non-negative decision variable,dvar boolean z;/boolean decision variable,上述定义等价于:,dvar int x,in,0.,maxint,;,dvar float y,in,0.,infinity,;,dvar int z,in,0.1;,其中,maxint,、,infinity,为,OPL,关键字。,二维决

9、策变量数组也可以,逐个元素给定范围,:,dvar float transpo in Origd in Dest,in,0.capod;,约束,可以单个定义,也可以定义成,数组形式,,如:,constraint,capCstrMachines;,第九章,ILOG,OPL,建模语言,OPL 数据初始化,总的来说,OPL数据初始化可以分为2种,一种是在mod文件完成,另一种是在dat文件完成。,1、数组初始化,初始化多维数组:,/*.mod file*/,int a1.21.3=.;,/*.dat file*/,a=10,20,30,40,50,60;,依据(index,value)的方式初始化数组

10、:,但留意要用#方式,元素次序无关。参见下页例子:,/*.mod file*/,int aDays=.;,/*.dat file*/,a=#“Monday“:1,“Tuesday“:2,“Wednesday“:3,“Thursday“:4,“Friday“:5,“Saturday“:6,“Sunday”:7#;,第九章,ILOG,OPL,建模语言,OPL 数据初始化,前面的整型索引数组的初始化也可以写成:,/*.mod file*/,int a1.21.3=.;,/*.dat file*/,a=#2:40,50,60,1:10,20,30#;,数组初始化,也可以用,ILOG,脚本,实现,如:,

11、range R=1.10;,int aR;,execute,for(var i in R),ai=i+1;,行下标,留意这里有意颠倒了次序,但结果一样,第九章,ILOG,OPL,建模语言,OPL 数据初始化,也可以用表达式方式初始化,例如上面的例子也可写为:,int ai in 1.10=i+1;,多维数组也可以用这种方式,如:,int mi in 0.10j in 0.10=10*i+j;,也可以用一个数组初始化,如:,int mDim1Dim2=.;,int tj in Dim2i in Dim1=mij;,也可以用index:item 方式初始化,如:,int a1.10=i-1:i|i

12、 in 2.11;/效果同前面的2个例子,int m0.100.10=i:j:10*i+j|i,j in 0.10;,第九章,ILOG,OPL,建模语言,OPL 数据初始化,再如,下面的,ILOG,脚本初始化,:,GasType gasGasolines;,execute,for(,var,g in gasData),gasg.name=g;,用,index,:,item,方式可以写成:,GasType gasGasolines=g.name:g|g in gasData;,第九章,ILOG,OPL,建模语言,OPL 数据初始化,2,、,Tuple,初始化,单个变量初始化直接用,给出成员,即可

13、,如:,Point p=;,Tuple,中,含有数组,的初始化:,tuple Rectangle int id;Point p2;,Rectangle r=;,Tuple,中,含有集合,的初始化:,string Task.;,tuple Precedence Task name;string after;,Precedence p=;,第九章,ILOG,OPL,建模语言,OPL 数据初始化,3、集合初始化,结合承受一对大括号进展初始化,如:,tuple Precedence int before;int after;,Precedence precedences=.;,precedences=

14、,;,可以在初始化时使用集合运算符,如:,int s1=1,2,3;,int s2=1,4,5;,int i=s1 inter s2;,int j=1,4,8,10 inter s2;,int u=s1 union 5,7,9;,int d=s1 diff s2;,结果是:,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转换为集合,也可以用

15、表达式方式初始化,格式是p in S:condition,如:,int s=i|i in 1.10:i mod 3=1;/结果是1,4,7,10.,也可以定义集合数组数组元素为一个集合,如:,int ai in 3.4=e|e in 1.10:e mod i=0;,初始化a3 为 3,6,9,a4 为 4,8,第九章,ILOG,OPL,建模语言,OPL 数据初始化,集合很多时候可以用来表示稀疏矩阵,如:,string Nodes.;,int edgesNodesNodes=.;,tuple Edge Nodes o;Nodes d;,Edge setEdges=|o,d in Nodes:ed

16、gesod=1;,另一个稍简洁一些的例子:,string Resources.;,string Tasks.;,Tasks resResources=.;,tuple Disjunction string first;string second;,Disjunction disj=|r in Resources,ordered i,j in resr;,关键字,强制,ij,关键字,强制,ij,第九章,ILOG,OPL,建模语言,OPL 数据全都性,为了保证输入数据的正确性,可以通过assert语句来判定数据的全都性。这样在程序运行前,可以通过编译系统提前觉察问题。例如,原是的需求和供给数据具有关联性总和相等:,int demandCustomers=.;,int supplySuppliers=.;,assert sum(s in Suppliers)supplys=sum(c in Customers)demandc;,再如,假设是多产品的状况:,int demandCustomers Products=.;,int supplySuppliers Products=.;,asser

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!