- 在线时间
- 0 小时
- 最后登录
- 2009-2-8
- 注册时间
- 2009-1-16
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 724 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 240
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 45
- 主题
- 6
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   70% 该用户从未签到
|
Lingo软件在求解数学优化问题的使用技巧0 i% l& o) z- e7 f
0 o2 T0 h% H! F7 b3 k) W
LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。: k$ ~! K, A3 y W1 P l
LINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。
* q: S( \; ?+ U; E2 a" u2 p) D
2 I/ a1 N1 a* x# n# G 1.LINGO编写格式
3 c$ }7 m7 O% @6 q* T1 k LINGO模型以MODEL开始,以END结束。中间为语句,分为四大部分(SECTION):
$ H( y& {" S6 h(1) 集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(ATTRIBUTE,类似于数组)。
* i) H+ d" d: b" N; ELINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:; W0 l" K3 i$ n
SETNAME/member list(or 1..n)/:attribute,attribute,etc。
! N; y' Y: M& f& ?/ o7 V1 S另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为:
3 L) c% }' s: ]) ^8 ]SETNAME(set1,set2,etc。):attribute,attribute,etc。! g" ?/ u( @3 E9 @1 T, G# z: L
如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。 y# z C! M* _8 D' K, T! [
(2) 目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。
. y0 \8 a4 T7 m" _2 V6 K% ^(3) 数据部分(DATA):这部分以“DATA:”开始,以“END DATA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=value_list。该部分主要是方便数据的输入。
& e6 w G# O5 B) n0 v7 `/ j(4) 初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。
$ F2 A# I: z; {: }6 ]( z
- w) N3 F k3 w, ]" I编写LINGO程序要注意的几点:) ?" H( S1 x3 _8 h. n4 w) s5 D
1. 所有的语句除SETS、ENDSETS、DATA、ENDDATA、INIT、ENDINIT和MODEL,END之外必须以一个分号“;”结尾。! s) \ v) U8 I6 x
2. LINGO求解非线性规划时已约定各变量非负。
- {2 y- g3 w* e* Q# e7 e
. @5 r- `' R) W1 t' M. i" YLINGO内部函数使用详解。6 l# G) r0 P* `% @
LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。
. t4 p' j/ Y6 C y4 j(1) 常用数学函数
8 |$ a, ^5 r8 n+ P' H$ z i! ~3 e@ABS(X) 返回变量X的绝对数值。
0 [, M( X. Z, x& h@COS( X)0 L4 t6 K" X6 ^4 f9 V
返回X的余弦值,X的单位为弧度; }: R; j4 o! Q4 d
@EXP( X)- m% V0 W1 h: t( v: O
返回 的值,其中e为自然对数的底,即
6 n2 e2 H! e4 [$ S6 @; v@FLOOR( X)
U" U7 Y% Y5 D: v向0靠近返回X的整数部分。如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3。
, n1 g# J; W8 Z@LGM( X)" r) y% A: C$ G9 k0 S; Z
返回 函数的自然对数值。9 |$ c; U, k9 n) R$ r
@LOG( X)
8 X9 D; a# N& D# \" x返回变量X的自然对数值。
" g( h/ ~: Y# F1 |% I" f@SIGN( X): _ a3 Z+ Z/ H7 f
返回变量X的符号值,当X<0时为-1;当X>0时为1。
) M8 P8 @+ t# x9 }, c( I' @( ~( D1 w@SIN( X)
% ?4 X) n+ I& x" x% G返回X的正弦值,X的单位为弧度
k! w. K" `4 }- O@SMAX( X1, X2,..., XN)8 \/ R" B- D" W- ?
返回一列值X1, X2,..., XN的最大值。
" y8 i0 N4 Q4 F@SMIN( X1, X2,..., XN)" Q; t N; n& D& z, I
返回一列值X1, X2,..., XN的最小值。" F+ l0 G6 |' }* y' i& P9 W
@TAN( X). q1 r9 j" {& C1 P' i
返回X的正切值,X的单位为弧度
! W' i6 i: Z6 R4 d8 H$ e
: {2 ]9 G( n' v0 r: ^ O(2)集合函数* d+ i6 u, g/ y' R4 L' B( K% x! y; g
集合函数的用法如下:
: w8 y/ b) I$ h5 qset_operator (set_name|condition:expression)
1 [, C$ ~& L* @. ^$ W7 k( u! K其中set_oprator部分是集合函数名(见下),set_name是数据集合名,expression部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略)。逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系酸符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于))。
/ h- s7 t, U7 v6 U8 N8 i. M常见的集合函数如下:
! C: J8 r5 V3 N- V@FOR (set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述。
1 z- \/ c# j" U7 v' \9 c1 O6 O@MAX(set_name:expression)返回集合上的表达式(expression)的最大值。
$ Y$ K$ B0 q0 M k6 D$ R; [7 T) B@MIN(set_name:expression)返回集合上的表达式(expression)的最小值。
9 S5 \- p9 n9 s) b@SUM(set_name:expression)返回集合上的表达式(expression)的和。$ [; ^" }& i: w& o9 X# u' J' h
@SIZE(set_name)返回数据集set_name中包含元素的个数。9 s% ^$ C, Y5 W& `
@IN(set_name,set_element)如果数据集set_name中包含元素set_element则返回1,否则返回0。
0 |" S5 t' i0 g5 G+ D2 u3 f(3)变量界定函数
U' M5 j: @* ~/ Q1 P2 u+ h3 c# N% ?7 l 变量函数对变量的取值范围附加限制,共有四种。
4 ~* t1 a3 p2 s% T @BND(L,X,U)限制 # j' B3 g* D+ P( X
@BIN(X)限制X为0或1。
2 v ?( }% E# J S% b @FREE(X)取消对X的符号限制(即可取任意实数值)。
! f/ X" A- X/ P& {# D1 I @GIN(X)限制X为整数值。5 e1 z3 f4 v& w" e* y, m
(4)财务函数9 r& l- M. Y6 E0 l2 u
返回如下情形下的净现值:单位时段利率为 ,连续 个时段支付,每个时段支付费用,即:) `( w& _; X, O: X6 F
=
- F; c* w" D" X 返回如下情形下的净现值:单位时段利率为 ,第 个时段支付单位费用,即:8 M- S# l, ]: x
= ' c' ^, t2 ?" H5 H* ~2 i
# D4 B9 R. O: f; c# g5 X
(5)概率函数 T* V9 U5 P$ ^; u% p! R% s
@PSN(X)标准正态分布的分布函数。1 @" _3 i2 { W' G4 T
@PSL(X)单位正态线性损失函数(即返回 的期望值,其中Z为标准正态随机变量)5 O) ?2 G1 a) H( {4 G
@PPS(A,X)均值为A的Possion分布的分布函数(当X不是整数时,采用线性插值进行计算)。
1 n+ P+ t W- O3 J% e@PPL(X)Possion分布的线性损失函数(即返回 的期望值,其中Z为Possion分布随机变量)4 _, }. S7 {( M" K4 T1 ~
@PBN(P,N,X)二项分布的分布函数当N或X不是整数时,采用线性插值进行计算)。4 ^; t- ^6 {3 p% s
@PHG(POP,G,N,X)超几何分布的分布函数(当POP,G,N或X不是整数时,采用线性插值进行计算)。
9 a6 l$ G# e7 `( m@PFD(N,D,X)自由度为N和D的F分布的分布函数。
, ]1 I% W' K/ C d@PCX(N,X) 自由度为N的 分布的分布函数。, L0 w3 v& W* U2 Q0 {
@PTD(N,X) 自由度为N的t分布的分布函数。% I3 G9 c" b: r5 |
@RAND(X)返回0与1之间的伪随机数(X为种子数,典型用法为U(I)=@RAND(U(I+1)))。 |
|