Missing the Forest for the Trees

Rate this post

You’re (still) a data scientist.

For Modeling & Simulation (CPSC 420), I had to model the spread of a forest fire from a lightning strike.  Here are the real specs:

  1. It will feature a 2-dimensional cellular automaton of dimensions 50×50.
  2. When the simulation begins, the far right edge of the grid will be populated with houses. Each far-right-edge-square should have a 40% chance of containing a house, and a 60% chance of being empty.
  3. When the simulation begins, the remainder of the grid (i.e., all squares except those at the far right) will be filled with trees at a rate of FOREST_DENSITY. This parameter will be a number between 0 and 1, giving the (independent) probability of each square on the grid (not including the far-right edge) containing a tree. Start with a .7 value for this parameter. Other squares will be empty.
  4. Assume that the forest boundaries are a barren wilderness; i.e. all “squares” beyond the edges are empty squares.
  5. At each time step of the simulation, there will be a PROB_LIGHTNING probability of a lightning strike somewhere in the left-half of the grid. Initially set your PROB_LIGHTNING to .1. When lightning strikes, choose a random square on the left half of the grid. If it is an empty square, the lightning does nothing (except make a bright flash and loud boom). If the square contains a tree, the tree will catch on fire.
  6. At each time step of the simulation, if any tree has a burning tree within its Von Neumann neighborhood (of distance 1), it will stay unburnt with probability PROB_TREE_IMMUNE (initially set to .25). Otherwise, it will catch fire from the neighboring tree. (Note that this “immunity” is a per-generation immunity; trees which have burning neighbors and which prove to be immune for one generation are not necessarily also immune the next generation if their neighbors are still burning then.)
  7. At each time step of the simulation, if any house has a burning tree (or house) within its Von Neumann neighborhood (of distance 1), it will stay unburnt with probability PROB_HOUSE_IMMUNE (initially set to .5). Otherwise, it will catch fire from the neighboring square. (Ditto comments about the duration of “immunity,” above.)
  8. Trees and houses both burn for TIME_TO_BURN time steps, after which they are consumed and become empty squares.
  9. The simulation should run for 200 iterations and then stop.
  10. When it runs, your program should show an animation of the forest over time. Use the color green, and the marker “^” for trees. Use the color orange and the marker “D” for burning squares. Use the color brown and the marker “p” for (non-burning) houses.The key measure of your simulation (dependent variable) will be the fraction of houses that burn down.

Building this thing was a blast.  I had the opportunity to start from scratch, so I started from the ground up with an object-oriented approach; each cell in the grid is considered as its own object.

If I had the opportunity to do it again, I think I’d decide against the object-oriented approach.  I have no problems with using it, I’d just be interested to see how I could code the same simulations using a functional schema as opposed to an object-oriented one.

Leave a Reply

Your email address will not be published / Required fields are marked *