本推文是对 "Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson 在GAMS中,模型文件是GAMSGP.GMS;在GEMPACK中,模型文件是GAMSGP.TAB。两个文件构建的经济模型完全一样。 模型概述
本章实例描述一个传统新古典一般均衡封闭经济体,包含两部门和两生产要素。两种商品可以是用作中间投入或最终消费。企业生产根据Cobb Douglas函数并最大化利润。家庭拥有劳动和资本禀赋,并消费这两种商品。它在预算约束下最大化Cobb Douglas效用函数。没有政府。根据Walras定律,在一般均衡下,可以删除家庭预算约束,或者任何一个市场清算条件等式。选择商品1价格作为基准(或者,可以选择任何生产要素的价格)。
初始数据包含投入产出表,该表包含生产要素劳动力和资本,以及中间投入的价值。数据库是平衡的,即在初始情况下,所有市场都被清空。Cobb-Douglas函数的参数都可以从初始数据推算出来。该模型将求解内生变量,即生产要素和商品价格以及供给和需求量。模拟的冲击是劳动力禀赋增加10%。这会导致工资相对于资本回报率的下降,和劳动密集型商品2的相对价格的下降。
用GAMS求解模型
运行GAMS,并检查结果的变化趋势是否符合预期。为了与GEMPACK结果进行比较,请注意这两种商品的价格和产出,以及生产要素的价格的百分比变化,这些变化将在gamsgp.lst文件末尾报告。特别检查以下结果:
图片来源:"Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson
用GEMPACK求解模型
1. 启动WinGEM并查看GAMSGP.TAB
图片来源:"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。这个文件包含了冲击(在本例中,是劳动力供应的增加)后的数据。这些数据代表了冲击后的经济状况,这就是为什么更新后的数据有时被称为模拟后数据。
|