LINGO810编程介绍_第1页
LINGO810编程介绍_第2页
LINGO810编程介绍_第3页
LINGO810编程介绍_第4页
LINGO810编程介绍_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LINGO810编程介绍 LINGO8.0编程介绍编程介绍 LINGO程序的背景及应用程序的背景及应用 美国芝加哥(Chicago)大学的Linus Schrage教授于 1980年前后开发, 后来成立 LINDO系统公司(LINDO Systems Inc.), 网址: LINDO: Linear INteractive and Discrete Optimizer (V6.1) LINGO: Linear INteractive General Optimizer (V8.0) LINDO API: LINDO Application Programming Interface (V2.0

2、) Whats Best!: (SpreadSheet e.g. EXCEL) (V7.0) 目前的产品有:演示(试用)版、学生版、高级版、超 级版、工业版、扩展版 (求解问题规模和选件不同) LINGO810编程介绍 LINDO和和LINGO软件能求解的优化模型软件能求解的优化模型 LINGO LINDO 优化模型优化模型 线性规划线性规划 (LP) 非线性规划非线性规划 (NLP) 二次规划二次规划 (QP) 连续优化连续优化 整数规划整数规划(IP) LINGO810编程介绍 LINDO应用实例 牛奶问题(牛奶问题(1)程序)程序 max 72x1+64x2 st 2)x1+x250 3

