15 lines
724 B
Plaintext
15 lines
724 B
Plaintext
const target = "METHINKS IT IS LIKE A WEASEL";
|
|
const C = 100; // Number of children in each generation.
|
|
const P = 0.05; // Mutation probability.
|
|
const A2ZS = ["A".."Z"].walk().append(" ").concat();
|
|
fcn fitness(s){ Utils.zipWith('!=,target,s).sum(0) } // bigger is worser
|
|
fcn rnd{ A2ZS[(0).random(27)] }
|
|
fcn mutate(s){ s.apply(fcn(c){ if((0.0).random(1) < P) rnd() else c }) }
|
|
|
|
parent := target.len().pump(String,rnd); // random string of "A..Z "
|
|
gen:=0; do{ // mutate C copies of parent and pick the fittest
|
|
parent = (0).pump(C,List,T(Void,parent),mutate)
|
|
.reduce(fcn(a,b){ if(fitness(a)<fitness(b)) a else b });
|
|
println("Gen %2d, dist=%2d: %s".fmt(gen+=1, fitness(parent), parent));
|
|
}while(parent != target);
|