Lingo的基本用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LINGO的基本用法
一.集合的基本用法
集合(set)及其属性(attribute)的概念
基本集合与派生集合
集合名[/元素列表/][:属性列表];
集合名(父集合列表)[/元素列表/][:属性列表];
稠密集合与稀疏集合
元素过滤法
基本集合的隐式列举法:
数字型 1..n
字符数字型Car101..Car208
日期型MON..FRI
月份型OCT..JAN
年月型OCT2007..JAN2008
二.模型结构
(1)集合段从“sets:”到“endsets”
(2)数据输入段从“data:”到“enddata”
属性=常数列表
(3)目标和约束段
MIN=表达式
(4)计算段从“calc:”到“endcalc”,对原始数据的计算处理
(5)初始段从“init:”到“endinit”,定义迭代初值用
属性=常数列表
(6)注释从感叹号到分号
三.函数
基本数学函数
@ABS(X) @COS(X) @EXP(X) @FLOOR(X)
@LGM(X) @LOG(X) @MOD(X,Y) @POW(X,Y)
@SIGN(X) @SIN(X) @SMAX(list) @SMIN(list)
@SQR(X) @SQRT(X) @TAN(X)
其中@LGM(X) =ln(X-1)!
集合循环函数
@FOR @MIX @MIN @PROD
@SUM
用法:集合函数名(集合名(集合索引列表)|条件:表达式组)
集合操作函数
@IN @IN(集合名,集合元素名,…集合元素名)
@INDEX @INDEX(集合名,集合元素名)
@WRAP @WRAP(i,N),循环计数
@SIZE @SIZE(集合名)
变量定界函数
@BND(L,X,U) @BIN(X) @FREE(X) @GIN(X) 分别对变量取值限制:上下界,0-1值,取消非负限制,整数
概率分布函数
@PNS(X) 标准正态分布@PSL(X) 正态线性损失
@PBN(P,N,X) 二项分布@PHG 超几何分布
@PTD(N,X) t分布@PFD(N,D,X) F分布
@PPS(A,X) 泊松分布@PPL(A,X) 泊松线性损失
@PCX(N,X) X平方分布@RAND(seed) 随机数
服务系统函数
@PEL(A,X) @PFS(A,X,C) @PEB(A,X)
文件输入输出函数
@FILE(fn) @TEXT(…fn‟) @OLE
结果报告函数
@ITERS() 返回迭代次数
@NEWLINE(n) 输出n个新行
@STRLEN(string) 返回字符串的长度
@NAME(reference) 返回变量名或行名
@WRITE 用于数据段,输出变量,字符串或换行
@WRITEFOR 是@WRITE在循环情况下的推广
@FORMAT 以格式描述符方式输出数值
@DUAL(varname) 返回解答中变量的判别数或结束行的影子价格@STATUS() 返回求解后的最后状态
其他函数
@IF @IF(条件,true结果,false结果)
@WARN @WARN(‘text’,条件)
@USER @USER(用户编写的函数dll或obj文件)
四.文件传输
通过文本文件传输数据
@FILE和@TEXT
通过Excel文件传输数据
@OLE
例题
! 背包问题 Knapsack Problem
! max z=sum(i=1~n)ci xi
! st. sum ai xi <=b, xi=0/1;
model:
title背包问题;
sets:
wp/w1..w8/:a,c,x;
endsets
data:
a=1 3 4 3 3 1 5 10; c=2 9 3 8 10 6 4 10; enddata
max=@sum(wp:c*x);
@for(wp:@bin(x));
@sum(wp:a*x)<=15;
end
!装箱问题
!=======;
model:
title装箱问题;
sets:
wp/w1..w30/:w; xz/v1..v30/:y; links(wp,xz):x; endsets
data:
w=0.51,0.51,0.51,0.51,0.51,0.51,
0.27,0.27,0.27,0.27,0.27,0.27,
0.26,0.26,0.26,0.26,0.26,0.26,
0.23,0.23,0.23,0.23,0.23,0.23,
0.23,0.23,0.23,0.23,0.23,0.23;
enddata
min=@sum(xz(i):y(i));
C=1;
@for(links:@bin(x));
@for(xz:@bin(y));
@for(wp(i):@sum(xz(j):x(i,j))=1);
@for(xz(j):@sum(wp(i):w(i)*x(i,j))<=C*y(j)); end