3、)12x1+8x2480 4)3x1100 end LINGO810编程介绍 牛奶问题(2)程序 max 72x1+64x2+8.2x3+5x4 st 2) x1+x2=50 3) 12x1+8x2+2x3+2x4=480 4) 3x1=100 5) x3-3x1=0 6) x4-4x2”(或(或“=”(或(或“=”)功能相同)功能相同; 变量与系数间可有空格变量与系数间可有空格, 但无运算符但无运算符; 变量名以字母开头,不区分大小写变量名以字母开头,不区分大小写; 目标函数所在行是第一行,第二行起为约束条件目标函数所在行是第一行,第二行起为约束条件; 行号(行名)自动产生或人为定义,行名以

4、行号(行名)自动产生或人为定义,行名以“)”结束结束; 行中行中“!”符号的后面部分为注释,如符号的后面部分为注释,如: ! Its Comment. 变量不能出现在约束条件的右端变量不能出现在约束条件的右端; 表达式中不接受括号表达式中不接受括号“()()”和逗号和逗号“,”等任何符号等任何符号; 表达式应化简,如表达式应化简,如2x1+3x2- 4x1应写成应写成 -2x1+3x2; 缺省时假定所有变量非负;可在模型的缺省时假定所有变量非负;可在模型的“END”语句后用语句后用“FREE name”将变量将变量name的非负假定取消的非负假定取消; 可在可在 “END”后用后用“SUB”

5、或或“SLB” 设定变量上下界设定变量上下界 例如:例如: “sub x1 10”的作用等价于的作用等价于“x1=10” 但用但用“SUB”和和“SLB”表示的上下界约束不计入模型的约束,也不表示的上下界约束不计入模型的约束,也不 能给出其松紧判断和敏感性分析能给出其松紧判断和敏感性分析; 14. “END”后对整数变量说明:后对整数变量说明:GIN n 或或 GIN name; 15. “END”后对后对0-1变量说明:变量说明: INT n 或或 INT name. TITLE This Model is only an Example LINGO810编程介绍 LINGO程序 max 2

6、x1+3x2+4x3 st 1.5x1+3x2+5x3600 280 x1+250 x2+400 x360000 end gin 3 LINDO应用实例 汽车厂生产三种类型的汽车,已知各类型每辆车对钢材、劳动时间的需汽车厂生产三种类型的汽车,已知各类型每辆车对钢材、劳动时间的需 求,利润及工厂每月的现有量。求,利润及工厂每月的现有量。制订月生产计划,使工厂的利润最大。制订月生产计划,使工厂的利润最大。 小型小型 中型中型 大型大型 现有量现有量 钢材(吨)钢材(吨) 1.5 3 5 600 劳动时间(小时)劳动时间(小时) 280 250 400 60000 利润(万元)利润(万元) 2 3

7、4 LINGO810编程介绍 LINGO程序简单实例 牛奶问题(2)程序 model: max=24*(3*x1-x3)+16*(4*x2-x4)+ 44*0.8*x3-3*x3+32*0.75*x4-3*x4; x1+x2=50; 12*x1+8*x2+2*x3+2*x4=480; 3*x1=100; x3=3*x1; x4”(或(或“=”(或(或“=”)功能相同)功能相同; 变量与系数间应有运算符变量与系数间应有运算符“*”; 变量名以字母开头,不区分大小写;变量名以字母开头,不区分大小写; 程序以程序以“model:”开始,以开始,以“end”结束;结束; 目标函数行中目标函数行中max

8、(或(或min)后要有等号)后要有等号“=”; 每行最后必须以分号每行最后必须以分号“;”表示结束;表示结束; 行中行中“!”符号的后面部分为注释。如符号的后面部分为注释。如: ! Its Comment. 表达式的书写方式比较自由,变量可以出现在等式右边表达式的书写方式比较自由,变量可以出现在等式右边; 缺省时假定所有变量连续非负;可在模型的缺省时假定所有变量连续非负;可在模型的“END”语语 句前用句前用free(name)表示取消非负假定)表示取消非负假定; 用用gin(name) 表示变量为整数;用表示变量为整数;用bin(name)表示)表示01变量变量. 11. LINGO一般不给

9、出敏感性分析,如需要可以在一般不给出敏感性分析,如需要可以在 option选项中设置。选项中设置。 LINGO810编程介绍 0 40000 30000 006. 115. 1 006. 115. 1 006. 115. 1 006. 1 10000 . . 06. 125. 14 . 115. 1max 32 23 544431 44413421 3432312411 24232114 1411 54322341 ij x x x xxx xxxx xxxxx xxxx xx ts xxxxz 例1:编一个LINGO程序求解下列线性规划问题的最优解 LINGO810编程介绍 程序 model

10、: max =1.15*x41+1.4*x23+1.25*x32+1.06*x54; x11+x14=10000; -1.06*x14+x21+x23+x24=0; -1.15*x11-1.06*x24+x31+x32+x34=0; -1.15*x21-1.06*x34+x41+x44=0; -1.15*x31-1.06*x44+x54=0; x23=30000; x32=40000; End 运行结果: Global optimal solution found at iteration: 2 Objective value: 14840.00 LINGO810编程介绍 Variable V

11、alue Reduced Cost X41 0.000000 0.6739130E-01 X23 10600.00 0.000000 X32 0.000000 0.4043478E-01 X54 0.000000 0.000000 X11 0.000000 0.000000 X14 10000.00 0.000000 X21 0.000000 0.000000 X24 0.000000 0.3213913E-01 X31 0.000000 0.7143478E-01 X34 0.000000 0.000000 X44 0.000000 0.9379130E-01 Row Slack or Su

12、rplus Dual Price 1 14840.00 1.000000 2 0.000000 1.484000 LINGO810编程介绍 3 0.000000 1.400000 4 0.000000 1.290435 5 0.000000 1.217391 6 0.000000 1.060000 7 19400.00 0.000000 8 40000.00 0.000000 例2:编一个LINGO程序求解下列线性规划问题的最优解 1 . 0 1 1 2 16008817013016013098100 . . 98200160190150108120max 76 54 321 7654321

13、7654321 orx xx xx xxx xxxxxxx ts xxxxxxxz i LINGO810编程介绍 程序一 model: max=120*x1+108*x2+150*x3+190*x4+160*x5+ 200*x6+98*x7; 100*x1+98*x2+130*x3+160*x4+130*x5+170*x6+ 88*x7=1600; x1+x2+x3=1; x6+x7=1; bin(x1); bin(x2); bin(x3); bin(x4); bin(x5); bin(x6); bin(x7); End LINGO810编程介绍 LINGO模型的优点模型的优点 包含了LIND

14、O的全部功能, 提供了灵活的编程语言(矩阵生成器)。 LINGO模型的构成:模型的构成:4个段个段 目标与约束段(MODEL: END) 集合段(SETS: ENDSETS) 数据段(DATA: ENDDATA) 初始段(INIT: ENDINIT) LINGO810编程介绍 程序二 model: sets: A/1.7/: x,b,c; endsets data: b=120,108,150,190,160,200,98; c=100,98,130,160,130,170,88; enddata max =sum( A( j ):b( j )*x( j ) ); sum( A( j ): c

15、( j )*x( j ) )=1600; x(1)+x(2)+x(3)=1; x(6)+x(7)=1; for( A( j ): bin( x( j ) ) ); end LINGO810编程介绍 运行结果: Global optimal solution found at teration: 0 Objective value: 918.0000 Variable Value Reduced Cost X1 1.000000 -120.0000 X2 0.000000 -108.0000 X3 1.000000 -150.0000 X4 1.000000 -190.0000 X5 1.000

16、000 -160.0000 X6 1.000000 -200.0000 X7 1.000000 -98.00000 LINGO810编程介绍 Row Slack or Surplus Dual Price 1 918.0000 1.000000 2 822.0000 0.000000 3 0.000000 0.000000 4 1.000000 0.000000 5 1.000000 0.000000 例3:编一个LINGO程序求解下列线性规划问题的最优解 目标函数 min),max( 21 ttT 约束条件 3 , 2 , 1, 2 , 1, 0 45 30 50 2313 2212 211

17、1 jix xx xx xx ij 2322212 1312111 2086 10104 xxxt xxxt LINGO810编程介绍 程序 model: SETS: T/1,2/: tt; Endsets init: x11=10; x21=13; endinit min =max(T( j ): tt( j ); x11+x21=50; x12+x22=30; x13+x23=45; tt(1)=4*x11+10*x12+10*x13; tt(2)=6*x21+8*x22+20*x23; End LINGO810编程介绍 运行结果: Global optimal solution foun

18、d at iteration: 1 Objective value: 486.0000 Variable Value Reduced Cost X11 9.000008 0.1886861E-08 X21 40.99999 0.000000 X12 0.000000 4.666667 X22 30.00000 0.000000 X13 45.00000 0.000000 X23 0.000000 3.333333 TT(1) 486.0000 0.000000 TT(2) 486.0000 0.000000 LINGO810编程介绍 LINGOLINGO模型模型 例:选址问题例:选址问题 某公

19、司有某公司有6个建筑工地,位置坐标为个建筑工地,位置坐标为(ai, bi) (单位:公里单位:公里), 水泥日用量水泥日用量di (单位:吨)单位:吨) i a1.258.750.55.7537.25 b1.250.754.7556.57.75 d3547611 1)现有 2 料场,位于 A (5, 1), B (2, 7), 记(xj,yj),j=1,2, 日储量 ej各有 20 吨。 假设:料场假设:料场 和工地之间和工地之间 有直线道路有直线道路 目标:制定每天的供应计划,即从 A, B 两料场分别 向各工地运送多少吨水泥,使总的吨公里数最小。 LINGO810编程介绍 用例中数 据计算

