Skip to content

Instantly share code, notes, and snippets.

@kenjisato
Created June 29, 2015 05:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kenjisato/ad74ea69d7ffe18356ad to your computer and use it in GitHub Desktop.
Save kenjisato/ad74ea69d7ffe18356ad to your computer and use it in GitHub Desktop.
2015 経済動学 講義資料 (2015-06-29)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# 価値関数の計算\n",
"\n",
"神戸大学大学院経済学研究科<br>\n",
"2015年度前期 経済動学講義資料<br>\n",
"2015-06-29"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Bellman 方程式\n",
"\n",
"特定の条件の下で, 関数方程式\n",
"\n",
"\\begin{align}\n",
" v(x) = \\max_y [u(x,y) + \\rho v(y)], \\quad \\forall x\n",
"\\end{align}\n",
"\n",
"の解 $v$ が\n",
"\n",
"\\begin{align}\n",
" v(k_0) = \\max_{(k_t)_{t \\ge 0}} \\sum_{t=0}^\\infty \\rho^t u(k_t, k_{t+1})\n",
"\\end{align}\n",
"\n",
"を満たします。"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"したがって, 関数方程式を解いて $v$ を得られれば, \n",
"\n",
"\\begin{align}\n",
" k_{t+1} \\in \\arg\\max u(k_t, k_{t+1}) + \\rho v(k_{t+1})\n",
"\\end{align}\n",
"\n",
"となる点列 $(k_t)_{t\\ge 0}$ が最適経路であることが分かります。\n",
"\n",
"関数 $k_1 \\mapsto v(k_1)$ が $k_1$ から始まる最適経路の決定に必要な情報をすべてもっているので, 既知の $k_0$ を出発する最適経路を選ぶ問題は $k_1$ を最適に選ぶ問題に帰着させられるのです. \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Bellman方程式を解析的に解けるケース\n",
"\n",
"数値計算法を学ぶ理由は, 解析解を導出できないケースが多いからですが, 仮に数値計算法を実装したコードを書いても, 正しく動いていることを確認するモデルが必要です\n",
"\n",
"まずは, 解析的に解けるモデルで価値関数と最適動学関数を導出しておきましょう. \n",
"\n",
"これまで例として使用していたモデル\n",
"\n",
"\\begin{align}\n",
" f(k) = Ak^\\alpha,\n",
"\\end{align}\n",
"\n",
"\\begin{align}\n",
" U(c) = \\log c,\n",
"\\end{align}\n",
"\n",
"\\begin{align}\n",
" u(x, y) = U(f(x) - y)\n",
"\\end{align}\n",
"\n",
"を再び考えます. 価値関数が, \n",
"\n",
"$$v(x) = c_0 + c_1 \\log x$$\n",
"\n",
"と表せるとして, 係数 $c_0, c_1$ が満たすべき条件を求めてみます. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"最大化問題\n",
"$$\n",
" \\max_y \\left[\n",
" \\log (Ax^\\alpha - y)\n",
" +\n",
" \\rho (c_0 + c_1 \\log y)\n",
" \\right]\n",
"$$\n",
"の1次条件から, \n",
"\\begin{align}\n",
" &\\frac{-1}{Ax^\\alpha - y} + \\frac{\\rho c_1}{y} = 0 \\\\\n",
" &\\Rightarrow \n",
" y = h(x) := \\frac{\\rho c_1}{1 + \\rho c_1} Ax^\\alpha\n",
"\\end{align}\n",
"を得ます。"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Bellman 方程式は\n",
"\n",
"$$\n",
" v(x) = u(x, h(x)) + v(h(x))\n",
"$$\n",
"\n",
"を要請します。先ほど得た $h(x) = \\frac{\\rho c_1}{1 + \\rho c_1} Ax^\\alpha$ を代入して, パラメトライズされた関数方程式を得ます。\n",
"\n",
"\\begin{align}\n",
" & \\color{blue}{c_0} + \\color{red}{c_1} \\log x \\\\\n",
" &= \n",
" \\log \\left(\n",
" Ax^\\alpha - \\frac{\\rho c_1}{1 + \\rho c_1} Ax^\\alpha\n",
" \\right)\n",
" +\n",
" \\rho c_1 \\log \\left(\n",
" \\frac{\\rho c_1}{1 + \\rho c_1} Ax^\\alpha \n",
" \\right)\\\\\n",
" &= \\color{blue}{(1+\\rho c_1)\\log A + \\rho c_0 + \\rho c_1 \\log \\rho c_1 - (1 + \\rho c_1) \\log (1 + \\rho c_1)}\\\\\n",
" &\\qquad+ \\color{red}{\\alpha (1 + \\rho c_1)} \\log x\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"任意の $x$ についてなりたつので,係数 $c_0, c_1$ には次の関係がなければなりません。\n",
"\n",
"\\begin{align}\n",
" \\color{blue}{c_0} \n",
" &= \\color{blue}{(1+\\rho c_1)\\log A + \\rho c_0 + \\rho c_1 \\log \\rho c_1 - (1 + \\rho c_1) \\log (1 + \\rho c_1)}\\\\\n",
" \\color{red}{c_1}\n",
" &=\n",
" \\color{red}{\\alpha (1 + \\rho c_1)}\n",
"\\end{align}\n",
"\n",
"これを解くと, \n",
"\n",
"\\begin{align}\n",
" c_0 &= \\frac{1}{(1-\\alpha\\rho)(1-\\rho)} \\log A + \\frac{\\alpha\\rho}{(1 - \\alpha\\rho)(1 - \\rho)} \\log\\alpha\\rho\n",
" + \n",
" \\frac{1}{1 - \\rho} \\log (1 - \\alpha\\rho), \\\\\n",
" c_1 &= \\frac{\\alpha}{1 - \\alpha\\rho}\n",
"\\end{align}\n",
"\n",
"を得て, 価値関数 $v(x) = c_0 + c_1 \\log x$ と, 最適動学関数 $h(x) = \\frac{\\rho c_1}{1 + \\rho c_1} x^\\alpha$ が求められたことになります\n",
"\n",
"これをコードにしておきます。"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\\begin{align}\n",
" c_0 &= \\frac{1}{(1-\\alpha\\rho)(1-\\rho)} \\log A + \\frac{\\alpha\\rho}{(1 - \\alpha\\rho)(1 - \\rho)} \\log\\alpha\\rho\n",
" + \n",
" \\frac{1}{1 - \\rho} \\log (1 - \\alpha\\rho), \\\\\n",
" c_1 &= \\frac{\\alpha}{1 - \\alpha\\rho}\n",
"\\end{align}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"def analytic_solutions(A, α, ρ):\n",
" c0 = (1.0 / (1.0 - α * ρ) / (1.0 - ρ) * np.log(A) +\n",
" α * ρ * np.log(α * ρ) / (1.0 - α * ρ) / (1.0 - ρ) +\n",
" np.log(1.0 - α * ρ) / (1.0 - ρ))\n",
" c1 = α / (1.0 - α * ρ) \n",
" \n",
" def value_func(x):\n",
" return c0 + c1 * np.log(x)\n",
" \n",
" def policy_func(x):\n",
" return ρ * c1 * x**α / (1.0 + ρ * c1)\n",
" \n",
" return value_func, policy_func\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nUH0VAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10e9730b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xpts = np.linspace(1e-5, 4.0, 100)\n",
"value, policy = analytic_solutions(1.1, 0.3, 0.9)\n",
"\n",
"fig, ax = plt.subplots(1,2)\n",
"fig.set_figwidth(13)\n",
"\n",
"ax[0].plot(xpts, value(xpts))\n",
"ax[0].set_title('value function')\n",
"\n",
"ax[1].plot(xpts, policy(xpts))\n",
"ax[1].set_title('policy function')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Value Function Iteration\n",
"\n",
"価値関数の計算の背後にある方法は比較的単純で, \n",
"\n",
"Bellman作用素\n",
"\n",
"\\begin{align}\n",
" & T: f \\mapsto T(f) \\\\\n",
" & T(f)(x) = \\max_y \\left\\{\n",
" u(x, y) + \\rho f(y)\n",
" \\right\\}\n",
"\\end{align}\n",
"\n",
"に対して, 縮小写像の原理\n",
"\n",
"\\begin{align}\n",
" v \\simeq T^n(v_0),\\qquad n: \\text{ large}\n",
"\\end{align}\n",
"\n",
"を実装すればよいです。\n",
"\n",
"ただし, Bellman作用素は無限次元空間 ($V$ としておきましょう) 上の作用素です。額面通り実行することはできません"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Bellman作用素の有限次元近似\n",
"\n",
"無限次元空間 $V$ の有限次元部分空間 $V_N \\simeq \\mathbb{R}^N$ を固定します. \n",
"\n",
"$V_N$ の基底関数 $[\\phi_0, \\dots, \\phi_{N-1}]$ に対して, $V_N$ の元 $f$ は\n",
"\n",
"$$\n",
" f = \\alpha_0 \\phi_0 + \\cdots + \\alpha_{N-1} \\phi_{N-1}\n",
"$$\n",
"\n",
"と書けます\n",
"\n",
"射影 $\\pi_N: V \\to V_N \\simeq \\mathbb{R}^N$ \n",
"\n",
"$$\n",
" \\pi_N f = \\alpha^f_0 \\phi_0 + \\cdots + \\alpha^f_{N-1} \\phi_{N-1} \n",
" \\leftrightarrow [\\alpha^f_0, \\dots, \\alpha^f_{N-1}] \\in \\mathbb{R}^N\n",
"$$\n",
"\n",
"\n",
"と, 標準的埋め込み $\\iota_N: \\mathbb{R}^N \\to V$ \n",
"\n",
"$$\n",
" \\iota_N (\\alpha^f_0, \\dots, \\alpha^f_{N-1}) \n",
" = \\alpha^f_0 \\phi_0 + \\cdots + \\alpha^f_{N-1} \\phi_{N-1}\n",
"$$\n",
"\n",
"を使って Bellman方程式の有限次元近似します\n",
"\n",
"\\begin{align}\n",
" \\pi_N \\circ T \\circ \\iota_N: \\mathbb{R}^N \\to \\mathbb{R}^N\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 区分線形近似\n",
"\n",
"関数空間の有限次元近似は, 基底関数とその基底がなす有限次元部分空間への射影を決定することで計算できます. \n",
"\n",
"区分線形近似を扱うときにこのような近似の一般論を意識する必要はあまりないのですが, より一般の基底関数を扱う際に役に立つことが多いので簡単に説明しておきます. \n",
"\n",
"区間 $[a, b]$ を $N$個の区間に分割します. \n",
"\n",
"$$\n",
" a = x_0 < x_1 < \\cdots < x_{N-1} < x_N = b\n",
"$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"$i = 1, 2, \\dots, N$ について\n",
"\n",
"$$\n",
" \\phi_i (x) = \n",
" \\left\\{\n",
" \\begin{array}{lll}\n",
" \\frac{x - x_{i-1}}{x_i - x_{i-1}} & \\text{if} & x \\in [x_{i-1}, x_i],\\\\\n",
" \\frac{x_{i+1} - x}{x_{i+1} - x_i} & \\text{if} & x \\in [x_i, x_{i+1}],\\\\\n",
" 0 & \\text{otherwise} & \n",
" \\end{array}\n",
" \\right.\n",
"$$\n",
"\n",
"と定義する\n",
"\n",
"**[確認]** $V$ を $\\mathbb{R}$上の連続関数からなる線形空間とする. 上のように定義される $[\\phi_1, \\dots, \\phi_N]$ が1次独立であることを確認せよ"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### テント基底関数"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"from numba import vectorize, float64 \n",
"\n",
"class Tent:\n",
" def __init__(self, left, center, right):\n",
" self.left = left\n",
" self.center = center\n",
" self.right = right\n",
" \n",
" def __call__(self, x):\n",
" return _tent(x, self.left, self.center, self.right)\n",
"\n",
"@vectorize([float64(float64, float64, float64, float64)])\n",
"def _tent(x, left, center, right):\n",
" if left <= x < center:\n",
" return (x - left) / (center - left)\n",
" elif center <= x <= right:\n",
" return (right - x) / (right - center)\n",
" else:\n",
" return 0.0"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10e974518>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(-1.0, 1.0, 100)\n",
"tent_function = Tent(-0.5, 0.0, 0.5)\n",
"plt.plot(x, tent_function(x))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### テント基底の生成"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"def tentbase(a, b, N):\n",
" centers = np.linspace(a, b, N)\n",
" basis = []\n",
" for i in range(len(centers)):\n",
" if i == 0:\n",
" left, center, right = centers[i] - 1.0, centers[i], centers[i+1]\n",
" elif i == len(centers) - 1:\n",
" left, center, right = centers[i-1], centers[i], centers[-1] + 1.0\n",
" else:\n",
" left, center, right = centers[i-1], centers[i], centers[i+1]\n",
" basis.append(Tent(left, center, right))\n",
" return basis"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n5pz/D3BcbjJqpPFOAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11254ba90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"a, b, N = 0.0, 8.0, 9\n",
"basis = tentbase(a, b, N)\n",
"pts = np.linspace(a, b, 300)\n",
"\n",
"for basis_func in basis:\n",
" plt.plot(pts, basis_func(pts))\n",
"plt.title(\"Tent basis functions\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### 射影\n",
"\n",
"関数 $f$ の区分線形近似を\n",
"\n",
"$$\n",
" f(x) \\simeq f(x_0) \\phi_0(x) + \\cdots + f(x_{N-1}) \\phi_{N-1}(x)\n",
"$$\n",
"\n",
"と近似します. つまり\n",
"\n",
"$$\n",
" \\pi f = [f(x_0), \\dots, f(x_{N-1})]\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### 近似のためのクラス\n",
"\n",
"基底の選び方と, 射影の取り方は個々の近似手法でことなりますが, 埋め込み $\\iota$ は共通の式で書けることを思い出してください"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"class Approx:\n",
" def __init__(self, base):\n",
" self.base = base\n",
" \n",
" def proj(self, f):\n",
" raise NonImplementedError\n",
" \n",
" def inj(self, coeff):\n",
" def _inj(x):\n",
" return np.sum([c * basis_func(x) \n",
" for basis_func, c in zip(self.base, coeff)], axis=0)\n",
" return _inj\n",
" \n",
" def __call__(self, f):\n",
" return self.inj(self.proj(f))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"class PLApprox(Approx):\n",
" def __init__(self, a, b, N, upsample=10):\n",
" self.a, self.b, self.N = a, b, N\n",
" self.base = tentbase(a, b, N)\n",
" self.centers = [basis_func.center for basis_func in self.base]\n",
" self.grids = np.linspace(a, b, N*upsample)\n",
" super().__init__(self.base)\n",
" \n",
" def proj(self, f):\n",
" return np.array([f(basis_func.center) for basis_func in self.base])"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### 補足\n",
"\n",
"本当は, 無限次元作用素の有限次元近似\n",
"\n",
"\\begin{align}\n",
" \\pi_N \\circ T \\circ \\iota_N\n",
"\\end{align}\n",
"\n",
"を有限次元の計算だけで完結できればよいのですが, 多くの場合にはそのような表現を得ることができません. \n",
"\n",
"Bellman 作用素の場合であれば, テント基底の中心 $(x_i)$ に対して\n",
"\n",
"\\begin{align}\n",
" T(\\iota_N \\circ f)(x_j) = \\max_y u(x_j, y) + \\rho (\\iota_N \\circ f)(y), \\quad j=0,\\dots,N-1\n",
"\\end{align}\n",
"\n",
"が $(x_i)$ のどれかで達成されるということは期待できません. $y$ の自由度が無限になるので, このような計算にも離散化か最適化手法に頼る必要があります"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"一番素朴な方法は, グリッド数を $p$倍に細分化して, $\\pi_N \\circ T \\circ \\iota_N$ を \n",
"\n",
"\\begin{align}\n",
" T(\\iota_N \\circ f)(x_j) \\simeq \\max_{y_k} u(x_j, y_k) + \\rho (\\iota_N \\circ f)(y_k),\n",
" \\quad j=0,\\dots,N-1, \\ k=0,\\dots,pN-1\n",
"\\end{align}\n",
"で代替する方法です. 先ほどのコードでは, このアップサンプリングされたグリッドを\n",
"\n",
" self.grids = np.linspace(a, b, N*upsample)\n",
"\n",
"と表現しています. \n",
"\n",
"Bellman 方程式の右辺の最大化問題は近似グリッドから離れたところで最大値を取る可能性があるので, このようにしてグリッド間の特性を少しでも残すようにしている訳です. \n",
"\n",
"\n",
"QuantEcon.net http://quant-econ.net/py/dp_intro.html では, SciPy の最適化モジュールを使ってこれを実現する方法が紹介されています. こちらも確認しておいてください."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## $N=10$"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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\nRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x110b02358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plapx10 = PLApprox(a=0.0, b=10.0, N=10)\n",
"approx_sin = plapx10(np.sin)\n",
"\n",
"plt.plot(plapx10.grids, approx_sin(plapx10.grids))\n",
"plt.plot(plapx10.grids, np.sin(plapx10.grids))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## $N=100$"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nlL4QQpiR/wF8iyi+fCBMjQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11276be48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plapx100 = PLApprox(a=0.0, b=10.0, N=100)\n",
"approx_sin = plapx100(np.sin)\n",
"\n",
"plt.plot(plapx100.grids, approx_sin(plapx100.grids))\n",
"plt.plot(plapx100.grids, np.sin(plapx100.grids))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Ramsey モデル"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class Ramsey:\n",
" \"\"\"One-sector Ramsey model\"\"\"\n",
"\n",
" def __init__(self, A, α, ρ):\n",
" self.A, self.α, self.ρ = A, α, ρ\n",
"\n",
" def f(self, x):\n",
" \"\"\"Production function\"\"\"\n",
" return self.A * x ** self.α\n",
"\n",
" def U(self, x):\n",
" \"\"\"Utility from consumption\"\"\"\n",
" return np.log(x)\n",
"\n",
" def u(self, x, y):\n",
" \"\"\"Reduced form utility\"\"\"\n",
" return self.U(self.f(x) - y)\n",
"\n",
" def is_feasible(self, x, y):\n",
" \"\"\"Checks feasibility\"\"\"\n",
" return self.f(x) >= y"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Bellman作用素"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def bellman_operator(model, apx):\n",
" def _bellman_operator(w):\n",
" wf = apx.inj(w)\n",
" X, Y = np.meshgrid(apx.centers, apx.grids)\n",
" with np.errstate(invalid='ignore'):\n",
" u_val = np.where(model.is_feasible(X, Y),\n",
" model.u(X, Y) + model.ρ * wf(Y),\n",
" -np.inf)\n",
" return np.max(u_val, axis=0)\n",
" return _bellman_operator"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"A, α, ρ =1.1, 0.4, 0.9\n",
"ramsey = Ramsey(A, α, ρ)\n",
"value, policy = analytic_solutions(A, α, ρ)\n",
"\n",
"apx = PLApprox(a=1e-5, b=0.7, N=100)\n",
"bellman = bellman_operator(ramsey, apx)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x113d3afd0>]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nbNhblmXtB/4/bxOY0rsh/OEAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x113d3ae48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"niter = 50\n",
"\n",
"v = apx.proj(lambda x: 0.0)\n",
"for _ in range(niter):\n",
" plt.plot(apx.centers, v)\n",
" v = bellman(v)\n",
"plt.plot(apx.grids, value(apx.grids), color='k', linewidth=3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 課題\n",
"\n",
"1. 数値計算した価値関数を用いて最適動学関数を計算してください\n",
"2. イテレーションの回数を決め打ちするのではなく, 終了条件が満たされたところで\n",
" イテレーションが終了するように書き換えてください. \n",
"3. QuantEcon.net http://quant-econ.net/py/dp_intro.html を参考にして, \n",
" scipy.optimize を使った近似スキームを実装してください"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment