Artificial Life, CS 417

At their simplest, genetic algorithms (GA) are special techniques for solving min-max or optimization problems.  Applied to a function, GA will give the same result as finding the zeros of a derivative – so at one level, GA are just a numerical technique for solving a calculus problem!  However, the real power of GA lies in its methodology that resembles the biological process of evolution, complete with chromosomes, genes, mutation, etc.   Following this analogy, we will be constructing/creating artificial life forms that evolve to solve a problem posed by their environment.  In many cases we will specify the problem that the artificial life should solve, but in a few cases we will “turn the creatures loose” and let them evolve to do whatever they please.  It is in this latter case that we really begin to challenge our concept of life, and we will be forced to address philosophical questions about the nature of life and death.  What does it mean to be alive?   Does life have to resemble the human/biological model?

At a practical level, we will learn how to use artificial life (a-life) to solve simple problems like calculating the digits of p.  The power of genetic algorithms is staggering, though not all-powerful, and we will explore GA limitations.  We will also explore using genetic algorithms as a technique for automatically writing programs (called evolutionary programming).  To solve more complex problems we will endow our creatures with simple neural net brains whose structure evolve with time.  Finally, we will create an entire artificial world with creatures that can evolve and compete for limited resources.

In my humble opinion, Artificial Life is one of the most fascinating and exciting classes offered to undergraduates.  This class bridges topics in computer science, evolutionary biology, calculus, and philosophy, but please remember that this is a senior level class that requires a lot of Java programming and general familiarity with computer science.  The only formal pre-requisite is object-oriented programming, but calculus would be helpful.

Homework Assignments

Class Notes Part 1 (Intro)

Class Notes Part 2 (Java Review)

Class Notes Part 3 (How GA work)

Class Notes Part 4 (Examples)

Class Notes Part 5 (UML)

Class Notes Part 6 (Schema Theorem)

Class Notes Part 7 (Binary vs. N-ary vs. Float)

Class Notes Part 8 (GA Modifications)

Class Notes Part 9 (Evolutionary Programming)

Class Notes Part 10 (Evolving Turing Machines)

Class Notes Part 11 (Real Critters At Last! Neural Nets)

Class Notes Part 12 (Ecosystem Simulations)