CGE模型概述
一、CGE模型的定义与起源
CGE模型即“可计算一般均衡(Computable General Equilibrium)模型”。世界上第一个CGE模型是由约翰森(Johansen)在1960年提出的。不过在此之后,CGE模型的发展有一段时间处于停滞状态,直到70年代才有了新的进展。
二、CGE模型的结构与原理
- 方程描述
- CGE模型是用一组方程来描述供给、需求以及市场关系的模型。在这个模型中,生产者的行为是一个重要组成部分。生产者力求在生产条件和资源约束之下实现其利润优化,这是一种次优解(Sub – optimal)。与生产者相关的方程分为两类,一类是描述性方程,像生产者的生产过程、中间生产过程等;另一类是优化条件方程。
- 在许多CGE模型中,生产者行为可以用科布 – 道格拉斯(Cobb – Douglas)或常替代弹性(CES)方程来描述。例如,在描述为了优化出口产品利润,把国内产品在国内市场和出口之间进行优化分配的过程时,通常按照常弹性转换方程(CET);而用阿明顿(Armington)方程来描述为了实现最低成本把进口产品与国内产品进行优化组合的过程。
- 市场均衡及预算均衡
- 包括国际市场均衡等多方面。在CGE模型中,外贸出超表现为外国资本流入,外贸入超表现为本国资本流出。
- CGE模型的成功之处在于它在经济的各个组成部分之间建立起了数量联系,从而能够考察来自经济某一部分的扰动对经济另一部分的影响。与投入产出模型相比,投入产出模型强调的是产业的投入产出联系或关联效应,而CGE模型则在整个经济约束范围内把各经济部门和产业联系起来,这些约束包括政府预算赤字规模的约束、贸易逆差的约束、劳动和资本以及土地的约束,还有出于环境考虑(如空气和水的质量)的约束等1。
- 模型类型
- CGE模型有静态模型和动态模型之分,还有国家模型和区域模型等不同类型。
- 不同类型的CGE模型在分析不同经济问题时各有优势。例如,静态CGE模型可以用于分析某一特定时刻的经济均衡状态;动态CGE模型则能更好地反映经济随时间的变化过程,如在分析政策对经济的长期影响时就更为适用。
三、CGE模型的局限性
- 政策影响分析的局限性
- 在分析政策变动对福利影响方面仅获得了部分成功,因为它假定了政策变化不影响劳动力的非自愿失业和资本的水平、企业间竞争的形式和技术进步率。
- 预测能力的局限性
- CGE模型本身并不能提供非常有价值的预测工具。
- 数据要求的复杂性
- CGE模型需要的数据比投入产出分析要复杂得多且难以找到,因为它不仅要分析产业或工业,还要分析个人、政府决策等,这是投入产出分析所不能涵盖的内容1。
GAMS软件基本介绍
一、GAMS的定义与功能
GAMS全称The General Algebraic Modeling System,是一款数学规划和优化的高级建模系统,是商业软件,主要用于解决大规模的线性、非线性、整数和动态优化问题7。
二、GAMS的特点
- 建模语言
- GAMS提供一种基于代数(algebriac)的建模语言,允许用户以自然的数学表达式定义模型。这种语言简洁明了,便于理解和编写复杂的优化问题。例如,用户可以很方便地定义变量、参数、函数和方程等数学元素,使得模型能够适应各种复杂的数学结构。
- 数据管理
- 内置了数据处理功能,支持用户通过命令读取、操作和输出数据,便于模型的预处理和后处理。它可以处理多种数据格式,如能够与Excel、CSV、MATLAB等进行数据交换,方便用户进行数据的导入和导出,这有助于在不同的软件环境和数据来源之间进行整合。
- 求解器接口
- 与多种优化求解器无缝集成,如Cplex、GUROBI、CONOPT等。这些求解器能够自动根据模型的类型(如线性规划、非线性规划、整数规划等)选择合适的求解算法,从而解决不同类型的优化问题。这一特点使得GAMS在处理复杂多样的优化任务时具有很强的适应性和灵活性。
- 模型库
- 拥有丰富的模型库,包含了各种经典和实际应用的模型实例,可供用户学习和参考。这些实例涵盖了多个领域,如经济规划、能源、运输、工程、环境科学等,为用户在构建自己的模型时提供了很好的范例和思路借鉴。
- 图形界面
- 虽然GAMS主要通过文本编辑器进行编程,但它也提供了GAMS Development Corp. (GAMSStudio)这样的集成开发环境,以提升用户体验。GAMSStudio为用户提供了一个相对友好的界面,方便用户进行代码的编写、编辑、调试和运行等操作,特别是对于初学者来说,可以降低学习门槛和提高开发效率。
三、GAMS的应用领域
- 经济规划
- 在宏观经济分析、资源分配和投资决策中,GAMS可以帮助制定优化策略。例如,构建经济模型来分析不同政策下的资源分配情况,或者预测宏观经济指标在各种假设条件下的变化趋势。
- 能源系统
- 用于电力市场模拟、能源供需平衡分析和节能减排策略制定等。可以通过建立能源相关的模型,考虑能源的生产、消费、传输等环节中的各种约束条件,从而找到最优的能源配置方案,以实现能源系统的高效运行和可持续发展目标。
- 交通规划
- 在优化交通网络、公共交通调度和物流配送路径等方面,GAMS提供了解决方案。通过构建交通流量模型,考虑道路容量、运输成本、出行需求等因素,来优化交通网络的布局或者公共交通的运营方案,提高交通运输的效率和效益。
- 环境科学
- 能够模拟气候变化、污染物扩散和资源回收利用等。例如,建立模型来分析不同减排措施对环境质量的影响,或者研究资源回收利用的最优策略,以实现环境保护和可持续发展的目标。
- 工业工程
- 在生产调度、库存管理和质量控制等问题上,GAMS能有效提升决策效率。可以根据生产流程、设备能力、原材料供应等条件建立生产模型,优化生产计划和库存管理策略,同时考虑质量控制因素,提高工业生产的整体效益和产品质量。
- 教育研究
- 在数学建模竞赛和科研项目中,GAMS是常用的工具之一,有助于学生和研究人员快速构建和测试模型。它提供了一个统一的建模和求解平台,使得研究人员可以专注于模型的构建和问题的分析,而不必过多关注底层的计算实现细节8。
用GAMS求解CGE模型的方法
一、模型构建
- 数据准备
- 首先要收集CGE模型所需的数据,这些数据包括但不限于经济部门的投入产出数据、生产要素数据(如劳动力、资本等)、消费数据、价格数据等。由于CGE模型的数据要求比较复杂,可能需要从多个数据源获取数据,如统计年鉴、行业报告等。然后,要将这些数据按照GAMS能够识别和处理的格式进行整理,例如将数据整理成表格形式或者参数形式,以便在GAMS模型中使用。
- 方程设定
- 根据CGE模型的原理,在GAMS中设定相应的方程。这包括设定生产函数方程(如前面提到的科布 – 道格拉斯生产函数或常替代弹性生产函数)、需求函数方程、市场均衡方程(如产品市场均衡、劳动力市场均衡、资本市场均衡等)以及其他相关的经济关系方程。在设定这些方程时,要注意使用GAMS的语法规则,将方程中的变量、参数等正确地定义和表示。
- 模型定义
- 在GAMS中,使用定义好的方程和变量构建CGE模型。这包括创建模型对象,将方程添加到模型中,并指定目标函数(如果有)。例如,如果要分析在一定资源约束下的经济产出最大化问题,那么可以将经济总产出设定为目标函数,然后在模型中包含各种生产、需求和均衡方程作为约束条件。
二、求解过程
- 选择求解器
- GAMS与多种求解器集成,如Cplex、GUROBI、CONOPT等。根据CGE模型的特点(如线性或非线性、整数规划等)选择合适的求解器。例如,如果CGE模型是一个线性规划问题,那么可以选择Cplex求解器;如果是一个非线性规划问题,则可能选择GUROBI或其他适合非线性问题的求解器。
- 求解模型
- 一旦选择了合适的求解器,就可以在GAMS中运行求解命令来求解CGE模型。在求解过程中,GAMS会将模型传递给选定的求解器,求解器会根据模型的方程和约束条件进行计算,寻找满足所有条件的最优解。这个过程可能需要一定的时间,具体取决于模型的规模和复杂程度。在求解过程中,GAMS会提供一些反馈信息,如求解的进度、是否遇到错误等。如果遇到错误,需要根据错误信息进行调试和修正。
GAMS求解CGE模型的实例与教程
一、实例分析
- 简单的静态CGE模型实例
- 假设构建一个简单的两部门(如农业部门和工业部门)静态CGE模型。首先,定义两个部门的生产函数,例如采用科布 – 道格拉斯生产函数,分别表示为:
- 农业部门:YA=AALAαAKAβAYA=AALAαAKAβA,其中YAYA是农业部门的产出,AAAA是农业部门的技术水平参数,LALA是农业部门的劳动力投入,KAKA是农业部门的资本投入,αAαA和βAβA是相应的生产弹性参数。
- 工业部门:YI=AILIαIKIβIYI=AILIαIKIβI,类似地,YIYI、AIAI、LILI、KIKI、αIαI和βIβI分别是工业部门的产出、技术水平参数、劳动力投入、资本投入和生产弹性参数。
- 然后,设定需求函数。假设消费者的效用函数为柯布 – 道格拉斯形式:U=CAγCI1−γU=CAγCI1−γ,其中CACA和CICI分别是对农业产品和工业产品的消费,γγ是效用函数的参数,表示消费者对农业产品的偏好程度。根据效用最大化原则,可以推导出对农业产品和工业产品的需求函数。
- 接着,设定市场均衡条件。包括劳动力市场均衡(LA+LI=LLA+LI=L,其中LL是总的劳动力供给)、资本市场均衡(KA+KI=KKA+KI=K,其中KK是总的资本供给)和产品市场均衡(YA=CA+XAYA=CA+XA,YI=CI+XIYI=CI+XI,其中XAXA和XIXI分别是农业产品和工业产品的净出口)。
- 在GAMS中,将这些方程和变量按照GAMS的语法进行定义和建模。例如,定义变量:
Positive Variables YA, YI, CA, CI, LA, LI, KA, KI, XA, XI;
表示定义正的变量,分别对应农业和工业部门的产出、消费、劳动力投入、资本投入和净出口。- 定义参数:
Parameters AA, AI, alphaA, alphaI, betaA, betaI, gamma, L, K;
用来表示各个部门的技术水平、生产弹性、效用函数参数以及总的劳动力和资本供给。- 设定方程:
- 如生产函数方程可以写成:
Equation prodA, prodi;
prodA.. YA =E= AA*LA^alphaA*KA^betaA;
prodi.. YI =E= AI*LI^alphaI*KI^betaI;
- 需求函数方程和市场均衡方程也按照类似的方式进行定义。
- 最后,构建模型:
Model simpleCGE /all/;
表示将所有定义的方程包含在这个名为simpleCGE的模型中。- 选择求解器(如Cplex)并求解模型:
Solve simpleCGE using CPLEX;
- 假设构建一个简单的两部门(如农业部门和工业部门)静态CGE模型。首先,定义两个部门的生产函数,例如采用科布 – 道格拉斯生产函数,分别表示为:
- 动态CGE模型实例(以分析经济增长为例)
- 考虑一个包含资本积累和技术进步的动态CGE模型。在这个模型中,资本存量的变化方程为:Kt+1=Kt(1−δ)+ItKt+1=Kt(1−δ)+It,其中KtKt是时期tt的资本存量,δδ是资本折旧率,ItIt是时期tt的投资。
- 生产函数假设为:Yt=AtKtαLtβYt=AtKtαLtβ,其中AtAt是时期tt的技术水平,并且假设技术水平按照At+1=At(1+g)At+1=At(1+g)的方式增长,其中gg是技术进步率。
- 需求方面,假设消费取决于可支配收入,并且储蓄率为ss,则投资It=(1−s)YtIt=(1−s)Yt。
- 在GAMS中构建这个动态CGE模型时,除了定义上述方程和变量外,还需要考虑时间维度的处理。例如,可以使用集合来表示不同的时期:
Set t /t1*t10/;
表示定义了从t1t1到t10t10共10个时期。- 变量和参数的定义需要考虑时间维度,如:
Variables Y(t), K(t), I(t), A(t), L(t);
表示这些变量在不同的时期tt有不同的值。Parameters alpha, beta, delta, g, s;
定义模型中的参数。- 方程的定义也要体现时间的动态性,例如资本存量的变化方程:
Equation capitalAccumulation(t);
capitalAccumulation(t)$(ord(t)>1).. K(ord(t)) =E= K(ord(t)-1)*(1 - delta)+I(ord(t)-1);
这里使用了ord(t)ord(t)函数来获取时期tt的顺序数。- 生产函数方程、需求函数方程等也类似地进行定义,然后构建模型并选择合适的求解器(如适用于动态规划问题的求解器)进行求解。
二、教程资源
- 课程学习
- 可以参加一些专门的GAMS (CGE)模型与案例应用研讨会。这些研讨会通常由专业的讲师(如中国社会科学院的专家)主讲,课程内容包括GAMS基本操作方法和高级语法及实用功能到CGE模型和社会可算矩阵(SAM)构建方法和GAMS编程等。通过理论知识 + 案例示范 + 练习的方式,从应用案例入手讲解知识点,让学员可以理解CGE模型使用的数据库、CGE模型中使用的行为关系的属性、制定适当的CGE政策实验以及分析简单的CGE模型产生的结果。
- 参考书籍与文档
- GAMS官方提供了详细的用户手册,其中包含了GAMS的语法规则、各种功能的使用方法以及示例代码等内容。此外,还有一些专门介绍CGE模型构建和GAMS求解的书籍,这些书籍可以提供更深入的理论讲解和更多的实例分析。例如,在一些关于经济建模或者应用经济学的书籍中,可能会有专门的章节介绍CGE模型在GAMS中的实现。同时,一些学术论文在研究具体经济问题时,如果使用了GAMS求解CGE模型,也可以作为参考,学习他们的模型构建思路、方程设定方法以及求解过程中的技巧等。
GAMS求解CGE模型的常见问题与解决办法
一、求解结果不完整或部分结果缺失
- 问题描述
- 例如在一个多部门的CGE模型中,GAMS只显示了部分部门的结果,而其他部门的结果缺失。就像在一个七部门的CGE模型中,GAMS只有出现前三个部门结果,其余四个跳过了的情况。
- 可能原因与解决办法
- 代码逻辑错误:检查模型的代码逻辑,可能是在方程设定或者变量定义时,对于某些部门的处理存在错误。例如,某些方程可能没有正确地涵盖所有部门,或者在计算过程中对部分部门的变量进行了错误的初始化或约束。仔细检查每个部门相关的方程和变量定义,确保逻辑的一致性。
- 数据问题:数据的完整性和准确性可能影响求解结果。可能某些部门的数据存在缺失或者错误,导致求解过程中无法得到这些部门的结果。检查数据来源,确保每个部门的数据都准确无误地输入到模型中。如果数据存在缺失,可以尝试采用合理