该【教学课件:第九章-ILOG-OPL-建模语言 】是由【junjun2875】上传分享,文档一共【28】页,该文档可以免费在线阅读,需要了解更多关于【教学课件:第九章-ILOG-OPL-建模语言 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。优化软件与应用
主讲人: 雒兴刚
东北大学系统工程研究所
Email:******@
Tel: 83682292
汇报时间:xx月xx日
2022
Anuanl Work Summary Report
Let's make a summary together!
第九章 ILOG OPL 建模语言
OPL 数据类型
1、整型:范围
例:
int i = 25;
int n = 3;
int size = n*n; //注意这种初始化很特别
2、浮点型:双精度,IEEE 754 standard
float f = ;
第九章 ILOG OPL 建模语言
OPL 数据类型
3、字符串型
例如{string} Tasks = {"masonry","carpentry","plumbing","ceiling", "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 A[R]; // A is an array of 100 integers
用途2:循环
range R = 1..100;
forall(i in R) { //element of a loop ... }
用途3:变量定义
dvar int i in R;
第九章 ILOG OPL 建模语言
OPL 数据结构
2、数组
一维数组:
int a[1..4] = [10, 20, 30, 40];
float f[1..4] = [, , , ];
string d[1..2] = ["Monday", "Wednesday"];
int a[Days] = [10, 20, 30, 40, 50, 60, 70];
即元素下标可以是字符串,如a["Monday"],...,a["Sunday"].
tuple Edges { int orig; int dest; }
{Edge} Edges = {<1,2>, <1,4>, <1,5>};
int a[Edges] = [10,20,30];
即下标也可以是Tuple,a[<1,2>], a[<1,4>], and a[<1,5>]
第九章 ILOG OPL 建模语言
OPL 数据结构
2、数组
多维数组:
int a[1..2][1..3] = ...;
int a[Days][1..3] = ...; //混合下标
{string} Warehouses = ...;
{string} Customers = ...;
tuple Route { string w; string c; }
{Route} routes = ...;
int transp[routes] = ... //实际上transp是二维数组
{string} Warehouses ...;
{string} Customers ...;
tuple Route { Warehouses w; Customers c; }
{Route} routes = ...;
int transp[routes] = ...
可能是稀疏矩阵
两种哪个好些?
第九章 ILOG OPL 建模语言
OPL 数据结构
3、Tuple:结构体
tuple Point { int x; int y; };
Point point[i in 1..3] = <i, i+1>;
Point p = <2,3>;
Point point[i in 1..3] = <i, i+1>; //Tuple数组
{Point} points = {<1,2>, <2,3>}; //Tuple集合
tuple Rectangle { Point ll; Point ur; } //Tuple的Tuple
Point p = <2,3>;
int x = ; //取Tuple的成员
但是,Tuple的定义里不能出现Tuple集合和Tuple数组!
第九章 ILOG OPL 建模语言
OPL 数据结构
{int} setInt = ...;
setof(Precedence) precedences = ...;
4、集合:可以写成{T}, 或者 setof(T)
tuple Precedence { int before; int after; }
{Precedence} precedences = {<1,2>, <1,3>, <3,4>};
集合初始化:
第九章 ILOG OPL 建模语言
OPL 决策变量和约束
OPL决策变量使用关键字dvar
dvar int transp[Orig][Dest] in 0..100; //二维数组变量;限制决策变量范围
tuple Route { City orig; City dest }
{Route} routes = ...:
dvar int transp[routes] in 0..100; //以有限tuple集routes 为索引
range Capacity = 0..limitCapacity;
dvar int transp[Orig][Dest] in Capacity; //in 后面是range
dvar int averageDelay in 0..maxDelay; //in 后面接变量
如果不同决策变量的范围不同,可以这样定义
int capacity[route] = ...;
dvar int transp[r in routes] in 0..capacity[r];
第九章 ILOG OPL 建模语言
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关键字。
二维决策变量数组也可以逐个元素给定范围:
dvar float transp[o in Orig][d in Dest] in 0..cap[o][d];
约束可以单个定义,也可以定义成数组形式,如:
constraint capCstr[Machines];
教学课件:第九章-ILOG-OPL-建模语言 来自淘豆网m.daumloan.com转载请标明出处.