NAME
Algorithm::Munkres - Perl extension for Munkres' solution toclassical Assignment problem for square and rectangular matricesThis module extends the solution of Assignment problem for squarematrices to rectangular matrices by padding zeros. Thus a rectangularmatrix 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),where0th element indicates that 0th row is assigned 0th column i.e value=21st element indicates that 1st row is assigned 3rd column i.e.value=12nd element indicates that 2nd row is assigned 1st column.i.e.value=23rd 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 byeach worker to complete a job then how should the assignment of aWorker 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 zp 2 4 7q 3 9 5r 8 2 9where the cell values of the above matrix give the time requiredfor the worker(given by column name) to complete the job(given bythe row name)then possible solutions are:Total1. 2, 9, 9 202. 2, 2, 5 93. 3, 4, 9 164. 3, 2, 7 125. 8, 9, 7 246. 8, 4, 5 17Thus (2) is the optimal solution for the above problem.This kind of brute-force approach of solving Assignment problemquickly becomes slow and bulky as N grows, because the number ofpossible solution are N! and thus the task is to evaluate eachand then find the optimal solution.(If N=10, number of possiblesolutions: 3628800 !)Munkres' gives us a solution to this problem, which is implementedin 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 inputmatrix 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 ofarray) and the 'assign' subroutine expects a reference to thisarray and not the complete array.eg:assign(\@inp_mat, \@out_mat);The second argument to the assign subroutine is the referenceto the output array.
OUTPUT
The assign subroutine expects references to two arrays as itsinput paramenters. The second parameter is the reference to theoutput array. This array is populated by assign subroutine. Thisarray is single dimensional Nx1 matrix.For above example the output array returned will be:(0,2,1)where0th element indicates that 0th row is assigned 0th column i.e value=21st element indicates that 1st row is assigned 2nd column i.e.value=52nd 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.html2. Munkres, J. Algorithms for the assignment and transportationProblems. J. Siam 5 (Mar. 1957), 32-383. François Bourgeois and Jean-Claude Lassalle. 1971.An extension of the Munkres algorithm for the assignmentproblem to rectangular matrices.Communication ACM, 14(12):802-804
AUTHOR
Anagha Kulkarni, University of Minnesota Duluthkulka020 <at> d.umn.eduTed Pedersen, University of Minnesota Duluthtpederse <at> d.umn.edu
COPYRIGHT AND LICENSE
Copyright (C) 2007-2008, 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 02111-1307, USA.
POD ERRORS
Hey! The above document had some coding errors, which are explained below:
- Around line 566:
-
Non-ASCII character seen before =encoding in 'François'. Assuming UTF-8