1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130

NAME
AlgorithmMunkres : Perl extension for Munkres' solution to
classical Assignment problem for square and rectangular matrices
This module extends the solution of Assignment problem for square
matrices to rectangular matrices by padding zeros. Thus a rectangular
matrix is converted to square matrix by padding necessary zeros.
SYNOPSIS
use Algorithm::Munkres;
@mat = (
[2, 4, 7, 9],
[3, 9, 5, 1],
[8, 2, 9, 7],
);
assign(\@mat,\@out_mat);
Then the @out_mat array will have the output as: (0,3,1,2),
where
0th element indicates that 0th row is assigned 0th column i.e value=2
1st element indicates that 1st row is assigned 3rd column i.e.value=1
2nd element indicates that 2nd row is assigned 1st column.i.e.value=2
3rd element indicates that 3rd row is assigned 2nd column.i.e.value=0
DESCRIPTION
Assignment Problem: Given N jobs, N workers and the time taken by
each worker to complete a job then how should the assignment of a
Worker to a Job be done, so as to minimize the time taken.
Thus if we have 3 jobs p,q,r and 3 workers x,y,z such that:
x y z
p 2 4 7
q 3 9 5
r 8 2 9
where the cell values of the above matrix give the time required
for the worker(given by column name) to complete the job(given by
the row name)
then possible solutions are:
Total
1. 2, 9, 9 20
2. 2, 2, 5 9
3. 3, 4, 9 16
4. 3, 2, 7 12
5. 8, 9, 7 24
6. 8, 4, 5 17
Thus (2) is the optimal solution for the above problem.
This kind of bruteforce approach of solving Assignment problem
quickly becomes slow and bulky as N grows, because the number of
possible solution are N! and thus the task is to evaluate each
and then find the optimal solution.(If N=10, number of possible
solutions: 3628800 !)
Munkres' gives us a solution to this problem, which is implemented
in this module.
This module also solves Assignment problem for rectangular matrices
(M x N) by converting them to square matrices by padding zeros. ex:
If input matrix is:
[2, 4, 7, 9],
[3, 9, 5, 1],
[8, 2, 9, 7]
i.e 3 x 4 then we will convert it to 4 x 4 and the modified input
matrix will be:
[2, 4, 7, 9],
[3, 9, 5, 1],
[8, 2, 9, 7],
[0, 0, 0, 0]
EXPORT
"assign" function by default.
INPUT
The input matrix should be in a two dimensional array(array of
array) and the 'assign' subroutine expects a reference to this
array and not the complete array.
eg:assign(\@inp_mat, \@out_mat);
The second argument to the assign subroutine is the reference
to the output array.
OUTPUT
The assign subroutine expects references to two arrays as its
input paramenters. The second parameter is the reference to the
output array. This array is populated by assign subroutine. This
array is single dimensional Nx1 matrix.
For above example the output array returned will be:
(0,
2,
1)
where
0th element indicates that 0th row is assigned 0th column i.e value=2
1st element indicates that 1st row is assigned 2nd column i.e.value=5
2nd element indicates that 2nd row is assigned 1st column.i.e.value=2
SEE ALSO
1. http://216.249.163.93/bob.pilgrim/445/munkres.html
2. Munkres, J. Algorithms for the assignment and transportation
Problems. J. Siam 5 (Mar. 1957), 3238
3. François Bourgeois and JeanClaude Lassalle. 1971.
An extension of the Munkres algorithm for the assignment
problem to rectangular matrices.
Communication ACM, 14(12):802804
AUTHOR
Anagha Kulkarni, University of Minnesota Duluth
kulka020 <at> d.umn.edu
Ted Pedersen, University of Minnesota Duluth
tpederse <at> d.umn.edu
COPYRIGHT AND LICENSE
Copyright (C) 20072008, Ted Pedersen and Anagha Kulkarni
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version. This program is distributed in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place  Suite 330, Boston, MA 021111307, USA.
