python - 在 Python 的 GEKKO 中实现宏观经济模型
问题描述
这个问题有点集中在经济优化上,有点集中在 python 实现上,但也许社区中的一些人能够提供帮助。我正在尝试在 Python 的 GEKKO 平台中实现标准的连续时间宏观经济储蓄模型,但无法解决。我采用了 GEKKO文档中提供的经济示例,并适应了基本的储蓄决策模型,但事情并不完全奏效。该模型最大化来自消费的效用总和,其中消费 + 投资 = 产出。例如最大积分(U(yi))。输出 y = k^ALPHA。投资 = dk/dt+delta*k。
谁能告诉我为什么我的代码无法解决?该平台甚至能够解决这样的模型吗?我还没有看到很多经济学家使用这个平台来解决模型的例子,但不确定这是不是因为平台不适合或其他原因。这是一个很棒的平台,如果可能的话,它真的很想让它发挥作用。先感谢您。
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
m = GEKKO()
n=501
m.time = np.linspace(0,10,n)
ALPHA,DELTA = 0.333,0.99
i = m.MV(value=0)
i.STATUS = 1
i.DCOST = 0
x = m.Var(value=20,lb=0) # fish population
m.Equation(x.dt() == i-DELTA*x)
J = m.Var(value=0) # objective (profit)
Jf = m.FV() # final objective
Jf.STATUS = 1
m.Connection(Jf,J,pos2='end')
m.Equation(J.dt() == m.log(x**ALPHA-i))
m.Obj(-Jf) # maximize profit
m.options.IMODE = 6 # optimal control
m.options.NODES = 3 # collocation nodes
m.options.SOLVER = 3 # solver (IPOPT)
m.solve(disp=True) # Solve
解决方案
你正在NaN
等式中dJ/dt = ln(x**ALPHA-i)
。当您包含 boundsi>0
和i<1
时,求解器会找到解决方案。
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
m = GEKKO()
n=501
m.time = np.linspace(0,10,n)
ALPHA,DELTA = 0.333,0.99
i = m.MV(value=0,lb=0,ub=1)
i.STATUS = 1
i.DCOST = 0
x = m.Var(value=20,lb=0) # fish population
m.Equation(x.dt() == i-DELTA*x)
J = m.Var(value=0) # objective (profit)
Jf = m.FV() # final objective
Jf.STATUS = 1
m.Connection(Jf,J,pos2='end')
m.Equation(J.dt() == m.log(x**ALPHA-i))
m.Obj(-Jf) # maximize profit
m.options.IMODE = 6 # optimal control
m.options.NODES = 3 # collocation nodes
m.options.SOLVER = 3 # solver (IPOPT)
m.solve(disp=True) # Solve
plt.subplot(2,1,1)
plt.plot(m.time,x.value)
plt.ylabel('x')
plt.subplot(2,1,2)
plt.plot(m.time,i.value)
plt.ylabel('i')
plt.show()
m.Obj()
您可以使用较新的函数m.Minimize()
或m.Maximize()
澄清目标函数的意图,而不是(最小化)。例如,您可以切换到m.Maximize(Jf)
以使其更具可读性。
还有一些其他示例可以帮助您实现整体目标(参见解决方案 2)和经济动态优化。
推荐阅读
- javascript - 从 Html 文件 HtmlService.createHtmlOutputFromFile 内部调用脚本
- postgresql - Google 签名令牌 - 请求签名无效 (Postgresql)
- python - Python3搜索正在运行的windows进程的虚拟内存
- javascript - 如何更新firestore中数组内的对象?
- git - 在 TeamCity 构建完成器触发器中定义分支模式
- node.js - Cloud Firestore 模拟器未运行,因此调用 Firestore 会影响生产
- javascript - 未定义在 Dot Net Core/DotNet 中从 javascript 调用 C# 函数
- javascript - JS 使 forEach 匹配更有效
- reactjs - 如何将 ObjectURL 转换为图像
- android - 可绘制资源文件填充宽度