Self-organized criticality - student project post-mortem
We just got finished with our student team project, which you can find here, and I thought I'd do a little post mortem on it.
It's a neat little project that implements various simulations of self organized criticality on 2D grids. What is self organized criticality, you might ask? Dunno, I can't tell you.
All right, I do know a little. Imagine the ising system I've written about before. In the version without an external magnetic field, it has a single important parameter that we can set - the temperature. If you sweep through the values of temperature, you can find a single point where the behavior of the system changes qualitatively - order wins over disorder at temperatures below roughly 2.72 in reasonable [set everything to 1] units. Near that value - at criticality - you get large scale behavior, huge fluctuations, exponential slowdowns, etc.
Self organized criticality, as I currently understand it, is basically that, except that as you run your simulation, you realize that it displays criticality for a wide range of parameters (here - temperature). To quote Wikipedia (emphasis mine):
the complexity observed emerged in a robust manner that did not depend on finely tuned details of the system: variable parameters in the model could be changed widely without affecting the emergence of critical behavior: hence, self-organized criticality.
Here's an example, a simulation of forest fire (yellow being fire, green being trees, and purple being ash, from which trees can regrow):
import SOC
model = SOC.Forest(L=100, f=0.0001) # f being probability of lightning strike
model.run(500, wait_for_n_iters=500)
model.animate_states(notebook=True)