Missing the Forest for the Trees
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:
- It will feature a 2-dimensional cellular automaton of dimensions 50×50.
- 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.
- 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.
- Assume that the forest boundaries are a barren wilderness; i.e. all “squares” beyond the edges are empty squares.
- 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.
- 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.)
- 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.)
- Trees and houses both burn for TIME_TO_BURN time steps, after which they are consumed and become empty squares.
- The simulation should run for 200 iterations and then stop.
- 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.