Nice idea. My fallback approach if the “evolving connections” approach didn’t payoff was going to be a prefab approach where the GA is handed a library of prefab parts. Each part takes a number of parameters which define the parts behaviour. It would then be the responsibility of the GA to connect parts in different ways to see what it could come up with. Sounds nice on the surface, but ultimately its limited to humans thinking up, defining and testing parts suitable for the part library.
The idea of detecting “valuable” substructures is very clever, and (I think) some other people around here are going that approach, using a value or credit system for inherited elements, the higher the credit (the longer the part/s have been in the gene pool), the less likely that they will be broken up, removed or mutated, or some combination. A good approach I think. It could be adapted to detect the presence of “limbs”, the more difficult part being where you define a limb programmatically so it can be searched for in a model structure.
I really do believe that it will be a difficult task indeed to evolve complex “good looking”, “sensible” models without using an approach similar to the above, but being the optimist that I am, I don’t want to give up hope and resort to that approach just yet, I think the raw evolutionary approach still has a lot of fight left in it.
What’s needed at this stage I think is a smarter fitness function (way of evaluating models). Currently it only uses the score from the racer, and obviously this is a limiting factor. It is possible to bias evolved structures based on the representation used (constraining variables in the genome for example), but I think a better way is to reward desired values and punish undesired values rather than eliminating them from the GA’s search space.
It could even be possible to collect more information from the racer such as amount of air time, amount of ground time to reward/punish models that hop or fly excessively.
In all reality GA may not be the best approach for creating good models. It is in essence a search function, and is best used in optimisation problems, a fact demonstrated in the race forum. Perhaps GA is better suited in the role of optimising human designs. I’m not talking solely of complete models, but also substructures of models; such as optimising a perfect motor, or leg, or hop mechanism as a module for an existing model. My not have a GUI program similar to the constructor that non-low-level people can use, allowing substructures to be selected and defined (using different colours or what-have-you), then clicking the “optimise” button – it really could be that simple. Maybe when I get bored with evolving models from scratch…
Oh, by the way, here’s a little thing that climbed out of the primordial soup. It’s a little jittery but it does do some hopping.
race: http://sodarace.net/upload/jbrownlee/race_the_mountain_range_from_scratch13.jnlp
|