QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 26011|回复: 17
打印 上一主题 下一主题

GAMS示例——运输问题 【代码及演算过程】

[复制链接]
字体大小: 正常 放大

1253

主题

443

听众

-516

积分

复兴中华数学头子

  • TA的每日心情
    开心
    2011-9-26 17:31
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    数学中国网站(www.madio.cn)是目前中国最大的数学建模交流社区

    邮箱绑定达人 优秀斑竹奖 发帖功臣 元老勋章 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组: 越狱吧

    群组: 湖南工业大学数学建模同盟会

    群组: 四川农业大学数学建模协会

    群组: 重庆交通大学数学建模协会

    群组: 中国矿业大学数学建模协会

    跳转到指定楼层
    1#
    发表于 2009-11-14 04:27 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定

    GAMS示例

    + ^& x7 H' |3 j; ~, Q

    下面这个问题主要是用来举例说明GAMS是如何让您以一种自然的方式建立模型.GAMS能够处理大的多和高度复杂的问题.在这里只展示了GAMS的很少一部分的基本特征.

    O+ g' F) [) f2 _; q3 c/ n2 u, J 9 T9 T; _' Z- f. R( y c' R$ C, k- L$ d. ?) x5 t2 F9 P: d( A( @& O/ w1 V0 N. J3 {/ R# A& I
       代数描述
    8 J- l2 O/ N4 B4 ~' Y) n. W

    下面是问题的标准的代数描述,这是用来最小化把货物从2个工厂运输到3个市场的费用.受约束于供需约束.

    7 x$ a3 p8 L4 v# b2 x

    指标:

    6 `0 c( I7 e# ?# O7 U) d

     i=工厂(plants)
    j=市场(markets)

    - ^' A7 n- _ d

    给定的数据:

    9 L& M+ R& \2 _7 V7 G* ~

    =在工厂i日常供应量(批数cases)
    =在市场j的日常需求量(批数cases)
    =在工厂i和市场j之间的距离(千英里)
    =在工厂i和市场j之间每单位的运输费用($/批/千英里)

    " b1 E9 U" _- ]& P0 l. O4 { 8 J% `. `" @3 S3 Z! o9 J! t4 p& v1 A7 \; {/ c+ _7 w- _6 R6 j. U/ z% u# A% T! B. A; h/ ^8 ~# o3 [* N6 ~6 Y0 L" k" \# \* L& \6 u' J: B" d' q2 W+ z: q0 N* K% _* l; t2 Q2 m3 R3 e' d4 Q6 |/ p, r) T6 G& }9 i$ H) @% R* K7 O; \& W8 ?! z- N% n5 B$ N6 O. S' b# @7 S2 M" |$ e/ M8 Q: d: J- @6 ]' Y. b3 q/ p5 W: r: j; k! E- p( R# r& {; S0 \/ V# m& K& G2 w/ l4 t& v7 J. |$ L" @5 u- q& o* p9 U" O3 Q4 M% h" x8 O- x6 A- M [, G) A( `2 \5 p4 i# ~; T7 e) L' k3 _" R2 g& D' p% G' t0 n5 Q {+ O4 L$ ]/ w9 d" k! j0 V6 T1 i7 ~$ Y! Y# ~3 |. @' O/ K/ ~2 S8 j) [" X3 A! P$ C! X) d4 H% \8 i) ~; V9 w9 c; g, N) q8 I2 U" B+ T) j- g2 Q4 @! N" S! L/ T" A9 M, k3 L" d, f# w9 u2 S: j$ X% b& m7 O! L. J! x; M0 A5 V3 E2 b7 w: r6 p" Z$ I) M) G& K$ |5 C1 W( k5 l- O$ B3 j: |( Q9 h
    距离  
      市场  
    工厂 New York Chicago Topeka 供应量
    Seattle 2.5 1.7 1.8 350
    San Diego 2.5 1.8 1.4 600
    需求量 325 300 275  
    1 A# r D8 `1 z, s( Y, j

     F=每批每千英里的费用$

    / s8 w5 P7 i& U

    决策变量:

    4 N6 r2 G$ j. h! b* m# ], d

    =日常从工厂i运输到市场j的总量(批数cases)
    这里 适用所有i,j

    / y% E8 G; F" t3 c7 o2 O

    约束:

    9 Z. b6 `1 p( U7 C! {

    在工厂i的供应量**(批数cases):适用所有的i
    在市场j的需求量:适用所有的j

    ) i# ?8 |4 L, ^/ Q

    目标函数:

    7 n& W# p$ a: r

    Minimize (千元)

    ~ h1 @1 M9 ?5 r* ` ' G) n& e, D1 ^& ]0 n# o0 R8 A* T3 ^' A7 }+ f$ y+ P- |4 t h$ \" H- A% e# @1 I) W' E0 B, M# k( G( S, S
       GAMS模型
    8 u2 ?! T' g: J; Q9 q

    同样的模型在GAMS中建模.简练的代数描述使得模型高度紧凑,并带有逻辑结构.内部的文档,比如对参数的解释和测量的单位,使得模型很容易读懂.
    1 j p) I' \: `& c3 m4 f, d

    集合(Sets)

    . K% G% N; ?# A4 v' o& F% w7 M

    $ k) E6 |9 Y' K) B, Y6 o9 O2 @. w# V5 k

    GAMS让您以直接的方式指定指标:声明和命名集合(这里是I和J),并列举它们的元素.

    ) T6 a- l* u' D; [. o" g' ]9 b

    参数

    / n! X( R( e( w+ p+ _: x% I+ _! a

    : e% G' i7 Y1 y+ ?, j

    这里的数据输入被作为指标参数A(I)和B(J),值简单的被列出.

    ( F1 j7 M- Y) B

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

    + v8 e/ [! c9 S- M

    表格

    n, N* }: ?0 L0 k& |# S- j


    数据同样能够以方便的表格形式输入.GAMS让您以数据的基本形式来输入数据-转换是特定的代数化的.

    ; i. o' W' c: i

    标量(Scalar)

    , K5 X! R9 R$ Z% q, T' V6 @2 z" B


    常量能够被声明为标量,它的值是指定的. 9 Z, B* S; I, i0 W$ N7 g" y

    数据处理

    2 w: m/ K* L# V" T3 O/ A% @

    1 x& R! K6 W8 b& I8 P( ^

    当数据值要被计算前,您首先要声明参数(比如,给它一个符号,随意给它编个指标),然后给它一个代数公式.GAMS将自动进行计算.

    2 ?3 s6 P) u: u+ ]; |

    变量

    5 ]1 Z: X/ y* s" u8 r

    ! W& ?7 n U+ a4 }% ~

    决策变量以代数的方式表达,带有特定的指标.从这种常见的形式,GAMS在域中生成变量的每个实例.

    ( _& p4 |* N+ I, u# S% \: t6 W) e. {

    变量可以被指定为下列类型:任意(FREE),正值(POSITIVE),负值(NEGATIVE),二元(BINARY),或者整数(INTEGER).默认是任意(FREE).

    1 {( H) w. a0 K1 d

    目标变量(这里是z)仅被声明,没有指标(index).

    ; s' j6 ` k% {, s

    方程式

    1 f5 {# \0 R' X& W

    7 d+ b0 X/ i9 ?! |$ I9 s- j

    目标函数和约束方程式首先被通过指定名字来声明.然后它们的概括的算术公式被声明.GAMS现在已经有了足够的信息(从上面的数据输入和从在方程式中指定的算术关系)来自动生成每个单独的约束声明-就像您能在下面的输出报告中看到的.

    # r3 n3 Z9 u6 q" b: N% i

    =E=表示'equal to' (等于)
    =L=表示 'less than or equal to' (小于或等于)
    =G=表示'greater than or equal to' (大于或等于)

    % U; P/ `0 }: B: U/ h

    模型声明

    3 [' x: P3 G# A. T

    1 A! Q( [8 z- Q! q5 S$ a

    模型被指定了一个唯一的名字(这里是TRANSPORT),模型缔造者指定那个方程式应该被包含到这个特别的公式中.在这里我们指定了ALL,也就是说所有的方程式都是模型的一部分.就等于是MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . 这个方程式选择使您能够在单个的GAMS输入文件中以公式表达不同的模型,基于相同或不同的给定数据.

    - g5 i7 B+ F) m

    求解声明

    ; K3 A! a" t. T, {- v/ x3 k

    0 ~+ M" P- I5 ?* j! [

    求解声明(1)告诉GAMS那个模型要被求解,(2)选择要使用的求解器(在这里是LP求解器),(3)表明优化方向,或者是求最小值,或者是求最大值.(4)指定目标变量.

    4 z* x _ o# ?4 Y# ^. U" R& |( n. r4 e B: B% L9 x4 n% k! b. i3 I* M$ t! Z7 q! ]3 d9 ?) l1 `# |2 u* I
       GAMS输出报告(部分摘录)
    L! o: Z! W! _; S

    完整的GAMS输出报告比下面列出的部分摘录详细的多,包含了更多的帮助用于解释和诊断您的模型.甚至您能够修改输出格式来符合您的特定的需要.

    $ w4 T2 g: V# M

    方程式列表

    1 g# U1 C3 y k {( D

    5 a% l# O7 ]4 p* {/ ^

    方程式列表显示从在GAMS输入中指定的分区(block)生成的单独的约束.在GAMS中使用者可以以一种非常紧凑的形式写下被索引的方程式分区(block),这将产生大量的单个方程式.在我们的示例中,我们指定了3个方程式分区,生成了6个单独的方程式.

    H3 m# {' C9 j6 u5 F. r

    列列表

    : [6 n9 p- W9 e5 |# L; n

    2 m. |! g8 }1 \

    列列表提供信息到生成的单独的变量上.变量X(I,J)扩展出6个单独的变量.当许多变量从一个分区中被生成,默认的列表只显示最初的3个(用户可以修改).

    " M) x R" R8 i1 T8 X4 ~ 0 ~' ~% `. K! Y O) i/ g" m9 q. J, x3 _/ i2 d! c& [* O& F7 _: `( Z0 P' Q2 g9 _& e4 J
       求解信息
    9 r" M9 _2 ^6 b' ?

    1 F" Z) e0 m) S

    求解声明将生成模型(单个方程式和对应到特定模型的变量的产物).首先一些关于生成的模型的统计表将会被显示:方程式数,变量和非零元素.

    " u6 n e- |/ P; J

    在求解汇总信息部分,我们看到BDMLP被调用来求解这个模型.BDMLP经过4次反复,耗时0.18秒找到了这个问题的最优解.求解信息下列的消息来自求解器.

    * L2 Q/ r+ U' a

    解(Solution)

    $ a+ J/ K7 o- C) K0 ]

    ( i4 h( ~$ E, E# O8 J; y8 Y/ i

    解被显示在这里.边际值(marginals)对应方程式的重复和变量减少的花费.

    * E5 q' ` T. n& j

    写工具不需要学习一门其它的语言.在GAMS所有的数据处理,模型定义和报告编写都是在一个单独的环境中完成的.

    " z w |+ R+ h/ g+ x0 i6 m& E$ }* C: m# ~) `& G' w6 S$ n |3 p0 F$ _, P5 l7 {# a$ d9 q3 g% I. Q# P1 f
       参考
    8 J0 @' q2 k. S2 s

    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格式)下载

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持2 反对反对0 微信微信

    0

    主题

    4

    听众

    18

    积分

    升级  13.68%

    该用户从未签到

    自我介绍
    呵呵 学化工的 做系统工程 跟数学打交道的机会太多了 努力学习各种建模和解模方法 请大家多多关照
    回复

    使用道具 举报

    gssdzc 实名认证       

    0

    主题

    2

    听众

    941

    积分

    升级  85.25%

    该用户从未签到

    群组: 兰州大学数学建模协会

    回复

    使用道具 举报

    xupu3517 实名认证       

    0

    主题

    2

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    17

    主题

    3

    听众

    2216

    积分

  • TA的每日心情
    开心
    2012-1-30 23:29
  • 签到天数: 39 天

    [LV.5]常住居民I

    群组: 小草的客厅

    群组: 数学建模

    群组: Matlab讨论组

    群组: LINGO

    群组: 中南民族大学

    回复

    使用道具 举报

    domschke        

    0

    主题

    3

    听众

    19

    积分

    升级  14.74%

  • TA的每日心情
    开心
    2011-8-14 05:35
  • 签到天数: 1 天

    [LV.1]初来乍到

    回复

    使用道具 举报

    0

    主题

    3

    听众

    22

    积分

    升级  17.89%

  • TA的每日心情
    难过
    2012-2-12 19:46
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    回复

    使用道具 举报

    0

    主题

    4

    听众

    22

    积分

    升级  17.89%

  • TA的每日心情
    开心
    2012-2-23 17:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    回复

    使用道具 举报

    0

    主题

    4

    听众

    30

    积分

    升级  26.32%

  • TA的每日心情
    难过
    2012-4-24 16:16
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    数学建模
    回复

    使用道具 举报

    市_长 实名认证       

    0

    主题

    0

    听众

    5

    积分

    升级  0%

    该用户从未签到

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-10-23 04:34 , Processed in 2.474630 second(s), 106 queries .

    回顶部