GAMS新颖修订简体版经典编程案例Word文档格式.docx
《GAMS新颖修订简体版经典编程案例Word文档格式.docx》由会员分享,可在线阅读,更多相关《GAMS新颖修订简体版经典编程案例Word文档格式.docx(101页珍藏版)》请在冰点文库上搜索。
![GAMS新颖修订简体版经典编程案例Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/ad48eea9-434f-43ec-9ba5-1d472754ff63/ad48eea9-434f-43ec-9ba5-1d472754ff631.gif)
3.1GAMS图表编辑窗口(CHARTEDITOR)49
3.2GAMS绘图步骤52
3.3折线图(LINECHART)52
3.4直方图(BARCHART)56
3.5扇形图(PIECHART)57
3.6股票走势图(MULTILINECHARTFORSTOCKDATA)58
3.73D曲面图(3DSURFACECHART)59
3.8将资料导出至EXCEL60
第四章GAMS基本例62
4.基本例62
4.0例一:
效用最大化问题62
4.1例二:
比较静态分析问题63
4.2例三:
CGE模型66
4.3例四:
家计单位优化模型70
4.4例五:
理想化成长模型73
4.5例六:
利用GAMS绘图76
参考文献80
前言
GAMS的全名为GeneralAlgebraicModelingSystem(一般性代数仿真系统),其最初的研究与发展(R&
D)是由国际复兴开发银行所资助(InternationalBankforReconstructionandDevelopment),指世界银行(TheWorldBank),并且在华盛顿特区的发展研究中心执行这项计划。
自1987年以来,GAMS的研究与发展已改由GAMSDevelopmentCorporation所资助。
GAMS系统是在一羣数理经济学家的密切合作之下所开发,在系统的发展上,最重要的成功因素是共同应用在经济学、计算机科学和运筹学之间。
虽然数学规划(mathematicalprogramming)和经济理论(economicstheory)交错严密,然而1975年诺贝尔经济学奖颁给LeonidKantorovich和TjallingKoopmans,以表彰他们在数学规划中对优化资源分配理论的"
贡献"
。
其它诺贝尔奖得者,像1972年的KennethArrow、1973年的WassilyLeontief、及1990年的HarryMarkowitz也都在数学规划上非常闻名。
线性规划算法起源于1940和1950年代GeorgeDantzig早期的著作中,以计算技术和算法理论的发展较为迅速。
三十年后,它有可能解决较复杂的问题,允许人们拿真实生活中的问题来测试经济理论。
在1970和1980年代世界银行的研究议程里,创造了完善的环境,应用数学规划作研究一起带来不同的学科和经济发展运算上的问题。
GAMS系统的推动解决了一个从大经济模型群组中令人沮丧的经验。
事后看来,你也许觉得1970年代数理经济学家,在当时使用最佳的技术,解决了当时大部分在农业、钢铁业、肥料、及电力上的经济及仿真优化的模型,引起了令人印象深刻的研究,但最初的成功难再突破。
因为当时的技术建构,操作,和解决这样的模型,需要人工、费时、及容易出错,而且数据的格式和解答的方法不是方便携带的。
因此GAMSDevelopmentCorporation所接手开发的GAMS软件,是为了处理模型线性、非线性及混和整数优化的问题。
GAMS尤其适合处理须精确模型之大型、复杂及独特的问题,使得问题符合高度精确及自然的法则等,也允许使用者自行快速且简便的修改公式以便于求解其它的问题,甚至于只要稍加费心就能转换线性公式成非线性公式,近年来已广泛地被世界各经济学家所使用。
对初学者来讲,需要掌握三个学习重点:
解决含有限制式之目标函数优化问题、解决经济上一般平衡的问题、及解决非线性系统程序之问题。
数月前承蒙清华大学经济系黄宗煌教授的建议,因有感于GAMS的操作手册及程序语法皆为英文且较为深入复杂,对初学者来讲会有阅读及学习上的困扰,因此编写此讲义,期盼对于初学GAMS的使用者有所帮助。
此外,特别感晴雯小姐适时提供部份的GAMS基本例,及谷泛先生对本人在编写此讲义时的一些建议。
对操作GAMS过程之技术询问,以及对本讲义之容建议,请洽TaiSEND研究团队:
中央大学产经所博士班晴雯
:
(03)572-3685
E-mail:
93444008cc.ncu.edu.tw
,清华大学永续发展研究室研究专任助理谷泛
kfchenmx.nthu.edu.tw
,及清华大学永续发展研究室研究专任助理黄耿信
g4huangwmich.edu
黄耿信谨识
民国九十七年七月九日
于清华大学永续发展研究室
第一章GAMS的操作方法:
1.MenusandWindows
1.0进入GAMS系统
1.1FileMenu
1.2EditMenu
1.3SearchMenu
1.4WindowsMenu
1.5HelpMenu
1.0进入GAMS系统:
当GAMS软件安装好之后,在计算机桌面上会出现GAMS-IDE之图像
,请
点击此按钮进入GAMS系统,出现画面如下图所示:
1.1FileMenu:
1.1.1File|New:
打开新的编辑窗口,请点选File|New指令或按键盘Ctrl+N,即可编写新的
GAMS程序,出现画面如下图所示:
1.1.2File|Open:
打开一个或多个已存在档案,请点选File|Open指令、或按键盘Ctrl+O、或在GAMS接口中点击
按钮,会出现开启档案的窗口,然后按照档案储存的路径开启档案,按Shift+Ctrl+↓可选择多个GAMS档案,出现画面如下图所示:
1.1.3File|OpeninNewWindow:
打开一个或多个已存在档案在新的编辑窗口,其操作方法同1.1.2。
1.1.4File|ViewinExplorer:
先开启一个已存在的GAMS档案,再点选File|ViewinExplorer指令,
会出现其档案的储存窗口,出现画面如下图所示:
1.1.5File|Run:
执行GAMS程序,请点选File|Run指令、或直接按键盘的F9、或在GAMS
界面中点击
按钮。
1.1.6File|Save:
原档名存储GAMS档案,请点选File|Save指令、或按键盘Ctrl+S、或在
GAMS界面中点击
按钮。
1.1.7File|Saveas:
更改档名储存GAMS档案,请点选File|Saveas。
1.1.8File|Close:
关闭GAMS档案,请点选File|Close指令或点击编辑窗口右上角。
1.1.9File|Print:
打印GAMS档案,请点选File|Print指令、或在GAMS接口中点击
按
钮,出现画面如下图。
打印之前可选择打印容,如档案路径及页数(Header
&
pagenumber)、每列程序的编号(LineNumbers)、程序格式栏印(Syntax
print,如粗体字和斜体字)、彩色打印(Colorprint)、双面打印(Twopages)、
打印预览(Preview)、及字号和样式(Printerfont)等。
1.1.10File|Preview:
打开之前曾经开启过的档案,请点选File|Preview指令,出现画面如下图
所示:
曾經開啟過的檔案。
1.1.11File|Exit:
点选File|Exit指令,或点击GAMS系统窗口右上角,可离开GAMS
系统。
1.1.12File|ModelLibrary:
点选File|ModelLibrary指令,可打开GAMS标准模型图书馆(Open
GAMSModelLibrary)里的例档案(着重于ModelType,如LP或NLP
等),出现画面如下图所示:
或可打开式样模型图书馆(OpenUserModelLibrary)里的例档案(着重于语
法格式,例如变量、方程式、及模型的宣告),其文件名为modlib.glb,路径如下:
C:
\ProgramFiles\GAMS22.6\docs\bigdocs\gams2002\modlib.glb。
File|Project:
(1)NewProject:
点选File|Project|NewProject后,再决定NewProject的檔名(例如:
HarryPotter)及路径,其功能在使所有跟HarryPotter.gpr有关的档案都会储存在相同的路径底下,gpr为Project的扩展名,出现画面如下图所示:
在HarryPotter.gpr下打開math1.gms檔案(儲存在F槽),然後執行程式,其所產生的輸出檔會跟HarryPotter.gpr儲存在相同的路徑。
(2)OpenProject:
打开一个已存在的Project,则GAMS系统会要求你储存正在修改中的档案,且会自动关闭。
File|Options:
Options的功能如同GAMS系统的管家一般,总管GAMS系统的设定,包括Editor、Execute、Output、Solvers、Licenses、Colors、FileExtensions、Charts/GDX、及Execute2。
(1)Options|Editor:
可设定字型及其样式和大小、Tab键的型式及大小、页边空白、段落标记、及语法颜色等,Options|Editor出现画面如下图所示:
(2)Options|Execute:
设定GAMS系统执行程序时的环境,显示执行过程的窗口、及执行完成后显示lst文件的窗口等,Options|Execute出现画面如下图所示:
(3)Options|Output:
设定输出档页面宽度和高度、日期和时间的型式,通常页面宽度的围介于72~255,页面高度为0或99999,Options|Output出现画面如下图所示:
(4)Options|Solvers:
显示可使用的Solvers和Model的型态,以便解决问题。
第一行显示可使用的Solvers,第二行显示Solvers的license状态。
Full表示可完全使用其Solvers的功能,Demo表示试用版本,可部份使用其Solvers的功能。
小长方形表示对某个Model型态来说,此Solvers选择了GAMS系统的隐含值;
X表示对某个Model型态来说,现行所使用的Solvers;
-(adash)表示对某个Model型态来说,无法使用的Solvers。
例如:
CPLEX适用于LP、MIP、MIQCP、QCP等模型。
(5)Options|Licenses:
在安装GAMS系统时,即可上传license档案,或在Options|Licenses选择替代的license档案,出现画面如下图所示:
(6)Options|Colors:
设定GAMS程序语法的颜色(分为前景(Foreground)及背景(Background)及字体(包括粗体(Bold)、斜体(Italics)、及底线(Underline))。
例如保留字(Reservedwords),前景为蓝色,背景为Default值,粗体字。
Options|Colors出现画面如下图所示:
1.2EditMenu(其功能和MicrosoftWords编辑字段的功能一样):
1.2.1Edit|Undo(Ctrl+Z):
回复至上一次更改程序的画面。
1.2.2Edit|Redo(Shift+Ctrl+Z):
再次回复至上一次更改程序的画面。
1.2.3Edit|Cut(Ctrl+X):
删除某一段程序容,并复制到你想要贴上的地方。
1.2.4Edit|Copy(Ctrl+C):
复制所选择的程序容。
1.2.5Edit|Paste(Ctrl+V):
贴上所选择的程序容。
1.2.6Edit|Delete:
删除所选择的程序容。
1.2.7Edit|SelectAll(Ctrl+A):
选择档案全部的容。
1.3SearchMenu:
1.3.1Search|Find(Ctrl+F):
寻找程序里的指令或语法。
1.3.2Search|Replace(Ctrl+R):
寻找程序里错误的语法,并用正确的语法来取代,1.3.1和1.3.2的画面窗口如
下图所示:
1.3.1画面窗口1.3.2画面窗口
1.3.3Search|Gotoline(Ctrl+G):
输入某列错误程序的列数(可由输出文件得知此列数),并修改其程
式,出现的画面窗口如下图所示:
程式中第七行發生打字錯誤。
1.4WindowMenu:
1.4.1Windows|Cascade:
多个编辑窗口呈阶梯式排列,出现的画面窗口如下图所示:
1.4.2Windows|TileHorizontal:
多个编辑窗口呈水平排列,出现的画面窗口如下图所示:
1.4.3Windows|TileVertical:
多个编辑窗口呈垂直排列,出现的画面窗口如下图所示:
1.5HelpMenu:
可查询GAMS语法及其操作方法
1.5.1点选Help|GAMSIDEHelpTopics,出现的画面窗口如下图所示:
1.5.2可供查询的GAMS文件:
(1)Help|GAMSUsersGuide:
(2)Help|SolverManual:
(3)Help|ExpandedGAMSGuide(McCarl):
第二章GAMS的程序语法:
2.GAMS程序基本结构:
2.0概述
2.1Set、Alias、andTable语法例
2.2ParameterandScalar语法例
2.3Variable语法例
2.4Equation语法例
2.5Model语法例
2.6Solve语法例
2.7如何将数据导出至Excel
2.8以实例说明输出文件的基本结构
2.9GAMS的其它语法及注意事项
2.10基本例
2.0概述:
GAMS基本成员的语法格式大至如下所述:
◆集合的宣告(Declarationofsets):
●setset_nameoptionaldescriptivetext/firstelement,secondelement,.../;
◆数据的宣告(Declarationofdata),包括参数(parameters)、表格(tables)、及规模变量(scalars):
●parameterparameter_name(set_dependency)optionaldescriptivetext
/firstelementwithrespecttotheassociatedvalue,secondele
mentwithrespecttotheassociatedvalue,.../;
●tabletable_name(set_1,set_2…)optionaldescriptivetext
set_2_element_1set_2_element_2
set_1_element_1value_11value_12
set_1_element_2value_21value_22;
●scalarscalar_nameoptionaldescriptivetext/numericalvalue/;
◆变量的宣告(Declarationofvariables):
●variabletypevariable_name(set_dependency)optionaldescriptivetext;
◆方程式的宣告(Declarationofequations):
●equationequation_name(set_dependency)optionaldescriptivetext;
●Equation_name..definitionofequation;
◆模型的述(Modelstatement):
●modelmodel_name/all/;
◆求解方法的述(Solvestatement):
●solvemodel_namemaximizingobjective_function_nameusingmodeltype;
●solvemodel_nameminimizingobjective_function_nameusingmodeltype;
2.1Set、Alias、andTable语法例:
Ø
给定一个集合u={1,2,3,...,10}和它的子集合i={1,2,3},用GAMS语法(GAMSsyntax)可以写成如下的形式:
setuperson/1,2,3,4,5,6,7,8,9,10/
i(u)male/1,2,3/;
假设我们已经定义集合u={1,2,3,...,10},如果再定义一个和u相同的集合,称为v={1,2,3,...,10},我们能够写成如下的形式:
setvperson/1,2,3,4,5,6,7,8,9,10/;
然而我们能够用GAMS指令alias来取代上述的写法,其格式为:
alias(u,v);
例:
setuSAMentry/BRD,WIN,CAP,LAB,HOH/
i(u)goods/BRD,WIN/
h(u)factor/CAP,LAB/;
alias(u,v),(i,j),(h,k);
*loadingdata-----------------------------------------------------------------
TableSAM(u,v)socialaccountingmatrix
BRDWINCAPLABHOH
BRD15
WIN35
CAP520
LAB1015
HOH2525
;
*----------------------------------------------------------------------------------
2.2ParameterandScalar语法例:
一般来说参数(parameter)的格式中,数据项的定义,通常都与集合有关联,这些数据项可以是一维空间或多维空间的例子。
Parameter语法的基本格式如下:
parameterpar_name(set_dependency)optionaldescriptivetext
/firstsetelementnameassociatedvalue,secondsetelementnameassociatedvalue,.../;
规模变量(scalar)的述是用来宣告及初始化参数,这意味着规模变量跟集合无关联,而是一个跟参数相关联的数值。
Scalar语法的基本格式如下:
scalarscalar_nameoptionaldescriptivetext/numericalvalue/;
Setsicanningplants/Seattle,San-Diego/
jmarkets/New-York,Chicago,Detroit/;
Parametersa(i)capacityofplantiincases
/Seattle350
San-Diego600/
b(j)demandatmarketjincases
/New-York325
Chicago300
Detroit275/;
Tabled(i,j)distanceinthousandsofmiles
New-YorkChicagoDetroit
Seattle2.51.71.8
San-Diego2.51.81.4;
Scalarffreightindollarspercaseperthousandmiles/90/;
Parameterc(i,j)transportcostin1000sofdollarspercase;
c(i,j)=f*d(i,j)/1000;
2.3Variable语法例:
在使用变量(variable)之前,必须先宣告变量的名字,Variable语法的基本格式如下:
variabletypevar_name(set_dependency)optionaldescriptivetext;
变量类型(variabletypes):
VariableTypes
AllowedRangeofVariable
Variable
-∞to+∞
FreeVariable
PositiveVariable
0to+∞
Nonnegative