标题: 【转载】GAMS中文使用手册连载01 [打印本页] 作者: huashi3483 时间: 2009-11-14 05:10 标题: 【转载】GAMS中文使用手册连载01 写在前面的话 # h; h& R* q! H1 U. N 8 F6 w5 _' g, x b& r4 Q! A在学习和工作之余写点东西,这种想法由来已久了。只是总是觉得很忙,抽不出时间做一点点自己喜欢做的事情。突然有一天发现,你必须牺牲某些东西才能得到某些东西。所以,就索性写上几句话聊以**吧。! t, o8 n! S1 _% L7 b* B
最开始,只想翻译一下GAMS的用户手册。但是又觉得这样写很枯燥,不光读者不喜欢看,连自己也要打瞌睡了。如果想催眠的话,还不如去听评书。但是本书还是以解释GAMS的用法为主。中间夹杂着一些自己做modelling 的体验,还可能还有一些毫不相关的东西。可能有很多错误,请读者们原谅。想学习GAMS的同学,想必一定是数学,运筹学或计算机相关专业的了。让大家失望了,其实我的专业是chemical engineering, 本科时候做的是量子化学。阴差阳错上了贼船。但是觉得自己用了这么多年了,总该有点体会,能过帮帮大家。 Z- `- F" ]# ~. T3 f! o4 A5 u4 d
: i0 w+ m; A/ m0 }* E* F; A
进入正题之前,还想啰嗦几句题外的话。6 k6 d& Z7 T! v! |
能看到这篇文字的同学,恐怕大多数是在灯下苦读的学子。实际上学习某种工具并不重要。真正要学习的是知识,是思维的方法。就像很多计算机系的学生一样,把数据结构和算法精通了,任何工具都是一样的。所以,你用GAMS或者不用GAMS,都没有关系,要把握事物的本质,最关键的东西抓住了,任何语言就是一种输入法。另外,学习一定要有兴趣,要认识到他的beauty,不要把什么都换算**民币,那样你会觉得很累。除了,coding 以外,还要博览群书,文史哲,拿来翻翻,就当休息了。 ! g9 f$ X. I2 w A. O8 Y, y最后,男子汉们,别忘了,谈一场轰轰烈烈的恋爱!!" ^ j0 o/ T: a; k# t* N+ R
$ l1 H0 C; z) @; b $ x* l* W2 Z; b/ P * s+ M* K( X6 k8 J9 }# v( H* m1 ~- f5 F+ o% J1 A6 |! R" }/ z$ x
* N& ]- Z8 O% U: f
" o( }( i, x$ t3 H2 q' A/ l
第一章,基本概况 " Z4 |/ I* X# r 7 }8 q# h* N. g3 J! x8 ~2 r( l2 dGAMS是一种非常简单易学的运筹学建模语言 (www.gams.com),是由WORLD BANK 开发的。由于近几十年计算机软硬件的的高速发展,世界银行决定投资开发GAMS, 来提供:- E D$ C% O# K( W! j
1. 建立复杂模型的高级语言 5 {; W- w9 t" J2 D9 n% q. e8 b6 ~2. 简单易学 ) ^; j1 s, ]& n+ f* C+ u3. 强大的描述代数及逻辑关系1 Q; v; m5 R1 u0 Z
4. 模型可以独立于算法系统 3 |* H, v% N5 l7 i D4 ?GAMS 可以让使用者专心致力于模型的建立而省略了解法方面的考虑因为GAMS包含了解决通用的LP,NLP,MILP,MINLP等各类模型所需要的solver. 另外,GAMS提供了和外界进行交互的输入输出借口。使得用户很方便的导入导出data。7 V$ U/ E) t. s7 V3 n
下面当然是tutorial了,就想学习任何一种编程语言一样,最开始都要学习输出 hello world. 我们这里当然要复杂一点了,举一个最简单的例子,运输问题.+ Z" F% m7 M, G1 G, h' e0 m. p
这是一个经典的LP问题(不用解释什么是LP吧,呵呵) - G6 J I0 C, R用点英语,呵呵, 7 ~$ M% A. b5 lIn the familiar transportation problem, we are given the supplies at several plants and the demands at several markets for a single commodity, and we are given the unit costs of shipping the commodity from plants to markets. The economic question is: how much shipment should there be between each plant and each market so as to minimize total transport cost?$ \( f3 A5 M! H9 Y$ C7 x& ?
就是说,我们已知有一些工厂,生产出的产品要运往一些市场来满足他们的需求,每一个工厂的生产能力(每个工厂能提供产品的数量)以及每个市场的需求(每个市场需要产品的数量)是已知的。另外,我们还知道从特定的工厂到特定的市场,运输一件产品的运费。那么我们怎么样设计从每个工厂到每个市场运送货物的数量,使得总运费最小? 8 A; V! l1 ^# A4 eIndices: / h, q {, Z* C$ A$ f# ^i = plants- z. @0 `, _7 A0 J
j = markets * J: H+ ] U; L( GGiven Data: % w& d; @7 @& Y. C1 Z, Oai = supply of commodity of plant i (in cases)- J) [+ p. t+ P
bj = demand for commodity at market j (cases)3 g5 K; p( I" O' S8 r% n) z
cij = cost per unit shipment between plant i and market j ($/case) ) w0 S' q" F6 I% B+ E8 }; w2 j4 ZDecision Variables: 2 C0 f7 V8 U$ c6 N4 J: O2 R& i mXij = amount of commodity to ship from plant i to market j" I) }0 v. {, z& V5 \5 v
在这里唯一的连续变量是Xi,j, / H: `/ Z* e _8 S w3 t ]模型就不用我说了吧。。。。* N+ ` P- T) ^$ O4 e
+ n& z5 x L7 Q5 B* {/ e, y这是一个典型的线性规划问题,他的GAMS code is / ~# s [! g+ ^( ^+ d& d - t, {. t; r8 o* f& e& ?( wSets ) ]0 S# o5 T" K! Q7 Q8 y9 O; e' |i canning plants / seattle, san-diego /2 u$ w* [" K; n1 Q
j markets / new-york, chicago, topeka / ;3 |7 D: k# N# f! V
Parameters5 j% R7 u2 i) W. p% V) I8 j+ K @
a(i) capacity of plant i in cases' |/ P2 q7 G) N* R
/ seattle 350 # f+ O5 a( m: Y/ R& f; Csan-diego 600 /$ y' F% i$ j1 [1 a5 d3 `
b(j) demand at market j in cases % M- i. }; s0 `$ w# m8 r/ new-york 325 * z$ R! R% z: K- M" q# mchicago 300; |2 z! \% k3 P7 V8 \
topeka 275 / ;2 i8 Z+ C" o- q8 h
Table d(i,j) distance in thousands of miles; M) q/ J7 W% J, D3 C3 q2 t3 m
new-york chicago topeka4 s* Q9 F) O+ y5 x* I
seattle 2.5 1.7 1.82 z `. p. C- j+ Y% o
san-diego 2.5 1.8 1.4 ;' G8 }' z; I) o
Scalar f freight in dollars per case per thousand miles /90/ ;, B |% U+ T0 k- W
Parameter c(i,j) transport cost in thousands of dollars per case ;2 b1 B- ~6 `- T
c(i,j) = f * d(i,j) / 1000 ;- y) V7 Y1 H2 k% p' {3 p
Variables/ w0 }6 X7 j3 {4 u E
x(i,j) shipment quantities in cases % i9 E" a* A- C( Rz total transportation costs in thousands of dollars ;/ z/ d# c5 v6 \1 k6 d3 l9 }
Positive Variable x ; ! M9 L: l7 {+ [Equations6 O- [. ^! i- p
cost define objective function / M |& @9 B) [" `, J4 nsupply(i) observe supply limit at plant i 1 X' c; \8 @9 l N( cdemand(j) satisfy demand at market j ;: O% Z0 k$ M) ^. R* ^: o
cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ; K( J0 a& b- h. \1 g" H
supply(i) .. sum(j, x(i,j)) =l= a(i) ; d5 v% K% j- `8 g$ wdemand(j) .. sum(i, x(i,j)) =g= b(j) ;: I- }7 P1 t W3 s; l9 I7 K
Model transport /all/ ; % R# |/ @0 }2 M4 K, ]! [Solve transport using lp minimizing z ; ( q1 z% Q* T0 k4 `( v; c3 f; RDisplay x.l, x.m ;7 w" Y8 C7 s! B7 [) H1 @
这是一个非常典型的LP(linear programming)问题,所有的变量和约束都是线性相关的。作者: fanghzou 时间: 2011-8-12 22:13
无人回复呀,版主,我也是化学工程,我觉得一般看这个的还是都是做石油化工的比较多吧。希望和版主交流一下,不知可否。作者: 历史的哭泣 时间: 2011-11-1 14:55
谢谢群主,我经常在这个数学中国上看到你,我是学习软件工程的,但是很喜欢数学,2010年参加数学建模竞赛,现在搞密码学,还是天天跟数学打交道,以前用matlab,不知道gams跟matlab有什么区别?群主能说一下嘛?作者: peterjiao 时间: 2012-4-15 17:03
楼主写的很是贴切啊,实践出真知,俺也在学习gams作者: constancemoon 时间: 2012-4-16 13:52
菜鸟级人物入门GAMS,觉得国内GAMS资源太少了!!!!作者: shenjun130 时间: 2013-4-27 16:05
感谢楼主,正在一点一点学习作者: 随墨枫飞 时间: 2013-5-30 13:34
嗯, 非常受教,但是一个人学,有难度的哦,请各位大侠讨论!!作者: LYJA 时间: 2015-10-13 07:32
very good, thank you very much!' V4 l; ~0 X/ A# i3 t# \( s 作者: 闲水闲云 时间: 2016-9-21 16:36
谢谢无私分享!感恩! 2 S7 w/ @2 _2 L% Y