|
GAMS示例
; B$ X# e7 a; u \9 p5 h下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征. 7 `6 i6 B4 N- Y D0 Q
* C; t; b% `% m n
$ c6 |2 g/ R5 Z9 H
6 \+ A& N) k% h* a; z| | . {+ r. y2 ^; ^/ T) Q! R
代数描述 |
9 c9 p4 O- Y4 X: ?9 Q9 I下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束.
; H8 ]! u4 e, j5 E) x: d指标:
% y4 X4 `7 [4 C+ ~4 X i=工厂(plants) j=市场(markets)
5 E3 w6 `1 Y) E给定的数据:
3 z2 G! v' e( z. C& v9 i, a; F =在工厂i日常供应量(批数cases)
=在市场j的日常需求量(批数cases)
=在工厂i和市场j之间的距离(千英里)
=在工厂i和市场j之间每单位的运输费用($/批/千英里) . C5 R) X9 q8 K* E6 Y0 N. H
% C6 E& b' l2 Q2 ?# F) V
5 T( i2 H! N8 S7 O- s; ^
1 u4 H3 g4 y4 n) u5 W5 _| 距离 |
6 S( @' F' ^- m3 N/ v- I |
/ R5 ^) V% s, n" ]7 K. Q! |6 G. M. Y8 X+ g1 ]
| |
6 Y# c) l6 F& N市场 |
+ d2 Y# p6 y3 B | ! R" Q8 e: I( H; g# b
, y1 Z/ x% I8 p6 F8 X
| 工厂 | ( {. x& [+ ]5 o2 _( X; c
New York |
7 W7 y, w- \! R% j' Q4 UChicago | 0 i# S* u: h5 q: M! z" P
Topeka |
$ m# u, _! J# h9 ~; j0 q3 P( [/ h供应量 |
# D7 o7 `4 R- X+ S4 {6 `- m/ b0 T8 r) y* [' ]" @, |
| Seattle |
, n, L4 M+ w- A7 w2.5 |
3 [( h: \' ?3 o% v1.7 | , X: D) H- b- k: M# F7 T! l9 B
1.8 | ( K$ _9 O; Q4 G6 ]7 E4 v" ]
350 |
) ^) X! _8 ^( t6 h% l; T7 [2 K+ @8 j4 Q
7 P$ A( k7 K- [$ ] g8 p| San Diego |
$ n7 @8 @- Q+ |2 ]2.5 | 1 G- V! T& d3 d1 ~2 B9 w
1.8 |
/ B+ z# h$ x6 G7 D$ S K1.4 |
, W. e0 L: P& _* `2 G# J+ C600 | 1 H/ h5 O& `$ b0 [
4 \1 T; [& S" N# U9 x2 W
| 需求量 |
9 h1 h( m* s1 y7 d$ g325 | / k) {& W2 C6 F( n6 ?
300 |
6 X# b( z. h# K9 L9 D275 | . k. r+ o# K: K4 T! W
| ) @- V$ d* ]! T# ~! O
F=每批每千英里的费用$
* V" e! ]) z, F决策变量: 3 h3 t" S6 p2 m$ w- x6 L P
=日常从工厂i运输到市场j的总量(批数cases) 这里 适用所有i,j
4 f9 X3 a( q* X1 L约束:
- |/ _+ }2 i( Q, a在工厂i的供应量**(批数cases): 适用所有的i 在市场j的需求量: 适用所有的j - r* m/ R5 k% e5 Z
目标函数: 3 p3 H+ i& F' T/ x
Minimize (千元) % h/ ?% Q5 p' M' g
; y) F" P7 I* a( z1 X) D7 ]9 K$ }" q8 d2 A" T9 t& _* y5 ^2 O0 [
8 s% y9 A# R* s0 X( i* || | 8 e6 z# Q: x ~$ \- Q* P
GAMS模型 |
; P, w% J! n& r: X同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
2 P" v4 e3 x2 t- z$ }3 U$ M. g
集合(Sets) 7 N `' v8 p/ K. l0 K

. {% {, Q' c, z/ b4 F3 B2 ?* r9 \GAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素.
. U, R0 y+ O* f" b8 z& B, Y参数 + {4 O# S* X0 q7 J

1 ^+ a# s$ o" q) F5 |1 i2 V这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出.
6 m% h7 q3 R: H( X5 XGAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置. 8 p1 F% l, K) z* M: O' ]
表格 $ p8 V+ V* N# D3 x; j
 数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的. $ r9 l- {2 G5 U* P9 E
标量(Scalar) ; L1 e2 Z R& H- T8 k& u. T6 @5 ?1 g
 常量能够被声明为标量,它的值是指定的. 8 M7 l* E6 g6 \
数据处理
# D) L# l3 Q" g* a6 P
2 w |$ H9 _0 Y当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算.
; H# k2 o+ d- p9 J. P) B5 l变量
$ v6 \' r1 k: W% q
) p* m; b& L/ H6 }& I9 a1 |决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例. $ O' c6 N7 z0 c3 ` K
变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE).
* v" X/ t: z- J0 E2 G0 v目标变量(这里是z)仅被声明,没有指标(index). : s) E* O- g0 X) p1 Q9 P! O
方程式 - ~" m' g: Y+ u/ q+ X
 3 p' } x0 j* v8 V
目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的.
6 F0 i6 X$ {( A1 W=E=表示'equal to' (等于) =L=表示 'less than or equal to' (小于或等于) =G=表示'greater than or equal to' (大于或等于) j+ n" [( B- R+ G! O0 V
模型声明
# G) q6 ?- K2 h) H* E/ q' n2 d
) ^) O0 H* l" p5 j模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.
' A2 G+ b* f. Z求解声明 8 P7 P% w6 [; H/ ?

+ c2 u& m8 q, a# p, K9 G求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量.
: m0 e# w3 d, N8 V6 j7 R4 S! F% h3 p- }: p% v2 W
; w+ X+ q; i1 \/ v
8 A4 k; b! k! T6 a$ u| |
% y4 D! `- }- k+ n: L( D GAMS输出报告(部分摘录) | 0 o* G7 m/ O/ U: M' p) s. @+ w1 t
完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要. 4 i1 b( l4 H G' N. [
方程式列表
! @3 D t2 A: h, y/ m4 N9 v o ) l& k$ n: Z/ }) z7 Z$ {
方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式.
' d5 T, q& {' R9 | { i" N列列表 ; e3 ?: U3 F8 J- m% x

. m+ m: Q# o3 I4 T# w; w列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改). 9 l* r [* U5 `( i
( |2 |! |( ?0 c8 U: ~/ z- A; o8 b) Z
$ [! U+ ~& y$ U1 `& n3 q' n7 |
n' H+ Q% v0 A! U6 g+ t' t8 k| | 9 R) l- N# g# c; Z
求解信息 |
0 T& ?2 H/ a8 W( c7 t* U 8 f( R: m+ j/ o9 A; |* N: B8 z- Z% y
求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.
# V- f4 T6 j/ B# \) R2 ?) C. c2 l/ p在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器. " Q3 R* e/ ^' | P' Y
解(Solution)
. ^9 d( B9 _2 N2 v - L( _# @" R; C; t% N
解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费.
( R! n3 B8 g* N; ^1 R+ c E写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的. . l$ W, A0 P, [9 C" i; a
/ s5 s9 n j6 F. b
0 ?* h' f$ j' X5 {
. h6 T l8 f& x5 T5 V| |
* D, g0 ^3 `3 t: B1 {) R 参考 |
6 L/ d4 U" H$ t4 fDantzig G. B., Linear Programming and Extensions, Princeton University Press,Princeton, New Jersey, 1963, Chapter 3-3. |