量化经济

查看: 1461|回复: 0
打印 上一主题 下一主题

GGEMPACK与GAM语言的相互转换(第三章:实例)

[复制链接]

参加活动:0

组织活动:0

174

主题

247

帖子

1839

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1839
楼主
跳转到指定楼层
发表于 2019-12-19 09:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本推文是对 "Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson
https://www.copsmodels.com/ftp/gamsgp.pdf第三章的部分翻译和总结。它适用于对GEMPACK或GAMS已经有一定基础的研究员。GEMPACK和GAMS均使用类似于代数的编程语言。因此,一旦研究者能够区别两种软件的编程格式和思路,便容易在两个软件平台上对经济模型相互转化。本推文将分多期介绍这篇文章,感兴趣的读者可以从该网站(https://www.copsmodels.com/gpgams1.htm)提前下载原文全文和文章附带的GEMPACK和GAMS举例对比模型。
    在GAMS中,模型文件是GAMSGP.GMS;在GEMPACK中,模型文件是GAMSGP.TAB。两个文件构建的经济模型完全一样。
模型概述

     本章实例描述一个传统新古典一般均衡封闭经济体,包含两部门和两生产要素。两种商品可以是用作中间投入或最终消费。企业生产根据Cobb Douglas函数并最大化利润。家庭拥有劳动和资本禀赋,并消费这两种商品。它在预算约束下最大化Cobb Douglas效用函数。没有政府。根据Walras定律,在一般均衡下,可以删除家庭预算约束,或者任何一个市场清算条件等式。选择商品1价格作为基准(或者,可以选择任何生产要素的价格)。

     初始数据包含投入产出表,该表包含生产要素劳动力和资本,以及中间投入的价值。数据库是平衡的,即在初始情况下,所有市场都被清空。Cobb-Douglas函数的参数都可以从初始数据推算出来。该模型将求解内生变量,即生产要素和商品价格以及供给和需求量。模拟的冲击是劳动力禀赋增加10%。这会导致工资相对于资本回报率的下降,和劳动密集型商品2的相对价格的下降。




用GAMS求解模型
https://www.gams.com/download/下载GAMS试用版并将GAMSGP.GMS加载到GAMS平台中。阅读模型的方程式,熟悉使用的符号。在GAMSGP.GMS中只有一个模拟:劳动禀赋增加了10%,资本禀赋保持不变。

运行GAMS,并检查结果的变化趋势是否符合预期。为了与GEMPACK结果进行比较,请注意这两种商品的价格和产出,以及生产要素的价格的百分比变化,这些变化将在gamsgp.lst文件末尾报告。特别检查以下结果:

图片来源:"Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson






用GEMPACK求解模型

1. 启动WinGEM并查看GAMSGP.TAB

https://www.copsmodels.com/gpeidl.htm下载GEMPACK试用版。双击WinGEM图标,显示主菜单,如下图所示:


图片来源:"Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson

a.      设置工作目录

首先要做的是告诉WinGEM要输入的文件存储在哪个目录中,应该在哪个目录中写入输出文件。这些目录分别称为默认输入目录和工作目录。通常这两个是相同的。对于这里的GAMSGP模型示例,输入和工作目录需要是安装文件的C:\ GAMSGP。要设置此项,请在主菜单中首先单击:
File
这将生成一个下拉菜单。在下拉菜单中,单击菜单项
Change both default directories...
我们往下用这样的符号表达上面的进程
File | Change both default directories...
在出现的文件选择框中,选择驱动器C:(或包含目录GAMSGP的驱动器)。然后双击C:\(这将位于所示目录列表的顶部),然后双击子目录GAMSGP。[确保选择框上方蓝色显示的目录名更改为C:\ GAMSGP]单击“OK”按钮。

b.     在WinGEM中编辑文本文件

我们强烈建议在使用GEMPACK TAB文件时使用TABmate作为编辑器,操作进程:
Options | Change Editor | Use TABmate


