Python implementation of the Sandpile Model
The Abelian sandpile model, also known as the Bak–Tang–Wiesenfeld model, was the first discovered example of a dynamical system displaying self-organized criticality.
To know more read https://en.wikipedia.org/wiki/Abelian_sandpile_model
This module requires matplotlib, numpy and PIL to be installed.
pip3 install matplotlib numpy PillowTo run the model, choose the simulation parameters and run the script sandpile/example.py. Important parameters are the grid size and the number of grains to be dropped.
The main model methods can be found at sandpile/sandpile.py.
from sandpile import Sandpile
pile = Sandpile(options)options may contain:
rows- height of sandpilecols- width of sandpilemax_sand- max count of sandpile grains
It gives you a zero sandpile
Also you can create sandpile from array, if you give array to constructor
from sandpile import Sandpile
pile = Sandpile([[0,1,0],[1,0,1],[0,1,0]])pile.set_sand(x, y, number)where x and y - coordinates of sandpile grid, number - count of sand grains
pile.run()If you would like to plot sandpile and show it, you can use
pile.show(options)options may contain:
save- true = if you want save picture, false = if don't wantfilename- name of the file, where would be picture of sandpile
If you just want to save the picture , then use
pile.save(filename)where filename - name of the file, where would be picture of sandpile
You can find this example in /sandpile/example.py
from sandpile import Sandpile
pile = Sandpile(rows = 201, cols = 201)
pile.set_sand(100, 100, 2**16)
pile.run()
pile.show(save = True, filename = "2^16 grains(1).png")
pile.save(filename = "2^16 grains(2).png")Fractal in a 401x401 lattice created from an initial 2^18 (262144) grains in the center

Fractal in a 801x801 lattice created from an initial 2^20 (1048576) grains in the center
