{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example: Asset Replacement" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Miranda and Fackler, Applied Computational Economics and Finance, 2002, Section 7.6.2" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from quantecon.markov import DiscreteDP" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "n = 5 # Number of states\n", "m = 2 # Number of actions; 0: keep, 1: replace\n", "repcost = 75 # Replacement cost\n", "beta = 0.9 # Discount factor" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Reward array\n", "R = np.empty((n, m))\n", "S = np.arange(n) + 1\n", "R[:, 0] = 50 - 2.5 * S - 2.5 * S**2\n", "R[:, 1] = 50 - repcost\n", "\n", "# Infeasible action\n", "R[-1, 0] = -np.inf" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 45., -25.],\n", " [ 35., -25.],\n", " [ 20., -25.],\n", " [ 0., -25.],\n", " [-inf, -25.]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# (Degenerate) transition probability array\n", "Q = np.zeros((n, m, n))\n", "for i in range(n):\n", " Q[i, 0, np.minimum(i+1, n-1)] = 1\n", " Q[i, 1, 0] = 1" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 0., 1., 0., 0., 0.],\n", " [ 1., 0., 0., 0., 0.]],\n", "\n", " [[ 0., 0., 1., 0., 0.],\n", " [ 1., 0., 0., 0., 0.]],\n", "\n", " [[ 0., 0., 0., 1., 0.],\n", " [ 1., 0., 0., 0., 0.]],\n", "\n", " [[ 0., 0., 0., 0., 1.],\n", " [ 1., 0., 0., 0., 0.]],\n", "\n", " [[ 0., 0., 0., 0., 1.],\n", " [ 1., 0., 0., 0., 0.]]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a DiscreteDP\n", "ddp = DiscreteDP(R, Q, beta)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Solve the dynamic optimization problem (by policy iteration)\n", "res = ddp.solve()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Number of iterations\n", "res.num_iter" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 216.56004653, 190.62227392, 172.91363769, 169.90404187,\n", " 169.90404187])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Optimal value function\n", "res.v" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 1, 1])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Optimal policy\n", "res.sigma" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1., 0., 0., 0.],\n", " [ 0., 0., 1., 0., 0.],\n", " [ 0., 0., 0., 1., 0.],\n", " [ 1., 0., 0., 0., 0.],\n", " [ 1., 0., 0., 0., 0.]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Transition probability matrix\n", "res.mc.P" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Simulate the controlled Markov chain\n", "initial_state = 0\n", "ts_length = 13\n", "age_path = res.mc.simulate(ts_length=ts_length, init=initial_state) + 1" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 2, figsize=(12, 4))\n", "ax[0].plot(np.arange(n)+1, res.v)\n", "ax[0].set_xticks(np.linspace(1, 5, 5, endpoint=True))\n", "ax[0].set_xlabel('Age of Machine')\n", "ax[0].set_ylabel('Value')\n", "ax[0].set_title('Optimal Value Function')\n", "\n", "ax[1].plot(age_path)\n", "ax[1].set_yticks(np.linspace(1, 4, 4, endpoint=True))\n", "ax[1].set_xlabel('Year')\n", "ax[1].set_ylabel('Age of Machine')\n", "ax[1].set_title('Optimal State Path')\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "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.5.0" } }, "nbformat": 4, "nbformat_minor": 0 }