2.用GEMPACK求解--用于模拟的GEMPACK文件(TAB, Data, Command files)

在使用GEMPACK运行模拟之前,我们建议查看用于运行模拟的三个GEMPACK文件。这些是:
· TAB文件GAMSGP.TAB(这包含了模型的理论,很像GAMSGP.GMS),
· 数据文件GAMSGP.DAT(包含模型的输入输出数据),
·命令文件GAMSGP.CMF(包含闭合和冲击)。

a. 建模TAB文件GAMSGP.TAB

操作进程:
File | Edit file…
从WinGEM的文件菜单中选择文件GAMSGP.TAB
TABmate使用不同的颜色和字体来区分TABLO语法的不同部分。

顶部蓝色背景的部分是GAMS文件GAMSGP.GMS的开始,它使用了强注释标记,即![[! 开始的时候!]]! 在评论的最后。

在GAMSGP.TAB中,我们保留了来自GAMSGP.GMS的所有语句和注释,并用强注释标记将它们注释掉。通过这样做,我们将能够很容易地看到如何将GAMS文件的不同部分翻译成TABLO语言。

让我们往下看这个文件,注意注释掉的GAMS部分(它们都有蓝色背景),然后简单地看一下相应的GEMPACK部分。我们可能会发现再次查看第2章开头的语言结构对比表格很有用。

下面是一些值得注意的地方:
o   注意GEMPACK使用感叹号!开始和结束评论(有时称为“弱”评论,以区别于上述“强”评论)。

o 我们可以看到第二章讲的默认语句(Default)。这表明,没有限定符声明的所有变量将是非线性变量,类似的方程将是非线性方程,所有系数将是参数。尽管没有默认的语句来指示这一点,但是所有相关的线性变量都将报告百分比变化(而不是绝对变化)。

o 在离文件开头不远的地方,我们将看到GEMPACK定义的两个集合SECT和FAC 。GEMPACK不需要像GAMS一样的ALIAS语句–请参阅第二章。

o   接下来,我们可以看到对比GAMS和GEMPACK定义变量的语句。无论何时在TAB文件中声明非线性变量,GEMPACK都会提供相关的线性变量,其名称以“p”开头。例如,线性变量p_Y表示非线性变量Y的百分比变化。

o   再往下一点,我们可以通过TABLEs看到数据在GAMS文件中的位置。在GEMPACK中,有一个File语句后跟三个READ语句。在GEMPACK中,GAMSGP模型的数据保存在数据文件GAMSGP.DAT中,而不是TAB文件中。

o   接下来是设置各种变量(包括价格和数量)初始值的各种公式。关于初始价格的GEMPACK部分与GAMS中的相应部分非常相似。

o   GAMS文件中的公式和表达一致的相关方程是分开定义的,而在GEMPACK版本中可以合并为“公式和方程”(“Formula & Equation”)定义。例如,Comin方程。

o   对于定义非线性方程,GEMPACK与GAMS非常相似。GAMS首先(在“方程式”部分)通过声明不同方程式的名称及其索引(例如“Cons_dem(i)”)来宣布所有方程式,然后再逐一列出。在GEMPACK中,公式名、索引和实际公式都在同一个公式语句中。

o   GEMPACK案例中的定义计价标准的等式比较特别,请阅读GAMSGP.TAB中关于它的评论。

o   在GAMS中有一些部分在GEMPACK中没有直接对应项,包括MODEL statement语句、起始值、下限、固定(即外生)变量、冲击、solve statement语句和用于报告结果的部分。在GEMPACK中,起始值由公式命令Formulas自动声明,外部变量和冲击在命令文件GAMSGP.CMF中,关于如何求解的说明(哪种方法,多少步骤)在命令文件中,由于所有百分比变化都是自动报告的,因此没有报告部分。

b.     用ViewHAR看数据文件GAMSGP.DAT

