Terry's Cybersphere VRML Tutor Win95 Tips Web Threads Research

Genesis of Artificial Life


by Terry Smith


Copyright © 1995 by Terry Smith

Table of Contents


Introduction

Von Neumann's Cellular Automata
Conway and the Game of Life
Craig Reynold's Boids
Boids: Flocks and Schools
Bringing It All Together

Appendix One Boids: Flocks and Schools Program Help File
Appendix Two Boids: Flocks and Schools Program Code

Works Cited


Introduction

This paper presents a general overview of artificial life and an introduction to a few of the first advances in the field. Complexity and its achievement through simple rules is a theme explored throughout. In support of this theme, Boids: Flocks and Schools, a computer program developed by the author (based on the previous work of Craig Reynolds) which models the complex behavior of flocks and schools will be reviewed.

Artificial life is a strongly emerging field contributing to genetics, evolutionary biology, biochemistry, computer graphics, robotics, and the emerging field of complexity. So what is artificial life? According to Chris Langton who coined the term, "Artificial Life is the name given to a new discipline that studies 'natural' life by attempting to recreate biological phenomena from scratch within computers and other 'artificial' media.... rather than studying biological phenomena by taking apart living organisms to see how they work, one attempts to put together systems that behave like living organisms" ("AL-Groups"). Also, a strong comparison between artificial intelligence and artificial life can be made. If one views the fundamental function of artificial intelligence as the mimicking and dissection of cognitive life processes for the advancement of computer learning and decision making, then artificial life can be seen as the understanding, conceptualizing, and modeling of biological mechanisms and ultimately, the creation of life itself.


Von Neumann's Cellular Automata

Theoretical studies of a-life began in the 1950s under the strong, agile mind of John von Neumann. As a strong contender to being the most brilliant mathematician of this century, John von Neumann made full use of his extraordinary mind. Born in Hungary on December 28, 1903, he dazzled everyone with his ability in mathematics and his photographic memory. After receiving his doctorate in mathematics, he was named to a Rockefeller fellowship at the University of Göttingen where he published his first masterpiece, Mathematical Foundations of Quantum Mechanics, at age twenty-three. He went on to be the youngest person to lecture at the University of Berlin where he invented game theory, was later a professor at the Institute for Advanced Study at Princeton, brought the A-bomb at Los Alamos to completion a year earlier than was thought possible, led the work on ICBM missiles, and described the computer architecture used on nearly all modern computers--von Neumann processors (Stonaker 91-102). Additionally, he also laid the theoretical framework for a field that at the time didn't exist--artificial life.

Von Neumann understood that the complexity of biological organisms was more than humans had ever understood, but because he believed life was based on logic, like computers, we were capable of forcing organisms to surrender their secrets (Levy 15). In particular, Von Neumann was interested in self-reproduction, a necessary component of any life form. Rather than trying to accomplish this at the genetic level, he wished to abstract from natural self-reproduction its logical form (Langton 1984, 135). The Hungarian-born mathematician's exploration of very basic a-life formats would latter title--father of artificial life.

These a-life formats would be self-operating machines whose behavior could be defined in mathematical terms, cellular automata (CA). "An automaton is a machine that processes information, proceeding logically, inexorably performing its next action after applying data received from outside itself in light of instructions programmed within itself" (Levy 15). Automata themselves were not new, but von Neumann proposed a variation, self-reproducing automata whose information blueprint controlled its behavior and its reproductive activity.

