Conway's Life
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Conway's Game of Life
A [NetLogo] model by Rik Blok.
http://www.zoology.ubc.ca/~rikblok/wiki/doku.php?id=science:conwaysgameoflife:start
This [NetLogo] model implements Conway's Game of Life a cellular automaton John Horton Conway designed to be difficult to anticipate the dynamics of starting patterns. This implementation incorporates some ideas I focused on in my research: finite-size effects [[Blok97]] and asynchronous updating [[Blok99]].
How it works
Each site on the square 2-dimensional lattice can be in one of two states (alive or dead). All sites are updated in parallel according to the following rules:
- Loneliness: An alive site with less than two of its 8 nearest neighbours also alive becomes dead;
- Overcrowding: An alive site with more than three alive neighbours becomes dead; and
- Birth: A dead site with exactly three alive neighbours becomes alive.
Otherwise, sites remain in the same state.
In this implementation, alive sites are shown in bright yellow. Dead sites fade to black.
How to use it
Choose world-size and initial-density of alive sites and press setup to create a random starting configuration. You may also press draw to draw your own starting configuration with the mouse.
Press go to repeatedly apply the rules and watch the configuration evolve. Adjust the speed slider at the top as desired. You may also draw while the simulation is going.
You may adjust the synchronicity of the simulation -- the fraction of sites that are updated on each iteration. When synchronicity=100% we have Conway's original Game of Life. As synchronicity is reduced some sites are skipped in each step, so the dynamics start to deviate from Conway's. As synchronicity approaches 0% most sites are not updated in any one iteration, and the simulation approaches asynchrony -- almost the same as one site updating at a time. Notice how the patterns differ as synchronicity varies.
To perturb a configuration -- by toggling one site -- press bump. You may want to do this once the dynamics have settled to a stable (or simply repeating) pattern. Some bumps will have little effect but occasionally they will cascade through the whole space, changing the entire system. It is difficult to predict the size of the cascade.
Things to notice
Since there are a fixed, finite number N of sites there are only a finite number of possible configurations (2^N) and the configuration must necessarily repeat as it evolves. In principle the period between repeating configurations could be anything up to 2^N but in practice it is much shorter: typically 1 or 2. A notable exception can occur when synchronicity=100% and a glider is present -- rarely a glider may travel around the entire length of the space and return to its original position.
Things to try
Draw
Try drawing your own starting configuration. Set the initial-density=0% and press setup to set all sites to dead. Press the draw button to activate drawing mode, then use the mouse to draw a shape, such as the R-pentomino.
Boundary conditions
This implementation defaults to periodic boundary conditions: the left side can be thought of as wrapping around to touch the right and the top touches the bottom. In the native version of NetLogo (not the applet) you can switch to cold boundaries where any sites outside of the visible area are assumed to be dead -- press Settings... at the top-right of the interface and toggle the World wraps... checkboxes. Notice that periodic boundaries reduce edge effects [[Blok97]].
References
[[Blok97]] Hendrik J. Blok and Birger Bergersen. Effect of boundary conditions on scaling in the "game of Life". Phys. Rev. E, 55:6249-52. doi:10.1103/PhysRevE.55.6249. 1997.
[[Blok99]] Hendrik J. Blok and Birger Bergersen. Synchronous versus asynchronous updating in the "game of life". Phys. Rev. E, 59:3876-9. doi:10.1103/PhysRevE.59.3876. 1999.
[[NetLogo]] Wilensky, U. NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University. Evanston, IL. 1999.
Comments and Questions
globals [ last-mouse-x last-mouse-y count-alive count-patches time-elapsed ] patches-own [ nbrs new-nbrs ] to startup setup end to setup if (world-size = " 64x64 ") [ resize-world 0 63 0 63 ] if (world-size = "128x128") [ resize-world 0 127 0 127 ] if (world-size = "256x256") [ resize-world 0 255 0 255 ] if (world-size = "512x512") [ resize-world 0 511 0 511 ] set-patch-size (512 / world-width) clear-all ask patches [ if (random 100 < initial-density) [set pcolor yellow] ] set count-alive count patches with [pcolor = yellow] set count-patches count patches ask patches [ ; set new-nbrs nbr-count set new-nbrs count neighbors with [pcolor = yellow] ] reset-ticks end to go reset-timer ask patches [set nbrs new-nbrs] if-else (synchronicity = 100) [ ; shortcut for perfect synchrony ask patches with [pcolor != black or nbrs > 1] [ update ] ][ ; might be faster to select binomial subset of patches for small synchronicity ask patches with [pcolor != black or nbrs > 1] [ if random 100 < synchronicity [ update ] ] ] tick-advance synchronicity / 100 plotxy ticks count-alive * 100 / count-patches set time-elapsed time-elapsed + timer end to update ifelse (nbrs = 3) or ((nbrs = 2) and (pcolor = yellow)) [ turn-on ][ turn-off ] end to draw if mouse-down? [ ask patch mouse-xcor mouse-ycor [ if not ((pxcor = last-mouse-x) and (pycor = last-mouse-y)) [ toggle ] set last-mouse-x pxcor set last-mouse-y pycor display ] ] end to turn-on if (pcolor != yellow) [ set count-alive count-alive + 1 ask neighbors [ set new-nbrs new-nbrs + 1 ] ] set pcolor yellow end to turn-off if (pcolor = yellow) [ set count-alive count-alive - 1 ask neighbors [ set new-nbrs new-nbrs - 1 ] ] ; note: color 40=black, 45=yellow set pcolor ifelse-value (fade and pcolor > 40) [pcolor - 1] [black] end to toggle ifelse (pcolor = yellow) [ turn-off ][ turn-on ] end to bump ask one-of patches with [new-nbrs > 0] [ toggle ] end
There is only one version of this model, created almost 11 years ago by Rik Blok.
This model does not have any ancestors.
This model does not have any descendants.