mutation operators 2-op (swap of 2 elements) location specific. changes 2 vertices inversion adjacent representations (edge). changes 2 edges 1 2 3 4 5 6 | | 1 5 4 3 2 6 1 - insertion adjacent representations 1 2 3 4 5 6 ^ v 1 3 4 5 2 6 k-insertion adj k-op loc void shuffle(char *x, int elementcount) { int k; // loop through selecting the element to place at location i for (int i=elementcount-1; i; i--) { int tmp; k=randMod(i+1); // k can equal i tmp = x[i]; x[i] = x[k]; x[k] = tmp; } } ============================================================================= Evolution Strategies chromosome: vector of reals alleles are real numbers parameters of search evolve LOCAL SEARCH in Reals^N init X=(a_1, a_2, ...a_N) while (not good enough) { X' = X + (N(0, sigma), N(0, sigma), N(0, sigma),... N(0, sigma)) if (fit(X') > fit(X)) X=X' } SELF ADAPTING LOCAL SEARCH in Reals^N sigma = good starting value init X=(a_1, a_2, ...a_N) while (not good enough) { success=0 repeat k times { X' = X + (N(0, sigma_1), N(0, sigma_2),... N(0, sigma_N)) if (fit(X') > fit(X)) { X=X' success++ } } if (success/k < 1/5) sigma *= c if (success/k > 1/5) sigma /= c } 1/5 rule - "rule of thumb" for how much success you want