{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example: Asset Replacement with Maintenance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Miranda and Fackler, Applied Computational Economics and Finance, 2002, Section 7.6.3" ] }, { "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 division, print_function\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import quantecon as qe\n", "from quantecon.markov import DiscreteDP" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "maxage = 5\n", "repcost = 75\n", "mancost = 10\n", "beta = 0.9\n", "m = 3 # Number of actions; 0: keep, 1: service, 2: replace" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Construct the state space which is two-dimensional\n", "S = qe.cartesian([np.arange(1, maxage+1), np.arange(maxage)]).astype(int)\n", "n = len(S)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 0],\n", " [1, 1],\n", " [1, 2],\n", " [1, 3],\n", " [1, 4],\n", " [2, 0],\n", " [2, 1],\n", " [2, 2],\n", " [2, 3],\n", " [2, 4],\n", " [3, 0],\n", " [3, 1],\n", " [3, 2],\n", " [3, 3],\n", " [3, 4],\n", " [4, 0],\n", " [4, 1],\n", " [4, 2],\n", " [4, 3],\n", " [4, 4],\n", " [5, 0],\n", " [5, 1],\n", " [5, 2],\n", " [5, 3],\n", " [5, 4]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, in the state space we include states that are not reached\n", "due to the constraint that the asset can be serviced at most one per year,\n", "i.e., those pairs of the age of asset $a$ and the number of services $s$\n", "such that $s \\geq a$.\n", "\n", "One can alternatively define the state space excluding those states;\n", "see below." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# We need a routine to get the index of a age-serv pair\n", "def getindex(age, serv, S):\n", " \"\"\"\n", " Get the index of [age, serv] in S.\n", " We know that elements in S are aligned in a lexicographic order.\n", " \"\"\"\n", " for i in range(n):\n", " if S[i, 0] == age:\n", " for k in range(maxage):\n", " if S[i+k, 1] == serv:\n", " return i+k" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Profit function as a function of the age and the number of service\n", "def p(age, serv):\n", " return (1 - (age - serv)/5) * (50 - 2.5 * age - 2.5 * age**2)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Reward array\n", "R = np.empty((n, m))\n", "R[:, 0] = p(S[:, 0], S[:, 1])\n", "R[:, 1] = p(S[:, 0], S[:, 1]+1) - mancost\n", "R[:, 2] = p(0, 0) - repcost\n", "\n", "# Infeasible actions\n", "for serv in range(maxage):\n", " for action in [0, 1]:\n", " R[getindex(maxage, serv, S), action] = -np.inf" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 36., 35., -25.],\n", " [ 45., 44., -25.],\n", " [ 54., 53., -25.],\n", " [ 63., 62., -25.],\n", " [ 72., 71., -25.],\n", " [ 21., 18., -25.],\n", " [ 28., 25., -25.],\n", " [ 35., 32., -25.],\n", " [ 42., 39., -25.],\n", " [ 49., 46., -25.],\n", " [ 8., 2., -25.],\n", " [ 12., 6., -25.],\n", " [ 16., 10., -25.],\n", " [ 20., 14., -25.],\n", " [ 24., 18., -25.],\n", " [ 0., -10., -25.],\n", " [ 0., -10., -25.],\n", " [ 0., -10., -25.],\n", " [ 0., -10., -25.],\n", " [ 0., -10., -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R" ] }, { "cell_type": "code", "execution_count": 10, "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, getindex(min(S[i, 0]+1, maxage), S[i, 1], S)] = 1\n", " Q[i, 1, getindex(min(S[i, 0]+1, maxage), min(S[i, 1]+1, maxage-1), S)] = 1\n", " Q[i, 2, getindex(1, 0, S)] = 1" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a DiscreteDP\n", "ddp = DiscreteDP(R, Q, beta)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Solve the dynamic optimization problem (by policy iteration)\n", "res = ddp.solve()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Number of iterations\n", "res.num_iter" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Optimal policy\n", "res.sigma" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0] 1\n", "[2 0] 0\n", "[2 1] 1\n", "[3 0] 2\n", "[3 1] 0\n", "[3 2] 0\n", "[4 0] 2\n", "[4 1] 2\n", "[4 2] 2\n", "[4 3] 2\n", "[5 0] 2\n", "[5 1] 2\n", "[5 2] 2\n", "[5 3] 2\n", "[5 4] 2\n" ] } ], "source": [ "# Optimal actions for reachable states\n", "for i in range(n):\n", " if S[i, 0] > S[i, 1]:\n", " print(S[i], res.sigma[i])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Simulate the controlled Markov chain\n", "initial_state = getindex(1, 0, S)\n", "ts_length = 13\n", "path = res.mc.simulate(ts_length=ts_length, init=initial_state)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ncdFAGucAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot sample paths of the age of asset (0th coordinate of S)\n", "# and the number of services (1st coordinate of S)\n", "fig, ax = plt.subplots(1, 2, figsize=(12, 4))\n", "captions = ['Age of Asset', 'Number of Services']\n", "for i, caption in zip(range(2), captions):\n", " ax[i].plot(S[path, i])\n", " ax[i].set_xlabel('Year')\n", " ax[i].set_ylabel(caption)\n", " ax[i].set_title('Optimal State Path: ' + caption)\n", "ax[0].set_yticks(np.linspace(1, 4, 4, endpoint=True))\n", "ax[1].set_yticks(np.linspace(1, 2, 2, endpoint=True))\n", "ax[1].set_ylim(0, 2.25)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Alternative Formulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the state space excluding the `age`-`serv` pairs that do not realize:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from itertools import product\n", "\n", "n = maxage * (maxage+1) // 2 # Number of states\n", "S = np.empty((n, 2), dtype=int)\n", "\n", "i = 0\n", "for age, serv in product(range(1, maxage+1), range(maxage)):\n", " if age > serv:\n", " S[i] = age, serv\n", " i += 1" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 0],\n", " [2, 0],\n", " [2, 1],\n", " [3, 0],\n", " [3, 1],\n", " [3, 2],\n", " [4, 0],\n", " [4, 1],\n", " [4, 2],\n", " [4, 3],\n", " [5, 0],\n", " [5, 1],\n", " [5, 2],\n", " [5, 3],\n", " [5, 4]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We follow the state-action pairs formulation approach." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Reward array\n", "R = np.empty((n, m))\n", "for i, (age, serv) in enumerate(S):\n", " R[i, 0] = p(age, serv) if age < maxage else -np.infty\n", " R[i, 1] = p(age, serv+1) - mancost if age < maxage else -np.infty\n", " R[i, 2] = p(0, 0) - repcost" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 36., 35., -25.],\n", " [ 21., 18., -25.],\n", " [ 28., 25., -25.],\n", " [ 8., 2., -25.],\n", " [ 12., 6., -25.],\n", " [ 16., 10., -25.],\n", " [ 0., -10., -25.],\n", " [ 0., -10., -25.],\n", " [ 0., -10., -25.],\n", " [ 0., -10., -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.],\n", " [-inf, -inf, -25.]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "s_indices, a_indices = np.where(R > -np.infty)\n", "R = R[s_indices, a_indices]" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 36., 35., -25., 21., 18., -25., 28., 25., -25., 8., 2.,\n", " -25., 12., 6., -25., 16., 10., -25., 0., -10., -25., 0.,\n", " -10., -25., 0., -10., -25., 0., -10., -25., -25., -25., -25.,\n", " -25., -25.])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Number of feasible state-action pairs\n", "L = len(R)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# (Degenerate) transition probability array\n", "Q = np.zeros((L, n))\n", "for i, (s, a) in enumerate(zip(s_indices, a_indices)):\n", " if a == 0:\n", " Q[i, getindex(min(S[s, 0]+1, maxage), S[s, 1], S)] = 1\n", " elif a == 1:\n", " Q[i, getindex(min(S[s, 0]+1, maxage), min(S[s, 1]+1, maxage-1), S)] = 1\n", " else:\n", " Q[i, getindex(1, 0, S)] = 1" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create a DiscreteDP\n", "ddp = DiscreteDP(R, Q, beta, s_indices, a_indices)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Solve the dynamic optimization problem (by policy iteration)\n", "res = ddp.solve()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Number of iterations\n", "res.num_iter" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 0, 1, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Optimal policy\n", "res.sigma" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Simulate the controlled Markov chain\n", "initial_state = getindex(1, 0, S)\n", "ts_length = 13\n", "path = res.mc.simulate(ts_length=ts_length, init=initial_state)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ncdFAGucAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot sample paths of the age of asset (0th coordinate of S)\n", "# and the number of services (1st coordinate of S)\n", "fig, ax = plt.subplots(1, 2, figsize=(12, 4))\n", "captions = ['Age of Asset', 'Number of Services']\n", "for i, caption in zip(range(2), captions):\n", " ax[i].plot(S[path, i])\n", " ax[i].set_xlabel('Year')\n", " ax[i].set_ylabel(caption)\n", " ax[i].set_title('Optimal State Path: ' + caption)\n", "ax[0].set_yticks(np.linspace(1, 4, 4, endpoint=True))\n", "ax[1].set_yticks(np.linspace(1, 2, 2, endpoint=True))\n", "ax[1].set_ylim(0, 2.25)\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 }