|
GAMS示例 4 `6 k6 V* F. b; Z& i8 F0 z* k
下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征.
, K: C3 Z) P- ^, N; z; V( ?2 N7 K6 j% z% ^" I
2 N1 q- I, G, {( I
8 X1 Z/ ~$ V$ ?! h) V' I# p- q
| |
2 N* t" n$ [+ |7 d8 g1 \2 [ 代数描述 | 1 ?% j1 o% \& v( K8 w
下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束. . x9 A) A+ ~ Y- T* p* L
指标:
* M% B% s' z4 G, E% U0 Y i=工厂(plants) j=市场(markets) # M( @' x% J5 _( \" K+ O* J6 K
给定的数据: $ w; S' ]/ e ~! Y
=在工厂i日常供应量(批数cases)
=在市场j的日常需求量(批数cases)
=在工厂i和市场j之间的距离(千英里)
=在工厂i和市场j之间每单位的运输费用($/批/千英里) 6 J( }0 K, {. @
' g9 k+ x' D& j% T- W; i5 r" f
' {7 C6 L! v0 n% M Z+ e
8 C4 [1 {: O# ]; A* D8 N| 距离 | * ~$ C. K. T, G6 i- }0 z
| . g" I1 N8 N! U# i1 m+ i
( d( t4 d: j( D# Z
| |
' w$ `# W( _' J" \5 J市场 | 8 `1 z8 \5 k+ q Z: N
| " t3 u$ `; q$ V U. M' O
3 Q3 h' y+ T' z8 }7 z9 c, E| 工厂 | & h! \. f Q3 K/ r B6 J( N6 x
New York | 6 \7 \- B( q/ S% Z& J0 q
Chicago |
* @. i) y( C$ T0 |: X2 ~$ x/ ~6 ATopeka |
) ^( W2 }2 R& L, J8 D供应量 |
% g; g2 m; {6 d+ p! r4 }. }% Z: d, Z- e6 A+ c! |! {( E! f- W
| Seattle | 7 P; A$ O7 Y% r; ?" j
2.5 | % v, P# z; Q" Q$ H0 I
1.7 | : G+ S+ `! a- f' @+ U# ^
1.8 |
! Q2 m0 g& J r% D; ^1 v2 [350 | / H, K; A" @* E; i/ W; Y3 {
+ Y, c2 s" c2 K| San Diego |
; v& F' l+ U( C2.5 | 6 v5 [+ E( p2 f8 H7 n
1.8 | 1 `( s8 t6 Y h c( V' U
1.4 |
3 @4 J5 Y: O0 D r600 | 6 t& ^. W& h% l9 S) C
2 `2 u, o2 D( y3 V9 i$ x
| 需求量 |
7 y9 R% P' O5 X2 d4 h325 |
& W# z8 @# B) V, ~; d6 e Z. ~9 ]300 | + s0 m5 |6 V! j+ i
275 | 9 J. w0 L2 Y: T1 V+ r$ s
|
, o6 v7 R P. U3 | F=每批每千英里的费用$ & M6 w; ~8 @% n1 @
决策变量: 6 N$ z5 ^3 ~0 P6 X1 z2 t# d
=日常从工厂i运输到市场j的总量(批数cases) 这里 适用所有i,j
$ H+ I5 {6 e$ u1 ] U6 h" H, O约束:
% m2 g( e, E9 z4 x在工厂i的供应量**(批数cases): 适用所有的i 在市场j的需求量: 适用所有的j 1 L2 o' k0 s; k c
目标函数: 5 P" T7 U6 z* C9 M5 z/ j. Y* {
Minimize (千元) 1 ?% l: M& @6 @; [, q1 x: W0 ?
$ ^3 I+ ]/ r( }$ Y
2 r M, O) N" [- H# D: M, P# G
+ {4 t/ s% P# @3 l, B/ v* G% O4 U7 ?| |
9 K" h7 F( l! _: X- x GAMS模型 |
5 Z! m3 Z' f9 } m( ^. j* }同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
/ I. H* U/ `# t$ e 集合(Sets) |7 W* j# P: {9 O
 8 R4 S" ]- j1 Z
GAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素. 7 R. ]# i: u$ ^8 e7 S; L7 P& Q
参数
& x, V3 M5 s$ _ P0 p
) W' O0 E0 r+ R" M) _# z这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出. 2 i( Z5 D! i8 ?
GAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置. 9 N/ ]' A- U5 y l. j6 Z/ P
表格 0 a$ { [1 ^9 j$ i" ]6 L) z
 数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的.
% j! ~ m" k3 T* A' d7 G标量(Scalar)
) d4 ]. o4 d0 X* T 常量能够被声明为标量,它的值是指定的. ; V* u( e ^/ P" a
数据处理
) M6 T2 u+ l+ p1 `
: t* Z0 b% n1 T$ z- Q当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算.
8 |# J( N Y. o+ J, p, Q4 T7 x( u8 m变量
/ }" t, c1 U+ ^ + o2 _) X8 M) t) r
决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例. 8 a) S& m' j+ }
变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE). + W5 \2 z# ]1 j
目标变量(这里是z)仅被声明,没有指标(index).
3 X: D/ b" y% X. z- ] n+ m方程式
9 e+ h2 B4 g, V! K( z 9 y- S2 w# r7 m f* Q& k8 g, N" h
目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的. 4 A. Z% X# I5 H' H( e& Z- ~* F7 Y
=E=表示'equal to' (等于) =L=表示 'less than or equal to' (小于或等于) =G=表示'greater than or equal to' (大于或等于) 0 D4 Y) z: _0 t% T. q6 U0 j
模型声明
9 E0 T9 R' e/ r0 X$ }4 P ! K' u, v( ^# G
模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.
`) r2 V& S$ \! [- S& ~求解声明
& X, q8 ?* P+ l/ y* w6 [ ; ~; P8 m% \/ [8 `
求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量. ) Y5 L9 K) i$ V( l N
- v: \$ Y% m& d
. M2 X3 S: [3 x& I0 D, M
3 t% N! S1 O, i2 z0 x. i1 X| | 0 g& b' h9 |% X3 i
GAMS输出报告(部分摘录) |
" U( y$ o. Y, W0 b- w. K完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要.
( t0 k# g/ v- q( l" l方程式列表 ' L: U* q+ J" F- U3 i c
 + m7 T0 Z7 S* }# u& ]: _& T# }
方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式. p. m+ B! y' d% ]
列列表 + ]5 N# g8 c7 Q, {' L; V9 q
 ) y2 b+ B- ?0 x& D7 s, m8 W7 q
列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改).
4 \! V( W8 P5 O- g1 K
( }1 z( A' f. t; }: ]
8 ?/ a5 ]+ @; P) }3 Q! i' ^' R% _! Q1 ^1 C& Y
| |
3 J- ^7 N1 c1 J 求解信息 | ) z& Z9 F8 L* N/ I/ e6 [
 $ Y0 C3 z2 `/ G) k2 @+ Y' B
求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.
9 g K; k' o3 e9 @ x9 ~* j在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器. . M0 _" F: S* t' p
解(Solution) + A& L; u# P3 z( K8 E

$ J2 ^5 H8 H5 }) N0 i5 F解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费. $ Y0 I3 u) h! r3 `2 K& ~
写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的. 4 x& i V, B2 w8 Y0 _3 d
1 S5 v3 B6 \+ C8 b. p+ N0 }
0 P+ ~: `1 ]) @4 D" W8 P/ ?' S
# H4 q) h; T4 A- p$ V9 H; B& e| |
5 Q9 f$ W6 g8 d! Q( h! s" D 参考 |
9 [, k8 p, h) j- P/ ZDantzig G. B., Linear Programming and Extensions, Princeton University Press,Princeton, New Jersey, 1963, Chapter 3-3. |