|
GAMS示例
! J* Z1 h* j' X$ u5 u下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征. 2 x; |. l! E" V% v7 q
% O6 ?. ~$ x, n% R2 `# K* Q6 a9 Z7 Z a3 `- \
$ I; J6 ]3 x0 c w1 R| | $ I/ h, X* Z6 N8 v9 V8 ]
代数描述 | j' S4 u$ p7 f5 }
下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束.
1 e$ F7 ~8 g) ~2 R8 [* D指标: 2 }& y+ T, y) L. a3 v9 @* I- L
i=工厂(plants) j=市场(markets) , _0 x" v0 b6 D1 h0 i
给定的数据:
6 E1 ?% u1 Q, U, O# o0 | =在工厂i日常供应量(批数cases)
=在市场j的日常需求量(批数cases)
=在工厂i和市场j之间的距离(千英里)
=在工厂i和市场j之间每单位的运输费用($/批/千英里) $ z. y5 [* [" ~4 D+ f# T
0 ^0 x6 S* h& D' T: c% s' {
9 B4 a0 g4 s1 Y
( f6 _' S* F6 h4 c! p: C" n* g| 距离 | 1 s! l$ j& E: G9 _
| 9 s( T h. E: o, V3 C) z
2 Y; A1 z: |' o| | ) V8 g, P& y4 Y$ I1 e
市场 | * i- m0 y, \$ [& V( s
|
) ]7 F/ u/ E+ l6 _7 @' P, H$ u* `
+ m0 `$ x4 x8 K8 f. ^, { u| 工厂 | & b# R% g8 I& @1 y
New York |
3 p6 n+ W/ X8 D, E" W1 kChicago | ! ~; e) X% {2 S4 i6 z
Topeka |
4 z# \% t0 S5 R2 j3 k' \+ [! R) Z/ n供应量 |
* g+ ]' e5 o/ C8 R$ W. d1 D" T2 `4 v& o. ^4 p9 z( Z
| Seattle |
- a, w" B D( ?8 g3 L( P2 S2.5 |
+ w4 C2 @1 l! R" H1.7 | e8 m6 C1 K; B# _- O" R
1.8 |
3 c4 c( J7 O+ {+ P350 |
. p5 {: V) _5 K; U) G2 V0 }9 w. e+ f- a
3 e5 I$ K9 K- ]9 z4 k| San Diego |
& c7 B. Z9 l4 A0 D. P9 A7 ~# y, G2.5 |
+ f- z7 q* t7 M- a# Y* W1 f# _/ d1.8 |
. c; `/ K6 y) ~3 W' M0 |* p1.4 |
: C7 _& J+ F8 c; \/ I600 | " H& J- [3 p+ P7 c o& Q Z
4 m! R1 W) {. O) s
| 需求量 | ! ?* r" M5 j' W: X+ `( W+ B" A1 L, g
325 | + Y' x' Y: a! m0 L4 L) U
300 |
& |9 s; r8 B/ t' W8 B% g N275 | & m& @/ ~" \# j' j8 Q
| 4 j" e# W: t9 ?# F3 G Y
F=每批每千英里的费用$ , b2 _/ U" a9 {! ^- W1 r
决策变量: 7 U5 e' ~4 ~0 K0 \
=日常从工厂i运输到市场j的总量(批数cases) 这里 适用所有i,j + V5 q" W* n+ r! v
约束: ( L5 D/ K) q+ W; \8 u
在工厂i的供应量**(批数cases): 适用所有的i 在市场j的需求量: 适用所有的j
$ Z" f% k: D j7 `' o0 f目标函数:
. P' O# L% e* yMinimize (千元)
7 O+ b. N# H7 ]3 b2 c; i: z! |. I) _" D8 D& g. a9 W
" e/ j8 H) J1 i8 n+ S1 h7 ] C
5 b# [5 |) K& [3 @9 f7 R3 f/ _. r9 o| |
0 Q* i. l U6 B2 p GAMS模型 | " k( \ t8 b9 p! ^
同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
$ Y% W y! y& d; D 集合(Sets) 1 E% v3 S4 \+ I0 i
 0 [* N% A. P0 D8 m: Y* c4 }
GAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素. $ P! Q' h% d5 |0 q8 V6 x: _
参数 - A$ m4 L6 Y, u& n
 6 ?1 L0 c" i8 G A# a/ x
这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出. + W6 s1 V! n9 M
GAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置. $ l: |1 s6 _6 C" o5 O
表格 2 G6 i6 P' c4 ?6 ~, s5 D
 数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的. 8 R0 u4 x- X! M9 F# a4 s
标量(Scalar) 3 j! F0 u5 c# }# W( V+ \1 d/ R
 常量能够被声明为标量,它的值是指定的.
( C `2 g1 ?8 y+ g0 A
数据处理 3 Y9 e: N# { B+ S. b7 a

6 e r, \; x& z+ ]+ t当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算. # g, y) A. A, T y
变量 7 X* @' }! B; \3 k- b
 $ `0 ~( |6 X) V
决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例.
! N0 W E/ N& e5 D1 s; y变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE). 5 ?# q, w: ~4 K
目标变量(这里是z)仅被声明,没有指标(index).
3 l. W. |1 f5 _1 S2 c& }5 V/ ]方程式 0 ?) |2 H- q8 K' E
 2 T- c5 Y$ ?7 A( G" ?- \# F% [
目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的. " t2 W- U, V" R* s- ^5 O2 g
=E=表示'equal to' (等于) =L=表示 'less than or equal to' (小于或等于) =G=表示'greater than or equal to' (大于或等于) 7 O+ T: _& x6 a: a5 g
模型声明 & t& `' F! W& y( C$ T- r
 - g* M$ T" K* L% G @/ \0 X9 p8 g
模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.
& l7 Y* s5 p, L; a- T求解声明
0 U) G3 [* M" Y. \ 5 ]5 }7 l: w( w, m0 i% @
求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量.
. K7 K( i- C o! ]' j& U% ^
$ T& R+ V' y% `3 M, T; }1 R# J" s# ~3 c0 k& Z
% O- I+ ?. x6 C" a E& v| |
" p) H# E; x' S GAMS输出报告(部分摘录) |
$ m* G& g! v( o完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要. f6 O( k# X3 a: j' d. \: L
方程式列表 $ B/ c* x, ^9 D
 / y" o5 K+ F6 d" N* Y6 c
方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式. 0 }: U# P3 r4 B M+ O
列列表 . s% }$ G8 g2 m0 X A8 E

4 m0 ?1 B4 C1 b. N2 _3 x& [7 [列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改).
$ e& }0 t) N( d9 ?
; Y3 ~) l# p, U* ^ x' C& u0 Z: c7 n8 Z R9 ]( x9 l. X, L
: ~! o! H& N4 Q) Y9 U| |
' X4 c5 Z5 ?; v4 J6 y& f* s/ l 求解信息 | + P9 Q( H" j& o$ E
 % T1 C! ?: G$ _; i( [9 {; ]/ G
求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.
) l& @& a3 u/ @" u8 J6 t7 a在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器. 0 H, ^$ L: M+ s% K& Z& M
解(Solution)
7 L$ S3 {# H/ W5 i5 z3 m
U; w) x- w4 W5 G( k7 R解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费.
6 r g" ~/ u) E写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的. 5 X- d e/ n5 X" ~) k2 X0 Z
+ } g9 O7 r6 g5 E
* R* b0 X) j: t+ Q' v3 ^5 C2 D; |* P4 K
* H. Y2 e2 q# I| |
8 c* c, _( R$ D$ h 参考 | ; w, Z# w q7 ]/ V u
Dantzig G. B., Linear Programming and Extensions, Princeton University Press,Princeton, New Jersey, 1963, Chapter 3-3. |