Python Programming

Lecture 8 Complex Systems

8.1 Complex Systems

Complex Systems (复杂系统)

  • A complex system is a system composed of many components which may interact with each other.
  • These parts are often quite simple to understand and to model individually.
  • When these parts are put together, most complex systems display surprising and unpredictable behavior that can be difficult to explain just by looking at the parts separately.

  • Examples of complex systems are Earth's global climate, organisms, the human brain, infrastructure such as power grid, transportation or communication systems, complex software and electronic systems, social and economic organizations (like cities), an ecosystem, a living cell, and ultimately the entire universe.

Example 1: bird flock (Complex Adaptive Systems, 复杂适应系统)

  • The rules are simple!
  • There is no "leader" or "control".
  • 1. Stay together; 2. Do not crash into each other; 3. Avoid predators and obstacles

Example 2: butterfly effect (Chaos Theory, 混沌理论)

  • In chaos theory, the butterfly effect is the sensitive dependence on initial conditions in which a small change in one state of a deterministic nonlinear system can result in large differences in a later state.
  • The term is closely associated with the work of mathematician and meteorologist Edward Norton Lorenz. He noted that butterfly effect is derived from the metaphorical example of the details of a tornado being influenced by minor perturbations such as a distant butterfly flapping its wings several weeks earlier.

Example 3: pattern formulation (Fractal Theory, 分形理论)

  • In mathematics, fractal is a term used to describe geometric shapes containing detailed structure at arbitrarily small scales, usually having a fractal dimension strictly exceeding the topological dimension.


  • Complex theory:
    • Reduce the problem and understand the rule
    • build up the model and simulate the phenomenon
    • Predict the future
  • Disciplines: statistical physics, information theory, nonlinear dynamics, anthropology, computer science, meteorology, sociology, economics, psychology, and biology.
  • The 2021 Nobel Prize in Physics was awarded to Syukuro Manabe, Klaus Hasselmann, and Giorgio Parisi for their work to understand complex systems. Their work was used to create more accurate computer models of the effect of global warming on the Earth's climate.

Can complex system be Designed?

8.2 Cellular Automaton

Cellular Automaton (元胞自动机)

  • At the boundary of mathematics, computer science, and games lies a peculiar field that studies cellular automaton.

  • Cellular automaton is a simple set of rules governing the appearance of spaces, or cells, in a line or on a grid.

  • Each cell may be either black or white. The rules determine what causes a cell to change from black to white (or vice versa) and how the color of a cell influences the cells around it.

  • Mathematicians think of such a collection of rules as a hypothetical machine that operates by itself without human intervention. This is why they are called automata.

  • A cellular automaton starts with its cells in a given configuration (some white, some black) and then applies the rules to each cell to determine whether its color should change.

  • It does not change a cell immediately; it checks every cell in the grid first, marks the ones to be changed, and then changes them all before the next iteration. Then it repeats the process. Each iteration is called a generation.

  • British scientist Stephen Wolfram has created a simple cellular automaton that exhibits emergent behavior.

  • He was named an inaugural fellow of the American Mathematical Society. he is the founder and CEO of the software company Wolfram Research where he worked as chief designer of Mathematica and the Wolfram Alpha answer engine.

The simple cellular automaton

  • It displays one set of possible rules and the resulting, surprisingly complex pattern that is created by printing each new generation of the system under the previous one. It begins with one black cell and all the rest white.

  • Notice that even though there is nothing random in the rules, this cellular automaton produces a pattern with distinctive and apparently random features.

  • Wolfram described his work in detail in his book A New Kind of Science (2002).

    • They must consist of simple cells whose rules are defined locally.

    • The system must allow for long-range communication.

    • The level of activity of the cells is a good indicator for the complexity of the behavior of the system.

    • Cellular automata show us that the threshold for complexity is surprisingly low.

8.3 Game of Life

Game of Life (生命演化游戏)

  • Probably the most famous cellular automaton was invented by John Conway and is called the Game of Life.

  • Conway was a Professor Emeritus of Mathematics at Princeton University in New Jersey.

  • Conway's automaton consists of cells that are laid out on a two-dimensional grid.

  • this grid goes on indefinitely in all directions. Each cell on the grid has eight neighbors: the cells that surround it orthogonally and diagonally. Each cell can be in two different states: It is either dead or alive.

  • In most examples, dead cells are rendered white, while live cells are colored black.


  • A live cell that has fewer than two live neighbors dies from loneliness.

  • A live cell that has more than three live neighbors dies from overcrowding.

  • A live cell that has two or three live neighbors stays alive.

  • A dead cell that has exactly three live neighbors becomes alive.


  • When set into motion, the Game of Life usually has quite chaotic results, with a lot of activity exploding from its original live cells.

  • Demo: Game of Life (Random)

  • Frequently after a number of iterations the Game of Life settles in a more or less stable configuration, sometimes with a few groups of cells that oscillate between two states.

import os
import random

width = 60
height = 60
screen = []

Step 1: Initialization

def Init():
    for i in range(height):
        line = []
        for j in range(width):
            if random.random() > 0.8:
                line.append(' ')

Step 2: Show the screen

def PrintScreen():
    for i in range(height):
        for j in range(width):
            print(screen[i][j] + ' ', end='')

Step 3: Get cells

def TryGetCell(i, j):
    i = i % height
    j = j % width
    return screen[i][j]

Step 4: Count cells nearby

def GetNearbyCellsCount(i, j):
    nearby = []
    nearby.append(TryGetCell(i - 1, j - 1))
    nearby.append(TryGetCell(i - 1, j))
    nearby.append(TryGetCell(i - 1, j + 1))
    nearby.append(TryGetCell(i, j - 1))
    nearby.append(TryGetCell(i, j + 1))
    nearby.append(TryGetCell(i + 1, j - 1))
    nearby.append(TryGetCell(i + 1, j))
    nearby.append(TryGetCell(i + 1, j + 1))
    num = 0
    for x in nearby:
        if x == '#':
            num = num + 1
    return num

Step 5: Update

def Update():
    global screen
    newScreen = []
    for i in range(height):
        line = []
        for j in range(width):
            line.append(' ')
    for i in range(height):
        for j in range(width):
            count = GetNearbyCellsCount(i, j)
            if count == 3:
                newScreen[i][j] = '#'
            elif count < 2 or count > 3:
                newScreen[i][j] = ' '
                newScreen[i][j] = screen[i][j]    
    screen = newScreen

Step 6: Console

def Start():
    print('== Game of Life ==')
    print('Press any key...')
    c = input()
    while c!= 'q':
        c = input()

  • One of the earliest questions that the researchers studying the Game of Life asked themselves was this: "Is there an initial configuration of live cells that expands forever?"

  • glider

  • Demo: glider

  • Glider gun


  • Functions
    • Reading: Python for Everybody, Chapter 4
    • Reading: Python Crash Course, Chapter 8