Genetic Algorithms
Every method in Part 5 shared three assumptions: that \(F\) is differentiable, that one point is enough to carry the search, and that the valley we land in is the valley we want. Genetic algorithms abandon all three. A population of candidate solutions is encoded as strings, scored by fitness, and then bred — the fitter selected more often, crossover recombining their parts, mutation supplying novelty — for generation after generation. No gradient is ever computed and no continuity is ever assumed; the objective may be a black box, a simulation, or a discontinuous lookup table. This chapter builds the algorithm operator by operator, then asks the harder question of why such an undirected process finds good answers at all — the schema theorem and the building-block hypothesis — and closes with the parameters and pathologies that decide whether a GA works in practice.
- Why a population and a derivative-free search succeed where gradient methods cannot go.
- Encoding — binary, Gray code, real-valued and permutation chromosomes, and why the choice matters.
- Fitness, scaling, and handling constraints by penalty — the bridge back to Chapter 21.
- Selection — roulette wheel, tournament, rank, and elitism, and the notion of selection pressure.
- Crossover and mutation — the operators of recombination and novelty, and their very different roles.
- The schema theorem, the building-block hypothesis, and implicit parallelism.
- Premature convergence, diversity, the exploration–exploitation balance, and the no free lunch theorem.
From Points to Populations
Part 5 built a formidable machine. Given a smooth \(F\), Newton and its relatives locate a minimum with a handful of iterations and quantifiable convergence rates. But every one of those methods rests on assumptions that a great many real problems simply refuse to satisfy: that \(\nabla F\) exists and is computable; that a single point can carry the entire search; and — most consequentially — that the local minimum found is the one wanted.
Consider what breaks those assumptions in practice. The objective may be the output of a finite-element simulation or a physical experiment, with no formula to differentiate. The variables may be discrete — which of five motors, how many turns of wire — so that a gradient is not merely unavailable but meaningless. The landscape may be riddled with local minima, in which case a descent method faithfully reports the bottom of whichever valley it happened to start in. And, as Chapter 19 was careful to note, only convexity ever promoted a local answer to a global one.
A genetic algorithm maintains a population of candidate solutions and improves it statistically across generations. It needs only the ability to evaluate \(F\) — never to differentiate it. In exchange for that freedom it surrenders every guarantee Part 5 offered: a GA gives no convergence rate, no optimality certificate, and no proof it has found the best answer.
The design is a deliberate analogy with natural evolution, introduced by John Holland in the 1970s and developed into an engineering tool through the 1980s and 90s. Individuals encode solutions; the fitter ones reproduce more often; their offspring recombine parental material; occasional random mutation introduces variation. Selection supplies the pressure toward quality, while crossover and mutation supply the variety for selection to act on. Nothing in the loop knows anything about calculus.
Representation & Encoding
A GA does not manipulate solutions directly; it manipulates chromosomes — encoded representations of them. Borrowing the biological vocabulary: the chromosome is a string, each position is a gene, and the value at a position is an allele. The encoded string is the genotype; the solution it decodes to is the phenotype. The operators of Section 24-5 act blindly on genotypes, which is exactly why the encoding is the most consequential design decision in the whole algorithm.
Classical GAs use binary encoding. A continuous variable \(x \in [x_{\min}, x_{\max}]\) is represented by an \(L\)-bit string, and the mapping from the integer value \(d\) of that string back to the real number is a simple linear interpolation:
The bit length therefore buys resolution: each extra bit halves the spacing between representable points. Binary strings have one notorious flaw, the Hamming cliff. Adjacent integers can differ in every bit — \(15 = 01111\) and \(16 = 10000\) are neighbours in value but maximally distant in string space — so a mutation cannot easily step between them. Gray coding, in which consecutive integers always differ by exactly one bit, removes the cliff and is generally preferred when binary encoding is used at all.
| Encoding | Chromosome looks like | Natural for | Watch out for |
|---|---|---|---|
| Binary | \(1\,0\,1\,1\,0\,0\,1\) | Discrete choices, on/off decisions | Hamming cliffs; long strings for fine precision |
| Gray code | \(1\,1\,1\,0\,1\,0\,1\) | Continuous variables, binary operators | Requires encode/decode conversion |
| Real-valued | \((2.31,\ -0.88,\ 4.05)\) | Continuous engineering design | Needs specialised operators (SBX, BLX) |
| Permutation | \((3, 1, 4, 5, 2)\) | Routing, scheduling, TSP | Standard crossover breaks validity |
| Tree / program | Expression tree | Symbolic regression, genetic programming | Uncontrolled growth ("bloat") |
For continuous engineering problems modern practice usually skips binary entirely and uses real-valued encoding, where the chromosome simply is the vector \(\mathbf{x}\). Precision becomes unlimited, decoding disappears, and the string length equals the number of variables — but the operators must be redesigned, since averaging two real numbers is meaningful whereas swapping bits is not.
Permutation encoding illustrates why the representation cannot be chosen casually. For a travelling-salesman tour, the chromosome is an ordering of cities, and every city must appear exactly once. Apply an ordinary crossover to two valid tours and the offspring will typically visit some cities twice and others never — an infeasible string. The encoding thus dictates the operators, which is why specialised order-preserving crossovers exist for this case.
Fitness & Constraints
The fitness function is the GA's only contact with the problem, and it must be a quantity to be maximised, with higher meaning better. Since Part 5 posed everything as minimisation, a conversion is needed. Any monotone decreasing transformation serves; the two standard choices are subtraction from a large constant, or a reciprocal:
Raw fitness values often behave badly under the proportionate selection of Section 24-4. Early on, one lucky individual may dominate the population's total fitness and take over within a few generations; later, when everyone is nearly equally good, the differences become invisible and selection degenerates into a random walk. Fitness scaling — linear, sigma-truncation, or power-law — rescales the values to keep selection pressure roughly constant. Rank-based selection sidesteps the whole issue by discarding magnitudes and using only the ordering.
Constraints require thought, because the operators of Section 24-5 have no notion of feasibility and cheerfully produce illegal offspring. Four approaches are standard, and the most common should look familiar from Chapter 21:
This is precisely the exterior penalty of Section 21-6, reused unchanged. And the same trade-off returns: too small a \(\rho\) and the GA happily converges to an infeasible design; too large and feasible-but-mediocre individuals crowd out the near-boundary region where the answer actually lives. Since the optimum usually sits on the fence (Section 21-1), that region is exactly the one we cannot afford to lose.
The alternatives each have their place. Rejection — discard infeasible offspring and re-breed — is simple but wasteful when feasibility is rare. Repair maps an illegal string to a nearby legal one and works well when a natural repair exists. Best of all, when it is possible, is a closed encoding in which every string is automatically feasible; permutation encoding does this for the TSP tour constraint by construction. An encoding that cannot express an illegal solution needs no constraint handling at all.
Selection
Selection chooses which individuals become parents. It is the only operator that looks at fitness, and therefore the only source of pressure toward good solutions — but it creates nothing new, merely redistributing copies of material already present. The tuning quantity is selection pressure: too little and the search drifts aimlessly; too much and the population collapses onto one individual long before the space has been explored.
Roulette-wheel selection (fitness-proportionate) is the classical scheme. Each individual receives a slice of a wheel in proportion to its fitness, and each spin selects one parent:
The expected-count form is worth pausing on: an individual is expected to receive as many copies as its fitness exceeds the population average. Exactly average means one copy; twice average means two. This ratio drives the entire schema analysis of Section 24-6.
Roulette selection has the weaknesses already noted — it is hostage to the scale of the fitness values, and it fails outright for negative fitness. Tournament selection avoids both and is the modern default: pick \(k\) individuals at random, and the fittest wins. It never touches magnitudes, only comparisons, so scaling becomes irrelevant; and \(k\) is a clean dial for selection pressure — \(k = 2\) is gentle, larger \(k\) increasingly ruthless.
| Scheme | Mechanism | Pressure control | Notes |
|---|---|---|---|
| Roulette wheel | \(p_i \propto \text{fit}_i\) | Via fitness scaling | Classical; scale-sensitive; needs \(\text{fit} > 0\) |
| Tournament | Best of \(k\) random picks | Tournament size \(k\) | Scale-free, cheap, parallel — the usual default |
| Rank | \(p_i\) from position, not value | Rank-mapping slope | Immune to outliers and bad scaling |
| Stochastic universal | One spin, \(N\) equally spaced pointers | As roulette | Lower sampling variance than \(N\) spins |
| Elitism | Copy best \(e\) individuals unchanged | Elite count \(e\) | Overlay on any scheme; guarantees monotone best |
Elitism is not a selection scheme so much as an insurance policy laid over one, and it fixes a real defect. Without it, the best individual found so far can be destroyed by crossover or mutation and simply lost — the GA's best-so-far can get worse. Copying the top \(e\) individuals unchanged into the next generation guarantees the best never deteriorates. A small \(e\) (one or two) is almost always worth having; a large one is just excessive selection pressure by another name.
Crossover & Mutation
Selection decides who reproduces; crossover and mutation decide what the children look like. The two operators play sharply different roles, and confusing them is the most common conceptual error in the subject.
Crossover is the recombination operator and the heart of the GA. Applied to two parents with probability \(p_c\) (typically \(0.6\)–\(0.9\)), it exchanges material to create offspring. Single-point crossover cuts both parents at a common random locus and swaps the tails:
Variants trade off how disruptively they mix. Two-point crossover swaps a middle segment and treats the string as a ring, removing the positional bias that penalises genes at the ends. Uniform crossover decides each gene independently by coin flip — maximally mixing, but so disruptive to contiguous groups of genes that it undercuts the building-block argument of Section 24-6. For real-valued chromosomes, arithmetic crossover blends parents, \(\mathbf{c} = \lambda\mathbf{a} + (1-\lambda)\mathbf{b}\), while SBX (simulated binary crossover) and BLX-\(\alpha\) imitate the spread of binary crossover in a continuous space.
Mutation flips each gene independently with a small probability \(p_m\), typically around \(1/L\) so that roughly one bit per chromosome changes. Its role is not to drive the search — crossover does that — but to guarantee reachability. Crossover can only shuffle alleles already present in the population; if every individual carries a \(0\) at some position, no amount of recombination will ever produce a \(1\) there, and that region of the space becomes permanently unreachable. Mutation is the insurance against such lost alleles.
Crossover combines existing good material — a large, structured move that assembles partial solutions into better ones. Mutation injects material that no parent had — a small, random move that restores lost diversity. Hence the asymmetric probabilities: \(p_c \approx 0.6\)–\(0.9\) because recombination is the engine, and \(p_m \approx 1/L\) because a high mutation rate degrades the GA into a random search that discards everything selection has learned.
The Schema Theorem
A fair question hangs over everything above: why should this produce anything but noise? There is no gradient, no model, no descent. The classical answer is Holland's schema theorem, and while it is not the last word, it is the argument that turned a biological analogy into a subject.
A schema \(H\) is a similarity template — a string over \(\{0, 1, *\}\), where \(*\) matches either bit. The schema \(1\!*\!*\!0\!*\) describes every 5-bit string starting with \(1\) and carrying \(0\) in position 4, a set of \(2^3 = 8\) strings. Two measurements characterise it: the order \(o(H)\), the number of fixed positions, and the defining length \(\delta(H)\), the distance between the outermost fixed positions. For \(1\!*\!*\!0\!*\): \(o(H) = 2\) and \(\delta(H) = 4 - 1 = 3\).
The two measurements matter because they govern how each operator threatens the schema. Crossover destroys \(H\) only if the cut falls between its fixed positions — probability \(\delta(H)/(L-1)\), so short schemata survive. Mutation destroys \(H\) if it flips any fixed position — probability about \(o(H)\cdot p_m\), so low-order schemata survive. And selection multiplies copies by the ratio of the schema's average fitness to the population's. Combining the three gives the theorem:
Where \(m(H,t)\) is the number of copies of \(H\) at generation \(t\), \(f(H)\) its average fitness, and \(\overline{f}\) the population average. In words: short, low-order schemata of above-average fitness receive exponentially increasing trials in successive generations. The bracket is the survival probability; the fitness ratio is the growth factor.
These favoured short, low-order, above-average schemata are the building blocks, and the building-block hypothesis is the claim that a GA works by discovering them and recombining them, via crossover, into progressively better solutions. Worked Example 6 makes the mechanism concrete: two schemata of identical order and identical fitness advantage can have opposite fates purely because one is short and the other long.
A second observation compounds the first. Every string of length \(L\) is simultaneously an instance of \(2^L\) different schemata, so a population of \(N\) strings is quietly gathering evidence about far more schemata than it has members — Holland's estimate is on the order of \(N^3\) usefully processed per generation. This is implicit parallelism: the GA evaluates \(N\) individuals but implicitly tests a vastly larger number of hypotheses about which patterns are good.
Parameters & Practice
A GA has more tuning knobs than any method in Part 5, and they interact. The values below are starting points, not prescriptions — the honest position is that good settings are problem-dependent and usually found by experiment.
| Parameter | Typical value | Too low | Too high |
|---|---|---|---|
| Population size \(N\) | \(50\)–\(200\) | Diversity lost; premature convergence | Wasted evaluations; slow generations |
| Crossover rate \(p_c\) | \(0.6\)–\(0.9\) | Little recombination; search stagnates | Good building blocks disrupted |
| Mutation rate \(p_m\) | \(\approx 1/L\) | Lost alleles never recovered | Degenerates toward random search |
| Tournament size \(k\) | \(2\)–\(4\) | Weak pressure; aimless drift | Takeover by one individual |
| Elite count \(e\) | \(1\)–\(2\) | Best solution can be lost | Excessive pressure; loss of diversity |
The characteristic failure is premature convergence: the population collapses onto copies of one above-average individual, diversity vanishes, and — since crossover between identical parents produces identical children — the GA grinds to a halt at a mediocre answer with only mutation still doing anything. The cause is almost always excessive selection pressure early on, when one lucky individual dominates a young population. The countermeasures are diversity-preserving: rank or tournament selection instead of raw roulette, larger populations, fitness sharing (individuals in crowded regions have their fitness discounted), crowding replacement, or restarts.
Every one of these knobs is really the same knob — the exploration–exploitation balance. Exploration surveys new regions; exploitation refines what is already good. High selection pressure, high elitism and low mutation all exploit; large populations, low pressure and high mutation all explore. Too much exploitation converges prematurely to a local optimum; too much exploration never converges at all. Every parameter above is a vote on this one trade, which is why they must be tuned together rather than individually.
Termination is equally heuristic — there is no \(\lVert\nabla F\rVert \le \varepsilon\) to test, since no gradient exists. In practice one stops after a generation budget, after the best fitness has stagnated for a fixed number of generations, when population diversity falls below a threshold, or when a target value is reached. And because a GA is stochastic, a single run proves nothing: report results over multiple independent runs with different seeds, quoting best, mean and standard deviation. A GA that "found the optimum" once in twenty runs is a very different tool from one that finds it every time.
Worked Examples
Problem. A variable \(x\) lies in \([-2,\ 5]\) and is encoded with \(L = 10\) bits. Find the precision, and decode the chromosome \(1000110101\). How many bits would give a precision of \(0.001\)?
Solution. With \(L = 10\), the string can represent \(2^{10} = 1024\) distinct values, spanning \(2^{10} - 1 = 1023\) intervals. The precision is \(\dfrac{5 - (-2)}{1023} = \dfrac{7}{1023} \approx 0.006843\).
Decoding: \(1000110101_2 = 512 + 32 + 16 + 4 + 1 = 565\). Then \(x = -2 + 565 \times \dfrac{7}{1023} = -2 + 3.8661 = \mathbf{1.8661}\).
For precision \(0.001\) we need \(\dfrac{7}{2^L - 1} \le 0.001\), i.e. \(2^L \ge 7001\). Since \(2^{12} = 4096\) is too small and \(2^{13} = 8192\) suffices, \(L = 13\) bits. Note the logarithmic cost: three extra bits bought roughly an eightfold improvement — but a ten-variable problem at this precision needs a 130-bit chromosome.
Problem. Maximise \(f(x) = x^2\) for integer \(x \in [0, 31]\) using 5-bit strings. For the population below, compute the selection probabilities and expected counts.
| # | String | \(x\) | \(f = x^2\) | \(p_i = f_i/\sum f\) | Expected count \(Np_i\) |
|---|---|---|---|---|---|
| A | \(10110\) | \(22\) | \(484\) | \(0.3639\) | \(1.456\) |
| B | \(00101\) | \(5\) | \(25\) | \(0.0188\) | \(0.075\) |
| C | \(11001\) | \(25\) | \(625\) | \(0.4699\) | \(1.880\) |
| D | \(01110\) | \(14\) | \(196\) | \(0.1474\) | \(0.589\) |
| Totals | \(\sum f = 1330\) | \(1.000\) | \(4.000\) | ||
Solution. The average fitness is \(\overline{f} = 1330/4 = 332.5\). Check the expected-count identity on C: \(f_C/\overline{f} = 625/332.5 = 1.880\) ✓ — it matches \(Np_C\), as it must. C is nearly twice as fit as average and expects about two copies; B is far below average and expects one-thirteenth of a copy, so it will almost certainly die out. Note the danger already visible here: C and A together hold \(83\%\) of the wheel, and in a population this small the GA is one lucky spin away from losing B and D entirely.
Problem. Using the population of Example 2, select four parents with the random numbers \(r = 0.31,\ 0.92,\ 0.05,\ 0.58\). Then contrast with tournament selection.
Solution. Form the cumulative probabilities: A spans \([0,\ 0.3639)\), B spans \([0.3639,\ 0.3827)\), C spans \([0.3827,\ 0.8526)\), D spans \([0.8526,\ 1]\). Now place each \(r\):
\(r = 0.31 \to\) A; \(\quad r = 0.92 \to\) D; \(\quad r = 0.05 \to\) A; \(\quad r = 0.58 \to\) C.
The mating pool is \(\{A, A, C, D\}\) — B is gone, as predicted, and A got two copies against its expectation of 1.46. That gap between expectation and outcome is sampling error, and it is why stochastic universal sampling (one spin, four equally spaced pointers) is preferred: it would have given A exactly one or two copies, never zero or four.
Tournament contrast. With \(k = 2\), a tournament drawing \(\{B, D\}\) returns D (196 > 25); drawing \(\{A, C\}\) returns C (625 > 484). Notice what the tournament never used: the values 196 and 25. Only the comparison mattered — which is exactly why tournament selection is immune to fitness scaling, and would work unchanged if the fitnesses were negative.
Problem. Cross parents \(C = 11001\) and \(A = 10110\) at locus \(c = 2\). Then mutate bit 5 of the first child. Track the fitness.
Solution. Split each parent after position 2 and swap tails:
\(C = 11\,|\,001\), \(A = 10\,|\,110\) \(\longrightarrow\) child 1 \(= 11\,|\,110 = 11110\), child 2 \(= 10\,|\,001 = 10001\).
Decoding: child 1 is \(x = 30\) with \(f = 900\); child 2 is \(x = 17\) with \(f = 289\). Child 1 beats both parents (625 and 484) — this is recombination doing precisely what it is supposed to: C contributed the high-order \(11\), A contributed the tail \(110\), and the combination is better than either parent's whole.
Now mutate child 1's last bit: \(11110 \to 11111\), giving \(x = 31\) and \(f = 961\) — the global optimum. Observe the division of labour from Section 24-5 in a single line: crossover assembled the building blocks and got us to 30, but the final \(1\) existed nowhere in the parent population's last position, so only mutation could supply it.
Problem. Maximise \(f(x,y) = xy\) subject to \(x + y \le 10\), with \(x, y \in [0, 10]\). Write a penalised fitness and evaluate the candidates \((4, 5)\), \((6, 6)\) and \((5, 5)\) with \(\rho = 50\).
Solution. In standard form the constraint is \(g = x + y - 10 \le 0\). Since this is a maximisation, subtract the penalty from the objective: \(\text{fit} = xy - \rho\big(\max\{0,\ x + y - 10\}\big)^2\).
\((4,5)\): \(g = -1 \le 0\), feasible, no penalty. \(\text{fit} = 20\).
\((6,6)\): \(g = 2 > 0\), infeasible. \(\text{fit} = 36 - 50(2)^2 = 36 - 200 = -164\).
\((5,5)\): \(g = 0\), feasible and exactly on the boundary. \(\text{fit} = 25\).
The penalty demotes \((6,6)\) from apparent best (raw \(xy = 36\)) to worst, and \((5,5)\) correctly wins — it is the true constrained optimum, as Chapter 21's Lagrange conditions confirm. Note the tuning risk: with \(\rho = 1\) instead, \((6,6)\) would score \(36 - 4 = 32\) and beat the feasible optimum, and the GA would converge to an illegal design. Since the optimum sits exactly on the fence, the penalty must be steep enough to guard the boundary without flattening the region next to it.
Problem. Take \(L = 5\), \(p_c = 0.8\), \(p_m = 0.01\). Compare the fate of \(H_1 = 11\!*\!*\!*\) and \(H_2 = 1\!*\!*\!0\!*\), both with \(f(H)/\overline{f} = 1.5\).
Solution. Both schemata have order \(o = 2\), so both face the same mutation threat: \(o\,p_m = 0.02\). They differ only in defining length. For \(H_1\) the fixed positions are 1 and 2, so \(\delta = 1\); for \(H_2\) they are 1 and 4, so \(\delta = 3\).
\(H_1\): survival \(= 1 - 0.8\times\tfrac{1}{4} - 0.02 = 1 - 0.20 - 0.02 = 0.78\). Growth \(= 1.5 \times 0.78 = \mathbf{1.17}\) — copies increase by 17% per generation, compounding exponentially.
\(H_2\): survival \(= 1 - 0.8\times\tfrac{3}{4} - 0.02 = 1 - 0.60 - 0.02 = 0.38\). Growth \(= 1.5 \times 0.38 = \mathbf{0.57}\) — copies halve every generation despite being 50% fitter than average.
This is the building-block hypothesis in two lines. Identical order, identical fitness advantage, opposite fates — decided entirely by defining length, because a spread-out schema offers crossover more places to cut it apart. A GA does not preserve every good pattern; it preserves good patterns that are compact. This also explains why gene ordering on the chromosome is a real design decision: placing interacting variables adjacent to one another shortens the schemata that matter, and can be the difference between a GA that works and one that does not.
Chapter Summary
A population and no gradient: works on black-box, discrete and multimodal problems, but surrenders every guarantee of Part 5.
Binary, Gray, real-valued or permutation — the representation dictates the operators and can create or destroy the problem's structure.
Convert \(\min F\) to a maximised fitness, scale it to control pressure, and handle constraints by penalty (Chapter 21).
Roulette is classical but scale-sensitive; tournament is scale-free and the usual default; elitism protects the best-so-far.
Crossover exploits by recombining building blocks (\(p_c \approx 0.8\)); mutation explores by restoring lost alleles (\(p_m \approx 1/L\)).
Short, low-order, above-average schemata grow exponentially; implicit parallelism tests many patterns at once — but no free lunch.
Problems
Where a random number is needed, state the convention you use. Difficulty rises down the list.
- List three situations in which a genetic algorithm is preferable to the gradient methods of Chapter 20, and one in which it is clearly the wrong choice.
- Define chromosome, gene, allele, genotype and phenotype, and state which of these the GA operators act upon.
- A variable \(x \in [0, 15]\) is encoded with 8 bits. Find the precision and decode \(10110010\).
- How many bits are needed to represent \(x \in [-5, 5]\) to a precision of \(0.01\)? How many for four such variables?
- Explain the Hamming cliff with a numerical example, and state how Gray coding removes it.
- Why does standard one-point crossover fail for permutation encoding? Illustrate with two tours of five cities.
- Convert \(\min F(x) = (x-3)^2\) into a fitness function by two different methods, and comment on which behaves better under roulette selection.
- For the population with fitnesses \(\{12,\ 40,\ 8,\ 20\}\), compute the roulette probabilities, cumulative ranges, and expected counts.
- Using the population of Problem 8 and random numbers \(r = 0.10,\ 0.45,\ 0.78,\ 0.99\), determine the mating pool.
- Explain why tournament selection is immune to fitness scaling, and how \(k\) controls selection pressure.
- State what elitism does and give a concrete scenario in which a GA without elitism reports a worse answer than it had already found.
- Cross \(A = 110010\) and \(B = 001101\) at locus 3, and at loci 2 and 5 (two-point). Compare the offspring.
- Explain why \(p_c\) is large and \(p_m\) is small, and what happens to the search at \(p_m = 0.5\).
- For \(H = *\!1\!0\!*\!*\!1\) with \(L = 6\), state \(o(H)\) and \(\delta(H)\), and compute the survival probability under \(p_c = 0.7\), \(p_m = 0.02\).
- Two schemata have \(f(H)/\overline{f} = 1.4\); one has \(o = 2,\ \delta = 1\) and the other \(o = 4,\ \delta = 6\), with \(L = 8\), \(p_c = 0.9\), \(p_m = 0.01\). Determine which grows and which dies out.
- State the building-block hypothesis, and explain why gene ordering on the chromosome is a genuine design decision.
- Explain implicit parallelism, and why a population of \(N\) strings processes far more than \(N\) schemata.
- Maximise \(f(x,y) = 2x + 3y\) subject to \(x + y \le 8\) with a penalty approach; evaluate \((3,4)\), \((5,5)\) and \((4,4)\) with \(\rho = 10\), and comment on the choice of \(\rho\).
- Describe premature convergence: its cause, two symptoms by which you would recognise it in a run log, and three countermeasures.
- Explain the exploration–exploitation trade-off, classifying each of \(N\), \(p_c\), \(p_m\), \(k\) and \(e\) as pushing toward one or the other.
- The schema theorem is an inequality that ignores schema construction and cannot be iterated across generations. Explain both limitations, and state what the no free lunch theorem adds.
- Design a complete GA for a discrete engineering problem of your choice: state the encoding, fitness, constraint handling, operators, parameters and termination rule, and justify each. Explain how you would report results given that the algorithm is stochastic.