[ODE] Creature Evolution input

skjold@cistron.nl skjold at cistron.nl
Wed Mar 12 18:19:02 2003


Hi,

The not-so-long answer is: Assuming that you are evolving creatures to get them
to walk (or swim or whatever), and assuming that you aim for open-ended
evolution (e.g. without any preconceptions about how the solution that you want 
is attained), I think you would need joint angles as input, and a consistent
way for defining the center position (angle 0). Angular velocity and/or
acceleration might be useful (since they are time derivatives, and locomotion
requires temporal coordination), but if you allow recurrent ANNs (or anything
that facilitates feedback and/or memory) then they could learn to derive them
for themselves as needed.

But - you guessed it - here's a longer answer with some stuff I once came up
with. Hope it's useful. *** WARNING: ENDLESS RANTING AHEAD! ***

In essence, the values you need to put into the ANN is a (possibly
preprocessed) clearly and logically presented distillment of exactly what it is
you want the 'brain' to 'think' about. This sounds like a foregone conclusion,
but IMHO it's something to consider a little longer when contemplating what
exactly you want your ANN to accomplish. Determining what this means for any
given case isn't always easy, though. Also, there's the risk of distilling or
preprocessing the input values to the extent where preconceptions about the
problem or solution could limit an ANN's options in learning.

As an example, about a year ago I was playing with a game called RoboCode. It's
a solid java implementation of a classic robot game, where the player creates a
program to control a virtual robot, which is then pitted in an arena against
other robots created by other players (btw you can find it with google if
you're interested). The robots in RoboCode are actually tanks, and control-
programs are written in java using the RoboCode api. I was evolving cooperating
ANN's that each controlled various aspects of controlling the tank such as
evasion, target acquisition, firing, power management, etc, and that could
dynamically switch strategies during a bout.

Among the inputs for the firing strategy were the bearing of the acquired
target, and the current orientation of the turret. The job of this part of the
'brain' was of course to learn to aim and to choose the firing power (which
affects the expended energy, and the speed and damage of the bullet). For some
reason it was hard to get my tank to aim right, so I started thinking about it.
The ANN was in charge of determining the best aim and power for optimal average
yield. One of the few preconceptions about it that actually made sense, was
that you generally want to aim at your target. A foregone conclusion? Of
course, so when I though about that some more it suddenly made sense to
calculate the angle by which the turret's aim was 'off' (i.e. angle 0 was right
on target). My tank's turret doesn't want to know where exactly the enemy is, 

that's a job for the target acquisition department. All the turret wants to
know is by how far off the 'targeting reticle' that enemy actually is.

This change not only fused two inputs into a single one, it also made available
a more clearly and logically represented distillment of exactly what it was I
wanted the ANN to think about. Again, this was only possible due to a
preconception I had about the task, which is a potential danger. Nonetheless,
my tank suddenly evolved better aiming strategies, and learned to 'experiment'
with more advanced features based on that, such as target 'leading' and
accounting for the delay it takes to turn the turret before firing.

A nice side-effect of the rantings above, when it comes to ANNs that are used
for control (rather than classification or extrapolation or whatever), is that
the outputs are generally on the same 'level' as the inputs. If the outputs of
your ANN sets the desired joint angles, then the inputs probably should include
the current joint angles. If your ANN sets the desired rotational velocities
or exerted forces, then the inputs probably should include the current
rotational velocities or forces, etc. You could use this to help determine what
inputs might be useful for your ANN.

Well, I could go on and on about this. An ANN can be used for control on
various levels of abstraction, which is an important factor in defining the
needed inputs and outputs (for example, in a robot-programming game such as
RoboCode, it makes no sense to focus on coordinating limb movement). But, this
post is long enough as it is, so I'll just restrain myself for now. :P
I just hope it's been of help.

Greets,
Mark


> Hi :)
> 
> I'm doing the ever popular evolving of AI control over an articulated model - 

the question is what are suitable inputs to the Neural Network? (For each 

body-segment input: position, relative position, velocity, force, orientation, 

other stuff...?)
> 
> thanks
>   Henri