There are many instances in which a several tasks, objects, or other needs to be assigned to a group of people, objects or other. For example, individually assigning a group of people a list of tasks. This is known as a matching problem.
Matching problems often have multiple solutions however there is generally one or more optimum solution. This is the one which achieves the intended result while expending the least time or resources.
In some cases, multiple assignments may be required for either group (e.g. a task may require many people or a person may be assigned to many tasks).