THE ASSIGNMENT PROBLEM
9.7.1 The Assignment Problem
We can use the branch and bound technique to solve "the
assignment problem".
Consider the cost matrix C:
| 1 2 3 4
---------------
a | 11 12 18 40
b | 14 15 13 22
c | 11 17 19 23
d | 17 14 20 28
The idea is that we have four "agents" a, b, c, and d. We also
have four jobs that need doing: jobs #1, #2, #3, and #4. In the
cost matrix, C[i,j] represents what it will cost for agent i to
do job j.
The assignment problem is: how can we assign one job to each
agent in such a way that the total cost is as low as possible?
If there are n agents, there are n! different possible
assignments, so a "blind" search in a graph whose nodes
represent all the possible assignments would not be practical
for any but the smallest values of n.
We can conceive of a graph that has nodes of the form (L) where
L is an ordered list of some of the elements of {a,b,c,d}.
The purpose of L is to represent partial assignments of agents
to jobs. If i is the jth element of L, it means that agent i
is assigned job j. (An agent is allowed to appear in only one
position in a list.)
An edge exists from (L) to (L') if L' can be obtained from L by
adjoining to the end of L an element that is not already in L.
We will need a "bounding function" for a branch and bound
search.
If we look at any column of the matrix C, say column j, then
the smallest number in column j is the least it can possibly
cost to get job j done. Therefore the sum of the minimum
elements of the columns of C is a lower bound on the cost of
all possible assignments.
Say we assign job #1 to agent a. Then the problem of assigning
the rest of the jobs to the remaining agents is another
instance of the same kind of problem. The cost matrix of that
sub-problem is:
| 2 3 4
---------------
b | 15 13 22
c | 17 19 23
d | 14 20 28
It is just the matrix obtained from C by taking out column 1
and row a.
The sum of the minimum elements of this new matrix is
14+13+22=49. Thus, if we create any assignment of jobs 1-4
that involves giving job #1 to agent a, then the total cost of
that assignment will be at least 11+49=60. (The 11 is the cost
of agent a doing job #1).
In the same way, we can calculate the lower bounds on the total
cost assuming we assign job 2, 3, or 4 to agent a. The results
are, respectively, 58, 65, and 78.
Thus a branch and bound algorithm might explore first the
possibility of assigning job #2 to agent a to see how low the
total cost could be made by assigning the rest of the tasks in
various ways.
The resulting subinstances at each successive "level" would
typically be solved using the identical branch and bound
technique. The possibility of assigning jobs 1, 3, or 4 to
node b would be considered next, and associated cost lower
bounds would be calculated for each of these possibilities.
Next, we would determine which "leaf-node" (at *any* level) has
a minimal cost lower bound. Further exploration would proceed
from there. (c.f diagrams on pp. 314-315).
Note: A heap can be used to store the unprocessed nodes in
priority order.
After computing we would investigate the
assignment that has the most promising lower bound on the total
cost.