lingo软件使用
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
否则为flase #or# 仅当两个参数都为false时,结果为false; 否则为true
一、基本语法--- Lingo的内部函数
◆ 关系运算符 “=” 表示等于关系 “<=” 表示小于等于关系 “>=” 表示大于等于关系
◆ 数学函数 @abs(x) 返回x的绝对值
@sin(x) 返回x的正弦值,x采用弧度制
7 i 1
7
5
154 x ij s ij x ij q j j 1, 2 , , 5 i 1, 2 , , 7 i 1, 2 , , 7 j 1, 2 , , 5 j 1, 2 , , 5
i 1 j 1
Hale Waihona Puke x i 1 x i 2 x i 5 ks i x i 3 x i 4 ys i
一、基本语法---程序结构的三个部分
◆ 目标函数与约束条件部分 按模型中的目标函数及约束条件逐句写入 格式:max = …… 或 min =……
利用lingo中的内部函数组织目标函数及约束
条件的具体内容
例 sets: factory/1..60/:cost, volume; endsets min=@sum(factory(i): cost(i)*volume(i));
返回x1,x2,…,xn中的最大值
@smin(x1,x2,…,xn)
返回x1,x2,…,xn中的最小值
一、基本语法--- Lingo的内部函数
◆ 集循环函数 集循环函数遍历整个集进行操作。其语法为 @function(setname[(set_index_list)
集循环函数名 集合名 循环控制变量
◆ 输入和输出函数 输入和输出函数可以把程序和外部数据文件, 如文本文件、电子表格等连接起来。 @file 格式:@file(’文件名’) 功能:从指定的外部文本文件中输入数据 在数据文件中,以”~”作为一批数据结束的标 记,同一文件中,可以含多批数据,系统依次 打开数据文件时,依次读取各批数据
一、基本语法--- Lingo的内部函数
LinGo软件的使用
一、基本语法 二、编程举例 三、编程练习
编程示例
model: sets: cd/1..6/:ai; xd/1..8/:bj; dwyj(cd,xd):cij,xij; endsets min=@sum(dwyj:cij*xij); @for(xd(j):@sum(cd(i):xij(i,j))=bj(j)); @for(cd(i):@sum(xd(j):xij(i,j))<=ai(i)); @for(dwyj(i,j):@gin(xij(i,j))); data: ai=60 55 51 43 41 52; bj=35 37 22 32 41 32 43 38; cij=6 2 6 7 4 2 5 9 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end
41
5 4 2 2 1
32
8 3 7 6 4
43
2 3 1 5 3
38
55 51 43 41 52
二、编程举例
引入变量 ai 表示第 i 个产地的产量 i = 1,2,…,6 bj 表示第 j 个销地的销量 j = 1,2,…,8
cij 表示第 i 个产地到第 j 个销地的单位运价
xij 表示第 i 个产地到第 j 个销地的产品数量
一、基本语法
1. 基本格式
◆ 程序以“model:” 开始,以“end”结束 ◆ 每一句结束后写一个分号“;” ◆ 以“!” 打头,以“;”结尾之间的部分为 注释 ◆ 同一地位下的不同名称用“,”分隔,同一 地 位下的不同数据用“ ”分隔
一、基本语法
2. 程序结构的三个部分 ◆ 定义部分 以关键字“sets:” 开始,以“endsets” 结束 格式:setname[/member_list/][:attribute_list];
集合名 数组维界 数组名列表
例 sets: students/John Jill, Rose Mike/: sex, age; factory/1..60/:A,B,C; endsets
一、基本语法---程序结构的三个部分
例 sets: city/1..10/: yz; factory/1..60/; cifa(city,factory):cf1,cf2,cf3; endsets 说明:上例中定义了三个10行60列的二维数组 cf1,cf2,cf3,其中集名city,factory均称为原生集, 集名cifa称为派生集,这是定义二维数组的方法
一、基本语法---程序结构的三个部分
◆ 数据部分 以关键字“data:” 开始,以“enddata” 结束 对定义部分所定义的每一个已知的数组,按 数组名1 = ……(具体数据); 数组名2 = ……(具体数据); 的格式给出数据,凡是未给出数据的数组,均看 作未知数组进行求解 例 data: yz=13 250 1 54 8 250 67 90 23 125; enddata
s.t.
7
x ij ( p i 30 . 5 % ) 0 x ij ( p i 28 . 5 % ) 0 x ij 96 x ij 160
i 1 7
7 5
i 1
i 1, 2 , , 7
j 1
j 1, 2 , , 5
i 1
三、编程练习--- 钢管的订购与运输
二、编程举例
例 计算6个产地8个销地的最小运输费用问题。 数据如下:
销 单位 运价 地 B1 产地 A1 6
B2
2
B3
6
B4
7
B5
4
B6
2
B7
5
B8
9
产 量 60
A2 A3 A4 A5 A6
销量
4 5 7 2 5
35
9 2 6 3 5
37
5 1 7 9 2
22
3 9 3 5 2
32
8 7 9 7 8
一、基本语法
3. Lingo的内部函数 ◆ 算术运算符 ^ 乘方,﹡ 乘,/ 除,﹢ 加,﹣ 减 ◆ 逻辑运算符 #not# 否定该操作数的逻辑值 #eq# 两个运算数相等,则为true;否则为flase #ne# 两个运算符不相等,则为true;否则为flase #gt# 左边的运算符严格大于右边的运算符,则 为true;否则为flase
0.99 5.61 1.76 3.86
1.90 5.61 1.27 3.72
1.13 4.56 1.83 3.16
2.04 2.46 3.72 1.62
3.09 1.06 5.05 1.27
3.51 0.57 6.10 0.50
三、编程练习--- 露天矿生产中的车辆安排
模 型 建 立
min
ti * xij
i5
xi 1 xi 2 pi xij 0 , xij Z
i 1, 2 , , 7
三、编程练习--- 露天矿生产中的车辆安排
铲位和卸点位置的二维示意图如下:
三、编程练习--- 露天矿生产中的车辆安排
有关数据如下:
各铲位矿石量(ksi)、岩石量(ysi)(车次数)和矿 石的平均铁含量如下 1 2 3 4 5 6 7 铲位 68 64 68 84 87 81 矿石量ksi 61 71 87 68 74 87 81 岩石量ysi 81 铁含量pi 30% 28% 29% 32% 31% 33% 31% 各卸点一个班次的产量(车次数)要求如下 1 卸点 产量qj 78 2 3 4 5
二、编程举例
模型建立
min z
cij
i 1 6 j 1
6
8
* xij
s.t.
xij bj xij ai
j 1, 2 , ,8 i 1, 2 , , 6
i 1 8
j 1
xij 0 , xij Z
程序
model: sets: cd/1..6/:ai; xd/1..8/:bj; dwyj(cd,xd):cij,xij; endsets min=@sum(dwyj:cij*xij); @for(xd(j):@sum(cd(i):xij(i,j))=bj(j)); @for(cd(i):@sum(xd(j):xij(i,j))<=ai(i)); @for(dwyj(i,j):@gin(xij(i,j))); data: ai=60 55 51 43 41 52; bj=35 37 22 32 41 32 43 38; cij=6 2 6 7 4 2 5 9 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end
集循环函数名集合名循环控制变量循环域附加条件循环体一基本语法lingo的内部函数集循环函数名分为下列四个该函数对集合名中满足条件的成员执行循环体用来表示具有某些共同特征的约束条件sum该函数对集合名中满足条件的成员计算某个表达式的和minmax该函数对集合名中满足条件的成员计算某个表达式的最小值或最大值一基本语法lingo的内部函数sets
一、基本语法--- Lingo的内部函数
#ge# 左边的运算符大于或等于右边的运算符,
则为true;否则为flase
#lt# 左边的运算符严格小于右边的运算符,则 为true;否则为flase #le# 左边的运算符小于或等于右边的运算符, 则为true;否则为flase
#and# 仅当两个参数都为true时,结果为true;
[|conditional_qualifier]]:expression_list);
循环域附加条件 循环体
一、基本语法--- Lingo的内部函数
集循环函数名分为下列四个
@for 该函数对集合名中满足条件的成员执行循环 体,用来表示具有某些共同特征的约束条件 @sum
该函数对集合名中满足条件的成员计算某个 表达式的和 @min 和 @max
85
85
124
85
三、编程练习--- 露天矿生产中的车辆安排
各铲位和各卸点之间的距离(公里)如下:
铲位 铲位 铲位 铲位 铲位 铲位 铲位 2 3 5 6 1 4 7 5.26 5.19 4.21 4.00 1.90 0.64 1.27
矿石漏
倒装场Ⅰ 1.90 5.89 岩场 0.64 岩石漏 倒装场Ⅱ 4.42
三、编程练习--- 铁路平板车的装货问题(P.292)
模型建立
max z
ti * xij
i 1 7 j 1
7
2
wi * xij
i 1 7
40 10 . 2 3 . 027
j 1, 2 j 1, 2 j 1, 2
ti * xij
i 1 7
s.t.
该函数对集合名中满足条件的成员计算某个 表达式的最小值或最大值
一、基本语法--- Lingo的内部函数
例
sets: city/1..10/: yz; factory/1..6/:jgc; cifa(city,factory):xij; endsets @for(city(i)|i#le#8:@sum(factory(j) :jgc(j)*x(i,j)<=yz(i)); minyz=@min(city(i)| i#le#8:yz(i)); maxyz=@max(city(i)| i#gt#6:yz(i)); data: yz=12 4 6 21 35 6 8 13 23 7; jgc = 5 1 3 4 6 10; enddata
一、基本语法--- Lingo的内部函数
◆ 变量界定函数 变量界定函数实现对变量取值范围的附加限
制,共4种:
@gin(x) @bin(x) 限制x为整数 限制x为0或1
@bnd(L,x,U)
@free(x)
限制L≤x≤U
取消对变量x的默认下界为0的限 制,即x可以取任意实数
一、基本语法--- Lingo的内部函数
@text
格式:@text(’文件名’) 功能:将指定的求解结果输出至外部文本文件 中,该函数只能用在数据部分
@ole
输入格式:变量名= @ole(’文件名’) 输出格式:@ole(’文件名’) = 指定的求解变量 名 功能:从外部excel文件中输入或输出数据 需要在excel文件中定义相应的域名
@cos(x) 返回x的余弦值
@tan(x) @exp(x) 返回x的正切值 返回常数e的x次方
一、基本语法--- Lingo的内部函数
@log(x) 返回x的自然对数 @sign(x) 如果x<0返回-1;否则,返回1 @floor(x) 返回x的整数部分。 当x>=0时,返回不超过x的最大整; 当x<0时,返回不低于x的最大整数。 @smax(x1,x2,…,xn)
一、基本语法--- Lingo的内部函数
◆ 关系运算符 “=” 表示等于关系 “<=” 表示小于等于关系 “>=” 表示大于等于关系
◆ 数学函数 @abs(x) 返回x的绝对值
@sin(x) 返回x的正弦值,x采用弧度制
7 i 1
7
5
154 x ij s ij x ij q j j 1, 2 , , 5 i 1, 2 , , 7 i 1, 2 , , 7 j 1, 2 , , 5 j 1, 2 , , 5
i 1 j 1
Hale Waihona Puke x i 1 x i 2 x i 5 ks i x i 3 x i 4 ys i
一、基本语法---程序结构的三个部分
◆ 目标函数与约束条件部分 按模型中的目标函数及约束条件逐句写入 格式:max = …… 或 min =……
利用lingo中的内部函数组织目标函数及约束
条件的具体内容
例 sets: factory/1..60/:cost, volume; endsets min=@sum(factory(i): cost(i)*volume(i));
返回x1,x2,…,xn中的最大值
@smin(x1,x2,…,xn)
返回x1,x2,…,xn中的最小值
一、基本语法--- Lingo的内部函数
◆ 集循环函数 集循环函数遍历整个集进行操作。其语法为 @function(setname[(set_index_list)
集循环函数名 集合名 循环控制变量
◆ 输入和输出函数 输入和输出函数可以把程序和外部数据文件, 如文本文件、电子表格等连接起来。 @file 格式:@file(’文件名’) 功能:从指定的外部文本文件中输入数据 在数据文件中,以”~”作为一批数据结束的标 记,同一文件中,可以含多批数据,系统依次 打开数据文件时,依次读取各批数据
一、基本语法--- Lingo的内部函数
LinGo软件的使用
一、基本语法 二、编程举例 三、编程练习
编程示例
model: sets: cd/1..6/:ai; xd/1..8/:bj; dwyj(cd,xd):cij,xij; endsets min=@sum(dwyj:cij*xij); @for(xd(j):@sum(cd(i):xij(i,j))=bj(j)); @for(cd(i):@sum(xd(j):xij(i,j))<=ai(i)); @for(dwyj(i,j):@gin(xij(i,j))); data: ai=60 55 51 43 41 52; bj=35 37 22 32 41 32 43 38; cij=6 2 6 7 4 2 5 9 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end
41
5 4 2 2 1
32
8 3 7 6 4
43
2 3 1 5 3
38
55 51 43 41 52
二、编程举例
引入变量 ai 表示第 i 个产地的产量 i = 1,2,…,6 bj 表示第 j 个销地的销量 j = 1,2,…,8
cij 表示第 i 个产地到第 j 个销地的单位运价
xij 表示第 i 个产地到第 j 个销地的产品数量
一、基本语法
1. 基本格式
◆ 程序以“model:” 开始,以“end”结束 ◆ 每一句结束后写一个分号“;” ◆ 以“!” 打头,以“;”结尾之间的部分为 注释 ◆ 同一地位下的不同名称用“,”分隔,同一 地 位下的不同数据用“ ”分隔
一、基本语法
2. 程序结构的三个部分 ◆ 定义部分 以关键字“sets:” 开始,以“endsets” 结束 格式:setname[/member_list/][:attribute_list];
集合名 数组维界 数组名列表
例 sets: students/John Jill, Rose Mike/: sex, age; factory/1..60/:A,B,C; endsets
一、基本语法---程序结构的三个部分
例 sets: city/1..10/: yz; factory/1..60/; cifa(city,factory):cf1,cf2,cf3; endsets 说明:上例中定义了三个10行60列的二维数组 cf1,cf2,cf3,其中集名city,factory均称为原生集, 集名cifa称为派生集,这是定义二维数组的方法
一、基本语法---程序结构的三个部分
◆ 数据部分 以关键字“data:” 开始,以“enddata” 结束 对定义部分所定义的每一个已知的数组,按 数组名1 = ……(具体数据); 数组名2 = ……(具体数据); 的格式给出数据,凡是未给出数据的数组,均看 作未知数组进行求解 例 data: yz=13 250 1 54 8 250 67 90 23 125; enddata
s.t.
7
x ij ( p i 30 . 5 % ) 0 x ij ( p i 28 . 5 % ) 0 x ij 96 x ij 160
i 1 7
7 5
i 1
i 1, 2 , , 7
j 1
j 1, 2 , , 5
i 1
三、编程练习--- 钢管的订购与运输
二、编程举例
例 计算6个产地8个销地的最小运输费用问题。 数据如下:
销 单位 运价 地 B1 产地 A1 6
B2
2
B3
6
B4
7
B5
4
B6
2
B7
5
B8
9
产 量 60
A2 A3 A4 A5 A6
销量
4 5 7 2 5
35
9 2 6 3 5
37
5 1 7 9 2
22
3 9 3 5 2
32
8 7 9 7 8
一、基本语法
3. Lingo的内部函数 ◆ 算术运算符 ^ 乘方,﹡ 乘,/ 除,﹢ 加,﹣ 减 ◆ 逻辑运算符 #not# 否定该操作数的逻辑值 #eq# 两个运算数相等,则为true;否则为flase #ne# 两个运算符不相等,则为true;否则为flase #gt# 左边的运算符严格大于右边的运算符,则 为true;否则为flase
0.99 5.61 1.76 3.86
1.90 5.61 1.27 3.72
1.13 4.56 1.83 3.16
2.04 2.46 3.72 1.62
3.09 1.06 5.05 1.27
3.51 0.57 6.10 0.50
三、编程练习--- 露天矿生产中的车辆安排
模 型 建 立
min
ti * xij
i5
xi 1 xi 2 pi xij 0 , xij Z
i 1, 2 , , 7
三、编程练习--- 露天矿生产中的车辆安排
铲位和卸点位置的二维示意图如下:
三、编程练习--- 露天矿生产中的车辆安排
有关数据如下:
各铲位矿石量(ksi)、岩石量(ysi)(车次数)和矿 石的平均铁含量如下 1 2 3 4 5 6 7 铲位 68 64 68 84 87 81 矿石量ksi 61 71 87 68 74 87 81 岩石量ysi 81 铁含量pi 30% 28% 29% 32% 31% 33% 31% 各卸点一个班次的产量(车次数)要求如下 1 卸点 产量qj 78 2 3 4 5
二、编程举例
模型建立
min z
cij
i 1 6 j 1
6
8
* xij
s.t.
xij bj xij ai
j 1, 2 , ,8 i 1, 2 , , 6
i 1 8
j 1
xij 0 , xij Z
程序
model: sets: cd/1..6/:ai; xd/1..8/:bj; dwyj(cd,xd):cij,xij; endsets min=@sum(dwyj:cij*xij); @for(xd(j):@sum(cd(i):xij(i,j))=bj(j)); @for(cd(i):@sum(xd(j):xij(i,j))<=ai(i)); @for(dwyj(i,j):@gin(xij(i,j))); data: ai=60 55 51 43 41 52; bj=35 37 22 32 41 32 43 38; cij=6 2 6 7 4 2 5 9 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end
集循环函数名集合名循环控制变量循环域附加条件循环体一基本语法lingo的内部函数集循环函数名分为下列四个该函数对集合名中满足条件的成员执行循环体用来表示具有某些共同特征的约束条件sum该函数对集合名中满足条件的成员计算某个表达式的和minmax该函数对集合名中满足条件的成员计算某个表达式的最小值或最大值一基本语法lingo的内部函数sets
一、基本语法--- Lingo的内部函数
#ge# 左边的运算符大于或等于右边的运算符,
则为true;否则为flase
#lt# 左边的运算符严格小于右边的运算符,则 为true;否则为flase #le# 左边的运算符小于或等于右边的运算符, 则为true;否则为flase
#and# 仅当两个参数都为true时,结果为true;
[|conditional_qualifier]]:expression_list);
循环域附加条件 循环体
一、基本语法--- Lingo的内部函数
集循环函数名分为下列四个
@for 该函数对集合名中满足条件的成员执行循环 体,用来表示具有某些共同特征的约束条件 @sum
该函数对集合名中满足条件的成员计算某个 表达式的和 @min 和 @max
85
85
124
85
三、编程练习--- 露天矿生产中的车辆安排
各铲位和各卸点之间的距离(公里)如下:
铲位 铲位 铲位 铲位 铲位 铲位 铲位 2 3 5 6 1 4 7 5.26 5.19 4.21 4.00 1.90 0.64 1.27
矿石漏
倒装场Ⅰ 1.90 5.89 岩场 0.64 岩石漏 倒装场Ⅱ 4.42
三、编程练习--- 铁路平板车的装货问题(P.292)
模型建立
max z
ti * xij
i 1 7 j 1
7
2
wi * xij
i 1 7
40 10 . 2 3 . 027
j 1, 2 j 1, 2 j 1, 2
ti * xij
i 1 7
s.t.
该函数对集合名中满足条件的成员计算某个 表达式的最小值或最大值
一、基本语法--- Lingo的内部函数
例
sets: city/1..10/: yz; factory/1..6/:jgc; cifa(city,factory):xij; endsets @for(city(i)|i#le#8:@sum(factory(j) :jgc(j)*x(i,j)<=yz(i)); minyz=@min(city(i)| i#le#8:yz(i)); maxyz=@max(city(i)| i#gt#6:yz(i)); data: yz=12 4 6 21 35 6 8 13 23 7; jgc = 5 1 3 4 6 10; enddata
一、基本语法--- Lingo的内部函数
◆ 变量界定函数 变量界定函数实现对变量取值范围的附加限
制,共4种:
@gin(x) @bin(x) 限制x为整数 限制x为0或1
@bnd(L,x,U)
@free(x)
限制L≤x≤U
取消对变量x的默认下界为0的限 制,即x可以取任意实数
一、基本语法--- Lingo的内部函数
@text
格式:@text(’文件名’) 功能:将指定的求解结果输出至外部文本文件 中,该函数只能用在数据部分
@ole
输入格式:变量名= @ole(’文件名’) 输出格式:@ole(’文件名’) = 指定的求解变量 名 功能:从外部excel文件中输入或输出数据 需要在excel文件中定义相应的域名
@cos(x) 返回x的余弦值
@tan(x) @exp(x) 返回x的正切值 返回常数e的x次方
一、基本语法--- Lingo的内部函数
@log(x) 返回x的自然对数 @sign(x) 如果x<0返回-1;否则,返回1 @floor(x) 返回x的整数部分。 当x>=0时,返回不超过x的最大整; 当x<0时,返回不低于x的最大整数。 @smax(x1,x2,…,xn)