{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# The Forest Fire Model\n", "## A rapid introduction to Mesa\n", "\n", "The [Forest Fire Model](http://en.wikipedia.org/wiki/Forest-fire_model) is one of the simplest examples of a model that exhibits self-organized criticality.\n", "\n", "Mesa is a new, Pythonic agent-based modeling framework. A big advantage of using Python is that it a great language for interactive data analysis. Unlike some other ABM frameworks, with Mesa you can write a model, run it, and analyze it all in the same environment. (You don't have to, of course. But you can).\n", "\n", "In this notebook, we'll go over a rapid-fire (pun intended, sorry) introduction to building and analyzing a model with Mesa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, some imports. We'll go over what all the Mesa ones mean just below." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import random\n", "\n", "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "from mesa import Model, Agent\n", "from mesa.time import RandomActivation\n", "from mesa.space import Grid\n", "from mesa.datacollection import DataCollector\n", "from mesa.batchrunner import BatchRunner" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Building the model\n", "\n", "Most models consist of basically two things: agents, and an world for the agents to be in. The Forest Fire model has only one kind of agent: a tree. A tree can either be unburned, on fire, or already burned. The environment is a grid, where each cell can either be empty or contain a tree.\n", "\n", "First, let's define our tree agent. The agent needs to be assigned **x** and **y** coordinates on the grid, and that's about it. We could assign agents a condition to be in, but for now let's have them all start as being 'Fine'. Since the agent doesn't move, and there is only at most one tree per cell, we can use a tuple of its coordinates as a unique identifier.\n", "\n", "Next, we define the agent's **step** method. This gets called whenever the agent needs to act in the world and takes the *model* object to which it belongs as an input. The tree's behavior is simple: If it is currently on fire, it spreads the fire to any trees above, below, to the left and the right of it that are not themselves burned out or on fire; then it burns itself out. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class TreeCell(Agent):\n", " '''\n", " A tree cell.\n", " \n", " Attributes:\n", " x, y: Grid coordinates\n", " condition: Can be \"Fine\", \"On Fire\", or \"Burned Out\"\n", " unique_id: (x,y) tuple. \n", " \n", " unique_id isn't strictly necessary here, but it's good practice to give one to each\n", " agent anyway.\n", " '''\n", " def __init__(self, model, pos):\n", " '''\n", " Create a new tree.\n", " Args:\n", " pos: The tree's coordinates on the grid. Used as the unique_id\n", " '''\n", " super().__init__(pos, model)\n", " self.pos = pos\n", " self.unique_id = pos\n", " self.condition = \"Fine\"\n", " \n", " def step(self):\n", " '''\n", " If the tree is on fire, spread it to fine trees nearby.\n", " '''\n", " if self.condition == \"On Fire\":\n", " neighbors = self.model.grid.get_neighbors(self.pos, moore=False)\n", " for neighbor in neighbors:\n", " if neighbor.condition == \"Fine\":\n", " neighbor.condition = \"On Fire\"\n", " self.condition = \"Burned Out\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we need to define the model object itself. The main thing the model needs is the grid, which the trees are placed on. But since the model is dynamic, it also needs to include time -- it needs a schedule, to manage the trees activation as they spread the fire from one to the other.\n", "\n", "The model also needs a few parameters: how large the grid is and what the density of trees on it will be. Density will be the key parameter we'll explore below.\n", "\n", "Finally, we'll give the model a data collector. This is a Mesa object which collects and stores data on the model as it runs for later analysis.\n", "\n", "The constructor needs to do a few things. It instantiates all the model-level variables and objects; it randomly places trees on the grid, based on the density parameter; and it starts the fire by setting all the trees on one edge of the grid (x=0) as being On \"Fire\".\n", "\n", "Next, the model needs a **step** method. Like at the agent level, this method defines what happens every step of the model. We want to activate all the trees, one at a time; then we run the data collector, to count how many trees are currently on fire, burned out, or still fine. If there are no trees left on fire, we stop the model by setting its **running** property to False." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class ForestFire(Model):\n", " '''\n", " Simple Forest Fire model.\n", " '''\n", " def __init__(self, height, width, density):\n", " '''\n", " Create a new forest fire model.\n", " \n", " Args:\n", " height, width: The size of the grid to model\n", " density: What fraction of grid cells have a tree in them.\n", " '''\n", " # Initialize model parameters\n", " self.height = height\n", " self.width = width\n", " self.density = density\n", " \n", " # Set up model objects\n", " self.schedule = RandomActivation(self)\n", " self.grid = Grid(height, width, torus=False)\n", " self.dc = DataCollector({\"Fine\": lambda m: self.count_type(m, \"Fine\"),\n", " \"On Fire\": lambda m: self.count_type(m, \"On Fire\"),\n", " \"Burned Out\": lambda m: self.count_type(m, \"Burned Out\")})\n", " \n", " # Place a tree in each cell with Prob = density\n", " for x in range(self.width):\n", " for y in range(self.height):\n", " if random.random() < self.density:\n", " # Create a tree\n", " new_tree = TreeCell(self, (x, y))\n", " # Set all trees in the first column on fire.\n", " if x == 0:\n", " new_tree.condition = \"On Fire\"\n", " self.grid[y][x] = new_tree\n", " self.schedule.add(new_tree)\n", " self.running = True\n", " \n", " def step(self):\n", " '''\n", " Advance the model by one step.\n", " '''\n", " self.schedule.step()\n", " self.dc.collect(self)\n", " # Halt if no more fire\n", " if self.count_type(self, \"On Fire\") == 0:\n", " self.running = False\n", " \n", " @staticmethod\n", " def count_type(model, tree_condition):\n", " '''\n", " Helper method to count trees in a given condition in a given model.\n", " '''\n", " count = 0\n", " for tree in model.schedule.agents:\n", " if tree.condition == tree_condition:\n", " count += 1\n", " return count" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running the model\n", "\n", "Let's create a model with a 100 x 100 grid, and a tree density of 0.6. Remember, ForestFire takes the arguments *height*, *width*, *density*." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fire = ForestFire(100, 100, 0.6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To run the model until it's done (that is, until it sets its **running** property to False) just use the **run_model()** method. This is implemented in the Model parent object, so we didn't need to implement it above." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fire.run_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's all there is to it!\n", "\n", "But... so what? This code doesn't include a visualization, after all. \n", "\n", "Remember the data collector? Now we can put the data it collected into a pandas DataFrame:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "results = fire.dc.get_model_vars_dataframe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And chart it, to see the dynamics." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAUAIIXqp/w8TtkNp4lrx8wAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, the fire burned itself out after about 90 steps, with many trees left unburned. \n", "\n", "You can try changing the density parameter and rerunning the code above, to see how different densities yield different dynamics. For example:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fire = ForestFire(100, 100, 0.8)\n", "fire.run_model()\n", "results = fire.dc.get_model_vars_dataframe()\n", "results.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... But to really understand how the final outcome varies with density, we can't just tweak the parameter by hand over and over again. We need to do a batch run. \n", "\n", "## Batch runs\n", "\n", "Batch runs, also called parameter sweeps, allow use to systemically vary the density parameter, run the model, and check the output. Mesa provides a BatchRunner object which takes a model class, a dictionary of parameters and the range of values they can take and runs the model at each combination of these values. We can also give it reporters, which collect some data on the model at the end of each run and store it, associated with the parameters that produced it.\n", "\n", "For ease of typing and reading, we'll first create the parameters to vary and the reporter, and then assign them to a new BatchRunner." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fixed_params = dict(height=50, # Height and width are constant\n", " width=50)\n", "# Vary density from 0.01 to 1, in 0.01 increments:\n", "variable_params = dict(density=np.linspace(0,1,101)[1:])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# At the end of each model run, calculate the fraction of trees which are Burned Out\n", "model_reporter = {\"BurnedOut\": lambda m: (ForestFire.count_type(m, \"Burned Out\") / \n", " m.schedule.get_agent_count()) }" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create the batch runner\n", "param_run = BatchRunner(ForestFire, variable_parameters=variable_params, \n", " fixed_parameters=fixed_params, model_reporters=model_reporter)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the BatchRunner, which we've named param_run, is ready to go. To run the model at every combination of parameters (in this case, every density value), just use the **run_all()** method." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100it [00:06, 6.45it/s]\n" ] } ], "source": [ "param_run.run_all()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Like with the data collector, we can extract the data the batch runner collected into a dataframe:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = param_run.get_model_vars_dataframe()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
densityRunBurnedOut
60.0100.000000
980.0210.000000
730.0320.030303
750.0430.021053
810.0540.030303
\n", "
" ], "text/plain": [ " density Run BurnedOut\n", "6 0.01 0 0.000000\n", "98 0.02 1 0.000000\n", "73 0.03 2 0.030303\n", "75 0.04 3 0.021053\n", "81 0.05 4 0.030303" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, each row here is a run of the model, identified by its parameter values (and given a unique index by the Run column). To view how the BurnedOut fraction varies with density, we can easily just plot them:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(0, 1)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(df.density, df.BurnedOut)\n", "plt.xlim(0,1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we see the very clear emergence of a critical value around 0.5, where the model quickly shifts from almost no trees being burned, to almost all of them.\n", "\n", "In this case we ran the model only once at each value. However, it's easy to have the BatchRunner execute multiple runs at each parameter combination, in order to generate more statistically reliable results. We do this using the *iteration* argument.\n", "\n", "Let's run the model 5 times at each parameter point, and export and plot the results as above." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "500it [00:06, 71.59it/s] \n" ] }, { "data": { "text/plain": [ "(0, 1)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "param_run = BatchRunner(ForestFire, variable_params, fixed_params, \n", " iterations=5, model_reporters=model_reporter)\n", "param_run.run_all()\n", "df = param_run.get_model_vars_dataframe()\n", "plt.scatter(df.density, df.BurnedOut)\n", "plt.xlim(0,1)" ] } ], "metadata": { "anaconda-cloud": {}, "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.2" }, "widgets": { "state": {}, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 1 }