You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GAMS中用单个方程表达多部门差异化生产函数?

在GAMS中用单个方程实现多部门差异化生产函数

完全不用逐个部门写方程,利用GAMS的集合和参数标记就能搞定,哪怕部门加到10个也一样轻松。具体做法如下:

核心思路

给需要使用水资源的部门做个标记,在通用生产函数里加入水资源项,但通过参数控制非农业部门的水资源项指数为0——任何数的0次方都是1,相当于这一项在非农业部门的生产函数里不存在。

具体代码示例

1. 定义集合

先把所有部门放进一个集合里,后续新增部门直接加元素就行:

Set SECTORS / AGR, IND, SRV /;  // 可以直接扩展成更多部门,比如加 MAN, CON 等

2. 定义标记参数

创建一个参数useWater,标记哪些部门需要用水:

Parameter useWater(SECTORS) / AGR 1, IND 0, SRV 0 /;
// 新增部门时,需要用水的赋值1,不用的赋值0

3. 定义其他参数和变量

把生产函数里的弹性系数、要素变量都按部门维度定义:

// 生产弹性参数
Parameter alpha(SECTORS), beta(SECTORS), gamma(SECTORS);
// 给参数赋值(示例)
alpha(SECTORS) = 0.3;
beta(SECTORS) = 0.6;
gamma(AGR) = 0.1;  // 只有农业需要给gamma赋值,其他部门可以留空或设0

// 要素变量和产出变量
Variable K(SECTORS), L(SECTORS), W(SECTORS), Q(SECTORS);

4. 编写通用生产方程

只需要写一个方程,通过useWater控制水资源项是否生效:

Equation prodFunc(SECTORS);
prodFunc(SECTORS)..
    Q(SECTORS) =E= (K(SECTORS)**alpha(SECTORS)) * (L(SECTORS)**beta(SECTORS)) * (W(SECTORS)**(gamma(SECTORS)*useWater(SECTORS)));
  • 对农业部门(AGR):useWater=1,所以水资源项是W(AGR)**gamma(AGR),符合你的生产函数
  • 对工业、服务业:useWater=0,水资源项变成W(...)^0=1,相当于这一项被忽略,剩下的就是资本和劳动力的乘积,和你要的生产函数一致

5. 模型求解(可选)

如果需要求解的话,简单定义模型并求解:

Model production / prodFunc /;
Solve production using LP maximizing Q('AGR');  // 示例求解,可根据需求调整

扩展说明

如果后续新增部门,只需要:

  • 在SECTORS集合里加部门名称
  • 在useWater里给新部门赋值1或0
  • 给对应部门的alpha、beta、gamma赋值(需要用水的部门才给gamma赋值)

这样不管部门数量多少,都不用修改方程,只需要维护集合和参数就行,非常高效。

内容的提问来源于stack exchange,提问作者pringlez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:32:05