The circuit was evolved to be a configuration of the now-obsolete Xilinx XC6216 field-programmable gate array (FPGA). Each candidate design (evolutionary variant) was tested by configuring four XC6216 chips having the conditions shown in Table 1. Evaluations at the target task were then performed on all four chips simultaneously and independently. The evolutionary fitness of the candidate was taken to be the worst of the four measurements. This multi-FPGA, multi-condition apparatus, called `The Evolvatron', was fully described in [12].
|
In contrast to the earlier experiments, a clock signal was supplied to all of the FPGAs, and was the clock input to the rising-edge triggered D-type flip-flop inside every cell's function unit. The clock source was a single external crystal oscillator, nominally 6MHz. Under evolutionary control, via the Y1, Y2 and CS muxes, each cell's function unit could be synchronous to the clock (function output taken from the flip-flop), asynchronous to the clock (flip-flop output not selected), or mixed (function output is a combinatorial function of the possibly-asynchronous inputs as well as of the flip-flop's output). Hence, there is no constraint that evolution must produce a synchronous digital design: the clock is a stable dynamical resource to be used or ignored as selection deems fit, rather than being an enforced synchronisation signal [10]. No design rules were imposed.
The evolutionary algorithm was a (1+1) Evolution Strategy (ES) [7,8]. A mutation operator was defined to select one of the 100 cells at random, then one of that cell's 10 muxes at random, and then to randomly reconfigure that mux to select a different input. In the ES, each new variant was produced by applying the mutation operator three times to the parent.
With a new variant configured to the FPGAs, the inputs were stimulated with a sequence of 100ms bursts of 1kHz and 10kHz tones. The tones were shuffled into a random order for each trial, such that there were an equal number of each frequency. The single source of the tones was a 1.000000MHz crystal oscillator module, followed by hardware dividing the frequency by either 100 or 1000.
Separate analogue circuits integrated the output of each chip over each
100ms tone, giving a value proportional to the average output voltage during
that time. Let the integrator reading of FPGA chip
at the end of test tone number
be
(t=1,2,...T). Let
be the set of 1kHz test tones, and
the set of 10kHz test tones. Then the evaluation of the performance of
the configuration on chip
was calculated as:
![]() |
(2) |
The ES algorithm proceeded as follows, where
is an integer initially 1 but later increased to lengthen the trials:
Download the initial parent configuration to the FPGAs.
Measure
over
tones.
REPEAT
END REPEATGenerate three mutations (the variation operator) and partially reconfigure each FPGA with all three.
Measure
over a total of
test tones, aborting after
or
tones if
. Before the final group of
testtones (if reached), all FPGAs are hardware-reset and completely reconfigured from scratch with the new variant.
IF (
)
The offspring becomes the new parent.ELSE
All three mutations are left in place.The parent is left unchanged: partially reconfigure the FPGAs to undo the three mutations.END IF
IF (15 offspring have been generated without any replacing the parent)
Hardware reset the FPGAs & reconfig. from scratch with the parent.END IF
Extend the parent's evaluation by a furthertest tones.
Wait a further 15 offspring before doing this again.
The initial parent was found through random search for a starting point giving better than trivial performance. Partial reconfiguration is used above because some of the FPGAs are reconfigured via a relatively slow serial interface. The simple variable-length evaluation scheme copes with measurement noise and the stochastic behaviours of some candidate configurations. Termination was by a human observer. The algorithm relies on the existence of pathways of change that make no immediate difference to the fitness, but that alter the opportunities for later improvement. See [4] for a discussion of such `neutral networks' in the context of evolutionary electronics design. One reason for choosing such a simple algorithm was to simplify the study of the role of neutrality, to be reported elsewhere.
The initial parent configuration (
=0.43
with
=0)
was found after testing 75679 randomly generated individuals, using only
the fitness measuring step marked
above (with
=1),
and with a hardware reset and complete reconfiguration of the FPGAs between
individuals. In the main phase of evolution (
=1,
=0),
25000 triple-mutations were accepted out of 861348 attempted (although
most evaluations would be aborted early) resulting in a circuit with fitness
=6.17.
Then
was increased to 1.4/255 and a further 10 triple-mutations were accepted
out of 265 trials. Then with
=2,
=1.0,
a further 870 out of 32338 triple-mutations were accepted. Finally, with
=5,
=5.0,
a further 3000 out of 131005 mutants were accepted. Each of these latter
phases resulted in a reduction in the number of unwanted spikes in the
output, eventually eliminating them entirely.