Permuting a collection of values
When we permute a collection of values, we'll elaborate all the possible orders for the items. There are ways to permute items. We can use permutations as a kind of brute-force solution to a variety of optimization problems.
By visiting http://en.wikipedia.org/wiki/Combinatorial_optimization, we can see that the exhaustive enumeration of all permutations isn't appropriate for larger problems. The use of the itertools.permutations()
function is a handy way to explore very small problems.
One popular example of these combinatorial optimization problems is the assignment problem. We have n agents and n tasks, but the cost of each agent performing a given task is not equal. Imagine that some agents have trouble with some details, while other agents excel at these details. If we can properly assign tasks to agents, we can minimize the costs.
We can create a simple grid that shows how well a given agent is able to perform a given task. For a small problem of a half...