Automata, then, are essentially algorithms, and if an algorithm can be preformed by any machine at all, then a universal Turing machine can perform the same algorithm. (Here, we're considering a universal Turing machine, an abstract machine capable of mimicking any other machine exactly. Christopher Langton would latter show that universality is a sufficient, but not necessary condition for CA self-reproduction.) So if Von Neumann could demonstrate the existence of a Turing machine which could reproduce itself, then it is plausible to conclude that the reproductive processes of living organisms are algorithmicly describable, because by definition the Turing machine must have been using some method, an algorithm. If this can be proved, then the processes on which life is based are algorithmically describable, and therefore, life itself is achievable by machines (Langton 1984, 135).

Von Neumann's self-reproducing structure consisted of a checkerboard (cellular array) with each square, or cell, in one of n possible states. The number of states is finite and each cell is itself a machine, so in technical gobbledegook each cell is a finite state machine (FSM). At any moment, various cells are in a quiescent, or inactive, state with the other cells in an active state. The precise combination of those cells in their given states defines the creature and tells the creature how to behave. At each instance of simulated time, each cell in the checkerboard uses a set of simple rules to determine its next state as a function of its current state and the state of its immediate neighbor cells. Each cell looks at itself and those around it and then asks, "What do I do next?" (One instance of simulated time, mentioned above, means that every active cell has made its decision and determined its next state.)

Von Neumann's original self-replicating structure consisted of 29-state cells and simulated a computer which read in a 150,000 cell tape, followed its simple rules, and used a protruding constructing arm to from a new organism. The original structure came to be known as the kinematic model, or a universal constructor, and was composed of three components: the factory, the duplicator, and the computer (Reggia 1282-1283 and Levy 42-46). This kinematic self-reproducing automaton would be known as the first cellular automaton. His machine would construct any machine described on its input tape and attach a constructed copy of the input tape to the new machine (Langton 1984, 135).

Von Neumann passed away before completing his work on cellular automata, but many others would take off where he left off. His cellular construction was a complex "machine", along the general lines of an early digital computer, using 29 states as logical building blocks, complete with tape reading arms, clocks, encoders, and decoders. So many of his followers took up a question von Neumann had posed, "What is sufficient organization for an automaton to reproduce itself?" E.F. Codd demonstrated a construction universal configuration which requires just 8-states per cell (Langton 1984, 136). Christopher Langton would show that the "'molecular logic of the living state' can be captured by the interactions of virtual automata and thus that the existence of artificial life within cellular automata is a distinct possibility" (Langton 1986, 120). Excited by how the simple rules of cellular automata could generate dynamic and complex patterns, Steven Wolfram was one of many theorists who began to study complexity using cellular automata (Waldrop 87).

Years before chaos theory and the field of complexity, John von Neumann anticipated the phenomenon and what would become central to the understanding of biology. Steven Levy summed up von Neumann's views best in Artificial Life: "Life, (von Neumann) said, depends on a certain measure of complexity. If a certain critical mass of complexity is reached, objects can self-reproduce in an open-ended fashion, not only creating their equals but also parenting more complicated objects than themselves. (30)" Artificial life was just beginning to show biologists and others that what separated life from non-life was not a mystical force, but something absolutely essential to biological systems: complexity.


Conway and the Game of Life

The most famous example of John von Neumann's invention and an inspiration to a generation of artificial life researchers was the game of Life. It was created by the mathematician John Horton Conway in the late 1960s at the University of Cambridge. Like von Neumann, Conway also believed that one could produce fantastic results from the most rudimentary elements, but he saw von Neumann's automaton as too complex and set out to construct an extremely elementary CA (Levy 50).

To come up with a few simple rules that yielded unlimited results but also combined to form a certain balance was not easy, especially since Conway aimed to reduce von Neumann's twenty-nine state to two states, filled or empty, alive or dead. These were the complete rules which Conway settled on:

The rules were simplified to account for the three essentials which Conway wanted in his model: survival, birth, and death.

Conway and his friends began experimenting with the most simple configurations and what happened to them through a few generations. Many settled into stable configurations which they gave names such as beehive, loaf, pond, tub, block, snake, boat, etc. Others were called oscillators due to their alternations between shapes as time steps click by, and some of them were called toads, blinkers, clocks, and traffic lights (See Fig. 1).


Fig. 1. The Life Histories of Five Patterns in "Life".
Rows: (a) Dies (not named configuration), (b) Block (Stable),
(c) Blinker, (d) Beehive, (e) Glider

Unlike von Neumann's CA's which remained only theoretical, Life could be played with a real checkerboard and real pieces to represent live cells. As their search expanded, Life grew off of the small coffee table, across the room, and out of the room itself. (Conway would soon use a PDP-7 computer to make his discoveries.) More and more simple life-forms were becoming complex. A classic example was the R Pentomino which began with an arrangement of five neighboring cells roughly shaped like the letter R. At each click of time it became something different. Small objects appeared and broke up; symmetry came and dissolved and came back. It was then that a colleague of Conway's, Richard Guy, discovered the first glider. It was walking like a single-celled organism and returning to its original configuration after four time steps, having moved itself one cell diagonally on the checkerboard (Levy 53).

Life's instant popularity began when Martin Gardner's "Mathematical Games" column in Scientific American (Gardner 1970). Conway's games were not new to the column, he was always coming up with some kind of mathematical recreation (an oxymoron to some). But this time he added a bonus, he wanted to find a finite initial configuration of Life that would generate infinite populations. He said it couldn't be done, and offered $50 to anyone who could disprove it. Suggestions were made in the article on patterns that could prove it: a "gun" that repeatedly shoots out gliders or a "puffer train" that moves but leaves behind a trail of "smoke" (Gardner 121-23).

After reading the October 1970 article, William Gosper immediately began work on a program for him and his fellow hackers to run Life configurations on a PDP-6 computer. Gosper was one of the key computer hackers at MIT's Artificial Intelligence Laboratory, and one of the brightest programmers in the world. Within a month his group had found the glider gun, and later, they found a puffer train too (Levy 57).

The glider gun was a major breakthrough. It was the last piece Conway needed to prove that Life could support universal computation. With glider streams to represent bits, a glider gun to serve as a pulse generator, and blinkers and gliders to serve as a clock, the equivalent of and-gates, or-gates, not-gates, and a computer's internal storage could be produced. Thus, Life was capable of emulating any other computation machine, whether electronic or natural. Although he never actually built his virtual computer, the MIT group created a Life-based adding unit. As Conway recalls, "It worked like clockwork. Streams of gliders would come around here, and sort of ticked around--click click click click click--and then the sum came out as another stream. (Levy 57)"

Conway had proved that von Neumann's ideas could be realized in a much simpler context. All the complexity of Life had been created with two CA states and four rules. Scientific papers on Life explorations would be published for years (especially by Gosper, see Gosper 1984), and all future a-lifers inspired by it. Despite that no Life configuration yielded a self-reproducing animal in a reasonably small space, "On a large enough scale your would really see living configurations," Conway says. "Genuinely living, whatever reasonable definition you care to give to it. Evolving, reproducing, squabbling over territory. Getting cleverer and cleverer. Writing learned Ph.D. theses. On a large enough board, there's no doubt in my mind this sort of thing would happen" (qtd. in Levy 58).


Craig Reynolds's Boids

For several days in 1986 computer animators at Symbolics Corporation in Los Angeles would bring their lunch to a local cemetery and watch the blackbirds. Among them was Craig Reynolds who, from the time he was in college, had thought he could write computer programs with simple rules to simulate the complex movements of animals (Levy 76). Fascinated by the blackbirds, he was convinced he could recreate their behavior on a computer. In Reynolds's description, "The motion of a flock of birds is . . . simple in concept yet is so visually complex it seems randomly arrayed and yet is magnificently synchronous. Perhaps most puzzling is the strong impression of intentional centralized control. Yet all evidence indicates that flock motion must be merely the aggregate result of the action of individual animals, each acting solely on the basis of it local perception of the world" (qtd in Levy 76).

The trick was finding the few simple rules to produce the global, complex behavior of a flock. Each "boid" (an abbreviation of "birdoid" which applied to schooling fish as well as simulated flocking) would be autonomous and act only on those simple rules, which Reynolds finally boiled down to three:

  1. Each boid must maintain a minimum distance from other objects and other boids. (separation force).
  2. Each boid tries to match its velocity with boids in its neighborhood.
  3. Each boid tries to move toward the perceived center of mass of boids in its neighborhood. (clumping force) (Waldrop 241 and Levy 77)
None of them said, "Form a flock." The rules were entirely local, referring only to what an individual boid could see and do in its own vicinity. And yet when Reynolds implemented them on his computer, flocks did form, every time.
Fig. 2. A Flock of Craig Reynolds's "boids" Confront a Cluster of Pillars,
from Steven Levy, Artificial Life (New York: Vintage Books, 1992) 79.

Steven Levy describes Reynolds's results:
As they flew, the boids would notice what their neighbors were doing--as though they were cells in a cellular automaton--and apply that information to their own actions in the next time step. Each boid, for instance, would detect the center of gravity within the radius it was aware of and move toward that point. If other boids were to the left, for instance, the boid would move left. It would try to match its speed to the velocity of the nearby boids, unless slowing down or speeding up was required to stay near the flock. And if a boid looked as though it was inching too close to a neighbor, it would move away from that potential collision. (77)

Reynolds also added obstacles, thick cylinders, to the program. The flock would diverge around a cylinder and reunite on the other side (See Fig. 2). This behavior and other responses which were not programmed into them led Reynolds to believe his theory had been enhanced by being successfully implemented (Levy 78).

He presented his results in 1987 at the very first artificial life workshop which was organized by Chris Langton and held at Los Alamos. The question on many attendee's minds was whether or not the responses were truly emergent. Among them were John Holland, founder of genetic algorithms and inventor of classifier systems, and Brian Arthur, non-equilabrium complexity economist, who debated the subject late one Tuesday evening while driving from Los Alamos back to the Santa Fe Institute. Holland was very skeptical. "Maybe everything that's happening in there...is so obvious from the rules that you aren't learning anything new. At least, I'd want to have the ability to put other sorts of objects in, change the environment, and see if it still behaved in a reasonable way" (qtd in Waldrop 242). Arthur wouldn't disagree and questioned what emergence really is. Isn't everything that happens in the universe already built into the rules that govern the behavior of quarks, including life? "I couldn't see how you could define 'truly' emergent behavior," says Arthur. "That goes to the heart of the problem in artificial life" (qtd in Waldrop 242).

What is emergence? When do you have it and when do you not? For any given system, how much of it is emergent and how much is not? When do you have emergent behavior that was unexpected? These questions are still yet unknown.


Boids: Flocks and Schools

Boids: Flocks and Schools is a computer program created to reenact Craig Reynolds's results using his three rules described above. A user may simply run the program from any DOS-based PC using the preset values for program's variables, or he may experiment by populating the world himself and then running the simulation.

It's important to note two important differences between this and Reynolds's program. First, the boids of Boids: Flocks and Schools operate in a two-dimensional world, whereas Reynolds's boids existed in 3-D with pillars as obstacles instead of circles. This discrepancy is largely due to the fact that Reynolds had access to graphics animation development software at his company and lesser so due to the fact that Reynolds's program was designed for a graphics workstation, not any old slow PC. But both programs use filled triangles to represent the boids. Secondly, at the start of the program Reynolds's boids are spread out all over the screen and come together to form a flock; however, the boids in Boids: Flocks and Schools are initially randomly positioned at the top-left corner of the screen and usually immediately begin moving a safe distance away from each other. What effect this second difference has on the "emergence" issues of the program is left to the reader; however, the amazing lifelike results of implementing just three simple rules is significant nevertheless.

At the start of the program all the boids have the same values for their parameters which then vary as each boid makes its own decisions. A discussion of these follows. The number of boids can be set between 1 and 30. Each boid has an awareness radius within which it sees other boids and obstacles. It matches its velocity and direction based on those within this radius. Each boid also has a safety radius within which it judges whether it is too close or nearing to close to other boids and obstacles. Realistically, it should be less than the awareness radius, but the user may set it greater than if he or she chooses. The velocity is the number of pixels traveled in each time step. The acceleration value also acts as the amount of deceleration. It is a tricky value to set since it will usually take several time steps to catch up with the other boids or slow down to avoid a collision. An appropriate balance between velocity and acceleration is essential for a realistic simulation.

Initially, all boids start out moving in the same direction, but since they are randomly position in the top-left corner of the screen, they immediately begin moving away from each other and adjusting their directions. The center of the world space is (0,0) at the top-left corner with down and right being positive, up and left negative. Each boid's initial direction vector is normalized from a right-left (x) and an up-down(y) directional weight. So for the boids to initially move down and across the screen at a 45 degree angle, a 1 would be entered for both the right-left and up-down directional weights. Circles act as obstacles and are optional with any number possible. Each is simply composed of its X and Y coordinates and its radius.

Boids: Flocks and Schools is not an extremely provocative program and normally last only several seconds for each simulation. But in those seconds it's very important to observe the behavior of the individual boids and the boids as a whole, to notice the patterns that emerge such as V-shapes, and to realize that the behavior of the group is the result of simple rules.

Like Reynolds's program, Boids: Flocks and Schools is based on local, boid-to-boid interaction. This locality allows the flock to adapt to changing conditions like an adapting flock. There is no "boss boid". Each boid reacts to what the other boids are doing in its immediate neighborhood, allowing the flock to branch around obstacles as each boid does its own thing. Trying to do that with top-down specifications would be, as the author of Complexity explains, "impossibly cumbersome and complicated, with the rules telling each boid precisely what to do in every conceivable situation" (Waldrop 279). And it's impossible to cover every conceivable situation; however, bottom-up systems seldom encounter combinations of events they don't know how to handle.

Does this and Reynolds's program accomplish its goal? It certainly exceeded Reynolds's expectations. With the incorporation of advanced graphics hardware and software, it is easily to imagine this method being used to produce three-dimensional, flapping blackbirds or geese that could appear in a computer game or in a Steven Spielberg movie. And among artificial lifers it certainly raised more than a few eyebrows, even more questions, and inspired quite a few more programs into birth.


Bringing It All Together

John Von Neumann's kinematic self-reproduing cellular automata, John Conway's extension of these ideas into the Game of Life, and Craig Reynolds's trio-ruled boids were only a few of the first advances made in what would later be known as the field of artificial life. Since their foundation, the field has seen genetic algorithms, gene switching modeling networks, autocatalytic networks explaining the origin of life, Lindenmayer's computer-generated plants, Thomas Ray's artificial ecologies, Chris Langton's life at the edge of chaos model, Stuart Kauffman's order and self-organization theories, and ALIFE robots by the dozens, just to name a few.

The field has proved to many sceptics that computers can be used to model the basic biological mechanisms of evolution and life itself, and like many fields, it raises questions faster than people can answer them. It had always been von Neumann's intuition that the computer would become the staging ground for scientific experimentation, even in biology. Indeed, the pioneers of ALIFE have discovered that "lifelike" behavior seems to lie in such principles as bottom-up rules, no central controller, and emergent phenomena. And as Chris Langton has said, "The most surprising lesson we have learned from simulating complex physical systems on computers is that complex behavior need not have complex roots" (Waldrop 279).


Appendix One
Boids: Flocks and Schools Program Help File


	The following text should bear the name "readme.txt" and appear in the
same directory as the program Boids: Flocks and Schools, "boids.exe":


                           Boids: Flocks and Schools
                               Version 1.0  1995
                                by Terry Smith

 	Boids: Flocks and Schools uses simple rules to simulate the complex
 movements of animals, creating simulations which can be viewed as either
 flocks or schools.


                            ABOUT THE PROGRAM

	The program is based on the work of Craig Reynolds who speculated on
 how difficult it would be to get computer creatures to flock in the same way
 blackbirds do.  Reynolds's theory was that flocking could be modeled by
 allowing each individual in the simulation to apply a few simple rules.
 Reynolds's settled on three rules:

            1.  A clumping force that kept the flock together.

            2.  An ability to match velocity so that the birds
                in the flock would move at the same speed.

            3.  A separation force that prevented birds from
                getting too close to each other.

 The simulated flocking applied not only to birds but also to schooling
 fish.  Reynolds's abbreviated "birdoid" and called them "boids".   Take a look at
 Steven Levy's description from his book Artificial Life:

          Their observations and actions were entirely local.  As they flew,
      the boids would notice what their neighbors were doing--as though they
      were cells in a cellular automaton--and apply that information to their
      own actions in the next time step.  Each boid, for instance, would
      detect the center of gravity within the radius it was aware of and move
      toward that point.  If other boids were to the left, for instance, the
      boid would move left.  it would try to match its speed to the velocity
      of the nearby boids, unless slowing down or speeding up was required to
      stay near the flock.  And if a boid looked as though it was inching too
      close to a neighbor, it would move away from that potential collision.


                             USING THE PROGRAM

 Main Menu options:
      Run Simulation - If chosen before Populate, the simulation is built
                       from the preset conditions described below.  The user
                       may set up his or her own simulation by choosing
                       Populate and then, when returned to the main menu,
                       choose Run Simulation.  Any keypress exits the
                       simulation.

      Populate       - The user can set the number of boids and their
                       variables, as well as the number and location of
                       obstacles, from the Populate screen.  If the number of
                       boids is set to 0, the preset conditions are restored
                       to the world and the user exits the Populate screen.

      Help           - Displays this help screen.  This help file, contained
                       in readme.txt, should be in the current working
                       directory.  If it is not, the program will ask for
                       the drive followed by the directory in which readme.txt
                       is contained.  This help file can be printed on a
                       dot matrix printer by typing from the directory in
                       which it is contained:> type readme.txt > prn 
                       This file can be shown to the screen in the same
                       manner by typing:> type readme.txt | more 

      Quit           - Quits and exits the program.  Any Populate setup by the
                       user is not saved.

 Populate options:
   Hint:  If at any time you wish the preset values restored to the world,
          simply choose Populate from the Main Menu and type 0 as the number
          of boids wanted.


      Number of boids:  0 means quit and use preset values.
                        30 is the maximum number.

      Awareness radius: Radius around each boid within which it sees other
                        boids and obstacles.  It matches its velocity and
                        direction based on those within this radius.
                        Integer value.

      Safety radius:    Radius around each boid within which it judges
                        whether it is too close or nearing to close to other
                        boids and obstacles.  Realistically, it should be
                        less than the awareness radius.  Integer value.

      Velocity:         The initial velocity of all boids.  Enter 0 to use
                        the preset velocity shown below in the preset
                        conditions.  Represents number of pixels traveled in
                        each time step.  Floating point value.

      Acceleration      The acceleration and deceleration in one time step
                        of boids as they speed up to others and slow down to
                        avoid collisions.  Realistically, significantly lower
                        than the velocity, usually less than one.  Floating
                        point value.

      Right-left direction:  The right to left directional weight.  Positive
                        is to the right, negative to the left.  For users
                        familiar with vectors, this is the x component of
                        each boids direction vector.  Note that since all
                        boids start in the top left corner,  any negative
                        value will cause most boids to immediately leave
                        the positive world space sector that the user views
                        on the screen.  Integer value.

      Up-down direction:     The up to down directional weight.  Positive is
                        down, negative up.  This is the y component of each
                        boids' direction vector.  Again, the value should
                        normally be greater than or equal to zero.  This
                        value and the right-left direction value are
                        normalized together to create the initial direction
                        vector for each individual boid.  Integer value.

      Number of obstacles:   Number of obstacles to be added to the world.
                        0 means quit, use no obstacles, and use boids only
                        based on the above preset conditions.  All obstacles
                        circles (or trees?).

      X and Y coordinates:   The positive coordinates of an obstacle
                        separated by a space.  For example: 100 200 
                        Coordinates separated by a comma may cause immediate
                        return to the main menu and irregular results when
                        running the simulation.  Negative values will be
                        converted to positive.  Integer values.

      Obstacle radius:       The radius of an obstacle.  A negative value will
                        be converted to positive.  After completing this
                        entry, the user will return to the X and Y coordinates
                        above and repeat the loop for each additional
                        obstacle to the entered.  Integer value.

 Preset Populate Conditions:
      Number of boids: 	        20
      Awareness radius: 	40
      Safety radius:            20
      Velocity:                	6.0
      Acceleration:         	0.5
      Right-left:              	1
      Up-down:               	1
      Number of obstacles: 	3
      X and Y coordinates: 	100 120
      Obstacle radius:     	20
      X and Y coordinates: 	220 200
      Obstacle radius:     	30
      X and Y coordinates: 	340 300
      Obstacle radius:     	25



                                    REFERENCES

     Levy, Steven. 1992. Artificial Life: A Report from the Frontier Where
        Computers Meet Biology. New York: Vintage Books.

     Waldrop, Mitchell M. 1992. Complexity: The Emerging Science at the Edge
        of Order and Chaos.  New York: Simon & Schuster.

 Copyright 1995 Terry Smith



                                    END OF HELP FILE

Appendix Two
Boids: Flocks and Schools Program Code

//====================================================================//
// Programmer:  Terry Smith                                           //
// Prog. name:  BOIDS: Flocks and Schools  Boids.cpp  Version 1.0     //
// August 9, 1995                                                     //
// Turbo C++ 3.0 (IDE)                                                //
//      Boids: Flocks and Schools uses simple rules to simulate the   //
// complex movements of animals, creating simulations which can be    //
// viewed as either flocks or schools. The program's companion        //
// readme.txt file, which must be in the same directory as this       //
// program, contains more information.  This sourcecode version is    //
// not dynamically linkable. It was compiled under the small memory   //
// model with egavgaf.obj, sansf.obj, littf.obj, and tripf.obj in the //
// current directory.                                                 //
//                                       Copyright 1995  Terry Smith  //
//====================================================================//

Sorry, program code is not available for anyone to copy.
If you have a legitimate reason for viewing it, please contact the author.


Works Cited

"AL-Groups." Usenet news. comp.ai.alife. 1995.

Elwyn R. Berlekamp, John Horton Conway, and Richard Guy. Winning Ways for Your Mathematical Plays. New York: Academic Press, 1982.

Gardner, Martin. "Mathematical Games: The Fantastic Combinations of John Conway's New Solitaire Game 'Life'". Scientific American, Oct. 1970 Vol 223 Num 4: 120-123.

Gosper, R. William. "Exploiting Regularities in Large Cellular Spaces." Physica D: Nonlinear Phenomena. 10D (Jan 1984): 75-80.

Langton, Christopher G. "Self-Reproduction in Cellular Automata." Physica D: Nonlinear Phenomena. 10D (Jan 1984): 134-144.

________. "Studying Artificial Life with Cellular Automata." Physica D: Nonlinear Phenomena. 22D (1986): 120-149.

Levy, Steven. Artificial Life: A Report from the Frontier Where Computers Meet Biology. New York: Vintage Books, 1992.

Stonaker, Frances Benson. Famous Mathematicians. New York: J.B. Lippincott Company, 1966.

Waldrop, Mitchell M. Complexity: The Emerging Science at the Edge of Order and Chaos. New York: Simon & Schuster, 1992.