- 在线时间
- 0 小时
- 最后登录
- 2009-2-8
- 注册时间
- 2009-1-16
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 724 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 240
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 45
- 主题
- 6
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   70% 该用户从未签到
|
Lingo软件在求解数学优化问题的使用技巧
! E0 z, W! }# i5 S* T
9 F2 }- Y' w6 n+ Q# lLINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。
Q7 y( C2 T r% nLINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。) V' h3 l- K" F4 @/ z
/ G: F, _2 ^9 S, _0 i( U6 U! @& z
1.LINGO编写格式4 S5 l! {. R/ t4 P
LINGO模型以MODEL开始,以END结束。中间为语句,分为四大部分(SECTION):
' g# B* _" c8 }2 |& t0 G(1) 集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(ATTRIBUTE,类似于数组)。
8 b4 v/ q( h0 S f/ KLINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:8 W5 D" `( T. E p1 t& G
SETNAME/member list(or 1..n)/:attribute,attribute,etc。. B' k9 N t; K3 ]) C0 C' z
另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为:
- @" n. @, |& N6 Q( O1 i1 k4 S2 CSETNAME(set1,set2,etc。):attribute,attribute,etc。* H, [8 `& h7 l' v- M2 `4 F/ j
如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。
* _0 s% B( L% {4 s/ v k(2) 目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。# n, Y: e) ~+ I; H, T* e& l
(3) 数据部分(DATA):这部分以“DATA:”开始,以“END DATA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=value_list。该部分主要是方便数据的输入。
L4 L& q+ O' {( Q9 f(4) 初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。- B* j1 o' F6 h( I
! R* n a2 E9 @. m# V& z
编写LINGO程序要注意的几点:* S; j1 d7 f& w+ @& v
1. 所有的语句除SETS、ENDSETS、DATA、ENDDATA、INIT、ENDINIT和MODEL,END之外必须以一个分号“;”结尾。, W& c( i% a6 y
2. LINGO求解非线性规划时已约定各变量非负。/ t" S0 a6 @/ G* [* Z
* v# E. [/ E& \0 G$ t
LINGO内部函数使用详解。, v0 k* ^$ D1 X( @$ L4 m3 s' J% s
LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。
5 ^. T$ G/ B& k9 V9 L(1) 常用数学函数
0 P& ]' j) \ T I" |1 X/ W- U@ABS(X) 返回变量X的绝对数值。
8 y0 Q/ u \3 o( B@COS( X)* i4 ]$ Y% W; h6 k
返回X的余弦值,X的单位为弧度
' A }1 D) b4 E0 s. O@EXP( X)8 n+ S2 R E4 J
返回 的值,其中e为自然对数的底,即 1 T9 \7 ?( r1 S, \0 a
@FLOOR( X)
* g$ ]* z/ x2 W' j* |% e0 Y向0靠近返回X的整数部分。如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3。+ }# \0 H) \% C
@LGM( X)
* R8 _4 r9 a6 D1 S- x+ n" f& h, V返回 函数的自然对数值。
3 k' G( N3 M1 I0 k$ `0 V@LOG( X)
, I3 C0 _3 Q& g, S返回变量X的自然对数值。
2 r& G$ Q9 {8 g' R2 n@SIGN( X)/ n. f$ C) H2 h9 r" ~# e; O
返回变量X的符号值,当X<0时为-1;当X>0时为1。
G" ?& N& F5 j2 M% x! K: s7 U4 N@SIN( X)- B! y% _3 f( ~. _9 s: G: j" L
返回X的正弦值,X的单位为弧度7 p. V) c7 h; m( ]$ Q# P1 a
@SMAX( X1, X2,..., XN)
& e! y' l+ X% E+ u! Q: H返回一列值X1, X2,..., XN的最大值。* \2 `4 q5 ~( d$ M
@SMIN( X1, X2,..., XN)
5 ~+ ~4 m8 Z8 {0 z8 A# u, J返回一列值X1, X2,..., XN的最小值。9 G; d2 L. f$ P
@TAN( X)1 ^* B$ S1 {1 O j( d; ]
返回X的正切值,X的单位为弧度, U* ?; C9 U8 W7 `, K) p5 B
3 @: V* }0 z2 m( k(2)集合函数. C! S8 r+ j3 J
集合函数的用法如下:
, D* L; u1 [2 \, f- }" eset_operator (set_name|condition:expression)2 z" k" D2 Z3 i+ K( G; [
其中set_oprator部分是集合函数名(见下),set_name是数据集合名,expression部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略)。逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系酸符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于))。 [' P& d: ?9 y! U$ |
常见的集合函数如下:) p Y7 `, z, i0 S3 E1 a; l
@FOR (set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述。4 E3 v) D' w" [% \( l- g
@MAX(set_name:expression)返回集合上的表达式(expression)的最大值。
3 x" i; M& A# C; T* r1 {4 b! e@MIN(set_name:expression)返回集合上的表达式(expression)的最小值。
" M t; t" W* g3 u1 G@SUM(set_name:expression)返回集合上的表达式(expression)的和。
8 F( k$ X" E5 }1 @@SIZE(set_name)返回数据集set_name中包含元素的个数。( ?# d9 W* `$ @3 z5 v
@IN(set_name,set_element)如果数据集set_name中包含元素set_element则返回1,否则返回0。- X: @: Q [1 Z8 e
(3)变量界定函数, O% s# Y, O* v' S d) l( {6 O
变量函数对变量的取值范围附加限制,共有四种。( y3 Y. c# B0 [% I" z+ N. N
@BND(L,X,U)限制 ) N, g. N1 [9 {6 U; i1 V' ~& P
@BIN(X)限制X为0或1。! X+ i' i# Z6 E/ H' f- G
@FREE(X)取消对X的符号限制(即可取任意实数值)。# U5 u' d7 J6 J [! H4 r! G$ \
@GIN(X)限制X为整数值。
' z. K5 W, Q F$ r$ W5 j(4)财务函数# P. |- e* s; l* @* ]: G
返回如下情形下的净现值:单位时段利率为 ,连续 个时段支付,每个时段支付费用,即:/ m8 p, S" `7 Y! T" a
=
$ r# U @! u( e Z5 W 返回如下情形下的净现值:单位时段利率为 ,第 个时段支付单位费用,即:/ i% k; ] t+ h& s( X9 B8 Y
= - U9 x: b8 h, }/ J: F2 O: f
7 R) t& ^3 f6 v/ H& O+ \ (5)概率函数
5 J0 _1 c7 `8 e5 {@PSN(X)标准正态分布的分布函数。
% a( H: {; }2 @( C! g@PSL(X)单位正态线性损失函数(即返回 的期望值,其中Z为标准正态随机变量)
( t3 D. ?4 c" Q: m@PPS(A,X)均值为A的Possion分布的分布函数(当X不是整数时,采用线性插值进行计算)。
6 }. D7 X L, E$ b@PPL(X)Possion分布的线性损失函数(即返回 的期望值,其中Z为Possion分布随机变量)
3 @0 o& x$ ?# @3 |0 O0 C@PBN(P,N,X)二项分布的分布函数当N或X不是整数时,采用线性插值进行计算)。
( {& A! v# L! E7 Z) g+ ^@PHG(POP,G,N,X)超几何分布的分布函数(当POP,G,N或X不是整数时,采用线性插值进行计算)。
) P$ }1 s7 m1 w1 v@PFD(N,D,X)自由度为N和D的F分布的分布函数。
9 U T/ B! D* o$ K@PCX(N,X) 自由度为N的 分布的分布函数。
# S/ S- c$ ?' A: s0 D8 x, ~@PTD(N,X) 自由度为N的t分布的分布函数。( b# F A G& e) J* B* }
@RAND(X)返回0与1之间的伪随机数(X为种子数,典型用法为U(I)=@RAND(U(I+1)))。 |
|