LINGO软件的使用方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LINGO软件的使用方法
第一节 LINGO的主要特色
• LINGO是LINDO系统公司四种主要产品之一。 (LINDO,LINGO,LINGO API和What’s Best)
• LINGO是英文Linear Interactive and General Optimizer字首的缩写,即“交互式的线性和通 用优化求解器”。
利用LINGO解答
init: x,y=5,1,2,7; endinit min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-
b(i))^2)^(1/2)); @for(demand(i):@sum(supply(j):c(i,j))=d(i)); @for(supply(j):@sum(demand(i):c(i,j))<=e(j)); @for(supply(j):@free(x);@free(y);); end
@for(supply(i):@sum(need(j):x(i ,j)<=s(i)*f(i));
@for(supply(i):@sum(need(j):x(i ,j)>=500*f(i));
LINGO部分程序
@for(need(j):@sum(supply(i):x(i ,j))=y(j)+z(j);
INV (i) INV (i 1) RP(i) OP(i) DEM (i),i 1,2,3,4
INV (0) 10
集合及其属性
• 由四个季度组成的集合, Quarters={1,2,3,4} 即上面数组的下标集合
• DEM,RP,OP,INV对此集合中的每个元素分别 对应于一个值,即集合的属性
从料场j向工地i的运送量cij
26
Min: f
cij (x j ai )2 ( y j bi )2
j1 i1
2
s.t.
cij di ,i 1,2,3,4,5,6
j 1
6
cij e j , j 1,2
i 1
利用LINGO解答
model: sets: demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):c; endsets data: a=12.5,8.75,0.5,5.75,3,7.25; b=1.25,0.75,4.75,5,6.5,7.75; d=3,5,4,7,6,11; e=20,20; enddata
几点解释
• 目标与约束段 1)@sum(集合:表达式)-对冒号后表达式按
冒号前下标集合指定下标求和 2)@for(集合:表达式)-对冒号前的集合的每
个下标,冒号后表达式都要成立 • i#gt#1表示I大于1 • 数据段 1)以data:开始,以enddata结束 2)各个数据之间用逗号或者空格间隔
几点解释
• 初始段-给出一个初始迭代值 1)以init:开始,以endinit结束 2)x,y=5,1,2,7表示x=(5,2),y=(1,7) • link(demand,supply):c是派生集合
即,Link {(s,t) | s Demand,t Supply} c-派生集合的属性是个6*2矩阵 demand,supply-原始集合
例题解答
• 需求-demand • 正常生产的产量-regular produce • 加班生产的产量-overtime produce • 库存量-inventory
4
Min: [400RP(i) 450OP(i) 20INV (i)] i 1
s.t. RP(i) 40,i 1,2,3,4
第四节 运算符及其优先级
• 算术运算符:+,-,*,/,^ • 逻辑运算符:
#AND#,#OR#.#NOT#,#EQ#,#NE#,#GT#,# GE#,#LT#,#LE#,TRUE,FALSE • 关系运算符:<(即<=),=,>(即>=)
优先级
表:最高
最低
优先级
运算符 #NOT#,-(负号) ^ *,/ +,-(减号) #EQ#,#NE#,#GT#,#GE#, #LT#,#LE# #AND#,#OR# <,=,>
例题求解
model: max=2*x+3*y; 4*y+3*y<=10; 3*x+5*y<12; end
• 以model:开始,以end结束。 • 不区分大小写。 • 目标函数为max=。 • 语句以;结束。 • 数与变量之间的乘号不能省。 • 约束S.t.省略不写。 • <与<=,>与>=是等价的。 • 非负约束可以不输入。 • 说明语句以!开头。
第五节 LINGO的函数
• LINGO所有的内部函数都以@开头 • 常用的数学函数: @ABS(X),@SIN(X),@COS(X),@TAN(X), @COT(X),@EXP(X),@LOG(X),@SIGN(X), @FLOOR(X)-整数部分 @SMAX(X)-返回一列数的最大值 @SMIN(X)-返回一列数的最小值
例题
model: sets: myset/@file(myfile.txt)/:@file(myfi
le.txt); endsets min=@sum(myset(i):shipped(i)*cost(i
)); @for(myset(i):shipped(i)>need(i);sh
ipped(i)<supply(i));
min=@sum(quarters(i):400*rp(i)+450*op(i)+20*inv (i)); @for(quarters(i):rp(i)<40); @for(quarters(i)|i#gt#1:
inv(i)=inv(i-1)+rp(i)+op(i)-dem(i)); inv(1)=10+rp(1)+op(1)-dem(1); data: dem=40,60,75,25; enddata end
文件输入输出函数
@FILE(filename)-引用其它文件中数据时使用该 函数,文件中记录以~结束
例:存在一个文件myfile.txt如下: Seattle,Detroit,Chicago ,Denver~ Cost,Need,Supply,Shipped~ 12,28,15,20~ 1600,1800,1200,1000~ 1700,1900,1300,1100
例题
• 某公司有6个建筑工地要开工,每个工地 的位置(用平面坐标a,b表示)及水泥日 用量d由表给出。目前有两个临时料场位 于P(5,1),Q(2,7),日储量各有20吨。假设 从料场到工地之间均有直线道路相连, 试制定每天的供应计划,即从A,B两个料 场分别向各工地运送多少吨水泥,使总 的吨公里数最小。
• 集合段以sets:开始,以endsets结束 • Quarters/1,2,3,4/:dem,rp,op,inv; • 如果集合中元素个数较多也可用/1..1000/表示
利用LINGO解答例题
Model: sets: quarters/1,2,3,4/:dem,rp,op,inv; endsets
集合的使用小结
• 集合的分类:集合派基生本集集合合
• 基本集合的定义方式: setname[/member_list/][:attribute_list];
• 派生集合的定义方式: setname(parent_set_list)[/member_list][:attribute_list];
元素列表隐显式式列列举举法法
集合循环函数
• 用法:@function(setname:expression_list); • 具体如下:@for
@sum @max @min
变量界定函数
• @BND(L,X,U)-限制L<=X<=U • @BIN(X)-限制X为0或1 • @FREE(X)-取消对X的符号限制 • @GIN(X)-限制X为整数
• 变量 取值 非基变量增加一个单位目标函数减少的量 • 序号 剩余量 对偶价格
(表达式右端值增加一个单位目标函数变化的量)
练习
(二次规划)
Max: 98x1 277x2 x12 0.3x1x2 2x22 s.t. x1 x2 100
x1 2x2 x1, x2 0 且为整数
答案
model: max=98*x1+277*x2-x1^2 -0.3*x1*x2-2*x2^2; x1+x2<100; x1<2*x2; @gin(x1); @gin(x2);
@for(need(j)|j#NE#15:z(j)+y(j+1 )=b(j));
y(1)=0; z(15)=0; @for(supply:@bin(f)); end
That’s all!
Thank you very much!
Leabharlann Baidu
例题
data: cost=@file(myfile.txt); need=@file(myfile.txt); supply=@file(myfile.txt);
enddata end
练习题
钢管订购和运输(2000)
15
Min : ( pi+cij )xij 0.05 [(1 y j ) y j (1 z j )z j ]
状态窗口的解释
• 求解状态框 1)模型:LP/QP/NLP 2)状态:全局/局部 3)目标函数值: 4)当前约束不满足的总量 5)迭代次数 • 扩展的求解器
• 变量数量 1)总数 2)非线性 3)整数 • 约束数量 • 非零系数数量 • 内存使用量 • 时间
报告的解释
• 全局最优解被发现的迭代步数 • 目标函数的最优值
i, j
j 1
15
s.t. 500 f1 xij Si fi ,i 1,..., 7 j 1
7
xij y j z j , j 1,...15
i 1
y j1 z j bj , j 1,...14
y1 z15 0
fi 0,1, i 1,..., 7
LINGO部分程序
model: sets:
supply/s1..s7/:s,p,f; need/a1..a15/:b,y,z; link(supply,need):c,x; endsets
LINGO部分程序
min=@sum(link(i,j):(c(i,j)+p(i) )*x(i,j))+0.05*@sum(need(j):y (j)^2+y(j)+z(j)^2+z(j));
表:
附表
123456
a 1.25 8.75 0.5 5.75 3 7.25
b 1.25 0.75 4.75 5 6.5 7.75
d 3 5 4 7 6 11
例题求解
假设
解答
工地位置(ai , bi ) 水泥日用量di ,i 1,2,3,4,5,6 料场位置(xi , yi ) 日储量e j , j 1,2
• LINGO的安装程序文件大小通常20M左右,在 WINDOWS模式下运行。
• LINGO主要求解线性规划和非线性规划。
第二节 初识LINGO
• 双击打开LINGO-主窗口和模型窗口 • LINGO要以*.lg4的形式进行保存 • 例题: (线性规划)
Max: z 2x 3y s.t. 4x 3y 10 3x 5y 12 x, y 0
end ※@gin()是调用的整数函数
第三节 在LINGO中使用集合
• 例题:某公司要决定下四个季度帆船生 产量。下四个季度需求量分别是40条, 60条,75条,25条。每季度生产能力40 条,生产费用400美元/条,如果加班生产 费用450美元/条,每季度库存费20美元/ 条。假定生产提前期为0,初始库存10条, 问如何安排生产总费用最小?
第一节 LINGO的主要特色
• LINGO是LINDO系统公司四种主要产品之一。 (LINDO,LINGO,LINGO API和What’s Best)
• LINGO是英文Linear Interactive and General Optimizer字首的缩写,即“交互式的线性和通 用优化求解器”。
利用LINGO解答
init: x,y=5,1,2,7; endinit min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-
b(i))^2)^(1/2)); @for(demand(i):@sum(supply(j):c(i,j))=d(i)); @for(supply(j):@sum(demand(i):c(i,j))<=e(j)); @for(supply(j):@free(x);@free(y);); end
@for(supply(i):@sum(need(j):x(i ,j)<=s(i)*f(i));
@for(supply(i):@sum(need(j):x(i ,j)>=500*f(i));
LINGO部分程序
@for(need(j):@sum(supply(i):x(i ,j))=y(j)+z(j);
INV (i) INV (i 1) RP(i) OP(i) DEM (i),i 1,2,3,4
INV (0) 10
集合及其属性
• 由四个季度组成的集合, Quarters={1,2,3,4} 即上面数组的下标集合
• DEM,RP,OP,INV对此集合中的每个元素分别 对应于一个值,即集合的属性
从料场j向工地i的运送量cij
26
Min: f
cij (x j ai )2 ( y j bi )2
j1 i1
2
s.t.
cij di ,i 1,2,3,4,5,6
j 1
6
cij e j , j 1,2
i 1
利用LINGO解答
model: sets: demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):c; endsets data: a=12.5,8.75,0.5,5.75,3,7.25; b=1.25,0.75,4.75,5,6.5,7.75; d=3,5,4,7,6,11; e=20,20; enddata
几点解释
• 目标与约束段 1)@sum(集合:表达式)-对冒号后表达式按
冒号前下标集合指定下标求和 2)@for(集合:表达式)-对冒号前的集合的每
个下标,冒号后表达式都要成立 • i#gt#1表示I大于1 • 数据段 1)以data:开始,以enddata结束 2)各个数据之间用逗号或者空格间隔
几点解释
• 初始段-给出一个初始迭代值 1)以init:开始,以endinit结束 2)x,y=5,1,2,7表示x=(5,2),y=(1,7) • link(demand,supply):c是派生集合
即,Link {(s,t) | s Demand,t Supply} c-派生集合的属性是个6*2矩阵 demand,supply-原始集合
例题解答
• 需求-demand • 正常生产的产量-regular produce • 加班生产的产量-overtime produce • 库存量-inventory
4
Min: [400RP(i) 450OP(i) 20INV (i)] i 1
s.t. RP(i) 40,i 1,2,3,4
第四节 运算符及其优先级
• 算术运算符:+,-,*,/,^ • 逻辑运算符:
#AND#,#OR#.#NOT#,#EQ#,#NE#,#GT#,# GE#,#LT#,#LE#,TRUE,FALSE • 关系运算符:<(即<=),=,>(即>=)
优先级
表:最高
最低
优先级
运算符 #NOT#,-(负号) ^ *,/ +,-(减号) #EQ#,#NE#,#GT#,#GE#, #LT#,#LE# #AND#,#OR# <,=,>
例题求解
model: max=2*x+3*y; 4*y+3*y<=10; 3*x+5*y<12; end
• 以model:开始,以end结束。 • 不区分大小写。 • 目标函数为max=。 • 语句以;结束。 • 数与变量之间的乘号不能省。 • 约束S.t.省略不写。 • <与<=,>与>=是等价的。 • 非负约束可以不输入。 • 说明语句以!开头。
第五节 LINGO的函数
• LINGO所有的内部函数都以@开头 • 常用的数学函数: @ABS(X),@SIN(X),@COS(X),@TAN(X), @COT(X),@EXP(X),@LOG(X),@SIGN(X), @FLOOR(X)-整数部分 @SMAX(X)-返回一列数的最大值 @SMIN(X)-返回一列数的最小值
例题
model: sets: myset/@file(myfile.txt)/:@file(myfi
le.txt); endsets min=@sum(myset(i):shipped(i)*cost(i
)); @for(myset(i):shipped(i)>need(i);sh
ipped(i)<supply(i));
min=@sum(quarters(i):400*rp(i)+450*op(i)+20*inv (i)); @for(quarters(i):rp(i)<40); @for(quarters(i)|i#gt#1:
inv(i)=inv(i-1)+rp(i)+op(i)-dem(i)); inv(1)=10+rp(1)+op(1)-dem(1); data: dem=40,60,75,25; enddata end
文件输入输出函数
@FILE(filename)-引用其它文件中数据时使用该 函数,文件中记录以~结束
例:存在一个文件myfile.txt如下: Seattle,Detroit,Chicago ,Denver~ Cost,Need,Supply,Shipped~ 12,28,15,20~ 1600,1800,1200,1000~ 1700,1900,1300,1100
例题
• 某公司有6个建筑工地要开工,每个工地 的位置(用平面坐标a,b表示)及水泥日 用量d由表给出。目前有两个临时料场位 于P(5,1),Q(2,7),日储量各有20吨。假设 从料场到工地之间均有直线道路相连, 试制定每天的供应计划,即从A,B两个料 场分别向各工地运送多少吨水泥,使总 的吨公里数最小。
• 集合段以sets:开始,以endsets结束 • Quarters/1,2,3,4/:dem,rp,op,inv; • 如果集合中元素个数较多也可用/1..1000/表示
利用LINGO解答例题
Model: sets: quarters/1,2,3,4/:dem,rp,op,inv; endsets
集合的使用小结
• 集合的分类:集合派基生本集集合合
• 基本集合的定义方式: setname[/member_list/][:attribute_list];
• 派生集合的定义方式: setname(parent_set_list)[/member_list][:attribute_list];
元素列表隐显式式列列举举法法
集合循环函数
• 用法:@function(setname:expression_list); • 具体如下:@for
@sum @max @min
变量界定函数
• @BND(L,X,U)-限制L<=X<=U • @BIN(X)-限制X为0或1 • @FREE(X)-取消对X的符号限制 • @GIN(X)-限制X为整数
• 变量 取值 非基变量增加一个单位目标函数减少的量 • 序号 剩余量 对偶价格
(表达式右端值增加一个单位目标函数变化的量)
练习
(二次规划)
Max: 98x1 277x2 x12 0.3x1x2 2x22 s.t. x1 x2 100
x1 2x2 x1, x2 0 且为整数
答案
model: max=98*x1+277*x2-x1^2 -0.3*x1*x2-2*x2^2; x1+x2<100; x1<2*x2; @gin(x1); @gin(x2);
@for(need(j)|j#NE#15:z(j)+y(j+1 )=b(j));
y(1)=0; z(15)=0; @for(supply:@bin(f)); end
That’s all!
Thank you very much!
Leabharlann Baidu
例题
data: cost=@file(myfile.txt); need=@file(myfile.txt); supply=@file(myfile.txt);
enddata end
练习题
钢管订购和运输(2000)
15
Min : ( pi+cij )xij 0.05 [(1 y j ) y j (1 z j )z j ]
状态窗口的解释
• 求解状态框 1)模型:LP/QP/NLP 2)状态:全局/局部 3)目标函数值: 4)当前约束不满足的总量 5)迭代次数 • 扩展的求解器
• 变量数量 1)总数 2)非线性 3)整数 • 约束数量 • 非零系数数量 • 内存使用量 • 时间
报告的解释
• 全局最优解被发现的迭代步数 • 目标函数的最优值
i, j
j 1
15
s.t. 500 f1 xij Si fi ,i 1,..., 7 j 1
7
xij y j z j , j 1,...15
i 1
y j1 z j bj , j 1,...14
y1 z15 0
fi 0,1, i 1,..., 7
LINGO部分程序
model: sets:
supply/s1..s7/:s,p,f; need/a1..a15/:b,y,z; link(supply,need):c,x; endsets
LINGO部分程序
min=@sum(link(i,j):(c(i,j)+p(i) )*x(i,j))+0.05*@sum(need(j):y (j)^2+y(j)+z(j)^2+z(j));
表:
附表
123456
a 1.25 8.75 0.5 5.75 3 7.25
b 1.25 0.75 4.75 5 6.5 7.75
d 3 5 4 7 6 11
例题求解
假设
解答
工地位置(ai , bi ) 水泥日用量di ,i 1,2,3,4,5,6 料场位置(xi , yi ) 日储量e j , j 1,2
• LINGO的安装程序文件大小通常20M左右,在 WINDOWS模式下运行。
• LINGO主要求解线性规划和非线性规划。
第二节 初识LINGO
• 双击打开LINGO-主窗口和模型窗口 • LINGO要以*.lg4的形式进行保存 • 例题: (线性规划)
Max: z 2x 3y s.t. 4x 3y 10 3x 5y 12 x, y 0
end ※@gin()是调用的整数函数
第三节 在LINGO中使用集合
• 例题:某公司要决定下四个季度帆船生 产量。下四个季度需求量分别是40条, 60条,75条,25条。每季度生产能力40 条,生产费用400美元/条,如果加班生产 费用450美元/条,每季度库存费20美元/ 条。假定生产提前期为0,初始库存10条, 问如何安排生产总费用最小?