{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Modeling and Simulation in Python\n",
"\n",
"Rabbit example\n",
"\n",
"Copyright 2017 Allen Downey\n",
"\n",
"License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"from modsim import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Rabbit Redux\n",
"\n",
"This notebook starts with a version of the rabbit population growth model and walks through some steps for extending it.\n",
"\n",
"In the original model, we treat all rabbits as adults; that is, we assume that a rabbit is able to breed in the season after it is born. In this notebook, we extend the model to include both juvenile and adult rabbits.\n",
"\n",
"As an example, let's assume that rabbits take 3 seasons to mature. We could model that process explicitly by counting the number of rabbits that are 1, 2, or 3 seasons old. As an alternative, we can model just two stages, juvenile and adult. In the simpler model, the maturation rate is 1/3 of the juveniles per season.\n",
"\n",
"To implement this model, make these changes in the System object:\n",
"\n",
"0. Before you make any changes, run all cells and confirm your understand them.\n",
"\n",
"1. Then, add a second initial populations: `juvenile_pop0`, with value `0`.\n",
"\n",
"2. Add an additional variable, `mature_rate`, with the value `0.33`."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" value | \n",
"
\n",
" \n",
" \n",
" \n",
" | t0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" | t_end | \n",
" 10.0 | \n",
"
\n",
" \n",
" | adult_pop0 | \n",
" 10.0 | \n",
"
\n",
" \n",
" | birth_rate | \n",
" 0.9 | \n",
"
\n",
" \n",
" | death_rate | \n",
" 0.5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"t0 0.0\n",
"t_end 10.0\n",
"adult_pop0 10.0\n",
"birth_rate 0.9\n",
"death_rate 0.5\n",
"dtype: float64"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"system = System(t0 = 0, \n",
" t_end = 10,\n",
" adult_pop0 = 10,\n",
" birth_rate = 0.9,\n",
" death_rate = 0.5)\n",
"\n",
"system"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now update `run_simulation` with the following changes:\n",
"\n",
"1. Add a second TimeSeries, named `juveniles`, to keep track of the juvenile population, and initialize it with `juvenile_pop0`.\n",
"\n",
"2. Inside the for loop, compute the number of juveniles that mature during each time step.\n",
"\n",
"3. Also inside the for loop, add a line that stores the number of juveniles in the new `TimeSeries`. For simplicity, let's assume that only adult rabbits die.\n",
"\n",
"4. During each time step, subtract the number of maturations from the juvenile population and add it to the adult population.\n",
"\n",
"5. After the for loop, store the `juveniles` `TimeSeries` as a variable in `System`."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def run_simulation(system):\n",
" \"\"\"Runs a proportional growth model.\n",
" \n",
" Adds TimeSeries to `system` as `results`.\n",
" \n",
" system: System object with t0, t_end, p0,\n",
" birth_rate and death_rate\n",
" \"\"\"\n",
" adults = TimeSeries()\n",
" adults[system.t0] = system.adult_pop0\n",
" \n",
" for t in linrange(system.t0, system.t_end):\n",
" births = system.birth_rate * adults[t]\n",
" deaths = system.death_rate * adults[t]\n",
" \n",
" adults[t+1] = adults[t] + births - deaths\n",
" \n",
" system.adults = adults"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Test your changes in `run_simulation`:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" value | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 10.000000 | \n",
"
\n",
" \n",
" | 1 | \n",
" 14.000000 | \n",
"
\n",
" \n",
" | 2 | \n",
" 19.600000 | \n",
"
\n",
" \n",
" | 3 | \n",
" 27.440000 | \n",
"
\n",
" \n",
" | 4 | \n",
" 38.416000 | \n",
"
\n",
" \n",
" | 5 | \n",
" 53.782400 | \n",
"
\n",
" \n",
" | 6 | \n",
" 75.295360 | \n",
"
\n",
" \n",
" | 7 | \n",
" 105.413504 | \n",
"
\n",
" \n",
" | 8 | \n",
" 147.578906 | \n",
"
\n",
" \n",
" | 9 | \n",
" 206.610468 | \n",
"
\n",
" \n",
" | 10 | \n",
" 289.254655 | \n",
"
\n",
" \n",
" | 11 | \n",
" 404.956517 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"0 10.000000\n",
"1 14.000000\n",
"2 19.600000\n",
"3 27.440000\n",
"4 38.416000\n",
"5 53.782400\n",
"6 75.295360\n",
"7 105.413504\n",
"8 147.578906\n",
"9 206.610468\n",
"10 289.254655\n",
"11 404.956517\n",
"dtype: float64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"run_simulation(system)\n",
"system.adults"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, update `plot_results` to plot both the adult and juvenile `TimeSeries`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def plot_results(system, title=None):\n",
" \"\"\"Plot the estimates and the model.\n",
" \n",
" system: System object with `results`\n",
" \"\"\"\n",
" newfig()\n",
" plot(system.adults, 'bo-', label='adults')\n",
" decorate(xlabel='Season', \n",
" ylabel='Rabbit population',\n",
" title=title)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And test your updated version of `plot_results`."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_results(system, title='Proportional growth model')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook demonstrates the steps we recommend for starting your project:\n",
"\n",
"1. Start with one of the examples from the book, either by copying a notebook or pasting code into a new notebook. Get the code working before you make any changes.\n",
"\n",
"2. Make one small change, and run the code again.\n",
"\n",
"3. Repeat step 2 until you have a basic implementation of your model.\n",
"\n",
"If you start with working code that you understand and make small changes, you can avoid spending a lot of time debugging.\n",
"\n",
"One you have a basic model working, you can think about what metrics to measure, what parameters to sweep, and how to use the model to predict, explain, or design."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Bonus question\n",
"\n",
"Suppose you only have room for 30 adult rabbits. Whenever the adult population exceeds 30, you take any excess rabbits to market (as pets for kind children, of course). Modify `run_simulation` to model this strategy. What effect does it have on the behavior of the system? You might have to run for more than 10 seasons to see what happens."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}