数学建模社区-数学中国
标题: GAMS示例——运输问题 【代码及演算过程】 [打印本页]
作者: huashi3483 时间: 2009-11-14 04:27
标题: GAMS示例——运输问题 【代码及演算过程】
GAMS示例
( l) C+ _4 a; p$ {# B/ V7 g
下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征.
# W1 {4 ]7 b) s8 C: L7 q5 _- B$ E
# Z" m' v2 o! i9 r
+ p2 _: Y% P4 m7 f* W& r2 @8 u8 [$ t; w* s! G
| | 1 K1 s" y! m1 v7 y8 G& y
代数描述 |
) `, E" Q, ~% c
下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束.
: w! I( O9 t W! O& V$ R指标:
2 W7 Y. ~" B# O( e6 |4 R2 ~- m1 X
i=工厂(plants)
j=市场(markets)
$ Q# E7 Y) a9 {4 o
给定的数据:
6 Z V7 X; V6 C1 V$ @7 M4 B- C L
=在工厂i日常供应量(批数cases)
=在市场j的日常需求量(批数cases)
=在工厂i和市场j之间的距离(千英里)
=在工厂i和市场j之间每单位的运输费用($/批/千英里)
% q6 y) e0 g+ N4 E7 ~ ^2 j2 n
$ M& M! C3 D0 d" E- N! U
9 K y) U1 h; s! R
| 距离 | , M7 E0 ^$ }& G. ?
|
W- s3 i- h5 m4 a' F% @$ \: L$ X" M
| |
8 c+ ]) v% `, a0 a市场 |
! y/ p& \: v2 `$ R& b |
! A# b, U" o# X5 _& ^, Y7 S
3 @0 }+ j" X! R. p| 工厂 | 5 o2 _ b8 |, t/ e/ E; x- y
New York |
: ]& M8 N* ], w3 W) RChicago | : A% d% d9 Q" s" p* e) ^* E
Topeka | 6 [* L. o+ H8 D& @7 a
供应量 |
& A" K' K. z( M* p8 I _ S* U) t0 S* x2 e$ m
| Seattle |
% e( } r9 `2 g1 O" s$ c2.5 |
J0 c4 z. Y, T1.7 | ) q3 d! A' K l5 R* Z5 h6 O8 ~
1.8 | 5 y9 P; q8 `" W
350 |
) P% a2 ^) D: f; b, `- P
9 `1 H7 `+ } c- T2 X" {/ D| San Diego |
. o: S; c5 w' B ^3 I9 A9 t! z) w2.5 |
- Y! O# `( i; T: T- I! ~7 `' a1.8 |
, V7 W& A4 Z0 ~- c) [' l% F1 `1.4 | * ^: @+ h ?8 f: F: h
600 |
: c: r7 k5 N8 J3 k9 n
) p. m& z0 y. |) a0 i u
| 需求量 | 8 _* S8 z3 {0 B7 Q; c
325 | . D8 e! g1 \& L7 N2 \
300 |
! x9 ?# L% f. U/ p9 ]275 |
* ]! ~* U. F: z- S& J2 D$ t ^3 Q |
/ c5 S; ]( r, S( @
F=每批每千英里的费用$
; G7 M: P1 f" M( w" z5 G4 Z
决策变量:
1 z h: f# i- y. S9 o' o
=日常从工厂i运输到市场j的总量(批数cases)
这里
适用所有i,j
* W+ ]5 D; X# C4 p. I约束:
. F4 j9 K* x! C& k# o6 J& W+ f在工厂i的供应量**(批数cases):
适用所有的i
在市场j的需求量:
适用所有的j
5 h! v3 f$ L% O. n N目标函数:
* x3 T% p/ J' y. gMinimize
(千元)
1 J1 I4 p0 A |+ N6 P% [( \
4 W: W5 \ V0 R1 ?& K* B2 D% W3 i |6 _1 D
2 r `/ L7 E& C9 u+ C$ d
| | & U6 ?: G- e- \! I, X' X
GAMS模型 |
, g$ c% X3 K/ i+ D" y* A4 T同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
" @4 p- ]0 o! @0 f5 Q0 Y/ q
集合(Sets)
+ L3 m0 s3 k7 ?/ }/ a2 h2 O

' B& ?+ j3 Z7 A( P) ?
GAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素.
6 q, r+ ]! I9 {& D2 j d6 R; a参数
( P# f% `8 _( o
* s9 q; n3 g ?/ k- q这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出.
) e$ h' c0 r2 Y+ iGAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置.
' ~) W, @7 q' F2 s表格
# a# |4 ?1 p2 b# Y
数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的.
1 [4 N$ ?+ @2 R$ B
标量(Scalar)
$ C S+ O& z; s6 t+ s

常量能够被声明为标量,它的值是指定的.
6 n' u$ A4 j- t% L/ b* m
数据处理
: S* `( L4 H2 i$ n5 g

& [! a, X. l$ h5 T当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算.
' P# U' ?1 M0 V$ S变量
3 r1 g( R( h9 k4 ~7 W/ u
1 k) {( I4 L. j4 {! _
决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例.
* ?* E( Z5 r2 D F变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE).
" I1 K) @4 R" L1 g" J6 R" z目标变量(这里是z)仅被声明,没有指标(index).
) l, W! o+ z o
方程式
& g1 @0 x, }- f) U: Q: M. n" |! Y

) n. m! o" F# F3 j: @0 J6 Y, [
目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的.
! m. z5 B- @! B, e0 g5 [% b7 U3 l
=E=表示'equal to' (等于)
=L=表示 'less than or equal to' (小于或等于)
=G=表示'greater than or equal to' (大于或等于)
6 t, N A* [; ~1 {2 u
模型声明
1 q# E4 C$ u+ h

2 W1 @3 }: i# ]
模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.
+ X! h2 X" w% H
求解声明
, P7 v4 ?8 s% d4 T+ z! t
* O* H6 Q3 {9 Y# ^6 A: {; T求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量.
3 B0 j9 l. {* k q2 i3 u
( T3 A7 b2 u& [( l+ E$ B7 F6 q" p" k4 l. f/ c1 I' M ^. D
' S2 ]4 H3 a6 n9 z3 o( c4 z' s) `
| |
9 C* y/ M/ C4 J \ j& r GAMS输出报告(部分摘录) |
, N: T" |0 w' q% B% W完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要.
$ i$ O# d N* x; C6 ~: K方程式列表
% C! y! f& ^, y+ t
2 s. P/ S2 P+ p2 e( G& \方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式.
. J3 b( B8 A2 M q) B
列列表
/ h% ~# A5 o N( }/ o9 b
3 w/ S, y2 X. x
列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改).
# m5 x2 K& d- \3 n9 i0 p" ^
$ q: z0 ~1 H2 y3 m8 V9 m
0 I9 O2 |1 t, C+ a6 U d
. b5 X; K, f8 j0 x| | 5 L$ B C/ W3 i& j' {; p
求解信息 |
u& v8 j5 W# h+ n- T& P8 F
% j* B& v5 N8 s/ b4 o; h求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.
Z3 h6 n0 M) q在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器.
$ x( V. ^8 `$ S) k( j$ C解(Solution)
( ?9 T8 ], p- n' t% E( E

h0 K4 u, J* F: S4 `$ \- S$ Z解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费.
( z; Z5 O* o6 B3 W9 H8 X( y# a写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的.
; }9 o0 X* y( h4 t$ [' b
6 r2 K2 R' u5 S) @# @
5 F9 v. k/ X' ], E3 l1 \8 w8 {9 e* @6 N0 m, O" p4 R6 G
| |
/ C' s( c8 J. N* B 参考 |
8 O$ C g: K/ F+ l. g% u
Dantzig G. B., Linear Programming and Extensions, Princeton University Press,Princeton, New Jersey, 1963, Chapter 3-3.
-
-
GAMS Example.pdf
143.39 KB, 下载次数: 57, 下载积分: 体力 -2 点
GAMS 示例 (PDF格式)下载
作者: xiaoxiongwewe 时间: 2010-1-12 14:07
呵呵 这个例子做入门非常不错啊 支持一下 辛苦版主了
作者: gssdzc 时间: 2010-10-21 20:49
非常感谢楼主分享
作者: xupu3517 时间: 2010-12-20 08:42
呵呵 这个例子做入门非常不错啊 支持一下 辛苦版主了
) F" X4 c/ x" m
作者: gaoshanliu水 时间: 2010-12-20 09:56
辛苦版主啊* s% o) L, F$ E7 \. r, t
( D0 W! r; ~* \9 ~9 i" L* g- @: k+ W% O; }# n
作者: domschke 时间: 2011-8-14 05:34
非常不错,辛苦
作者: WUSTLISHAN 时间: 2011-12-17 22:46
辛苦了,正在学习gams的使用
作者: →在别处。。 时间: 2012-2-7 21:27
好东西啊~~
作者: constancemoon 时间: 2012-4-24 16:17
辛苦了,楼主
作者: 市_长 时间: 2012-5-13 16:02
学习GAMS的路过,表示支持~
作者: 邓浩考研 时间: 2012-10-10 09:47
帖子很好啊,入门很好啊。
作者: wsq200808 时间: 2012-12-9 22:55
邓浩考研 发表于 2012-10-10 09:47 
4 o# K& ]0 V! b- v/ u$ Y2 u帖子很好啊,入门很好啊。
: |, c/ _' c3 q" s" A( N% P
你的时间怎么是明天呢?
作者: 邓浩考研 时间: 2012-12-10 10:08
wsq200808 发表于 2012-12-9 22:55 
7 ] ]' V! T. v你的时间怎么是明天呢?
$ D7 X. o2 x% \- o: W我是外星人。。。嘎嘎嘎
作者: 他山石 时间: 2013-7-30 09:03
版主辛苦了!
作者: 鸣凤123 时间: 2015-8-14 08:24
楼主的帖子很不错,我很喜欢/ R+ ? t. u$ e
作者: LYJA 时间: 2015-10-13 07:31
very good, thank you very much!9 p/ T2 C1 f5 S
作者: xiangbeihai 时间: 2017-3-1 21:23
不错,已收藏
. y0 f2 F) P3 {7 s1 i2 `
作者: 板砖sy 时间: 2017-3-10 10:20
入门看这个就足够了,但是一旦独立进行编程的话,会出现很多bug,还有错误代码,都不知道什么意思,大神有没有解决这些问题的方法,辛苦了' i6 v( T/ i) |# ^+ v0 K. w' [
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |