- 在线时间
- 0 小时
- 最后登录
- 2009-2-8
- 注册时间
- 2009-1-16
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 724 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 240
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 45
- 主题
- 6
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   70% 该用户从未签到
|
Lingo软件在求解数学优化问题的使用技巧
5 o( T$ C$ Z/ `. k9 |6 _( `8 F k& t7 ]* }: T5 \
LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。
- x9 w0 l/ ]6 H- `1 vLINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。0 q5 A8 E/ W F) I" l$ b4 }# y
4 P4 W3 D" P+ k" J/ z/ \ 1.LINGO编写格式6 l0 A2 r- T( H4 G
LINGO模型以MODEL开始,以END结束。中间为语句,分为四大部分(SECTION):4 W, J2 a9 j2 R' |! E+ n
(1) 集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(ATTRIBUTE,类似于数组)。8 O2 ~9 `( ^, U+ I% x
LINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:) l- e9 m$ t" ^( a2 l/ I
SETNAME/member list(or 1..n)/:attribute,attribute,etc。
1 ]$ s o2 ]3 C( r" Z' d+ k1 q* F5 `另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为:* Q- N& a- ^- h2 a4 B1 P# ^* W1 G
SETNAME(set1,set2,etc。):attribute,attribute,etc。1 w& D% Z9 L0 ^4 s8 h5 N4 m- \3 D, @
如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。* D$ r$ U( D: f% a5 c; {3 U8 Q
(2) 目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。
! L" M: @( z0 [: c* _) d(3) 数据部分(DATA):这部分以“DATA:”开始,以“END DATA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=value_list。该部分主要是方便数据的输入。9 k8 Z8 ~. W3 m9 G" g8 X A: F$ |: x
(4) 初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。/ Y6 H7 ]5 c& U$ m2 I- j% i, P
$ N, i+ I# j# S9 k, X编写LINGO程序要注意的几点:
! T- b) t# C. S1. 所有的语句除SETS、ENDSETS、DATA、ENDDATA、INIT、ENDINIT和MODEL,END之外必须以一个分号“;”结尾。
# C+ M% x: o8 }& u2. LINGO求解非线性规划时已约定各变量非负。# F0 }' b4 u1 H& N) f
* ~0 I3 I% s ]* n6 J: E v( cLINGO内部函数使用详解。3 x" z" c9 C: A1 V& Y
LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。3 I8 A8 ^% f: P" W- F3 \
(1) 常用数学函数
% m6 z- T4 k6 m@ABS(X) 返回变量X的绝对数值。 2 m' p, ^( z/ P5 O4 N$ p
@COS( X)6 M5 Z& l$ b7 L( ~
返回X的余弦值,X的单位为弧度# E' Q8 B: x) ~% D
@EXP( X)6 s( s0 D( d7 \' o8 P' B5 g) _
返回 的值,其中e为自然对数的底,即 7 O5 {+ G$ m7 X
@FLOOR( X)3 q$ l4 m3 Z! v& \( o( |" Z
向0靠近返回X的整数部分。如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3。
' H2 d3 {7 h" k9 U" m9 K% }@LGM( X)
: ]8 q4 t8 p( o返回 函数的自然对数值。: \* ~( i+ s# n
@LOG( X)
6 s0 b4 {$ f; v0 J5 i' P返回变量X的自然对数值。8 E/ n) q% O Y) L
@SIGN( X)# {. ]/ ^* b9 n; h# z( n! v
返回变量X的符号值,当X<0时为-1;当X>0时为1。
/ |9 l2 n1 M3 L1 L% N3 a8 C% U" @@SIN( X)( d2 E' Z: R4 A6 S" @4 U" f9 x
返回X的正弦值,X的单位为弧度
" C9 }& W5 k$ v. w@SMAX( X1, X2,..., XN)
# c: F9 V* V& T" c- w7 t; `返回一列值X1, X2,..., XN的最大值。: I s" u5 g' K( j( H* c" o+ {
@SMIN( X1, X2,..., XN)( c5 b' t) }% i* d% J: H& ~
返回一列值X1, X2,..., XN的最小值。: X# ^; }% I6 @
@TAN( X)
9 B4 a& [# E. H9 z! T0 C返回X的正切值,X的单位为弧度
z( x: |: s; |9 Q! f
( r" w4 R6 [; T+ X(2)集合函数) J9 [! e4 A! u/ i( d3 \- I. F
集合函数的用法如下:5 r/ p5 l. C3 |7 T9 R
set_operator (set_name|condition:expression)9 Z: z/ \* n2 v; e0 B0 N/ O
其中set_oprator部分是集合函数名(见下),set_name是数据集合名,expression部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略)。逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系酸符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于))。3 l3 [# M# o7 J: S ^! F
常见的集合函数如下:8 D3 c8 n4 w: \" \
@FOR (set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述。( K7 S: i) P/ [ v( F* ^
@MAX(set_name:expression)返回集合上的表达式(expression)的最大值。1 N6 L8 `* |- q2 h3 ]2 L
@MIN(set_name:expression)返回集合上的表达式(expression)的最小值。
2 D' s) I& N" W) O# d ~$ ~@SUM(set_name:expression)返回集合上的表达式(expression)的和。
3 T+ r6 O- Z; _6 L+ z@SIZE(set_name)返回数据集set_name中包含元素的个数。8 E; h" R. ]8 J( z
@IN(set_name,set_element)如果数据集set_name中包含元素set_element则返回1,否则返回0。# J: \# j( o! n2 |- [- W
(3)变量界定函数 V: R+ \1 ?$ ^* c- ~" m e
变量函数对变量的取值范围附加限制,共有四种。
9 N# _& ~1 I/ U. h2 i. E4 `% I @BND(L,X,U)限制
; a: x, {" O3 _7 J8 x$ l1 |; x @BIN(X)限制X为0或1。8 M( p9 r. v5 R7 v2 p
@FREE(X)取消对X的符号限制(即可取任意实数值)。
, a! s* f) E3 d( n" C* U @GIN(X)限制X为整数值。* V' R& E- Q1 t8 q! g/ l
(4)财务函数% h+ @, M. @1 ~
返回如下情形下的净现值:单位时段利率为 ,连续 个时段支付,每个时段支付费用,即:1 ~6 }$ a b0 E1 C& j2 j, i. D
=
7 ?0 N. q* _, J% {4 G9 Z 返回如下情形下的净现值:单位时段利率为 ,第 个时段支付单位费用,即:' b3 w7 \& c. U; H+ M8 `# p
=
: W/ t' g, K/ O
% z% j% o2 q( N" k- _! \5 U (5)概率函数
& @- s0 N ^) H. v0 r@PSN(X)标准正态分布的分布函数。4 o T/ I7 S$ ]
@PSL(X)单位正态线性损失函数(即返回 的期望值,其中Z为标准正态随机变量)
b3 a' N3 _+ Q& v1 r, h1 z: G@PPS(A,X)均值为A的Possion分布的分布函数(当X不是整数时,采用线性插值进行计算)。' K0 E" a9 u3 U. \7 v
@PPL(X)Possion分布的线性损失函数(即返回 的期望值,其中Z为Possion分布随机变量), ?$ a" W" @& q9 Y7 X
@PBN(P,N,X)二项分布的分布函数当N或X不是整数时,采用线性插值进行计算)。$ o' V, j3 F. ~) h' p
@PHG(POP,G,N,X)超几何分布的分布函数(当POP,G,N或X不是整数时,采用线性插值进行计算)。 {* d3 o5 w( F/ R5 T% }
@PFD(N,D,X)自由度为N和D的F分布的分布函数。( s3 h6 J d+ J2 `$ u: E3 a
@PCX(N,X) 自由度为N的 分布的分布函数。
; g/ o# P$ U. {$ `! o@PTD(N,X) 自由度为N的t分布的分布函数。' j4 j$ r: u7 K" W. c
@RAND(X)返回0与1之间的伪随机数(X为种子数,典型用法为U(I)=@RAND(U(I+1)))。 |
|