Here I’m combining a bit of visualisation with my other favourite subject - the Evolutionary Algorithm (or Genetic Algorithm if you prefer). I’m not going to write anything about the properties of the algorithm - you can just play with the controls below the chart and see how the different settings effect its ability to find a good solution, adapt to changes and explore the problem space.
The problem: Find a value of x which maximises the value of y. The function is a set of sinusoidal waves of varying frequency and amplitude. The blue line shows the “fitness” for each value of x.
Basically, a population of different solutions is maintained - in this case, each solution is simply a value for x. Every individual has a fitness which can be calculated based on it’s value. Each iteration (100ms here) a solution is removed from the population - killed by selective pressure. Fitter individuals have a greater chance at surviving, less fit individuals have a less of a chance.
A replacement solution is “bred” each iteration, to replace the solution killed-off by selective pressure. This new individual is generated by combining the “genetic material” of one or more parents. In this case, just by taking the x value of a single parent. Importantly, a mutation is applied to the new solution - this is key to exploring the problem space effectively.
And that’s all there is to an Evolutionary Algorithm - it’s just a way of finding the right combination of input variables to maximise some arbitrarily complex fitness function. It does this through a guided random search.