RosettaCodeData/Task/Evolutionary-algorithm/SequenceL/evolutionary-algorithm-1.se...

24 lines
639 B
Plaintext

import <Utilities/Sequence.sl>;
AllowedChars := " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
initializeParent(randChars(1)) := AllowedChars[randChars];
Fitness(target(1), current(1)) :=
let
fit[i] := true when target[i] = current[i];
in
size(fit);
Mutate(letter(0), rate(0), randRate(0), randChar(0)) :=
letter when randRate > rate
else
AllowedChars[randChar];
evolve(target(1), parent(1), C(0), P(0), rateRands(2), charRands(2)) :=
let
mutations[i] := Mutate(parent, P, rateRands[i], charRands[i]) foreach i within 1 ... C;
fitnesses := Fitness(target, mutations);
in
mutations[firstIndexOf(fitnesses, vectorMax(fitnesses))];