数学建模社区-数学中国

标题: 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! G1 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! U9 K y) U1 h; s! R, M7 E0 ^$ }& G. ? W- s3 i- h5 m4 a' F% @$ \: L$ X" M8 c+ ]) v% `, a0 a! y/ p& \: v2 `$ R& b! A# b, U" o# X5 _& ^, Y7 S3 @0 }+ j" X! R. p5 o2 _ b8 |, t/ e/ E; x- y: ]& M8 N* ], w3 W) R: A% d% d9 Q" s" p* e) ^* E6 [* L. o+ H8 D& @7 a& A" K' K. z( M* p8 I _ S* U) t0 S* x2 e$ m% e( } r9 `2 g1 O" s$ c J0 c4 z. Y, T) q3 d! A' K l5 R* Z5 h6 O8 ~5 y9 P; q8 `" W) P% a2 ^) D: f; b, `- P9 `1 H7 `+ } c- T2 X" {/ D. o: S; c5 w' B ^3 I9 A9 t! z) w- Y! O# `( i; T: T- I! ~7 `' a, V7 W& A4 Z0 ~- c) [' l% F1 `* ^: @+ h ?8 f: F: h: c: r7 k5 N8 J3 k9 n) p. m& z0 y. |) a0 i u8 _* S8 z3 {0 B7 Q; c. D8 e! g1 \& L7 N2 \! x9 ?# L% f. U/ p9 ]* ]! ~* U. F: z- S& J2 D$ t ^3 Q
距离  
  市场  
工厂 New York Chicago Topeka 供应量
Seattle 2.5 1.7 1.8 350
San Diego 2.5 1.8 1.4 600
需求量 325 300 275  
/ 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. g

Minimize (千元)

1 J1 I4 p0 A |+ N6 P% [( \ 4 W: W5 \ V0 R1 ?& K* B2 D% W3 i |6 _1 D2 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+ i

GAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置.

' ~) 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 m0 I9 O2 |1 t, C+ a6 U d. b5 X; K, f8 j0 x5 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