数学建模社区-数学中国
标题: GAMS示例——运输问题 【代码及演算过程】 [打印本页]
作者: huashi3483 时间: 2009-11-14 04:27
标题: GAMS示例——运输问题 【代码及演算过程】
GAMS示例
2 o5 M* n6 C% l/ |( z1 p9 k V下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征.
. z: O: u3 l6 z3 B3 N& e9 }
1 \ q$ ?7 Y; J' N( {& c
4 |1 [1 k7 D. a) s+ ?* S! k* p
7 {+ c* ~7 k+ ~: S' u; B |
}+ b: J j; X% s$ \ 代数描述 |
# W1 q U) T% k7 ^5 M下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束.
) q; M1 Z) `# u, h8 P) h指标:
/ m" P* K% m! g. U, A) t. m. p i=工厂(plants)
j=市场(markets)
/ ?8 C, d1 i* Q1 c1 V给定的数据:
4 L3 S/ }8 h( z: A
=在工厂i日常供应量(批数cases)
=在市场j的日常需求量(批数cases)
=在工厂i和市场j之间的距离(千英里)
=在工厂i和市场j之间每单位的运输费用($/批/千英里)
) h3 U( ?# k& f9 U' q: \! @
9 R: {3 v' E4 H a3 e5 N g. T8 y5 a' f$ L2 f* {6 P
5 Q0 P0 |6 J7 x, w( k
距离 | * }- _# G4 H2 m% c, q
|
& ~/ u: ?& X, y* F3 L0 w8 p
& [& x1 f: q0 S+ B |
; @- G' M- C3 n7 n' [1 s市场 |
! A" S. T2 h( E% ] |
) O' t0 a6 ]8 G% A; ^; D
! f* S% b2 c( `! c
工厂 |
' B: R. @5 P; z4 P8 wNew York |
2 o# N3 b5 q8 f; o6 Z zChicago | % I/ W( Z+ ]) \! w4 W
Topeka |
, R) R5 n4 ^0 {' s& ~4 i7 e \供应量 |
3 N8 w5 `4 w8 i$ E3 o5 ?) m
- B2 w i' M7 w; mSeattle |
$ A1 A* q- V6 [3 n: r2.5 |
$ t8 Q- y- O% ~9 b) y9 d9 B1.7 | 2 L: \3 X1 ^/ m( G: h- w* k& u6 F
1.8 | : y) v ?4 b! ]2 \2 {
350 |
: f: j( m0 q n4 {' K% f3 y# I) l D1 `, O
San Diego |
( o* Z' K, K" I1 n# I2.5 | 6 B( s0 f* V, J* V
1.8 |
# t1 S7 V% s$ S& l, R1.4 | + l0 J$ T; z% s+ G6 P# Q, c
600 |
4 J" V+ w: q$ X7 i$ A* q' p: A4 o; [4 ]9 d R- G
需求量 |
4 S/ b$ p& y% o1 ]- w3 Q9 a5 Z325 | % A2 [1 j, [. Z. {' J
300 | * m/ n+ J! s; {# K7 \# a
275 | * _0 p3 O) m7 U0 H! Q7 L
|
0 t) _" B+ \% I4 G/ R: C& M- \
F=每批每千英里的费用$
1 c) C4 i! i5 e, o( B
决策变量:
$ R9 E% f" w0 P# l, h
=日常从工厂i运输到市场j的总量(批数cases)
这里
适用所有i,j
' n0 Z6 u3 Q8 T7 k4 Y' I% {* t约束:
7 M M* s) j1 \. L在工厂i的供应量**(批数cases):
适用所有的i
在市场j的需求量:
适用所有的j
. I8 t) b& x, Y# w7 ]目标函数:
1 [! I- Y$ `+ y
Minimize
(千元)
5 V* f/ D z7 X7 D3 t8 Z% [1 R$ r9 ~; z0 [1 t4 O" _
3 ?: B: x4 e3 C1 O$ t2 k
/ m5 a; R' v# b, \' a- L |
1 V \4 G2 o6 X6 R, T; e. r( d GAMS模型 |
9 q9 s q0 W. m" b
同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
5 k. V' \- }- | _
集合(Sets)
/ v5 M1 \2 r# g
7 c# |" M$ N8 |GAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素.
! Y; j2 x% i6 @; f" c2 a! |- Y
参数
) w" \% s! B1 Y2 s, B2 l
( j5 E- E% i- Y: q. ~' W+ W
这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出.
2 @4 U8 q/ A8 l6 g
GAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置.
3 Z6 P ^: S5 L* n7 \表格
! [, v0 e- s3 N' p X- u% W- w# w* p

数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的.
' O2 z9 R! c9 k" ^$ } ~) U7 `
标量(Scalar)
* s* N1 X, i5 B: @0 W' K- H
常量能够被声明为标量,它的值是指定的.
7 O+ L6 A0 S U! U4 o8 e" m1 S" s
数据处理
# }1 j: |' [( i/ Z+ Z
+ P( v- D* X6 U8 H: Y& o2 P
当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算.
. e7 c4 t. ~8 n' T
变量
& y( Q3 z3 A( T0 I
7 r" Z1 Q/ x4 J
决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例.
8 X: K5 N1 [7 `& c/ p变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE).
% C# H: r$ i, Z6 E
目标变量(这里是z)仅被声明,没有指标(index).
2 g( g/ C7 T3 l0 I# Z! U5 f! H方程式
" I+ w5 ^3 g% P1 m# e: x& v. x
k6 |$ N3 e5 j! }
目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的.
, e" `4 y2 r$ `* J2 d: E
=E=表示'equal to' (等于)
=L=表示 'less than or equal to' (小于或等于)
=G=表示'greater than or equal to' (大于或等于)
# [5 \$ Y4 B& q0 o- l
模型声明
# V; {$ P5 r* a

& W( s" p: U/ I模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.
2 e. `8 W' Z0 P+ L( ?$ H1 W2 ~求解声明
) j* M3 F( X1 i

" {7 o4 s; Y/ P求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量.
& e# B$ ?$ R" d a8 a$ C& N
* W; ~$ a2 R; j; A7 c" U
! c8 i% j, Y) I, i# g" z
5 s" G( A( t3 G2 q9 m# R$ X |
% e+ N& w* X; B5 F GAMS输出报告(部分摘录) |
8 X+ a9 P! I) B; i1 h- Y* d8 M# D3 i' u完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要.
9 H* f3 C v5 l8 R- Y方程式列表
1 U Y, f. }& w4 r

& \; I% @ Z( J* s+ e3 T
方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式.
4 G* H4 O% O! | G: L列列表
* u, F8 W" K0 h/ e3 z
3 t% r4 j* \7 m; G9 I/ t/ z列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改).
' @$ s/ z7 A. ?1 B3 g/ [9 e* K+ o* F W8 Y- P$ e8 U
. ~& p. L% ~3 Q) q9 J
* |. a: m3 x- D. ?, q( P | 0 }% a( z! u, n& M
求解信息 |
. i: \9 l# u' J% B/ B# s& s/ o
( K! p8 l& O; m3 S求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.
8 ]* b0 E2 O% U9 F B4 D) X在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器.
w; ^) @: q U! j# {8 R; X
解(Solution)
9 I3 I$ i( P, E* I0 F! c

! v$ |! v2 Q% u, j0 o- V8 {解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费.
4 k& C1 x1 }- m2 ~# z" U O写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的.
. C, [% J9 {9 b. P; D4 r
' ~- \4 R/ h9 M4 v- L
- m: k- Q* L, `& r: \) B3 j7 l1 b! K. v% _4 R5 B
|
5 O5 Z( ?* c$ G$ v. n4 z% O 参考 |
4 E: S# X8 O$ P" GDantzig 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
呵呵 这个例子做入门非常不错啊 支持一下 辛苦版主了 ! i6 t P. w' }7 z& Z0 e. |# V" ~
作者: gaoshanliu水 时间: 2010-12-20 09:56
辛苦版主啊
/ l. Z* H4 |; }! H, [3 K' r
' C/ C/ C5 @( {/ K8 X. \3 j$ ^
( i8 F t/ ^( E2 z* R2 ?8 G
作者: 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 
" t; h% e/ H6 A$ u9 H帖子很好啊,入门很好啊。
2 z( g1 N5 n# _你的时间怎么是明天呢?
作者: 邓浩考研 时间: 2012-12-10 10:08
wsq200808 发表于 2012-12-9 22:55 
& [2 W9 F- S$ e7 V7 @你的时间怎么是明天呢?
6 l! y1 N8 Y# b9 v% Q' S
我是外星人。。。嘎嘎嘎
作者: 他山石 时间: 2013-7-30 09:03
版主辛苦了!
作者: 鸣凤123 时间: 2015-8-14 08:24
楼主的帖子很不错,我很喜欢) ]7 C7 K. B. |7 w3 Z1 Z
作者: LYJA 时间: 2015-10-13 07:31
very good, thank you very much!
1 `3 z, W6 U! N; A d7 h
作者: xiangbeihai 时间: 2017-3-1 21:23
不错,已收藏
0 I7 S# S6 \7 C+ z: `
作者: 板砖sy 时间: 2017-3-10 10:20
入门看这个就足够了,但是一旦独立进行编程的话,会出现很多bug,还有错误代码,都不知道什么意思,大神有没有解决这些问题的方法,辛苦了
9 `5 U G5 B+ H5 V e& o
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |