GEMPACK与GAM语言的相互转换 (第一章:介绍)
本推文是对 "Introduction to GEMPACK for GAMS Users" by Michael Kohlhaas and Ken Pearson( https://www.copsmodels.com/ftp/gamsgp.pdf)第一章的部分翻译和总结。它适用于对GEMPACK或GAMS已经有一定基础的研究员。GEMPACK和GAMS均使用类似于代数的编程语言。因此,一旦研究者能够区别两种软件的编程格式和思路,便容易在两个软件平台上对经济模型相互转化。
温馨提示:
1. GAMS的单软件与GEMPACK多软件套件
GAMS: 在一个界面(GAMS或GAMS Studio)上进行导入数据、数据检查、编写主程序、模拟和查看模拟结果。模拟结果也可以导出后由其他软件分析。
GEMPACK: a. TABmat:用TABLO语言编写主程序(模型的架构)的平台 b. ViewHAR and MODHAR:建立和检查数据库 c. GEMSIM:建立数据和模型后进行模拟指令 d. ViewSOL and GEMPIE:查看模拟结果 e. AnalyseGE:分析模拟结果
2. MODEL.GMS和MODEL.TAB的编程格式
一个由文件MODEL.GMS指定的简单GAMS模型包含: a. 模型的架构 b. 初始数据 c. 一个或多个模拟的指令 d. 用公式和DISPLAY命令计算和报告结果(例如,百分比变化)
在GEMPACK中,MODEL.GMS的内容对应三个不同的文件: a. MODEL.TAB(TABLO输入文件):模型的架构 b. MODEL.DAT(数据文件):起始数据 c. MODEL.CMF(命令文件):单个模拟的指令 GAMS与GEMPACK的语法相近,详细可参见原文中的对比举例
3. 非线性与线性化方程和变量
GAMS根据冲击信息和趋近新平衡点的猜测值,求解非线性变量和方程获得新的均衡值并根据先前的均衡值计算内生变量的变化。
当GEMPACK求解一个新的平衡点时,它从一个初始平衡点开始,并使用基础曲线的“曲率”信息来计算冲击效应。因此,GEMPACK不是直接确定新的均衡值,而是根据先前的均衡计算内生变量的变化。然后将这些变化加到这些变量的初始值上,就可以找到新的平衡值。由于GEMPACK将非线性与线性化变量和方程区分开来,必须相应地声明各个变量。一个(百分比)变化方程可以通过微分从一个非线性方程导出。MODEL.TAB中的变量和方程可以是非线性变量和方程,但更常见的是线性化版本。详细可参见原文中的对比举例。
4. 初始数据
GAMS的起始数据(如SAM)通常包含在模型代码中。
在GEMPACK中,通常有一个单独的数据文件MODEL.DAT包含此数据。MODEL.DAT可以是文本文件或称为头数组文件的二进制文件。例如: READ DVFAC FROM FILE basedata Header “abcd” 在MODEL.TAB中,用于将数据文件上的数字与模型中的变量DVFAC相关联。
在GAMS和GEMPACK中,起始数据必须达到经济体的一般均衡。GAMS在进行变量冲击之前对初始数据进行检查,看数据是否是经济体的一般均衡的求解。在GEMPACK中,应该单独检查数据是否达到经济体的一般均衡,这通常是由一段特殊的代码执行的,该代码可能不是MODEL.TAB的一部分。
5. 指定外生/内生变量和冲击
在MODEL.GMS中,外生变量被指定为参数,或者通过.FX语句设立固定变量。例如: X1.FX = 10; Parameter X2 /20/;
在GEMPACK中,模拟的外生变量在命令文件的列表中指定: Exogenous X1, X2;
在GAMS中,可以通过在两个模型运行之间更改参数或固定变量的值来实现冲击。在GEMPACK中,冲击必须应用于外生变量,而不是参数。外生变量值的变化是通过命令文件中的shock语句给出的。例如: Shock x1 = 10; 意味着与百分比变化变量x1相关联的级别值的模拟后值比其模拟前值高10%。
6. 进行模拟
在GAMS中求解模型时,运行GAMS.EXE程序。该程序按编程顺序对模型的结构描述进行处理,然后求解模型并报告结果。在GEMPACK中,需要运行两个程序TABLO.EXE和GEMSIM.EXE。首先,TABLO在MODEL.TAB中处理模型的结构描述,并编写计算机版本。然后运行GEMSIM进行仿真。GEMSIM读取: GEMSIM将模拟结果写入解决方案文件(比如MODEL.SL4)。SL4是一个二进制文件,包含模型中每个变量的更改或百分比更改。它还包含部分或全部变量的模拟前后值。GEMSIM还编写更新数据文件MODEL.UPD。此文件包含MODEL.DAT文件中包含的所有变量的模拟后值。
7. 求解方法
GAMS提供了多种不同的解决方法。用SOLVE语句指定要使用的方法。
GEMPACK为模型求解提供了一种基本方法。这依赖于模型的线性化方程组和初始解。将模型作为初值问题提交给GEMPACK求解器。GEMPACK为解决这类问题提供了Gragg和Euler的方法。它也能够产生与非线性方程一样精确的求解。
8. 查看和分析模拟结果
在GAMS中,结果显示在GAMS生成的列表文件MODEL.LST中。它包含模型中所有变量的模拟后值。此外,还可以通过MODEL.GMS中的DISPLAY语句包含其他参数。例如,如果希望显示百分比变化,可以用以下语句: P_X1 = (X1/X1_BASE – 1) * 100; DISPLAY P_X1;
在GEMPACK中有两个结果,分别是model.SL4中模型变量的变化或百分比变化和MODEL.UPD中更新的变量值。对于模型的所有(内生和外生)变量,GEMPACK将自动计算更改或百分比更改,不需要在MODEL.TAB中使用任何语句。GEMPACK提供windows程序ViewSOL,用于在MODEL.SL4中查看结果。原始数据文件MODEL.DAT可以是文本文件或二进制(头数组)文件。更新的数据文件MODEL.UPD具有相同的格式。如果这是头数组文件,则可以使用windows程序ViewHAR查看更新的数据。如果更新的数据是文本文件,则可以在任选的文本编辑器中查看更新的数据。
GEMPACK还提供了结果分析软件。AnalyseGE允许用户访问模型方程、数据、结果和仿真结果。建模者可以点击任何方程或公式,要求软件将这些项分成不同的自然部分,并给出每个项的数值。用线性化方程在结果分析上有明显的优势。
|