投入产出数据包含在数据文件GAMSGP.DAT中。这是一个特殊的GEMPACK二进制文件,称为头数组文件,因此不能只在文本编辑器中查看它。相反,我们必须使用其中一个程序来读取头数组文件,称为ViewHAR。从WinGEM主菜单中选择:

HA Files | View VIEWHAR
将出现ViewHAR窗口。点击File | Open... 然后选择GAMSGP.DAT文件。这将打开文件并显示其内容。每一行对应一个不同的数据矩阵或列。查看标题名称下的列,看看这些数据矩阵或列是什么。双击名称查看数据矩阵或列的数据内容:

图片来源:"Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson

将这些数字与GAMSGP.GMS中TABLEs所录入的模型的投入产出数据进行比较:

图片来源:"Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson

c. 命令文件GAMSGP.CMF(包含闭合和冲击)

命令文件GAMSGP.CMF指定了闭合(即哪些变量是外生的,哪些是内生的)和冲击。要查看此文件,从WinGEM主菜单中选择:
File | Edit file…
然后打开文件GAMSGP.CMF。

o   只有一个变量被指定为外生变量,即变量p_XFAC。这不完全是TAB文件中变量的名称。在TAB文件中,它被称为XFAC。这里,前面的“p”表示它是相关的线性变量(表示XFAC中的百分比变化)。当一个非线性变量(如XFAC)被声明时,TABLO会自动定义一个相关的线性化变量,该变量的前面有一个“p”。请注意,GEMPACK只允许我们引用命令文件中的线性化变量(而不是相应的非线性变量)。

o   定义冲击时,再次使用了关联的线性名称。

o   GEMSIM会将结果(百分比变化)载出到哪个文件?惯例是,除非另有说明,结果文件的名称与命令文件的名称相同,但使用标准解决方案文件后缀.SL4。所以这里的解决方案文件将被称为GAMSGP.SL4。

o   更新的数据文件的名称由以下命令定义:
Updated file iodate = <cmf>.upd
这里<cmf>表示命令文件的名称(后缀.cmf除外)。因此,更新后的数据文件将被称为GAMSGP.UPD。

o   这个命令文件如何知道附加到GAMSGP.TAB中的方程式(而不是附加到另一个TAB文件中的其他模型)?这是由以下命令指出的:
Auxiliary files = gamsgp ;

现在我们已经快速查看了TAB文件、数据和命令文件,在下一节我们将使用GEMPACK执行与上面使用GAMS执行的相同模型进行模拟。


3. 用GEMPACK求解--模拟

模拟分三步:
·       用TABLO Implement实现模型
·       用GEMSIM Solve解模型方程
·       用ViewSOL看结果

a. 用TABLO Implement实现模型

操作进程:
o   Simulation | TABLO Implement…
o   单击“Select”按钮以选择TABLO输入文件GAMSGP.TAB
o   在TABLO窗口的菜单中,选择“Options” 然后在这个菜单里选择TABLO Options...
o   将出现一个新的TABLO选项窗口,为TABLO提供许多不同的特殊选项。暂时忽略所有选项,除了左上角的两个选项

o   其中一个按钮上有一个黑点。点击第一个选项PGS,因为我们希望创建GEMSIM辅助文件。然后单击Ok按钮返回TABLO窗口。

o   我们所说的“实现”是指将TABLO输入文件转换成二进制计算机文件,在下一步的仿真程序GEMSIM中使用这些文件。这些文件被称为辅助文件(或有时称为GEMSIM语句和表格文件),在这种情况下,被称为GAMSGP.GSS和GAMSGP.GST。

o   单击运行按钮。程序TABLO在DOS框中运行,完成后返回TABLO窗口,其中包含创建的文件名:信息文件GAMSGP.INF和日志(Log)文件。通过单击这两个文件旁边的“View”按钮查看这两个文件。

