3. Problema de Asignación.

Anuncio
Programación Matemática para Economistas
3.- Problemas de asignación.
Supongamos que hemos de asignar n personas a n tareas y que ninguna de ellas
puede atender más de una tarea a la vez. El coste de asignar la persona i a la tarea j viene
dado por cij. Se desea determinar la asignación de personas a tareas de manera que se
minimice el coste de dicha asignación.
Sea xij variable de decisión del problema. Esta variable tomará el valor 1 si el agente
i es asignado a la tarea j y 0 en caso contrario. Además, dado que a cada agente sólo se le
puede asignar una tarea y viceversa, se cumple:
n
n
i =1
j =1
∑ xij = 1; ∑ xij = 1 i , j = 1, 2,, ...,n
Por tanto, el problema a resolver es:
n
Min
n
∑∑c
i = 1 j =1
n
s. a
∑x
i =1
ij
n
∑x
j =1
ij
ij
x ij
=1
j = 1, 2, ..., n
= 1 i = 1, 2, ..., n
xij ∈ {0, 1 }
i , j = 1, 2, ..., n
Este problema es un caso particular del problema de transporte en el que ei = di = 1.
Para su resolución existen, sin embargo, algoritmos de resolución propios. Entre ellos está el
método húngaro, en el que se siguen los siguientes pasos:
Paso 1:
a) Elegimos el elemento más pequeño de cada columna (fila) y lo restamos a
todos los elementos de la misma.
b) En la matriz resultante elegimos el más pequeño de cada fila (columna) y lo
restamos al resto de elementos de la misma.
De esta forma, se obtiene una matriz con, al menos un elemento igual a cero en cada
fila y en cada columna.
Paso 2:
En la matriz resultante, elegir la fila con menos ceros. Encuadrar uno de ellos y
tachar todos los ceros pertenecientes a la fila y la columna del cero encuadrado.
R. Caballero, T. Gómez, M. González, M. Hernández, F. Miguel, J. Molina, M.M. Muñoz, L. Rey, F. Ruiz
Programación Matemática para Economistas
Hacer lo mismo para el resto de filas y columnas de la matriz.
Si cada fila o columna tiene un cero enmarcado, ya se tiene la solución óptima al
problema, que corresponde a la asignación de tareas a agentes que indiquen los ceros
enmarcados.
Paso 3:
a) Marcar (*) las filas que no tengan ningún cero enmarcado.
b) En la fila marcada, marcar las columnas correspondientes a los ceros
tachados en esa fila.
c) Para las columnas marcadas, marcar las filas correspondientes a ceros
encuadrados en las mismas.
d) Repetir b) y c) hasta que no se puedan marcar ninguna fila o columna.
Paso 4:
Tachar las filas no marcadas y las columnas marcadas. De la matriz que queda,
elegir el elemento más pequeño. Restar ese elemento a los de las columnas no tachadas y
sumarlo a los de las filas tachadas, sin modificar el resto de elementos de la matriz. Ir al
paso 2.
Ejemplo:
Una empresa se dedica a la producción y distribución de un bien. Dispone de un
almacén y cinco tiendas de venta al público. Diariamente debe abastecer de mercancía a
cada una de las tiendas. Para llevar a cabo la distribución tiene contratados los servicios de
cinco empresas de transporte que pueden abastecer una tienda al día. El coste diario del
abastecimiento a cada tienda viene dado por la siguiente tabla (en miles de unidades
monetarias):
Empresa 1
Empresa 2
Empresa 3
Empresa 4
Empresa 5
Tienda 1 Tienda 2 Tienda 3 Tienda 4 Tienda 5
8
6
5
12
5
9
3
7
6
3
15
2
7
3
4
8
9
8
7
6
3
9
6
3
4
Se desea saber qué asignación de empresas a tiendas es la que minimiza el coste total
de reparto.
R. Caballero, T. Gómez, M. González, M. Hernández, F. Miguel, J. Molina, M.M. Muñoz, L. Rey, F. Ruiz
Programación Matemática para Economistas
Solución:
Trabajaremos con una tabla que recoge, por filas, los costes de asignación de cada
agente a cada una de las tareas:
8
9
15
8
3
6
3
2
9
9
5
7
7
8
6
12
6
3
7
3
5
3
4
6
4
Restamos, por filas, a cada elemento el más pequeño de ellos.
3
6
13
2
0
1
0
0
3
6
0
4
5
2
3
7
3
1
1
0
0
0
2
0
1
Restamos, en cada columna, el elemento más pequeño de la misma:
3
6
13
2
0
1
0
0
3
6
0
4
5
2
3
7
3
1
1
0
0
0
2
0
1
Obtenemos la misma tabla que antes, dado que en la tabla anterior teníamos un cero
en cada fila. Enmarcamos los ceros:
3
6
13
2
[0]
1
0
[0]
3
6
[0]
4
5
2
3
7
3
1
1
0
0
0
2
[0]
1
Marcamos la fila 2 dado que no tiene ningún cero enmarcado, las columnas 2 y 5 por
tener ceros tachados en la fila 2 y las filas 3 y 4 puesto que tienen ceros enmarcados en las
R. Caballero, T. Gómez, M. González, M. Hernández, F. Miguel, J. Molina, M.M. Muñoz, L. Rey, F. Ruiz
Programación Matemática para Economistas
columnas 2 y 5, respectivamente. Tachamos las filas 1 y 5 (no marcadas) y las columnas 2 y
5 (marcadas):
3
6
13
2
[0]
4
5
2
3
1
0
[0]
3
6
*
[0]
7
3
1
1
0
0
0
2
*
*
*
[0]
1
*
El elemento más pequeño de la tabla resultante es 1, valor que hemos de restar a los
elementos de las columnas no tachadas y lo sumamos a las filas tachadas. El resto de
elementos mantienen sus valores. La tabla resultante es:
3
5
12
1
[0]
2
[0]
0
3
7
[0]
3
4
1
3
7
2
[0]
0
0
1
0
2
[0]
2
en la que tenemos un cero encuadrado en cada fila. Hemos llegado a la solución óptima, que
asigna: la tienda 1 a la empresa 5, la tienda 2 a la empresa 2, la empresa 1 a la tienda 3, la
tienda 4 para la empresa 3 y la tienda 5 a la empresa 4.
R. Caballero, T. Gómez, M. González, M. Hernández, F. Miguel, J. Molina, M.M. Muñoz, L. Rey, F. Ruiz
Descargar