|
GAMS示例
1 i& z4 ]" k9 D, n下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征.
; W( C2 \) k. i
& L, Z# `* Y! ^8 G% w5 o. g% v" h- t: K+ `' c( j0 I4 t3 |
. J/ g2 z/ j7 k9 Q1 u+ @2 e| | - i. Q% _1 ^' Z/ h+ n+ ?2 p
代数描述 | ' y" F0 b# x! V% x4 n
下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束.
; e- ~2 Y6 W" n: G" @指标: ( A8 Y* n y' ?: ]2 K, y. T3 F
i=工厂(plants) j=市场(markets) ( \8 b2 e; Z7 g
给定的数据: / x! d/ \$ R, `# M+ i/ K0 U
=在工厂i日常供应量(批数cases)
=在市场j的日常需求量(批数cases)
=在工厂i和市场j之间的距离(千英里)
=在工厂i和市场j之间每单位的运输费用($/批/千英里) 3 L3 L! p. V, p: r! c- N$ M
/ H; M, z. U" j" f0 j
( v* k( a7 @4 a8 m5 E
2 G1 g; G! N3 p) x# K$ ?
| 距离 |
0 I+ P& ]' x3 m1 g; V5 T | 6 i7 C+ ~, w! L4 B( U3 J" E
, O% J- t* }2 `6 x| |
+ r3 Y1 G) q a Z5 _. R7 F市场 | ! M6 _, Z) W$ T, S' e6 n1 C
|
( X. H# k+ T' u. Q, q
' t- e7 |% }$ E, C. p| 工厂 | $ j4 B9 \! F, ^* ^5 K" @
New York |
3 Y$ A1 O" w& K( T, L% bChicago |
# }+ Y) z6 {6 uTopeka | & x0 o, n J. z
供应量 | : S" N" f6 Z: m2 |6 }5 b+ T
. ]2 H# ]. z& r2 ]" t| Seattle |
' t5 u. ~& W1 Z# k) N+ V6 q2.5 | 1 b7 R- Z) n# C$ T( a2 ~% p
1.7 |
& F5 X3 _) ^) x% [( l1.8 | 3 C' _& y% y3 G) E; b; f Z
350 | + V9 x' [' z8 J9 e/ q e* ^8 p0 X
3 e( b$ {! o+ L6 K* _| San Diego |
9 @% v3 ~! n0 T9 E$ _ r+ M; p% n2.5 |
8 G' K5 h( {0 i x4 |' k1.8 |
4 b* }7 k9 U4 x" ^2 v1.4 | 4 l8 ]: F5 @/ ?. C( n7 j+ E
600 | # g4 D2 D' `: t4 D5 n( }
4 M1 T, \- p8 j4 ]
| 需求量 |
" Y9 \! z* X6 \! w325 |
: G7 u6 a5 p0 M! v300 |
: c' D7 Z( x0 W6 T9 c; v& J275 | . ]* I8 T6 a W8 i
| ! u' j8 [9 }- Q7 C. ]8 j
F=每批每千英里的费用$ + ?. Q" L/ Z2 A6 ]* B6 ^
决策变量:
# b2 [5 l; J$ T; Q =日常从工厂i运输到市场j的总量(批数cases) 这里 适用所有i,j
1 w5 P; Q% N2 v约束:
# @' s8 t; t. a/ C在工厂i的供应量**(批数cases): 适用所有的i 在市场j的需求量: 适用所有的j 8 [: C" S/ J: J- k9 L
目标函数: ) C: @, a+ p- G+ D/ Z
Minimize (千元) 1 l" \/ H1 p! x8 J4 Y3 ~% M. V; w
+ u. j; u3 Q" m
. W' I' L* A* Z2 J5 s L
6 U8 h4 ]' [! f* [0 f" W| |
: u+ ^; m! ?8 s( W$ N2 L GAMS模型 | # x4 R8 y/ ^1 g8 K# c1 [0 _, [9 E# X
同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
* C3 U# O) d+ Q0 J# P6 F& T9 Q; C) ~4 T 集合(Sets) 1 Z8 U) z( C4 _; G+ }

) X. S* Q+ i3 {5 l4 k% E2 eGAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素.
' E; w% o2 a! f参数
! V. [+ e& O& W
2 {# b" p- m* Q* W; j0 g$ h这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出. ! q: \% Y! {5 V
GAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置.
. ?& M2 H$ s8 g4 Q+ K表格 ! S/ V4 |- C9 _; N
 数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的.
* u; H7 @ x8 g- E标量(Scalar)
6 `7 F) f6 [5 |1 {$ ~+ d, ?" p 常量能够被声明为标量,它的值是指定的. 7 L" y7 {8 b v3 Z
数据处理
* R+ O! u# p i7 }' F# o
, |4 f8 C4 X. k当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算. 8 `! u% k6 D# v# w0 C
变量
+ p5 T* n- I2 N 7 F" S& {6 \/ T+ d7 y3 g. p. a: }" J
决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例.
; ] ?" X( T. l; f, B! O8 [变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE).
* J, \8 t; j% h目标变量(这里是z)仅被声明,没有指标(index).
. @! ? ?' l$ `$ \- g" h方程式
6 }. ~5 d" ?8 `1 p / g- R! k1 `# s# s$ s$ W) E
目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的. ) d% o0 a* P8 Q& F3 F* P9 G
=E=表示'equal to' (等于) =L=表示 'less than or equal to' (小于或等于) =G=表示'greater than or equal to' (大于或等于) . r6 O$ J+ C) ?2 d8 ^0 V
模型声明 ) L# {, m4 j T R* g! d7 C
 " x* I) X! L" c: t1 `9 K9 t9 s
模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.
: C' s0 u% X' J# g求解声明
$ ~% r+ H. i" W# a 5 G/ j. K6 j ]0 J8 M2 B
求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量.
- n3 c" z i5 B6 r$ m& i2 H: A. c) F* a
`- Y$ B) [! \1 Z) @) L d
0 w3 E- `/ m+ X1 W" I| | 8 ]* b1 B/ d2 D" `. p
GAMS输出报告(部分摘录) |
/ j2 ^! O( |4 n0 P3 \完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要.
. ]' }4 F9 ^. H' N6 X3 t& D1 ^" U/ n方程式列表
+ c4 X+ D/ a) @- O 5 R: F: @. | T; P* x7 k3 {" {" B
方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式. & Q! p% }& h3 Y5 d& r J
列列表 x, \$ |# Y+ ?, h) v# F o

% m! d: L& I' A% }1 ?+ X列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改). 9 N( g% L" ^1 ]0 L7 i* E0 }. z
5 H- a$ o" r1 V
7 l4 |5 B" ?0 \6 j7 c9 K2 _/ V" M4 w2 ~0 S+ p4 q
| | + x% L1 ^: f! T- W
求解信息 | 1 X& F( a+ \' E5 I( Q
 - f. ~! w! v2 g
求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.
3 M6 g2 e2 | x9 I* R( Z" k在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器. . s$ O( E) v2 I- {4 ?; q5 P3 `/ T/ {
解(Solution) ; j7 ~% p# q8 I7 p4 ~0 h, x

0 Y# D, G+ Z3 _. y8 |6 `解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费.
3 q1 X2 b4 r( ^4 K S0 ^' W写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的.
; z6 U2 z$ ]( w/ x' [5 @. K, [3 H) q# ` H v6 O: u
! U# u2 U* V, r5 u
, Y, [/ Y+ s/ a3 U; V, R
| | . p) N. n8 k9 N. V/ ^3 k x
参考 | 9 q ~& Q( n/ h
Dantzig G. B., Linear Programming and Extensions, Princeton University Press,Princeton, New Jersey, 1963, Chapter 3-3. |