Conway's Life

Conway's Life preview image

1 collaborator

Hobbes286x286 Rik Blok (Author)


cellular automata 

Tagged by Rik Blok over 10 years ago

computer science 

Tagged by Rik Blok over 10 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.4 • Viewed 887 times • Downloaded 30 times • Run 0 times
Download the 'Conway's Life' modelDownload this modelEmbed this model

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.

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


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]].


[[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. Center for Connected Learning and Computer-Based Modeling, Northwestern University. Evanston, IL. 1999.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals [
  last-mouse-x last-mouse-y
patches-own [

to startup

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)
  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]

to go
  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

to update
  ifelse (nbrs = 3) or ((nbrs = 2) and (pcolor = yellow)) [

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

to turn-on
  if (pcolor != yellow) [ 
    set count-alive  count-alive + 1 
    ask neighbors [
      set new-nbrs  new-nbrs + 1
  set pcolor yellow

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]

to toggle
  ifelse (pcolor = yellow) [ turn-off ][ turn-on ]

to bump
  ask one-of patches with [new-nbrs > 0] [ toggle ]

There is only one version of this model, created over 10 years ago by Rik Blok.

Attached files

File Type Description Last updated
Conway's Life.png preview Preview for 'Conway's Life' over 10 years ago, by Rik Blok Download

This model does not have any ancestors.

This model does not have any descendants.