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