STEADY STATE ALGORITHM initialize P = { X_1, X_2, ... X_n } // population & initialization computeFitness of P while (not goodenough(P)) { // stopping criteria if (rand() < xoverProb) { X_i, X_j = select(P) // selection (mating selection) X' = xover(X_i, X_j) // recombination X' = mutate(X') // mutate } else { X' = select(P) // selection (mating selection) X' = mutate(X') // mutate } computeFitness(X') // fitness insert(P, X') // compete (survival selection) // if better than low performer re\ place } SIMPLE GENERATIONAL ALGORITHM initialize P = { X_1, X_2, ... X_n } // population & initialization computeFitness(P) createspace P' = { X'_1, X'_2, ... X'_n } // population & initialization while (not goodenough(P)) { X'_1 = best(P) // elitism X'_2 = secondBest(P) // elitism for (i=3; i<=n; i+=2) { (X'_i, X'_i+1) = select(P) // SELECT 2 parents if (rand() < xoverProb) { (X'_i, x'_i+1) = xover(X'_i, X'_i+1) // recombination } X'_i = mutate(X'_i) // mutate X'_i+1 = mutate(X'_i+1) computeFitness(X'_i) computeFitness(X'_i+1) } P <=> P' } SELECTION fitness proportional selection (BAD!) popsize = 3 f_0 = 1/4 f_1 = 2/4 f_3 = 1/4 rank based selection f_1 = 2 p_0 f_0 = 1 p_1 f_3 = 1 p_2 tournament selection (GOOD) good tournament size are 3 and larger f_0 = 1 f_1 = 2 f_3 = 1 Hulk test XOVER SINGLE POINT XOVER (BAD) xxxxxxxxxxxyyyyyyyyyy yyyyyyyyyyyxxxxxxxxxx TWO POINT XOVER (BAD) xxxxxxxxxxxyyyyyyxxxx yyyyyyyyyyyxxxxxxyyyy UNIFORM XOVER UX xxyxyxyyxxxxxxxxxx yyxyxyxxyyyyyyyyyy MUTATION xxxxxxxxxxxxxxxxxxx locus is a atomic POSITION in the gene plural is loci possible values are alleles {0, 1}