{ "metadata": { "name": "", "signature": "sha256:0a48e4f3f8b91004bedbd83eec8415d6221c4f89927f2e866cad7ae9e71f56c3" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "dynamic_stock_model" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Dynamic Stock Modelling in Python - Documentation and Tutorial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dynamic models of material and product stocks require standard routines for computation. The dynamic_stock_model package offers a toolbox for computation and modification of dynamic stock models, including inflow-driven (van der Voet 2002) and stock-driven (M\u00fcller 2006) modelling.\n", "This project is work in progress, and a first, unit-tested version is released on GitHub.\n", "Below you find a quick tutorial and demonstration of the central feastures of the class DynamicStockModel." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Dependencies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python 3.0 or later
\n", "numpy
\n", "scipy
\n", "matplotlib.pyplot
" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Installation and import" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "a) Installation from the web repository" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the easiest way of installing dynamic\\_stock\\_model. Github hosts an installation package for dynamic\\_stock\\_model, which can be downloaded directly from the command line using pip:\n", "\n", " pip install dynamic_stock_model\n" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "b) Installation as package" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pull the package via git pull or download as .zip file and unpack. Choose a convenient location (Here: 'C:\\MyPythonPackages\\'). Then open a console, change to the directory ../dynamic\\_stock\\_model-master/, and install the package from the command line:\n", "\n", " python setup.py install\n", "\n", "This makes the package available to Python. At any other place in a system with the same python installation, dynamic_stock_model is now ready to be imported simply by\n", "\n", " import dynamic_stock_model\n", "\n", "This setup also allows us to run the unit test:\n", "\n", " import unittest\n", "\n", " import dynamic_stock_model\n", "\n", " import dynamic_stock_model.tests\n", "\n", " unittest.main(dynamic_stock_model.tests, verbosity=2)\n", "\n", "Or, to run a specific test\n", "\n", " unittest.main(dynamic_stock_model.tests.test_known_results, verbosity=2)\n" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "c) Manual installation, by modifying the python path" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pull package via git pull or download as .zip file and unpack. Choose a convenient location (Here: 'C:\\MyPythonPackages\\'). \n", "The folder with the class is called dynamic\\_stock\\_model-master, and there is another folder named pydsm inside. The latter one contains the actual class, you can see this from the presence of \\_\\_init\\_\\_.py \n", "Then the class needs to be imported. This can be done by adding the path of the class file dynamic_stock_model.py to the system path, and to import the class from there:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sys\n", "sys.path.append('C:\\\\MyPythonPackages\\\\dynamic_stock_model-master\\\\dynamic_stock_model\\\\') " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just put your own path in the command above, and use \\\\ for subfolders. Again, the paths needs to point to the folder where the \\_\\_init\\_\\_.py is located.\n", "Now, the class can be imported:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from dynamic_stock_model import DynamicStockModel" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "A simple example: inflow-driven model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, the class is ready to use. \n", "First, we define simpe test model with a time vector t from 1 to 10, and inflow i from 2.5 t0 11.5 in steps of 1, and a normally distributed lifetime of 5 years with standard deviation 1.5 years." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "TestDSM = DynamicStockModel(t = np.arange(1,11,1), i = np.arange(2.5,12.5,1), lt = {'Type': 'Normal', 'Mean': np.array([5]), 'StdDev': np.array([1.5]) })" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check the attributes of the object we just defined:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "TestDSM.t" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "TestDSM.i" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "array([ 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5])" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "TestDSM.lt" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "{'Mean': array([5, 5, 5, 5, 5, 5, 5, 5, 5, 5]),\n", " 'StdDev': array([ 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5]),\n", " 'Type': 'Normal'}" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Regarding the attribute lt, you can see that the class automatically expands the lifetime distribution parameters from scalar to vector.
\n", "At any time, we can determine a checkstring that describes the content of the TestDSM object:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "CheckStr, ExitFlag = TestDSM.dimension_check()\n", "print(CheckStr)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "
Checking dimensions of dynamic stock model DSM.Time vector is present with 10 years.
Inflow vector is present with 10 years.
Total stock is not present.
Stock by cohorts is not present.
Total outflow is not present.
Outflow by cohorts is not present.
Lifetime distribution is present with type Normal and mean [5 5 5 5 5 5 5 5 5 5].
\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The check string comes in simple html format to be included in html logfiles.
\n", "Now, we compute the stock s(t,t') of age-cohort t' in year t as\n", "$$s(t,t') = i(t')\\cdot(1-\\sum_{t''=0}^{t-t'}\\lambda(t'')) $$\n", "Here, $\\lambda(t'')$ is the probability function of discard at age $t''$. It is determined using the lifetime distribution type specified above. The full model is docomented here: http://pubs.acs.org/doi/suppl/10.1021/es201904c/suppl_file/es201904c_si_001.pdf
\n", "The result is the stock, broken down by age-cohort:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Stock_by_cohort, ExitFlag = TestDSM.compute_s_c_inflow_driven()\n", "print(Stock_by_cohort)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 2.50000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 2.48100669e+00 3.50000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 2.39102175e+00 3.47340937e+00 4.50000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 2.11767162e+00 3.34743044e+00 4.46581204e+00 5.50000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 1.58525828e+00 2.96474027e+00 4.30383914e+00 5.45821472e+00\n", " 6.50000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 9.20354478e-01 2.21936159e+00 3.81180892e+00 5.26024784e+00\n", " 6.45061739e+00 7.50000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 3.87941136e-01 1.28849627e+00 2.85346490e+00 4.65887757e+00\n", " 6.21665654e+00 7.44302007e+00 8.50000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 1.14591011e-01 5.43117590e-01 1.65663806e+00 3.48756821e+00\n", " 5.50594622e+00 7.17306524e+00 8.43542275e+00 9.50000000e+00\n", " 0.00000000e+00 0.00000000e+00]\n", " [ 2.46060669e-02 1.60427416e-01 6.98294044e-01 2.02477985e+00\n", " 4.12167152e+00 6.35301486e+00 8.12947394e+00 9.42782542e+00\n", " 1.05000000e+01 0.00000000e+00]\n", " [ 5.61275688e-03 3.44484937e-02 2.06263820e-01 8.53470498e-01\n", " 2.39292164e+00 4.75577484e+00 7.20008351e+00 9.08588263e+00\n", " 1.04202281e+01 1.15000000e+01]]\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dimension of the stock is 10x10. The row index is the model year, the column index is the age-cohort.
\n", "The __'ExitFlag'__ parameter indicates the termination state of the method that was just called, here: compute_s_c_inflow_driven(). If everything went allright, the ExitFlag equals 1. If a problem occurred, the ExitFlag will have a different value, which indicates the source of the problem. To find out what exactly went wrong you need to open the class file pydsm.py and check the comments for the code for the method that just failed to produce a result.
\n", "We continue by computing the total stock, the outflow by age-cohort, the total outflow, and the stock change:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "S, ExitFlag = TestDSM.compute_stock_total()\n", "print(S)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 2.5 5.98100669 10.36443111 15.43091411 20.81205241\n", " 26.16239022 31.34845648 36.41634907 41.44009312 46.45468629]\n" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "O_C, ExitFlag = TestDSM.compute_o_c_from_s_c()\n", "print(O_C)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. ]\n", " [ 0.01899331 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. ]\n", " [ 0.08998494 0.02659063 0. 0. 0. 0. 0.\n", " 0. 0. 0. ]\n", " [ 0.27335012 0.12597892 0.03418796 0. 0. 0. 0.\n", " 0. 0. 0. ]\n", " [ 0.53241334 0.38269017 0.1619729 0.04178528 0. 0. 0.\n", " 0. 0. 0. ]\n", " [ 0.6649038 0.74537868 0.49203022 0.19796688 0.04938261 0. 0.\n", " 0. 0. 0. ]\n", " [ 0.53241334 0.93086532 0.95834402 0.60137027 0.23396085 0.05697993\n", " 0. 0. 0. 0. ]\n", " [ 0.27335012 0.74537868 1.19682684 1.17130935 0.71071032 0.26995483\n", " 0.06457725 0. 0. 0. ]\n", " [ 0.08998494 0.38269017 0.95834402 1.46278836 1.38427469 0.82005037\n", " 0.30594881 0.07217458 0. 0. ]\n", " [ 0.01899331 0.12597892 0.49203022 1.17130935 1.72874988 1.59724003\n", " 0.92939042 0.34194279 0.0797719 0. ]]\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "O, ExitFlag = TestDSM.compute_outflow_total()\n", "print(O)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0. 0.01899331 0.11657558 0.433517 1.1188617 2.14966219\n", " 3.31393374 4.43210741 5.47625595 6.48540683]\n" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "DS, ExitFlag = TestDSM.compute_stock_change()\n", "print(DS)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 2.5 3.48100669 4.38342442 5.066483 5.3811383 5.35033781\n", " 5.18606626 5.06789259 5.02374405 5.01459317]\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the dynamic stock is fully determined: Both stock and outflow are broken down by age-cohort and as total. We can make a final check by printing the dimension check and by computing the stock balance:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(TestDSM.dimension_check()[0]) # dimension_check returns two variables, but we only print the first one, which has index 0." ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "
Checking dimensions of dynamic stock model DSM.Time vector is present with 10 years.
Inflow vector is present with 10 years.
Total stock is present with 10 years.
Stock by cohorts is present with 10 years and 10 cohorts.
Total outflow is present with 10 years.
Outflow by cohorts is present with 10 years and 10 cohorts.
Lifetime distribution is present with type Normal and mean [5 5 5 5 5 5 5 5 5 5].
\n" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "Bal, ExitFlag = TestDSM.check_stock_balance()\n", "print(Bal)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0.00000000e+00 0.00000000e+00 8.88178420e-16 0.00000000e+00\n", " -1.77635684e-15 3.55271368e-15 -3.55271368e-15 4.44089210e-15\n", " -7.10542736e-15 8.88178420e-16]\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a few plots to see what happened:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "# this is only for the IPython notebook, not part of the python script!\n", "\n", "import matplotlib.pyplot as plt\n", "plt.imshow(TestDSM.s_c, interpolation='nearest')\n", "plt.xlabel('age-cohort')\n", "plt.ylabel('year')\n", "plt.title('Stock by age-cohort')\n", "plt.show();" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAEZCAYAAACegjBxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFNVJREFUeJzt3Xu0XGV9xvHvQwKBEO4qNXDgINeoiETECIVGYLUUENDi\nAgpyqQV1FQgqqKC2oS7RYq0XKKwqlEqBAokIYiWUYBKuBSIJxIRAuCQkQe6BJBQwJL/+sd+QeU/O\nZU4y79nnJM9nrb2Y2XvPu38zzHnm3e/MfqOIwMxspQ3qLsDM+heHgpllHApmlnEomFnGoWBmGYeC\nmWUcCgOUpLmSDm5y3xWS3le6pv5A0mRJn6u7joHModBikv5U0r2SXpX0sqS7Je2Ttp0i6a4WHSrS\nYrmWvi4pfA9qVXsDweC6C1iXSNoc+DXweeAGYAhwAPBWnXVZ70kaHBFvUwWM6q6nL7mn0Fq7ARER\n10flzYi4PSJmSBoBXAZ8XNISSa8ASNpC0lWSXkifSt+Q9M6bUNJpkmZJWixppqQPdzyopBGSnpJ0\nbDe1HS7pSUkvSrpIlY0kvSLpgw1tvUfS65K26eQ4O0v6raSXUjtXS9qiYftISdNSrTdIul7Stxu2\nHyFpuqRFku6RtGdXxUraQNL5kp5I7U2VtH3atp+kB1Nv7AFJH+/w8PbUQ1ss6bbG5yLpyPQ6LpI0\nSdIeDdvmSvqqpIeBpZKuBXYAbkn/z87p5vVdd0SElxYtwGbAS8B/AIcCW3XYfjJwV4d1VwG/BDYF\ndgQeA/4mbfsMsAD4SLq/M7BDuv00cBAwEpgHHNZNXSuAO4AtgbZ0jM+lbf8KfK9h3zHAzV20szNw\nMLAh8C5gCvDDtG2jVMeZwCDgU1Q9pH9M2/cGngc+SvXJe1J6Dht1caxzgUeAXdP9PYGt07IIOIHq\nQ+044JWVrzUwGXgC2AXYGJgEfDdt2w1Ymp7DoHSMOcDgtH0u8BCwHTCk8XWu+73Vp+/jugtY1xZg\nD+BKYD6wDLgZeE/adkpjKKQ35lvAHg3rTgcmpdu3AWd2cZyngQvScQ7soaYVwJ833P8iMDHd/hgw\nr2HbVOCYJp/r0cBD6faBwIIO2+9qCIXLVt5u2D67q9rTtk92sv6zwP92WHcvcHK6PQk4v8NzvTXd\n/hZwXcM2UYXugQ2v6SmdvM7rVSj49KHFImJ2RJwaEW3AB4HhwI+62P1dVJ+68xrWPUP1SQWwPfBk\nF48V1djFPRFxZxOlze9wjOGp3vuBNySNTl3pnYFfdXpAaVtJ10laIOk14D+BlV3z4cDCbo65I/CV\n1G1fJGlRen7vlfTXqXu+RNJ/p/3bunjuw1P9jeatfD7Jcw233wCGdfbYqP7q57Pq9e5Y83rJoVBQ\nRDwG/JwqHGD1UfGXqHoT7Q3rdqD69ILqDbpLV81ThcKOkv6liXJ26HC78Q/458CJVJ/C4yLij120\ncSGwHPhgRGyR9l/5HvoD+R9Xx2M+A3wnIrZqWIZFNf5ybURslpbD0/5dPfeFVAHTaEdWD6TOZI9N\nYzdtHR7b8f/RevcNj0OhhSTtLunLkrZL99uA44H70i7PA9tL2hAgIpZTfUvxHUnDJO0IfAm4Ou1/\nOXBOGsCTpF0kNf6hLaEauzhQ0nd7KO8cSVumms4Crm/YdjXwaarz9Ku6aWMY8DqwOD3Hcxu23Qcs\nl3SGpMGSjqIaP1jpZ8AXJO2bnsumkg6XNIzOXQ58Oz1nSfqQpK2B3wC7STo+HedYqlO2Xzc8tqtv\nC8ZRDbgelP4ffAV4k+r0oyvPU/We1h91n7+sSwtV9/R6qk/6pem/lwHD0vYNqd68LwMvpHVbUnXD\nX6D6NP0moIY2P091fr2EauBtr7T+nXNdYCtgOnBBF3WtAM6g6o6/BHwf2KDDPhOBp3p4fu+nGnNY\nQjUg92XgmYbtHwGmpe03AL8Avtmw/S+AB6gGCp9Nr9WwLo61AfAN4ClgMXA/MDxt2z/V8SrwILBf\nw+MmkQZq0/2TgTsb7h8NzEyPnQSMaNi22vgBcCTV6cki4Mt1v8f6YlF64raek3QFsDAi/r6Fbd4P\nXBoRP29Vm1aef7xkSGqnOn1Y7TcQvWznQOBxqt7ICVRjKRPWsjzrYx5TWM+lHxfNAC6KiHk97d+D\n3alOYxZRjY0cExHPr2Wb1sd8+mBmGfcUzCxT65iCJHdTzGoUEat9fVv/QOOJvciFh8fCXmN73u/q\nJvbpE5OB0TXX0FuTcc2lTaZ/1HtBp2t9+mBmGYeCmWUGVihsO7ruCnqpve4C1kB73QWsgfa6C+il\n9roL6NbACoU/GV13Bb3UXncBa6C97gLWQHvdBfRSe90FdKtoKEg6VNJsSXMkfa3kscysNYqFgqRB\nwCVUV/G9Hzhe1ZRkZtaPlewp7As8ERFzI2IZcB1wVMHjmVkLlAyF7chnsVnA6pNwmFk/UzIU/GtF\nswGo5C8aF1JNdbVSG6umGVvl4bGrbm87egB+w2A2UMxNS/dKhsJUYNd0rf6zwLFUU5PlmvnZspm1\nQDv516FTOt2rWChExNuSzqCapnwQcEVEPFrqeGbWGkUviIqIW4FbSx7DzFprYP2i0cyKcyiYWcah\nYGYZh4KZZRwKZpZxKJhZpv45Gkv49dhybR9RsG2zfsA9BTPLOBTMLONQMLOMQ8HMMg4FM8s4FMws\n41Aws4xDwcwyDgUzyzgUzCzjUDCzjEPBzDIOBTPLOBTMLONQMLOMQ8HMMg4FM8s4FMws41Aws4xD\nwcwyDgUzyzgUzCxT/xTvb9ZdQO+8Lz5TpN2nNK5Iu2a95Z6CmWUcCmaWcSiYWcahYGYZh4KZZRwK\nZpYpGgqS2iRNkjRT0u8lnVXyeGa29kr/TmEZ8KWImC5pGPA7SbdHxKOFj2tma6hoTyEinouI6en2\nUuBRYHjJY5rZ2umzMQVJ7cDewP19dUwz670++ZlzOnUYD4xJPYZVZo5ddfvdo+E9o/uiJLP10Ny0\ndK94KEjaEPgFcHVE3LTaDh8YW7oEMwOgPS0rTel0r9LfPgi4ApgVET8qeSwza43SYwr7AycCn5A0\nLS2HFj6mma2FoqcPEXE3/oGU2YDiP1gzyzgUzCzjUDCzjEPBzDIOBTPLOBTMLFP/bM7PFWhzac+7\nrKnlDCrS7hdj8yLtAlymxcXatnWPewpmlnEomFnGoWBmGYeCmWUcCmaWcSiYWcahYGYZh4KZZRwK\nZpZxKJhZxqFgZhmHgpllHApmlnEomFnGoWBmGYeCmWUcCmaWcSiYWcahYGYZh4KZZRwKZpZxKJhZ\npv4p3qcXaPOJAm0mS5ZvVqTd5YPKTB0PcFPcV6Tdo/XxIu1avdxTMLOMQ8HMMg4FM8s4FMws41Aw\ns4xDwcwyxUNB0iBJ0yTdUvpYZrb2+qKnMAaYBUQfHMvM1lLRUJC0PXAYcDmgkscys9Yo3VP4IXAu\nsKLwccysRYr9zFnSEcALETFN0ugud3xr7Krbg0bD4K53NbO1MTct3St57cN+wJGSDgM2BjaXdFVE\nnJTtNWRswRLMbJX2tKw0pdO9uj19kLSBpP3W5PARcX5EtEXETsBxwG9XCwQz63e6DYWIWAFc2qJj\n+dsHswGgmYHGiZKOkbTG3x5ExJSIOHJNH29mfaeZUPgCcAPwR0lL0rK4cF1mVpMeBxojYlhfFGJm\n/UNT3z5I2grYlepbBAAi4s5SRZlZfXoMBUmnAWcBbcA0YBRwH3BQ2dLMrA7NjCmMAfYF5kbEJ4C9\ngdeKVmVmtWkmFN6MiDcAJG0cEbOB3cuWZWZ1aWZMYX4aU7gJuF3SIpr5rWSzls5pWVPvmLxr69tM\nXjliuyLtLtmrzCzRAMspM1P0G0svKNIuwCbD/qFY29a9Zr59+FS6OVbSZGBzYELJosysPs1++3AA\nsEtEXCnp3cB2wNNFKzOzWvQ4piBpLPBV4Ly0aiPg6oI1mVmNmhlo/BRwFPA6QEQsBMqdAJtZrZoJ\nhbfShVEASNq0YD1mVrNmQmGcpH8DtpR0OnAH1fRqZrYOamag8S2qIFgM7AZ8KyJuL1qVmdWmmZ7C\ntsCFVFO23AFMLFmQmdWrx1CIiG9Q9RCuAE4G5ki6UNLOpYszs77X1GzOaaDxOeB5YDmwFTBe0vcL\n1mZmNWjmKskxwEnAy1QDjOdExDJJGwBzqKZwN7N1RDMDjVsDn46IeY0rI2KFpE+WKcvM6tLMtQ9d\nXpkSEbNaW46Z1c3/6rSZZRwKZpZxKJhZxqFgZhmHgpllHApmlnEomFnGoWBmmabmaCzr/tY3OXGX\n1re50vg1/nd2uzVjrz2LtAtwSKELW5cPLveZEleWmSlap3qW6J64p2BmGYeCmWUcCmaWcSiYWcah\nYGYZh4KZZYqGgqQtJY2X9KikWZJGlTyema290r9T+DHwm4g4RtJgwP+QjFk/VywUJG0BHBARJwNE\nxNvAa6WOZ2atUfL0YSfgRUlXSnpI0s8kDS14PDNrgZKhMBgYCVwaESOp/oHarxc8npm1QMkxhQXA\ngoh4MN0fT6ehcGPD7RFpMbPWm5uW7hULhYh4TtJ8SbtFxOPAIcDM1ff8dKkSzCzTnpaVpnS6V+lv\nH84ErpG0EfAkcGrh45nZWioaChHxMPDRkscws9byLxrNLONQMLOMQ8HMMg4FM8s4FMws41Aws4xD\nwcwy/WCK94UF2pxQoM3kkr8s0uzvR5X7OcfUw/cp0u7BQ8pMHQ+w6ZAXi7QbnywzdTyAblk3po93\nT8HMMg4FM8s4FMws41Aws4xDwcwyDgUzyzgUzCzjUDCzjEPBzDIOBTPLOBTMLONQMLOMQ8HMMg4F\nM8s4FMws41Aws4xDwcwyDgUzyzgUzCzjUDCzjEPBzDL9YDbnNwq0+WiBNpNXNyvT7tg/LdMucPmo\nvy3S7gHb3FmkXYAdh99cpuGNyzQLMJ8yM0W30bezRLunYGYZh4KZZRwKZpZxKJhZxqFgZhmHgpll\nioaCpPMkzZQ0Q9K1koaUPJ6Zrb1ioSCpHTgNGBkRewKDgONKHc/MWqPkj5cWA8uAoZKWA0Mp8+/O\nm1kLFespRMQrwA+AZ4BngVcjYmKp45lZaxTrKUjaGTgbaAdeA8ZJOiEirsn3nNxwuz0tZtZ6c9PS\nvZKnD/sA90bEywCSbgT2AzqEwuiCJZjZKu3kH7pTOt2r5LcPs4FRkjaRJOAQYFbB45lZC5QcU3gY\nuAqYCjySVv+01PHMrDWKXjodERcBF5U8hpm1ln/RaGYZh4KZZRwKZpZxKJhZxqFgZhmHgpllHApm\nllFE1HdwKejj6avX3taF2h1dqF3gmA8VaXbkuLuLtAvwK44q0u52Z79SpF2Aly8p0+7Fy8u0ewEQ\nEeq43j0FM8s4FMws41Aws4xDwcwyDgUzyzgUzCzjUDCzjEPBzDIOBTPLOBTMLONQMLOMQ8HMMg4F\nM8s4FMws41Aws4xDwcwyDgUzywywUJhbdwG9NKfuAnrvhcl1V9Br905eVncJvXJ3fZOdNcWhUNQT\ndRfQey9OrruCXrtvgIXCPQ4FMxtIHApmlukHszmbWV06m8251lAws/7Hpw9mlnEomFlmQISCpEMl\nzZY0R9LX6q6nJ5LaJE2SNFPS7yWdVXdNzZA0SNI0SbfUXUszJG0pabykRyXNkjSq7pp6Ium89L6Y\nIelaSUPqrqmjfh8KkgYBlwCHAu8Hjpc0ot6qerQM+FJEfAAYBfzdAKgZYAwwCxgoA00/Bn4TESOA\nDwGP1lxPtyS1A6cBIyNiT2AQcFydNXWm34cCsC/wRETMjYhlwHVQ6B8abJGIeC4ipqfbS6nerMPr\nrap7krYHDgMuB1Ybke5vJG0BHBAR/w4QEW9HxGs1l9WTxVQfGEMlDQaGAgvrLWl1AyEUtgPmN9xf\nkNYNCOnTYW/g/nor6dEPgXOBFXUX0qSdgBclXSnpIUk/kzS07qK6ExGvAD8AngGeBV6NiIn1VrW6\ngRAKA6UruxpJw4DxwJjUY+iXJB0BvBAR0xgAvYRkMDASuDQiRgKvA1+vt6TuSdoZOBtop+o5DpN0\nQq1FdWIghMJCoK3hfhtVb6Ffk7Qh8Avg6oi4qe56erAfcKSkp4H/Ag6SdFXNNfVkAbAgIh5M98dT\nhUR/tg9wb0S8HBFvAzdSvfb9ykAIhanArpLaJW0EHAv8quaauiVJwBXArIj4Ud319CQizo+ItojY\niWrg67cRcVLddXUnIp4D5kvaLa06BJhZY0nNmA2MkrRJeo8cQjWw268MrruAnkTE25LOAG6jGq29\nIiL69SgzsD9wIvCIpGlp3XkRMaHGmnpjoJyynQlckz4sngROrbmebkXEw6kHNpVq7OYh4Kf1VrU6\n/8zZzDID4fTBzPqQQ8HMMg4FM8s4FMws41Aws4xDwcwyDgVrOUmnSLp4Lds4W9ImrarJmudQsBLW\n6scv6XL5MVRXEVofcyisgyT9UtLUNMHLaWnd5yQ9Jun+dEXhxWn9u9NEJQ+kpdPf4kv6qKR7JE1P\nbWwqaeN0leIj6UrF0Q0PGS7pVkmPS/qnhnaOT/vPkPS9hvVLJf2zpOnA+VQXDE2SdEeBl8i6ExFe\n1rEF2Cr9dxNgBtUf2NPAllQ/bb8T+Ena51pg/3R7B6rrNTq2t/JnxB9J94dR/eT8K8Dlad3uwDxg\nCHBK2n+zdH8u1eXuw9M+26TH3wEclR6/Ajim4ZhPA1vX/Vquj0u/v/bB1sgYSUen223AZ4HJEfEq\ngKRxQOOFRCOq63MA2EzS0Ij4v4b2dgf+EBG/g3cmjkHS/sBP0rrHJM1L7QZwR0QsSfvNorpc+F2p\njpfT+muAA4GbgeVUV5VazRwK65jUhT8YGBURb0qaRHV1XuN0cGLVeb+Aj0XEHzu0MwHYFniQ9Iff\n1SG7WP9Ww+3lVO+1jmMNjXW8GamLYPXymMK6Z3NgUQqEPajmiNwU+LM00elg4K8a9v8f4J2JZSV9\nGCAiDo2IvSPidOBx4L2S9kn7bJYGA+8CTkjrdqM6/ZhN50ERwAOpjm3S448DpnTxPJak52J9zKGw\n7pkADE5d9u8C91FNSHIh1R/l3VTn64vT/mcB+0h6WNJM4PSODaZexLHAxWkg8DaqsYJLgQ0kPUI1\nd+bJUc2jGXTyDURUcyB8HZgETAemRsTKmaM77v9TYIIHGvueL51eT0jaNCJeTz2FG6nmpbi57rqs\n/3FPYf0xNk34MgN4yoFgXXFPwcwy7imYWcahYGYZh4KZZRwKZpZxKJhZxqFgZpn/B6Zh/3KrgI7U\nAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(TestDSM.o_c,interpolation='nearest')\n", "plt.xlabel('age-cohort')\n", "plt.ylabel('year')\n", "plt.title('Outflow by age-cohort')\n", "plt.show();" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAEZCAYAAACegjBxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFQNJREFUeJzt3XmYXFWdxvHvmwQIIQmrIoFgI4LiEiQCkwHUCCiRAcHl\nURgghkdhfEYkKKMCOmN8mFFGRVEcdFAGZJORwIA6GvaEddBAAiELaxqSQEAWCbtAfvPHPU3qdHqp\n7tTJ7Q7v53nuk1u3bp3760rXW+eeqntaEYGZWYchdRdgZgOLQ8HMMg4FM8s4FMws41Aws4xDwcwy\nDoUBRNLHJC2RtELSeyS1S9qn4PGmSTqvVPsDiaSJkpbUXcdg4FDoJ0lTJM2T9JykRySdIWnjPjy+\nXdLenTZ/H/jHiBgdEXOBSEsp/pJKP6X//xvqrqMEh0I/SDoeOAU4HhgNTADeDFwlab0mmwlADW0K\n2BZY0Npqe6Ted7HOJA2ru4aSHAp9JGk0MA04JiKujIhXI+JB4FNAG3B42u8cSSc3PO617mvqsm8L\n/FbSM5K+CqwAhgJ3SLq3i+NuIOk0ScvS8kNJ66f7Zkn6eFrfU9JKSfun2/tImtPNjxPAcEkXpVOW\n2ySNS4/7iqTpnWr4saTTunleTpB0X2pnvqSDG+4bIulUSX+W9ICkY1KNQ9L9G0s6S9LDkpZKOrnj\nvm6O9U5JV0l6QtJySSf29hw1PPbLkh5Nx5rSsH1jSedKeiz14r6egrqjV3CTpB9Iehy4CPgp8Lfp\n/+/J7modjBwKfbcHMBy4tHFjRDwH/B74UMcmuumeR8QRwEPAARExKiK+GxGj0t3jImKHLh72dWB3\nYOe07A58I903E5iY1j8APAC8v+H2zG5+FgEHAb8GNgUuBC6TNBQ4H5jUcUqU3h0/Dfyym7buA/aK\niNHAt4DzJW2Z7jsamJTqHg8cTP7cnAP8Fdge2AX4MPC5LguWRgFXUz3XWwFvBa5Jd/f0HAG8iapn\nNwb4LPAfDad8pwOjgO2onrPJwJENj90duB94I1Xwfx64Jf3/bdbNczI4RYSXPixUvxCPdHPfKcAV\naf1s4OSG+yYCSxpuLwb27vT4lcBbutqH6kU3qeG+DwOL0/o+wB1p/Q9Uv/C3pNuzgIO7qXcacHPD\nbQEPA3s2tPW5tH4AcFcfnqc5wIFp/VrgqIb79kk/6xBgS+BFYHjD/YcC13bT7qHAbd3c19NzNBF4\nHhjScP+jVC/2ocBLwNsb7jsauC6tTwEe7HSsKcANdf8+lljcU+i7x4EtuunebpXuL2EM8GDD7YfS\nNoBbgB0lvRF4D3AuMFbS5sBuwPU9tLu0YyWq3/alDe3+knQ6lP7t9pMKSZMlzZH0lKSngHcBW6S7\ntwIaR/6XNqy/GVgPeKThsT8D3pDanZ+66Csk7QVsQ9UT6kpPzxHAExGxsuH288DIVOd6XTx264bb\nr5tPLhwKfXcL1bvKJxo3ShpJ1UXu6Mo+B4xo2OVNndrp68j/w1RjFh22TduIiOeB24DjgHkR8TJw\nM9VA6H0R0dM579iGn2EI1Yvu4bTpcmCcpHcBfwdc0FUDkt4MnAl8AdgsIjYF7mLVQOYjjcfptL6E\n6vncPCI2TcvGEfHu9LO9M6ou+uiIuDHt/5ZufpZun6NePA683MVjG8Or8//XOvvJjUOhjyLiaapz\n5tMl7SdpPUltVOflS1j1bjoX2F/SppLeRPWCbfQo1Tl0s34FfEPSFpK2AP6F/J17FtWLcla6PRM4\npuF2d96r6vsRw1KNLwL/l37WF4BLqMYabo2Ipd20sRHVi+RxYIikI6l6Ch1+DUyVNEbSJsDX0v5E\nxCPAlcAPJI1Kg5LbS3o/XfsdsJWkqWlgcZSk3Zt8jroUEa+mGv9N0sgUcl+iGlfpznJgmz582jRo\nOBT6ISK+B5xE9b2Cp6leRA8C+6R3aah+Ge8A2oEZVCPWje8u36H6BX5K0pebOOy/ArOBO9MyO23r\nMIuqK9xxqnA91Yu1p1OHAC6jGkB8EjgM+Hh6kXT4JdULvNsXV0QsAE6l6kUtT/vf2LDLz6le+HdS\n9Wj+F3i1oSs/GVif6uPYJ4GLWb1n1XGsZ6kGcw+k6oHcw6pB1t6eo57e3b9I1bt7ALiBqld0dsPj\nOj/2WmA+sFzSYz20O+goDZqYdUnSWGARsGV6QbaizY8AP42Itla0Z63lnoJ1K40xHA/8ak0CQdJw\nSftLGiZpa+CbdPpI1wYO9xSsS5I2ohr3WEz1Md+yNWhrQ6rTm7cDL1CNC0xtVc/DWsuhYGYZnz6Y\nWabWCzskuZtiVqOIWO2iuAFwtdc3+7DvTFZ9+jQYzGRw1QuueW2YycCo91tdbvXpg5llHApmlhlk\nodBWdwF91FZ3Af3QVncB/dBWdwF91FZ3AT1yKBTVVncB/dBWdwH90FZ3AX3UVncBPSoaCpImSVok\n6V5JXyt5LDNrjWKhkGbv+QnV5cTvAA6VtFOp45lZa5TsKexOdS1/e7py8CKqqb/MbAArGQpbs/ps\nO1t3s6+ZDRAlQ8HfVjQbhEp+o3EZq0/B1cXMPTMb1tsY6COzZoNXe1p6VjIUZgM7pKnKHqaa3efQ\n1XebWLAEM1uljfxNt+uZ+oqFQkS8IukY4AqqKbTPioiFpY5nZq1R9IKoiPgD1d8OMLNBYpB9o9HM\nSnMomFnGoWBmGYeCmWUcCmaWcSiYWWYAzNG4YYE2XyjQptnrg3sKZpZxKJhZxqFgZhmHgpllHApm\nlnEomFnGoWBmGYeCmWUcCmaWcSiYWcahYGYZh4KZZRwKZpZxKJhZxqFgZhmHgpllHApmlnEomFnG\noWBmGYeCmWUcCmaWcSiYWWYATPE+vkCb8wq02WFFwbbN6ueegpllHApmlnEomFnGoWBmGYeCmWUc\nCmaWKRoKksZKuk7SfEl3STq25PHMbM2V/p7Cy8CXImKupJHAbZKuioiFhY9rZv1UtKcQEcsjYm5a\nfxZYCIwpeUwzWzNrbUxBUhuwC3Dr2jqmmfXdWvmaczp1mA5MTT2GBuc2rO+cFjNrvfa09Kx4KEha\nD7gEOD8iLlt9j8mlSzAzANrS0mFWl3uV/vRBwFnAgog4reSxzKw1So8p7AkcDnxQ0py0TCp8TDNb\nA0VPHyLiRvwFKbNBxS9YM8s4FMws41Aws4xDwcwyDgUzyzgUzCxT/2zObR9qfZvtW7a+zdfcVKjd\nRwu1a9Y37imYWcahYGYZh4KZZRwKZpZxKJhZxqFgZhmHgpllHApmlnEomFnGoWBmGYeCmWUcCmaW\ncSiYWcahYGYZh4KZZRwKZpZxKJhZxqFgZhmHgpllHApmlnEomFnGoWBmmfqneP9ZgTYvGleg0eSc\nUtPH/6ZQuwDLCrZt6xr3FMws41Aws4xDwcwyDgUzyzgUzCzjUDCzTPFQkDRU0hxJvy19LDNbc2uj\npzAVWADEWjiWma2hoqEgaRtgf+AXgEoey8xao3RP4YfAV4CVhY9jZi1S7GvOkg4AHouIOZImdrvj\nedNWrY+bCDt3v6uZrYn2tPSs5LUPewAflbQ/MBwYLenciJic7XXEtIIlmNkqbWnpMKvLvXo8fZA0\nRNIe/Tl8RJwUEWMjYjvgEODa1QLBzAacHkMhIlYCZ7ToWP70wWwQaGag8WpJn5TU708PImJWRHy0\nv483s7WnmVD4PPBr4K+SnknLisJ1mVlNeh1ojIiRa6MQMxsYmvr0QdKmwA5UnyIAEBHXlyrKzOrT\nayhIOgo4FhgLzAEmALcAe5ctzczq0MyYwlRgd6A9Ij4I7AI8XbQqM6tNM6HwYkS8ACBpeEQsAt5W\ntiwzq0szYwpL0pjCZcBVkp6ime9KNmmb/e5tVVOv2XG/u1veZodrJx5QpuEpR5VpF4BzCrXbXqhd\nq1Mznz58LK1OkzQTGA3MKFmUmdWn2U8f3ge8NSLOlvQGYGtgcdHKzKwWvY4pSJoGfBU4MW1aHzi/\nYE1mVqNmBho/BhwEPAcQEcuAUSWLMrP6NBMKL6ULowCQtFHBesysZs2EwsWS/hPYRNLRwDVU06uZ\n2TqomYHGl6iCYAWwI/DPEXFV0arMrDbN9BS2BL5NNWXLNcDVJQsys3r1GgoR8XWqHsJZwGeAeyV9\nW9L2pYszs7Wvqdmc00DjcuBR4FVgU2C6pO8VrM3MatDMVZJTgcnAE1QDjP8UES9LGgLcSzWFu5mt\nI5oZaNwM+HhEPNi4MSJWSjqwTFlmVpdmrn34Zg/3LWhtOWZWN//VaTPLOBTMLONQMLOMQ8HMMg4F\nM8s4FMws41Aws4xDwcwyiqjvj0FLCma0/vhn7ndEy9vsMJJnirT798suKtIuAG8d3vs+/fFiyVn5\n7ivYtlW+RUSs9oej3VMws4xDwcwyDgUzyzgUzCzjUDCzjEPBzDJFQ0HSJpKmS1ooaYGkCSWPZ2Zr\nrqm/JbkGfgT8PiI+KWkY4D8kYzbAFQsFSRsD74uIzwBExCvA06WOZ2atUfL0YTvgz5LOlnS7pJ9L\nGlHweGbWAiVDYRgwHjgjIsZT/YHaEwoez8xaoOSYwlJgaUT8Kd2eTlehcN60VevjJsLOEwuWZPZ6\n1p6WnhULhYhYLmmJpB0j4h5gX2D+ajseMa1UCWaWaUtLh1ld7lX604cvAhdIWh+4Hziy8PHMbA0V\nDYWIuAPYreQxzKy1/I1GM8s4FMws41Aws4xDwcwyDgUzyzgUzCzjUDCzTP1TvLe1/vh7L/5dy9vs\ncM3sA8s0vHGZZgHeu8MNRdq9fexeRdoFYOl/F2p4YaF2ByNP8W5mTXAomFnGoWBmGYeCmWUcCmaW\ncSiYWcahYGYZh4KZZRwKZpZxKJhZxqFgZhmHgpllHApmlnEomFnGoWBmGYeCmWUcCmaWcSiYWcah\nYGYZh4KZZRwKZpapfzZnrmx9w1M+1Po2kwvPPrhIu4fudXmRdgF4V5lm/+Fnp5VpGDhzt6llGp59\nSZl2AZhXsO0SPJuzmTXBoWBmGYeCmWUcCmaWcSiYWcahYGaZoqEg6URJ8yXNk3ShpA1KHs/M1lyx\nUJDUBhwFjI+IdwNDgUNKHc/MWmNYwbZXAC8DIyS9CowAlhU8npm1QLGeQkQ8CZwKPAQ8DPwlIq4u\ndTwza41iPQVJ2wPHAW3A08DFkg6LiAvyPc9tWN85LWbWeu1p6VnJ04ddgZsj4gkASZcCewCdQmFy\nwRLMbJW2tHSY1eVeJT99WARMkLShJAH7AgsKHs/MWqDkmMIdVOcGs4E70+YzSx3PzFqj5OkDEfFd\n4Lslj2FmreVvNJpZxqFgZhmHgpllHApmlnEomFnGoWBmGYeCmWUGwBTvpxRo+SMF2kzOGVek2dhj\ntZm2W2bajmXa/VSZZgG4KQ4v0u7RHzmvSLsAzPhNoYZvL9Sup3g3syY4FMws41Aws4xDwcwyDgUz\nyzgUzCzjUDCzjEPBzDIOBTPLOBTMLONQMLOMQ8HMMg4FM8s4FMws41Aws4xDwcwyDgUzywyyULi/\n7gL6ZuHMuivos/a6C+iHu2cur7uEPppXdwE9GmSh8EDdBfTNopl1V9Bn7XUX0A93z3y07hL66K66\nC+jRIAsFMyvNoWBmmQEwm7OZ1aWr2ZxrDQUzG3h8+mBmGYeCmWUGRShImiRpkaR7JX2t7np6I2ms\npOskzZd0l6Rj666pGZKGSpoj6bd119IMSZtImi5poaQFkibUXVNvJJ2Yfi/mSbpQ0gZ119TZgA8F\nSUOBnwCTgHcAh0raqd6qevUy8KWIeCcwAfjCIKgZYCqwABgsA00/An4fETsB44CFNdfTI0ltwFHA\n+Ih4NzAUOKTOmroy4EMB2B24LyLaI+Jl4CLgoJpr6lFELI+IuWn9Wapf1jH1VtUzSdsA+wO/AMr9\nYcsWkbQx8L6I+C+AiHglIp6uuazerKB6wxghaRgwAlhWb0mrGwyhsDWwpOH20rRtUEjvDrsAt9Zb\nSa9+CHwFWFl3IU3aDvizpLMl3S7p55JG1F1UTyLiSeBU4CHgYeAvEXF1vVWtbjCEwmDpyq5G0khg\nOjA19RgGJEkHAI9FxBwGQS8hGQaMB86IiPHAc8AJ9ZbUM0nbA8cBbVQ9x5GSDqu1qC4MhlBYBoxt\nuD2WqrcwoElaD7gEOD8iLqu7nl7sAXxU0mLgV8Deks6tuabeLAWWRsSf0u3pVCExkO0K3BwRT0TE\nK8ClVM/9gDIYQmE2sIOkNknrA58GflNzTT2SJOAsYEFEnFZ3Pb2JiJMiYmxEbEc18HVtREyuu66e\nRMRyYImkHdOmfYH5NZbUjEXABEkbpt+RfakGdgeUYXUX0JuIeEXSMcAVVKO1Z0XEgB5lBvYEDgfu\nlDQnbTsxImbUWFNfDJZTti8CF6Q3i/uBI2uup0cRcUfqgc2mGru5HTiz3qpW5685m1lmMJw+mNla\n5FAws4xDwcwyDgUzyzgUzCzjUDCzjEPBWk7SFEmnr2Ebx0nasFU1WfMcClbCGn35JV0uP5XqKkJb\nyxwK6yBJ/yNpdprg5ai07bOS7pZ0a7qi8PS0/Q1popI/pqXL7+JL2k3STZLmpjY2kjQ8XaV4Z7pS\ncWLDQ8ZI+oOkeyT9e0M7h6b950k6pWH7s5K+L2kucBLVBUPXSbqmwFNkPYkIL+vYAmya/t2Q6s8R\njQEWA5tQfbX9euDHaZ8LgT3T+rZU12t0bq/ja8TvTbdHUn3l/HjgF2nb24AHgQ2AKWn/Uel2O9Xl\n7mPSPpunx18DHJQevxL4ZMMxFwOb1f1cvh6XAX/tg/XLVEkHp/WxwBHAzIj4C4Cki4HGC4l2qq7P\nAWCUpBER8XxDe28DHomI2+C1iWOQtCfw47TtbkkPpnYDuCYinkn7LaC6XHiLVMcTafsFwPuBy4FX\nqa4qtZo5FNYxqQu/DzAhIl6UdB3V1XmN08GJVef9Av4mIv7aqZ0ZwJbAn0gv/O4O2c32lxrWX6X6\nXes81tBYx4uRughWL48prHtGA0+lQHg71RyRGwEfSBOdDgM+0bD/lcBrE8tKeg9AREyKiF0i4mjg\nHmArSbumfUalwcAbgMPSth2pTj8W0XVQBPDHVMfm6fGHALO6+TmeST+LrWUOhXXPDGBY6rJ/B7iF\nakKSb1O9KG+kOl9fkfY/FthV0h2S5gNHd24w9SI+DZyeBgKvoBorOAMYIulOqrkzPxPVPJpBF59A\nRDUHwgnAdcBcYHZEdMwc3Xn/M4EZHmhc+3zp9OuEpI0i4rnUU7iUal6Ky+uuywYe9xReP6alCV/m\nAQ84EKw77imYWcY9BTPLOBTMLONQMLOMQ8HMMg4FM8s4FMws8/+7tQRTI4CipAAAAABJRU5ErkJg\ngg==\n", "text": [ "" ] } ], "prompt_number": 16 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Example for stock-driven model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In stock-driven modelling, only the stock is known at first, and we want to know the inflow, the outflow, and the cohort structure of both stock and outflow. The pyDSM class can do that. Let's create a new DSm object with a time vector t, a stock vector s, and a normally distributed lifetime with mean 4 years and stddev 1 year" ] }, { "cell_type": "code", "collapsed": false, "input": [ "TestDSMX = DynamicStockModel(t = np.arange(1,11,1), s = np.array([ 2.5, 6. , 10.5, 16. , 22.5, 27.5, 32.5, 37.5, 42.5, 47.5]), lt = {'Type': 'Normal', 'Mean': np.array([4]), 'StdDev': np.array([1.0]) })\n", "CheckStr, ExitFlag = TestDSMX.dimension_check()\n", "print(CheckStr)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "
Checking dimensions of dynamic stock model DSM.Time vector is present with 10 years.
Inflow is not present.
Total stock is present with 10 years.
Stock by cohorts is not present.
Total outflow is not present.
Outflow by cohorts is not present.
Lifetime distribution is present with type Normal and mean [4 4 4 4 4 4 4 4 4 4].
\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As above, we now call a sequence of methods to find all the missing information in the stock model. The central method for stock-driven modelling is __compute_stock_driven_model()__, which contains a recursive calculation starting from the fist year to determine outflow, inflow, and stock by cohorts using the lifetime model and the mass balance. The model is documented here:\n", "http://pubs.acs.org/doi/suppl/10.1021/es201904c/suppl_file/es201904c_si_001.pdf" ] }, { "cell_type": "code", "collapsed": false, "input": [ "S_C, O_C, I, ExitFlag = TestDSMX.compute_stock_driven_model()\n", "O, ExitFlag = TestDSMX.compute_outflow_total()\n", "DS, ExitFlag = TestDSMX.compute_stock_change()\n", "Bal, ExitFlag = TestDSMX.check_stock_balance()\n", "print(Bal)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0.00000000e+00 0.00000000e+00 -8.88178420e-16 0.00000000e+00\n", " 0.00000000e+00 -8.88178420e-16 -3.55271368e-15 2.66453526e-15\n", " -3.55271368e-15 1.77635684e-15]\n" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Well, let's have a look!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt1, = plt.plot(TestDSMX.t, TestDSMX.i)\n", "plt2, = plt.plot(TestDSMX.t, TestDSMX.s)\n", "plt3, = plt.plot(TestDSMX.t, TestDSMX.o)\n", "plt.xlabel('Year')\n", "plt.ylabel('tons')\n", "plt.title('Stock parameters')\n", "plt.legend([plt1,plt2,plt3], ['Inflow','Stock','Outflow'], loc = 2)\n", "plt.show();" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(TestDSMX.s_c,interpolation='nearest')\n", "plt.xlabel('age-cohort')\n", "plt.ylabel('year')\n", "plt.title('Stock by age-cohort')\n", "plt.show();" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAzDY6/tzA1zsAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(TestDSMX.o_c,interpolation='nearest')\n", "plt.xlabel('age-cohort')\n", "plt.ylabel('year')\n", "plt.title('Outflow by age-cohort')\n", "plt.show();" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ " This is all for the moment. Comments are welcome!" ] } ], "metadata": {} } ] }