- 在线时间
- 0 小时
- 最后登录
- 2009-2-8
- 注册时间
- 2009-1-16
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 724 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 240
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 45
- 主题
- 6
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   70% 该用户从未签到
|
Lingo软件在求解数学优化问题的使用技巧$ y5 s% t2 L) a
2 m, X" p) x8 J) U- }: v
LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。5 F* F- Y6 W4 b: Y q4 Q% \
LINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。/ E* C$ z/ Z, V9 c+ Q4 P
% e( M' ~% O! a 1.LINGO编写格式( U5 f) s# G! W- L; ~
LINGO模型以MODEL开始,以END结束。中间为语句,分为四大部分(SECTION):7 a+ K5 K$ Q. B2 [# R+ d
(1) 集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(ATTRIBUTE,类似于数组)。- r5 ]% t1 _' J* X0 {7 s
LINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:5 m7 D1 {4 {; k' [
SETNAME/member list(or 1..n)/:attribute,attribute,etc。1 Q, C1 ^: F( k6 x
另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为:8 R7 v0 t* ]% n8 ?) a1 g
SETNAME(set1,set2,etc。):attribute,attribute,etc。
. H! ~$ w& Y1 A9 o如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。/ F' l! B: T2 i3 T( L# ~( _7 F% ^
(2) 目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。
, F3 Y4 [( c, ~% F(3) 数据部分(DATA):这部分以“DATA:”开始,以“END DATA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=value_list。该部分主要是方便数据的输入。. Q' j5 B0 c0 Q
(4) 初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。
}0 y5 B3 ~! j7 J1 v
" L* }- h3 J$ \/ L% \# E编写LINGO程序要注意的几点:3 p* @' x9 q3 [9 |/ g5 Z n+ J' J
1. 所有的语句除SETS、ENDSETS、DATA、ENDDATA、INIT、ENDINIT和MODEL,END之外必须以一个分号“;”结尾。
; u8 {( V3 M; v2 y! D2. LINGO求解非线性规划时已约定各变量非负。) s1 W: V( N9 r" t+ m( Z& k, W
# T% B4 V( C. @% B
LINGO内部函数使用详解。" O% `7 ~/ s) @: }
LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。
1 n+ W3 [% d/ l0 v) X(1) 常用数学函数+ }, H& ]" k: `7 `' g
@ABS(X) 返回变量X的绝对数值。
9 q& G1 R' n$ |7 A+ G5 f4 `" F# S@COS( X)2 l+ O0 d& U) s
返回X的余弦值,X的单位为弧度! p7 S* E1 n! R8 w: }0 J& l
@EXP( X)' H$ ]( N% n! ?
返回 的值,其中e为自然对数的底,即
0 U0 N) {1 a3 S' i8 w1 Z$ z8 u7 a. ]@FLOOR( X)
) X6 U/ b3 Z5 D; c4 J5 x- x向0靠近返回X的整数部分。如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3。
1 ?* T1 u% B2 h@LGM( X)9 d, G( B3 }8 l8 d! V% U& a
返回 函数的自然对数值。
) G' U* z: W9 V5 p, O# g3 @@LOG( X)4 E% k% r' M* l+ K
返回变量X的自然对数值。; m' O* L; x5 P
@SIGN( X)
2 ^. K5 B O) Y* J0 q返回变量X的符号值,当X<0时为-1;当X>0时为1。
1 d; v4 D: d6 G ~3 o@SIN( X). N- A" a8 h' n- a2 D
返回X的正弦值,X的单位为弧度 L/ Z/ R$ J h( s0 k! T1 S2 j& F
@SMAX( X1, X2,..., XN)
5 n* ]3 G3 T$ ~6 @" n5 d返回一列值X1, X2,..., XN的最大值。
0 g3 Q6 o* Q9 P1 i0 u3 }; V( o" E2 H& K@SMIN( X1, X2,..., XN)
$ L$ Q' x3 d$ d返回一列值X1, X2,..., XN的最小值。+ D( N1 d# y' j$ K) [% \
@TAN( X)
' f: u4 L3 a) Y8 `返回X的正切值,X的单位为弧度, I0 V( s. B! ]. ~- B6 j# N" K1 F
A: N0 h9 j" I! p5 H* z(2)集合函数2 c2 _' l: d) R5 H. E) j t! f' n
集合函数的用法如下:
$ H, B3 Z) B8 ^ {) e9 q8 iset_operator (set_name|condition:expression)
* J4 i% O" v) \% M其中set_oprator部分是集合函数名(见下),set_name是数据集合名,expression部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略)。逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系酸符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于))。2 A$ y+ K$ k! Y0 E4 [" |6 l
常见的集合函数如下:
8 b! X8 Q8 a: [0 o0 K! @7 t, ~@FOR (set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述。7 n2 m2 R1 K- P- ^/ j
@MAX(set_name:expression)返回集合上的表达式(expression)的最大值。- Y7 S8 M$ R8 ~: y5 k8 W4 C: }. H
@MIN(set_name:expression)返回集合上的表达式(expression)的最小值。
2 V7 _8 N1 l4 z# a& D3 u@SUM(set_name:expression)返回集合上的表达式(expression)的和。
3 Y" b; c* v" w4 { A@SIZE(set_name)返回数据集set_name中包含元素的个数。
4 K9 `7 b4 t) ?@IN(set_name,set_element)如果数据集set_name中包含元素set_element则返回1,否则返回0。
+ E g# p& D9 ?0 v: G(3)变量界定函数
( \4 r0 W3 [3 v$ }( M: o( k 变量函数对变量的取值范围附加限制,共有四种。0 Q, v' g! R4 S$ D/ u" Q/ B3 d, F
@BND(L,X,U)限制
1 m0 i( {/ g/ j* E" V* ?' T( m @BIN(X)限制X为0或1。
( r! g+ `' p1 T, I- f+ Q& @- y8 I( q @FREE(X)取消对X的符号限制(即可取任意实数值)。
w6 o' l/ Q! b/ _* ? @GIN(X)限制X为整数值。
* H( r `- K) F(4)财务函数0 w6 h0 O: a* p F" R
返回如下情形下的净现值:单位时段利率为 ,连续 个时段支付,每个时段支付费用,即:" X6 E* Y- @: s+ _, ?1 |& S
=
2 A" o( Q0 z# L8 i! t* V 返回如下情形下的净现值:单位时段利率为 ,第 个时段支付单位费用,即:
& m+ q- ` v" ]- X$ b" G' d = - \" `* l! G2 R. ~! Y
1 W+ G7 q$ z- P# Q4 k
(5)概率函数
4 d' @# i4 j0 x7 l4 y, M7 f@PSN(X)标准正态分布的分布函数。* H, z ?$ K/ P! ]
@PSL(X)单位正态线性损失函数(即返回 的期望值,其中Z为标准正态随机变量)
9 d. z- Y N f- F- h( L@PPS(A,X)均值为A的Possion分布的分布函数(当X不是整数时,采用线性插值进行计算)。
# q) k; S# \6 _7 E@PPL(X)Possion分布的线性损失函数(即返回 的期望值,其中Z为Possion分布随机变量)
; g3 l; ?3 j, [0 p/ i@PBN(P,N,X)二项分布的分布函数当N或X不是整数时,采用线性插值进行计算)。
) X* [/ L/ t) L/ ]2 A@PHG(POP,G,N,X)超几何分布的分布函数(当POP,G,N或X不是整数时,采用线性插值进行计算)。! w/ I' |8 s- e0 R5 r
@PFD(N,D,X)自由度为N和D的F分布的分布函数。
& [( t9 F" @# X; V6 k@PCX(N,X) 自由度为N的 分布的分布函数。
1 n6 g2 j: Z* `$ \# U: L' Q1 M@PTD(N,X) 自由度为N的t分布的分布函数。9 @5 P {' P. n/ B9 P% |- ~& N1 F5 {, h
@RAND(X)返回0与1之间的伪随机数(X为种子数,典型用法为U(I)=@RAND(U(I+1)))。 |
|