Wednesday, October 8, 2008

No, this is IT!

Really, I mean it. ;)

Apart from data persistency, the main features are in place, the performance is much better, and the source code is posted. Share and enjoy.

If anyone has luck creating a kick ass controller or environment, I'd love to hear about it.

1 comment:

AurimasMB said...

Hey, I've just watched your presentation at Grey Thumb Silicon Valley, and also heard a recording of yours, through the Biota.org podcast, and, though I have little experience in programming, artificial life, or biology, your projects have sparked my interest. I have recently done a superficial search of other simulations, but your concept of controllers was the most interesting. It seems that most of the other simulations out there concentrate on simulating one particular scale or environment of life. The more computational approach, where organisms evolve their own behavior and traits from the most fundamentally simple parts seems more appealing. I like the idea of I/O pins, and I agree with you that all functions executed by a controller should be conditionals. In this way, each controller is a small processor, and uses its own internal composition as a computational medium, through branching statements. For example, an external stimulus could cause a change in one element of the phenotype of the controller, and another conditional could then react to the internal stimulus of the state of that element, causing a chain reaction, almost like what I would imagine a simple processor to be. Life fundamentally is a processor of inputs, producing outputs.

In my own idea for a simulation, I'm trying to break down the whole simulation to as simple a level as possible. Each controller would have a small genotype string (for ex. 1239701624896123xxxxxx), with integer values that correspond to a particular aspect of execution within the the main function of the controller. Initially I was thinking that I could somehow use procedurally generated (using the genotype string) nested loops. Another possibility was a series of conditional statements, the parameters and resulting functions of which were entirely determined by the genotype string. This would allow potentially for the controller to infinitely expand itself in complexity and size, but still using at its nodes the fundamental commands. In terms of what functions it could choose from for execution, I was thinking at first that a controller could have the choice of either breaking down or combining two or more of its elements, as a chemical reaction to either use or produce energy. By this I was hoping that complex metabolisms and homeostasis could develop, and hopefully, an interesting nutrient flow between organisms, with coevolutionary dependency (for example: nutrient AB can only be processed by controller 48, but its waste products, C and A)
Before rambling on too far, I must mention I have only written code in BASIC, and am still an early beginner in Java, the language that I am planning on using for this project. I would love to here what recommendations you might have as to the practical programming aspect, and what your ideas are about the kind of simulation I have just described.