数学建模社区-数学中国
标题: GAMS示例——运输问题 【代码及演算过程】 [打印本页]
作者: huashi3483 时间: 2009-11-14 04:27
标题: GAMS示例——运输问题 【代码及演算过程】
GAMS示例
, ?7 E, S2 [/ j+ N% ]0 v' L2 Y下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征.
' I! J% a8 [) z" a
) B* Z7 v4 P3 s8 b a' J: o, {. h
2 e- X2 X8 g2 n* s U' R) D! L+ i9 L; ?% l4 q6 _& T
| |
: Z8 u0 w9 z% O 代数描述 |
% O, i/ x2 W5 Z# q
下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束.
% m2 t) x; j) Q7 k指标:
) b; z# t; Q3 B: l# y2 z
i=工厂(plants)
j=市场(markets)
+ ?! {! [7 }# ]给定的数据:
$ P' X4 K1 n: e' @ c/ t9 ]
=在工厂i日常供应量(批数cases)
=在市场j的日常需求量(批数cases)
=在工厂i和市场j之间的距离(千英里)
=在工厂i和市场j之间每单位的运输费用($/批/千英里)
+ k3 C& b1 U y( W* ~9 x
% B2 | Y; q9 ?
/ N5 i" x8 I8 Q/ j/ f. F1 A" i
& k/ Z# P8 q. G- t. b5 G5 Y| 距离 |
5 l# ^5 S( B0 n# ~0 B |
5 u2 H! U9 ]/ F7 F+ b
+ ]% d' I8 B/ ]7 j" Y. _" z5 L! q
| |
& @& q/ }5 R, a- [% |市场 |
& I4 a* k2 J l+ N5 V |
7 c) ?+ d6 N1 h. R! {
$ x( V' t A) T" R- E8 a* r* b| 工厂 |
9 G8 N2 D* }8 n9 \ @) S3 |! oNew York | ) T- n# E1 `0 K$ k! W5 A- V: n
Chicago | 3 p1 x' r" N/ c( x6 L
Topeka | & k) n! O* N9 J$ |
供应量 |
+ B8 L6 G1 p- f9 ` W1 I
% U9 O9 H( a5 Y1 ]: v| Seattle | 0 H$ R" ~8 L, F
2.5 | : O/ q* ^* X, J# z
1.7 |
/ I; \, E" g' e3 y" I" C1.8 |
0 I/ H) l- ~8 A7 w+ Y2 j0 f5 ]350 |
' C9 g! I1 a; N' Z
" t% d* r# |/ H$ {| San Diego | ; U. j- W4 L( j, ]- D5 k5 B
2.5 |
7 M7 ~1 ?$ O2 y1.8 | / G1 r1 @. F4 ]9 d0 d; m
1.4 |
4 s, y* G8 a* Y600 |
9 ^) ~( ?3 N, P7 J) v4 R
" x4 |, c9 Z" q7 I| 需求量 | # b+ ^8 m1 n$ M# q1 R% l
325 |
& H& @# [7 \+ C; f7 h: W$ S300 |
" J$ j0 A# J$ S' m9 C275 | * ~5 C k1 @3 _+ f S$ \+ e
|
) Q B2 j6 M2 T( F2 Y5 N9 U% k F=每批每千英里的费用$
/ N- ~; X) z4 a j* t! B9 u- |
决策变量:
1 B" _: F9 `* w( c, L$ ]- i$ B
=日常从工厂i运输到市场j的总量(批数cases)
这里
适用所有i,j
% d) p$ d+ B; b3 |5 R* t约束:
8 q }$ N) r/ m- m
在工厂i的供应量**(批数cases):
适用所有的i
在市场j的需求量:
适用所有的j
4 {5 L; }. _# h8 ?
目标函数:
1 i/ Q. V* B4 u3 O0 k6 M) n$ kMinimize
(千元)
( Z$ Q: t4 T. g+ M9 Z$ l- Z
% L9 y, ]! t# m% K: y- {- w5 q; h" f' G% ~7 ^0 i2 O3 [
" t7 g u9 T5 l$ l) v| |
3 C+ K' G; y! H- J GAMS模型 |
( V" Q1 h! c+ x9 {6 ]: F8 f
同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
" w5 i, b% i% h( Z' y: B- n/ v
集合(Sets)
( _1 `- H5 q) h6 \

* x: O U& _" x- u1 MGAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素.
5 g7 |0 \6 H8 \/ x( V9 ~4 J4 V* }
参数
7 k! Q# \% ?4 n; M; W3 ^$ O- r: L
/ _: F7 ~7 o2 S% q这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出.
7 |) ^* L$ F' C9 K( q/ @4 {: V3 YGAMS让您可以在模型的任意位置放置解释性文本(以小写格式显示),当您在开发它时.您的注释自动被结合到输出报告中的合适位置.
0 d$ q& w, s$ k9 m) t
表格
; e6 p5 F9 f) K, ?$ p: r
数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的.
/ t9 p3 w. W4 K, n* w4 {: H7 y' U标量(Scalar)
( i w. J) g# i) W
常量能够被声明为标量,它的值是指定的.
, M& l2 b; U6 ~: v6 `" `
数据处理
3 U& u2 j1 [, b! e+ E: {: v) t) S: a7 Q
$ l4 m# }( {1 d! Q1 {" W
当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算.
* Z& E7 [) x" t( T变量
/ `$ N5 m3 D) A! i) x' a, q
; @4 ^! j2 b) r3 S
决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例.
. \, p4 M. m: P3 s& K8 C变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE).
' [) L, a2 }5 t7 S2 Y
目标变量(这里是z)仅被声明,没有指标(index).
+ l5 f/ r6 _6 P
方程式
8 L' c" f4 m+ q! I+ O, B# c. x! U% \

" k% w8 Z: a9 A" m+ e7 z, ?
目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的.
- }. y8 t5 Y0 k1 v7 R; v
=E=表示'equal to' (等于)
=L=表示 'less than or equal to' (小于或等于)
=G=表示'greater than or equal to' (大于或等于)
u6 K2 B+ n1 O: t) R模型声明
% |2 U7 q+ c: a! Z
* o( I: o7 G) c' o a- Z. b o: {4 y模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.
2 ^, h- s7 X: @% _# ?7 `
求解声明
5 x- b; ~: x* s8 r& T
' _% k9 M; j& G- S2 s) Q求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量.
0 h# O/ A, a4 \9 e7 s
. N4 C4 T! V; ?# f+ S( S1 A0 X3 m- J$ J q- c) [6 z% z$ J
& K4 s- U: c& ?- q! p' N# _- E
| | + K/ N* h% l% x6 y3 b
GAMS输出报告(部分摘录) |
7 b7 X+ b0 _/ a" Q
完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要.
3 I. R( g+ c% p5 V! ~' }3 \0 i( e
方程式列表
: x$ m+ h" d" x/ |
4 l1 J: s8 U$ w: W方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式.
: b+ K- ^, d" T& `
列列表
2 p9 ^& |0 L9 Z9 b* e
) P9 K; O) l! h2 g- e列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改).
! d2 b8 U1 T% @/ H( s( {. e- j: w r6 C& p, |9 F$ b% _4 g9 Z0 R
4 Y' P$ D/ _2 w% h$ F
* f! ~+ N% Y& H% N
| |
) s; K3 `3 r, J" v 求解信息 |
u" k/ C5 l" B' ^8 z1 Y7 E

- z% F W9 m$ Y求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.
- K6 v+ H/ ?' Y' a2 i
在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器.
8 {- R0 F& w& f2 b- {解(Solution)
2 N/ B0 g1 |, B$ Z
3 t$ `1 q9 b# E# N8 t' t解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费.
6 s1 x3 m9 @( B- Z; y6 V' V写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的.
8 m% C3 K, Z5 @$ R0 Z
3 w" N) [$ K" x9 o6 g# {$ Z9 M
5 v# c6 J4 k- s" j) A
% f5 F) B5 N) T, E, z# @' c| |
# \6 a8 T, Q; g" n, Y: a 参考 |
! g9 d# O/ m, h6 v% o) W
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
呵呵 这个例子做入门非常不错啊 支持一下 辛苦版主了
, x9 I- Z- w$ O* W. k1 W M
作者: gaoshanliu水 时间: 2010-12-20 09:56
辛苦版主啊
+ y* L/ y6 j. R- [8 v' ?* r. d# {; F' S
* N% C/ _8 R3 E4 e
作者: 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 
) e/ V0 E/ {: a9 K5 M f帖子很好啊,入门很好啊。
! [0 |/ H/ X% P0 a. {
你的时间怎么是明天呢?
作者: 邓浩考研 时间: 2012-12-10 10:08
wsq200808 发表于 2012-12-9 22:55 
- h" h4 Z9 d1 \你的时间怎么是明天呢?
# C( D+ W9 u. D! v$ f0 Q
我是外星人。。。嘎嘎嘎
作者: 他山石 时间: 2013-7-30 09:03
版主辛苦了!
作者: 鸣凤123 时间: 2015-8-14 08:24
楼主的帖子很不错,我很喜欢. C! O2 w/ j2 }6 O3 Y2 ~9 W" k
作者: LYJA 时间: 2015-10-13 07:31
very good, thank you very much!. N3 `! L* B' N8 d0 b+ R5 ]
作者: xiangbeihai 时间: 2017-3-1 21:23
不错,已收藏& b' g6 ?+ @. e A8 a$ X
作者: 板砖sy 时间: 2017-3-10 10:20
入门看这个就足够了,但是一旦独立进行编程的话,会出现很多bug,还有错误代码,都不知道什么意思,大神有没有解决这些问题的方法,辛苦了: _* f; M+ g q
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |