About auto-programming (Genetics as programming isn't quite what it seems to be...)

I spent an hour or so today emailing Jelle regarding his project. He's using evolutionary techniques (or, rather, is intending to do so) for programming his experiment and that got me thinking. For those who aren't familiar with the idea, an evolutionary programming approach defines a feedback loop where a set of solutions are tested for fitness, and then the most fit solutions are "bred" together to create new solutions containing elements of the original surviving solutions.

Most evolutionary approaches seem to start out with constrained solution spaces, i.e. finding the best combination of 30 variables to solve X problem. However, such solution spaces are just as readily handled by neural-net systems. Neural net systems with only a single level of neuron are pretty darn good for this kind of search, and they're pretty easy to code if this is all you need to do. They find some balance or set of weights which allows them to accomodate the training data and then you can search for other data that matches their weighting.

Evolutionary approaches find their legs when the genetic half of the approach starts to express itself. By changing from a closed space to an open one where elements can be combined in ever increasing complexity you can start to produce novel configurations (rather than merely a good solution within the originally-defined space). If you are merely searching for the best organisation of 12 boxes, the end result will be 12 boxes. If you allow genes to determine how many boxes are created, their size, their orientation, and their connection to one another then you can get configurations which are outside of what you would have imagined yourself.

To make a good evolutionary system, you need to focus your energy on the two big problems; how fitness is determined (what aspects of the environment and the creature (particularly it's genetic makeup) determine whether it is allowed to breed) and how combination of genetic material occurs (how genes combine to produce new configurations, what effect does randomness have, what is the source of new genes).

Thing is, even with that, you still don't have a silver bullet. What you have is a useful tool for searching a problem space that may produce interesting and novel solutions. But in the end, it's just a search mechanism, a tool, rather than a collaborator.

You still have to set up the sensors and actuators that make the magic happen, so coding becomes a philosophical introspection about the nature of "goodness" (and then lots of coding to explain that concept), but it's still a matter of explaining to a computer what results are good and what are bad... in other words, telling it what to do. You're just giving it a little leeway about how it gets the job done.


  1. hjoab

    hjoab on 09/01/2007 9:44 a.m. #

    Interesting! It is like if you see as possible the automation of the programming work. I would like to design a robot for programming. To free man from this tedious task and put machines on the job.And of with fewer bugs on the way. What do you think?

Comments are closed.


Pingbacks are closed.