This is a strategy to find “optimal solutions” to complex problems

*Optimal solutions* means **minimum** or **maximum**

If the problem is small we can just use `which.min`

or `which.max`

But if the problem is big we cannot test **every** combination

**Genetic algorithms** can solve this based on a model of evolution