python 动态规划 供应链_动态经济学的python实现|(一)动态规划问题

一、确定性的动态规划问题

考虑这样一个简单的吃蛋糕的问题:(此模型其实可以看作是RCK最优增长模型的家庭效用最大化的决策问题) 你有一个蛋糕大小是

,每期消费量

,当期蛋糕剩余量为

,蛋糕效用的“折现率”为

,蛋糕每期的持有回报率为

,现在考虑吃蛋糕的人的效用最大化问题,为使问题更加具体化,不妨设效用函数

(CRRA效用函数),考虑如下一个最优化问题:

求其贝尔曼方程为:

,过程如下: 定义其值函数

则原问题转换为对贝尔曼方程的动态规划(本题特指无限期确定性动态规划)问题:

程序主要通过迭代法求近似解(数理方法亦可解出准确解:值函数:

,策略函数:

)

%matplotlib inline

from __future__ import division

from scipy.interpolate import InterpolatedUnivariateSpline #一维插值函数

from scipy.optimize import fminbound #求其最小值的函数,返回其最小值点

import matplotlib.pyplot as plt #绘图

import numpy as np

class CakeProblem(object):

def __init__(self, beta=0.96, r = 1.0, gamma = 1.5,

grid_max=2.5, grid_min = 1e-3, grid_size=120):#grid_max代表蛋糕的尺寸,size代表点集的数量

self.r, self.beta, self.gamma = r, beta, gamma #变量初始化,具体说明见题意

if gamma != 1.0:

self.u = lambda c: (c**(1 - gamma))/(1 - gamma)

else:

self.u = np.log

self.gamma = 1

self.grid = np.linspace(grid_min, grid_max, grid_size)#生成插值点

def bellman_operator(self, w):#定义贝尔曼方程,用于后面的迭代求解

Vx = InterpolatedUnivariateSpline(self.grid, w)#对W进行关于grid的一维插值

Tw = np.empty(len(w))

c = np.empty(len(w))

for i, x in enumerate(self.grid):

value = lambda c: - self.u(c) - self.beta * Vx(self.r*(x - c))#定义贝尔曼方程

c_star = fminbound(value, 1e-6, x-1e-6)#最优化

Tw[i] = -

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值