The Short Description:
Here you have it: the largest, most complex programming project now available on tannerhelland.com. Originally a final project for a university bioinformatics course, my artificial life simulator has now been completely retooled as a full-blown lesson in evolution and population genetics.
As with most artificial life simulators, a set of simple artificial creatures compete for limited resources. Each creature has a strand of pseudo-DNA that determines three basic attributes: size, speed, and range (how far it can see). When the little critters reproduce (asexually… unfortunately), mutations may occur. Over time, this can lead to remarkable changes in gene frequency throughout the population. Typically the creatures with a balance of speed and range tend to win out over bigger, slower creatures and smaller, faster ones.
The code is well-optimized, so it should run decently on any hardware. As a bonus, the simulator can be surprisingly addicting – my longest simulation to date ran for over 500,000 cycles before all the creatures died. For further analysis of a particular simulation run, all data can be saved to a tab-delimited text file compatible with any major spreadsheet software.
The Long Description:
As you can imagine, a project of this magnitude warrants a fair amount of documentation. I am currently working on a “how to use this software to teach evolution and population genetics” tutorial that educators – or anyone interested in biology – can read to see how things like genetic drift, population equilibrium, the “bottleneck” effect, and other aspects of a small, closed population work.
Unfortunately, a document like that takes some time to create… so rather than holding off until I’ve finished it, I’ve decided to upload the project for people to start playing with. If you have any comments or questions, let me know and I’ll see if I can’t work answers into the final version of the tutorial.
(If you’d like to be notified when the documentation is finished, please let me know via the contact form. I plan on sending out an email once all updates have been posted.)