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.
The ordinal representation has been used extensively for tasks such as the travelling salesman problem, and it has the advantage that the crossover operation is particularly simple. A sequence of facts is represented simply as that sequence. Mutation selects a random element, removes it from the sequence and then inserts it again in a random place. Crossover inserts a random subsequence of one solution into another, deleting duplicates that occur outside the inserted subsequence. The same remarks about hand editing apply as before.