o   信息文件提供有关TABLO输入文件的信息,例如程序TABLO在检查TABLO输入文件时是否发现语法或语义错误。在文件中搜索 “%%” 以查看是否有任何错误。在文件中搜索“syntax error”,查看有多少语法错误和语义问题。转到文件的末尾,看看GEMSIM在这个TABLO运行产生的辅助文件中能够执行什么操作。

o   查看完这两个文件后,单击“TABLO”窗口底部的“Go to GEMSIM”按钮,进入运行模拟的下一步:用GEMSIM Solve解模型方程

b. 用GEMSIM Solve解模型方程

操作进程:
o   点击“Go To GEMSIM”按钮将进入GEMSIM窗口。(或者,也可以从WinGEM的主菜单中选择Simulation | GEMSIM Solve来启动此窗口)
o   首先选择名为GAMSGP.CMF的命令文件。因为命令文件是文本文件。在文本编辑器中单击“编辑”按钮查看此命令文件:如何指定闭合?使用什么冲击?此模型使用的数据文件是什么?在多步解决方案中使用了多少步骤?
o   File | Exit退出到GEMSIM窗口。
o   单击Run以使用命令文件GAMSGP.CMF运行GEMSIM。如果有错误,请查看日志文件,并尝试更正错误。
o   有两种查看解决方案结果的方法。最常见的是使用ViewSOL(Windows解决方案查看器)查看它们,详细请参看下一节。

c. 用ViewSOL看结果

单击Go to ViewSOL按钮将运行ViewSOL并打开在前面的示例中创建的解决方案文件GAMSGP.SL4。您将看到目录页(Contents),其中列出了模型的许多变量。ViewSOL对此内容列表有三种稍微不同的格式。选择格式(Format),从ViewSOL的主菜单中单击Arrange vectors by name(在面板标题的Vector 选项中);然后单击Ok,将返回到Contents列表。要查看其中一个变量的结果,只需双击内容列表中的相应行。

o   首先双击p_XCOM行查看此变量的结果(两种商品的需求)。选择3个小数位(请参阅当前ViewSOL窗口顶行的第三个下拉列表框)。我们看到如下:


在s1行中,您可以看到百分比变化结果(5.885%)、模拟前级别值(8.000)、模拟后级别值(8.471)和变化(0.471)。

o   然后单击“Contents”返回到内容列表,双击p_XFAC,可见:


所有的数字都是红色的,用来提醒我们在这个模拟中,这个变量p_XFAC(要素禀赋的百分比变化)的两个分量都是外生的。

o   双击p_XC(i, j),我们可以看到:


在第二个下拉框中,我们应该看到“1 gamsgp”。这表示我们看到的是线性化的模拟结果。由于此变量p_XC是矩阵变量,因此不能同时看到模拟前和模拟后的结果。要查看模拟前的结果,请单击第二个下拉列表框(显示“1 gamsgp”)并选择第二个选项(“2 pre gamsgp”)。然后我们将看到预模拟前的结果。查看完这些结果后,单击“Contents”返回内容列表。

d. 查看更新的数据

我们可以通过单击GEMSIM窗口上标记为“View Input/Output Files”的按钮来查看更新的数据(即反映新的生产要素禀赋的新数据)。选择第二个选项updated iodata。ViewHAR将运行并加载更新的数据。
命令文件里的语言:updated file iodata = <cmf>.upd
表示运行模拟时,软件会生成更新数据文件GAMSGP.UPD。这个文件包含了冲击(在本例中,是劳动力供应的增加)后的数据。这些数据代表了冲击后的经济状况,这就是为什么更新后的数据有时被称为模拟后数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册" title="注册帐号">立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们
邮箱:contactus@econmod.cn
电话: +86 18310935320
公司地址:北京中关村E世界C座五层

小黑屋|量化经济  

GMT+8, 2024-5-17 10:16 , Processed in 0.122063 second(s), 31 queries .

快速回复 返回顶部 返回列表