Evaluate sequences by evaluating the trees they give rise to. Perform mutation and crossover on the sequences, with mutation having a relatively small probability. Notice that although the algorithm manipulates sequences, the evaluation is one that operates on trees .
Mutation is a unary operation which, given one sequence, generates a new one.
The choice of mutation and crossover operations depends on how the sequences are internally represented and should facilitate the exchange of useful subparts of solutions. Two different representations have been tried so far. The relevant features are summarised in Figure 3 . A given sequence is represented by a sequence of numbers, where the i th element indicates the position of the i th element of the sequence in that canonical sequence with all previous elements deleted. Mutation is implemented by a change of a random element to a random legal value.