Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hungarian algorithm with unequal number of workers and tasks

I have a problem bugging me for a while now.

We have "workers" w_0, w_1 ... w_n, and tasks t_0, t_1, ... t_m, and durations D_ij such that w_i can complete t_j in that number of hours. Each worker also has a maximum m_0,m_1... m_n number of hours that can be worked.

Multiple workers can work on the same task with pro-rated effort. For example if D_11 = 2 and D_21 = 4, then worker 1 is twice as efficient as worker 2 on task 1. So you could combine, e.g. 1 hour of 1's work and 2 of 2's to get the task done.

How can we determine the minimum amount of hours in which all tasks can be completed.

I have tried using the greedy technique to select the best worker for each task, but that doesn't work on each case. Say for example worker 1 can complete task 1 in 2 hours and task 3 in 4 hours. It is clear that worker 1 will be selected to work on task 1, even though, let's say that task 3 is very time consuming for other workers, and worker 1 would have been perfect for the job.

I've thought about reducing the problem to an assignment problem, but had no luck in finding a way.

How can this problem be solved ?

like image 887
Zoltan Ersek Avatar asked Oct 18 '22 20:10

Zoltan Ersek


1 Answers

There is a straightforward linear programming formulation.

First, we convert the durations Dij into rates Rij by Rij = 1/Dij. Next, we define decision variables xij representing the amount of time that worker i works on task j.

The objective is simply the sum over all i and j of xij. The constraints are:

  1. No worker exceeds their maximum time: for each i, the sum over all j of xij is less than or equal to mi

  2. Each job is completed: for each j, the sum over all i of Rij*xij is greater than or equal to 1

  3. No one can work negative hours: for all i and j, xij is greater than or equal to zero

The wikipedia page provides pointers to various linear solver software.

like image 79
mhum Avatar answered Oct 21 '22 22:10

mhum