20、, 最优解为 2 , 1, 6,.,1,. . )()(min 6 1 2 1 2 1 6 1 2/122 jec idcts byaxc jij i iij j ji ijijij 线性规划模型线性规划模型 决策变量:决策变量:ci j (料场料场j到到工地工地i的的 运量)运量)12维维 LINGO810编程介绍 LINGO程序: model: sets: P/1,2/; Q/1.6/:a,b,d; R(P,Q):c,z; endsets data: 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=

21、 3, 5, 4, 7, 6, 11; enddata min=sum(R(i,j):c(i,j)*z(i,j); for(Q(j):z(1,j)=(sum(Q(j):(5-a(j)2+(1- b(j)2)(1/2); for(Q(j):z(2,j)=(sum(Q(j):(2-a(j)2+(7- b(j)2)(1/2); for(P(i):sum(Q(j):c(i,j)=20); for(Q(j):sum(P(i):c(i,j)=d(j); end LINGO810编程介绍 选址问题:选址问题:NLPNLP 2)改建两个新料场,需要确定新料场位置)改建两个新料场,需要确定新料场位置(xj,yj

22、)和和 运量运量cij ,在其它条件不变下使总吨公里数最小。,在其它条件不变下使总吨公里数最小。 2 , 1, 6,.,1,. . )()(min 6 1 2 1 2 1 6 1 2/122 jec idcts byaxc jij i iij j ji ijijij 决策变量:决策变量: ci j, ,(xj,yj)16维 维 非线性规划模型非线性规划模型 LINGO810编程介绍 LINGO程序程序 model: sets: P/1,2/:x,y; Q/1.6/:a,b,d; R(P,Q):c,z; endsets data: a=1.25, 8.75, 0.5, 5.75, 3, 7.25

23、; b=1.25, 0.75, 4.75, 5, 6.5, 7.75; d=3, 5, 4, 7, 6, 11; enddata min=sum(R(i,j):c(i,j)*z(i,j); for(Q(j):z(1,j)=(sum(Q(j):(x(1)-a(j)2+(y(1)- b(j)2)(1/2); for(Q(j):z(2,j)=(sum(Q(j):(x(2)-a(j)2+(y(2)- b(j)2)(1/2); for(P(i):sum(Q(j):c(i,j)=20); for(Q(j):sum(P(i):c(i,j)=d(j); for(P:free(x);free(y); end L

24、INGO810编程介绍 逻辑运算符逻辑运算符 LINGO具有种逻辑运算符: # not #一元运算符,否定该操作数的逻辑值 # eq # 若两个运算数相等,则为true;否则为flase # ne # 若两个运算符不相等,则为true;否则为flase # g t# 若左边严格大于右边,则为true;否则为flase # ge # 若左边大于或等于右边,则为true;否则为flase # lt # 若左边严格小于右边,则为true;否则为flase # le # 若左边小于或等于右边,则为true;否则为flase # and #仅当两个参数都为true,结果为true;否则为flase #

25、or # 仅当两个参数都为false,结果为false;否则为flase 优先级由高到低为: 高 #not# 中 #eq# #ne# #gt# #ge# #lt# #le# 低 #and# #or# LINGO810编程介绍 函数的应用函数的应用 在LINGO编程中,为了使程序更加简明,可阅读 性,LINGO中提供了一类函数的命令集,主要有 if, if, sum, sum, max, max, min, min, for, for, bin, bin, gin, gin, bnd,bnd,freefree等,应用这些函数可以使程序变得很简 明,下面介绍这些函数的应用。 ifif:-用于分段函

26、数的编程用于分段函数的编程 格式:格式:ifif(A A,B B,C C) 含义:条件含义:条件A A成立时,取成立时,取B B,否则取,否则取C C 例1 其它124 700505 )( 1 1 x xf LINGO的编程如下: F=if(x1 #GT# 0 #and# x1 #LE# 70,-505,124); LINGO810编程介绍 例2 190150489 150120252 12070124 700505 )( 1 1 1 1 1 x x x x xf 引入决策0-1变量 ik g ,则 141312111 489252124505)(ggggxf 其它其它其它其它0 190150

27、1 , 0 1501201 , 0 120701 , 0 7001 1 14 1 13 1 12 1 11 x g x g x g x g LINGO810编程介绍 LINGO的编程如下: g11=if(x1#GT#0#AND#x1#LE#70,1,0); g12=if(x1#GT#70#AND#x1#LE#120,1,0); g13=if(x1#GT#120#AND#x1#LE#150,1,0); g14=if(x1#GT#150#AND#x1#LE#190,1,0); f1=-g11*505+124*g12+252*g13+489*g14; sumsum:-用于循环求和函数的编程用于循环求

28、和函数的编程 格式:格式:sumsum(A:BA:B) 含义:含义:A A表示求和的变量及范围,表示求和的变量及范围,B B表示单项表达式。表示单项表达式。 例3 wxc i ii 20 1 LINGO810编程介绍 LINGO的编程如下: Model: Sets: Var/1.20/:c,x; Endset w=sum(Var(I): c(I)*x(I); end 例4 wxc j iij i 20 1 j 15 1 LINGO的编程如下: Model: Sets: Var1/1.20/:a; Var2/1.15/:b; Var(Var1,Var2):c,x; LINGO810编程介绍 En

29、dset w=sum(Var(I,J): c(I,J)*x(I,J); end forfor:-用于循环函数的编程用于循环函数的编程 格式:格式:for(A:Bfor(A:B) 含义:含义:A A表示循环的变量及范围,表示循环的变量及范围,B B表示单项表达式。表示单项表达式。 例5 wxc j iij i 20 1 j 15 1 ,其中 ij x均为0或1 LINGO810编程介绍 LINGO的编程如下: Model: Sets: Var1/1.20/:a; Var2/1.15/:b; Var(Var1,Var2):c,x; Endset w=sum(Var(I,J): c(I,J)*x(I

30、,J); for(Var(I,J): BIN(x(I,J); end 例6 1 . 11 . 35 . 29 . 26 . 2 7 . 37 . 25 . 28 . 15 . 1 1 . 23 . 25 . 44 . 33 . 2 02111 A 2.32.52 1.21.32 7.23.22 9.25.32 5.26.22 B 求 BAC LINGO810编程介绍 LINGO的编程如下: Model: Sets: Var1/1.5/:II; Var2/1.4/:JJ; Var3/1.3/:KK; Link1(Var2,Var1):A; Link2(Var1,Var3):B; Link3(Va

31、r2,Var3):C; Endsets Data: A=1,1,1,2,0,2.3,3.4,4.5,2.3,2.1,1.5,1.8,2.5,2.7,3.7,2.6, 2.9,2.5,3.1,1.1; B=2,2.6,2.5,2,3.5,2.9,2,2.3,2.7,2,3.1,2.1,2,5.2,3.2; Enddata LINGO810编程介绍 for(Link3(I,J): C(I,J)=sum(Var1(K):A(I,K)*B(K,J); end max, max, minmin:-用于求最大,最小函数的编程用于求最大,最小函数的编程 格式:格式:max(A:B), max(A:B), min(A:Bmin(A:B) 含义:含义:A A表示循环的变量及范围,表示循环的变量及范围,B B表示单项表达式。表示单项表达式。 例7 1 . 11 . 35 . 29 . 26 . 2 7 . 37 . 25 . 28 . 15 . 1 1 . 23 . 25 . 44 . 33 . 2 02111 A 2 . 32 . 52 1 . 21 . 32 7 . 23 . 22 9 . 25 . 32 5 . 26 . 22 B BAC 求C中最大和最小的元素。 LINGO810编程介绍 LINGO的编程如下: Model: Sets: Var1/1.5/:I

温馨提示

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

最新文档

评论

0/150

提交评论