Genetic algorithms are one of the tools we can use to apply machine learning to finding
good, sometimes even optimal, solutions to problems that have billions of potential
solutions. They use biological processes in software to find answers to problems that have
really large search spaces by continuously generating candidate solutions, evaluating how
well the solutions fit the desired outcome, and refining the best solutions.
When solving a problem with a genetic algorithm, instead of asking for a specific solution,
you provide characteristics that the solution must have or rules its solution must pass to be
accepted. For example, when filling a moving truck you provide a set of rules like: load
big things first, distribute the weight to both sides, put light things on top but not loose,
and interlock things with odd shapes so they don’t move around. The more constraints you
add the more potential solutions are blocked. Suppose you say: put the refrigerator, washer
and dryer along the front left wall, load boxes of books along the front right wall,
mattresses down the middle, and clothes on top of the mattresses. These more specific
rules do not work if you are loading packages, or Christmas trees, but the previous goal
oriented ones still do.