I've tried to understand the intricacies of neural nets before, but I can never quite seem to grasp them. As I understand it, neural nets simply process data in layers, and all but the outer layers evolve the weights during training. If that is correct, this should apply to single objects as well.
Basically, you'd have certain properties of the object that are controlled by variables, and thus subject to change. For example, if you're trying to make it learn how to fly straight, things like wing synchronicity, body angle, flap speed, and flap strength all can be modified over time.
From there, you just apply basic evolutionary principles: as it tries to fly, these properties are all "mutated", or changed via a Gaussian Random Number Generator. These mutations, or more accurately "corrections", take place at regular intervals during flight. You'd keep a running average of each of the values. During a correction, the accuracy of the flight is considered compared to the accuracy during the last correction. If it's better or the same, you'd average the mutated values together with the running average, and that's your new value. If it's worse, you would not
average the new values with the old, and instead you'd discard the old values and just use the mutations.
Note: in the above example, the running average is the value you'd be using to determine the behavior. So, for example, if my running average for some value is 7, during the next correction the following process would occur:
Mutate by choosing a Gaussian Random Number centered around 7.
If current flight is more accurate than during previous correction, then
Average 7 and the mutated number together and store as the new property value.
Else if current flight is less accurate than during previous correction, then
Store mutated number as the new property value, discarding the previous average of 7.
Either way, record the accuracy of the flight for use in the next correction.
It's basically evolution, only rather than mating two individuals to produce a third, you're averaging two corrections to get a third. It works the same way, though.
Oh, and in case you were wondering, Yourself made a nice Gaussian RNG script which you can find here: http://www.gmlscripts.com/script/gauss
. "Mean" is the "center" value, and "deviation" determines, in essence, the width of the bell curve (larger deviation means larger mutations on average).
Edited by IceMetalPunk, 06 March 2012 - 10:53 PM.