floatworld is an artificial life laboratory in which virtual creatures ('Creats') compete for space and energy.
Each creature is controlled by a recurrent neural network and harvests energy in order to reproduce. Time and space are discretized.
Creats obtain a variety of data from their environments that is fed to their neural network inputs, including a simple short-range 'sense of smell' and information about the state of their bodies.
At every time step Creats choose from a variety of actions to perform, ranging from movement to interaction with other Creats to reproduction (should they possess sufficient energy). There is no objective fitness function.
Random mutation and natural selection result in the evolution of different strategies. Creats can variously learn to co-operate, fight, become efficient at harvesting energy, and perform simple communication.
Unlike genetic algorithms, the form of evolutionary computation involved in floatworld is open-ended: no fitness function is specified, and Creats can use whatever strategies they can to maximize their reproduction and survival.
Objects can be introduced into the environment to interact with the creatures.
Various parameters of the world can be controlled 'live' using side panels, as well as parameters of the currently selected Creat or object.
For some screenshots, see the wiki.
It's easier to encourage you to play around for yourself with the code than to explain what everything is in detail -- although I need to write a comprehensive tutorial before that is realistic.
I use Qt Creator as my IDE (it's pretty good, and integrates cleanly with various Qt tools).
Download and install the Qt SDK for your platform from their website.
I've only built floatworld on Snow Leopard, so I can't yet speak about building it on other platforms. The build process is painless: first ask Qt to produce a makefile using
qmake, then actually build the sources using
make. In more detail:
To build an appropriate Makefile using
qmake, run the following command from the project directory.
qmake floatworld.pro -r -spec macx-g++
The executable should then appear under
build/floatworld.app/Contents/MacOS. I'm not providing a packaged executable as of yet.
Building floatworld (Ubuntu 10.10 MM)
Ubuntu does not include the most recent Qt version by default in the package system, meaning you'll need to build it if you don't already have it installed.
Qt install from source on Ubuntu:
- Install Qt-sdk from package manager (this should install Qt dependencies):
sudo apt-get install qt-sdk qt4-qmake.
- Download and extract Qt source: Qt-4.7.0rc1 from Nokia
- In the qt-everywhere-opensource-src-4.7.0-rc1 directory, compile Qt (note that this will take ~6G of storage space when complete ):
- Once the source is compiled, install Qt using
sudo make install.
floatworld install from source on Ubuntu:
- Go to the floatworld/ directory and run
qmake floatworld.pro -r
maketo build floatworld in build/ .
- Simulation at various speeds
- Display of floatworlds as simple bitmaps
- Loading and saving of floatworlds and their contents
- Simple objects like impassable blocks and Skinner boxes
- Changing of various world parameters
- Inspection of individual Creat activity
- Animation of Creat movements and interactions using vector graphics
- Snapshotting of simulation runs so they can be rewound
- Drag and drop management of objects within the floatworld
- Pluggable analysis widgets to monitor population size and dynamics, genetic diversity, and Creat behavior
- A library of loadable scenarios to illustrate various emergent phenomena
- A variety of interesting new objects for Creats to interact with
A good hub is Biota.org, but some (far more impressive) projects that run in a similar vein are: