A genetic algorithm provides a simple way to search for an approximately optimal solution for an otherwise difficult and complex problem. By simulating the process of evolution, random mutation, breeding and selective pressure, a program can evolve a solution to a problem.
Seth Just wrote in with a simple and customizable genetic algorithm written in Perl. Given a problem set, you can define a function to randomly initialize each “individual”, a mutation function to alter an individual, a breeding function that combines individuals with the strongest members, and a fitness function that computes the strength of an individual. His code is well documented and you can adapt it for your own problems fairly easily.
He also points us to a couple of interesting projects that are worth mentioning. The evolution of the Mona Lisa, pictured above, is an example genetic algorithm written by Roger Alsing. Given only 50 semi-transparent polygons and over 900 thousand mutations, his program is able to optimize their placement and color to produce an incredible likeness of the Mona Lisa.
Another cool example is this Flash vehicle simulator. A car with two wheels and two passengers is randomly constructed and its fitness is defined by how far it is able to drive without the passengers touching the ground. At first, most iterations don’t even get past go, but as the evolution proceeds, a more robust vehicle is formed which is capable of navigating the terrain.
Genetic Algorithms in Perl
Genetic Programming: Evolution of Mona Lisa
6 thoughts on “Fun with genetic algorithms”
Has anyone else checked this genetic car out and just stared at it for hours? I am really curious how it works. Does each car only get to drive for a sent amount of time? Which variables are changed and how can I track the changes?
@Moldy When ever the dotted red circle touches the ground it reiterates
The Mona Lisa one reminds me of something I hacked up once:
Never did quite get it to do what I wanted — but it worked great on synthetic data.
Comments are closed.