Artificial Growth and Developmental Plasticity: Part IV




for each population p = 1:100

for each genome in the population g = 1:100

initialize the physical simulation;

create two morphological units attached together;

copy the genome into both units;

inject the first transcription factor (TF0) into the first unit;

inject the second transcription factor (TF1) into the second unit;

perform the fitness evaluation;

assign a fitness value;

end genome in the population;

sort the genomes in order of decreasing fitness;

delete the less fit 50% of the population;

copy and mutate selected genomes from the remaining 50 percent;

copy and crossover selected genomes from the remaining 50 percent;

end population;


Figure 5: This gives the pseudo-code used to evolve the robot population for a desired task, given a fitness function that quantifies the ability of a robot to perform that task. The pseudo-code for the fitness evaluation, shown in bold above, is given below.


for each time step of the current fitness evaluation t

for each unit u

for each gene g

if gís regulating TF is present and within the desired range

turn g on;

diffuse a small amount of the TF produced by g from the centre of u


turn g off;

end gene;

for each TF tf

diffuse tf into uís neighbours (diffusion)

remove a small amount of tf from the centre of u (decay)

end TF;

for each sensor neuron s

translate the incoming external signal into a value in (0.0,1.0)

end sensor neuron;

for each (motor) neuron n

sum and threshold the values of the incoming synapses

end neuron;

for each motorized joint mj

sum the values of the motor neurons, and scale it to a desired angle in (-π/2, π/2)

apply the necessary torque to rotate mj towards the desired angle

end motorized joint;

end unit;

end time step of the current fitness evaluation;


Figure 6: The above pseudo-code both grows the robot (light gray section), and updates the neural controller such that the robot can generate behaviour (dark gray section).