This is a preliminary release of a reworking of a reworking of a program I wrote back in the mid 90's.
This is a genetic programming system based on the idea of using a kind of grammar as the underlying gene. Grammars are stored in a raw format, then parsed into productions. Those productions are expanded. The resulting strings are then evaluated (usually in a kind of basic stack machine) and the evaluations rated and evolved.
This version is rather raw. It is usable pretty much only by someone who wants to hack around in the innards - it is probably completely unusable by anyone who is not a java programmer at the moment. The GUI works for me (more or less - there are a few oddities having to do with the way and when it redisplays) but then I'm more interested in playing with the code and the evolutionary process than with building a pretty gui. Comments about the ugliness of the code will be cheerfully ignored.
Anyone interested in helping with the documentation is quite welcome.
There is some javadoc documentation available. See the source directories for the javadoc documentation.
There is also a small gallery of images produced by the system. Some of these are probably unreproducable as bugs have been fixed and the system has evolved in its own odd way.
This works for me using linux and the Sun java compiler. The plants system (see below) compiles and runs using gcj as well. I have no idea if it compiles or works in any other system.
Currently the system consists of a set of base classes and several different systems that evolve different kinds of things in rather different domains :
Lawn | the lawn application is the most basic application.
Think of a local kid hired to mow your lawn. He(she) can
push forward, or turn left or right. The goal is to
evolve a "gene" that mows the entire lawn so the scores
vary with how much of the lawn gets cut. A few images of what this looks like | |
ThreeD | Evolve three dimensional objects built of cylinders
and triangles. This uses POV as a renderer so you'll have to
have POV to run it. Evolution is under user guidance. Images and comments on running this program A few images from this program | |
Plants | This evolves "plants" composed (as above) of
cylinders (stems) and triangles (leaves). Essentially they're
competing for sunlight - so the score counts the area of each
leaf that is highest over a small "plot" of garden. Leaves outside
that plot are ignored - both for ease of coding and to avoid creeping "vines"
that extend far out from the origin. There is
a cost imposed on each component. A few images from a run of this program. Black squares probably indicate a triangle very close to the camera, or that the camera is inside a stem. More images from another run in which larger triangles (leaves) incurred a larger penalty | |
Midi | This evolves midi files under user control. A few images of this program running as well as a few midi files |
This software is being continually tweaked and fiddled by the author, updates will be posted from time to time as they become available and suitable for public view.
This is being released under the GPL on