Articulo de referencia

Problema de asignación

Ejemplo práctico de asignación de tareas a un número desigual de trabajadores utilizando el método húngaro. El problema de asignación es un problema fundamental de optimización ...

Ejemplo práctico de asignación de tareas a un número desigual de trabajadores utilizando el método húngaro.

El problema de asignación es un problema fundamental de optimización combinatoria . En su forma más general, el problema es el siguiente:

La instancia del problema tiene varios agentes y varias tareas . Cualquier agente puede ser asignado a cualquier tarea, lo que conlleva un coste que puede variar según la asignación agente-tarea. Se requiere realizar el mayor número de tareas posible asignando como máximo un agente a cada tarea y como máximo una tarea a cada agente, de forma que se minimice el coste total de la asignación.

Alternativamente, se puede describir el problema utilizando la teoría de grafos :

El problema de asignación consiste en encontrar, en un grafo bipartito ponderado , un emparejamiento de tamaño máximo en el que la suma de los pesos de las aristas sea mínima.

Si el número de agentes y tareas es igual, el problema se denomina asignación equilibrada , y la versión basada en la teoría de grafos se denomina emparejamiento perfecto de coste mínimo . En caso contrario, se denomina asignación desequilibrada . [ 1 ]

Si el coste total de la asignación para todas las tareas es igual a la suma de los costes de cada agente (o la suma de los costes de cada tarea, que en este caso es lo mismo), entonces el problema se denomina asignación lineal . Generalmente, cuando se habla del problema de asignación sin ninguna especificación adicional, se hace referencia al problema de asignación lineal equilibrada .

Ejemplos

Supongamos que una empresa de taxis dispone de tres taxis (los agentes) y tres clientes (las tareas) que desean ser recogidos lo antes posible. La empresa se enorgullece de la rapidez de sus recogidas, por lo que el coste de recoger a un cliente determinado dependerá del tiempo que tarde el taxi en llegar al punto de recogida. Este es un problema de asignación equilibrada . Su solución es la combinación de taxis y clientes que genere el menor coste total.

Ahora bien, supongamos que hay cuatro taxis disponibles, pero solo tres clientes. Este es un problema de asignación desequilibrada . Una forma de resolverlo es inventar una cuarta tarea ficticia, por ejemplo, "permanecer inmóvil sin hacer nada", con un coste de 0 para el taxi asignado. Esto reduce el problema a un problema de asignación equilibrada, que puede resolverse de la forma habitual y aun así proporcionar la mejor solución.

Se pueden realizar ajustes similares para permitir más tareas que agentes, tareas a las que se deban asignar varios agentes (por ejemplo, un grupo de clientes mayor que el que cabe en un taxi) o para maximizar las ganancias en lugar de minimizar los costos.

Definición formal

La definición formal del problema de asignación (o problema de asignación lineal ) es

Dados dos conjuntos, A y T , junto con una función de peso C  : A × T R . Hallar una biyección f  : A T tal que la función de coste :
aAdo(a,F(a)){\displaystyle \sum _{a\in A}C(a,f(a))}
se minimiza.

Por lo general, la función de ponderación se considera como una matriz cuadrada de valores reales C , de modo que la función de coste se escribe como:

aAdoa,F(a){\displaystyle \sum _{a\in A}C_{a,f(a)}}

El problema es "lineal" porque tanto la función de coste que se va a optimizar como todas las restricciones contienen únicamente términos lineales.

Algoritmos

Una solución ingenua para el problema de asignación consiste en revisar todas las asignaciones y calcular el costo de cada una. Esto puede ser muy ineficiente, ya que, con n agentes y n tareas, existen n ! ( factorial de n ) asignaciones diferentes.

Otra solución ingenua consiste en asignar de forma voraz primero el par con el menor coste y eliminar los vértices; luego, entre los vértices restantes, asignar el par con el menor coste; y así sucesivamente. Este algoritmo puede generar una solución no óptima. Por ejemplo, supongamos que hay dos tareas y dos agentes con los siguientes costes:

  • Alice: Tarea 1 = 1, Tarea 2 = 2.
  • George: Tarea 1 = 5, Tarea 2 = 8.

El algoritmo voraz asignaría la Tarea 1 a Alice y la Tarea 2 a George, con un coste total de 9, pero la asignación inversa tiene un coste total de 7.

Afortunadamente, existen numerosos algoritmos para encontrar la asignación óptima en tiempo polinomial en n . El problema de asignación es un caso particular del problema de transporte , que a su vez es un caso particular del problema de flujo de costo mínimo , que a su vez es un caso particular de un programa lineal . Si bien es posible resolver cualquiera de estos problemas utilizando el algoritmo simplex , o en el peor de los casos en tiempo polinomial utilizando el método del elipsoide , cada especialización tiene un espacio de soluciones más pequeño y, por lo tanto, algoritmos más eficientes diseñados para aprovechar su estructura particular.

Asignación equilibrada

En el problema de asignación equilibrada, ambas partes del grafo bipartito tienen el mismo número de vértices, denotado por n .

Uno de los primeros algoritmos de tiempo polinomial para la asignación equilibrada fue el algoritmo húngaro . Es un algoritmo global  : se basa en mejorar un emparejamiento a lo largo de caminos de aumento (caminos alternos entre vértices no emparejados). Su complejidad de tiempo de ejecución, cuando se utilizan montones de Fibonacci , esO(metronorte+norte2registronorte){\displaystyle O(mn+n^{2}\log n)}, [ 2 ] donde m es el número de aristas. Este es actualmente el tiempo de ejecución más rápido de un algoritmo fuertemente polinomial para este problema. Algunas variantes del algoritmo húngaro también se benefician de la computación paralela , incluida la aceleración por GPU. [ 3 ] Si todos los pesos son enteros, entonces el tiempo de ejecución se puede mejorar a O(metronorte+norte2registroregistronorte){\displaystyle O(mn+n^{2}\log \log n)}, pero el algoritmo resultante es solo débilmente polinomial . [ 4 ] Si los pesos son enteros y todos los pesos son como máximo C (donde C >1 es algún entero), entonces el problema se puede resolver enO(metronorteregistro(nortedo)){\displaystyle O(m{\sqrt {n}}\log(n\cdot C))}tiempo débilmente polinomial en un método llamado escalado de peso . [ 5 ] [ 6 ] [ 7 ]

Además de los métodos globales, existen métodos locales que se basan en encontrar actualizaciones locales (en lugar de rutas de aumento completas). Estos métodos tienen peores garantías de tiempo de ejecución asintótico, pero a menudo funcionan mejor en la práctica. Estos algoritmos se denominan algoritmos de subasta , algoritmos de reetiquetado o algoritmos de preflujo. Se ha demostrado que algunos de estos algoritmos son equivalentes. [ 8 ]

Algunos de los métodos locales asumen que el grafo admite un emparejamiento perfecto ; si este no es el caso, algunos de estos métodos podrían ejecutarse indefinidamente. [ 1 ] : 3 Una forma técnica sencilla de resolver este problema es extender el grafo de entrada a un grafo bipartito completo, agregando aristas artificiales con pesos muy grandes. Estos pesos deben exceder los pesos de todos los emparejamientos existentes, para evitar la aparición de aristas artificiales en la posible solución.

Como demostraron Mulmuley, Vazirani y Vazirani, [ 9 ] el problema del emparejamiento perfecto de peso mínimo se convierte en encontrar menores en la matriz de adyacencia de un grafo. Usando el lema de aislamiento , se puede encontrar un emparejamiento perfecto de peso mínimo en un grafo con una probabilidad de al menos 1/2 . Para un grafo con n vértices, se requiereO(registro2(norte)){\displaystyle O(\log ^{2}(n))}tiempo.

Asignación desequilibrada

En el problema de asignación desequilibrada, la parte mayor del grafo bipartito tiene n vértices y la parte menor tiene r < n vértices. También hay una constante s que es como máximo la cardinalidad de un emparejamiento máximo en el grafo. El objetivo es encontrar un emparejamiento de costo mínimo de tamaño exactamente s . El caso más común es aquel en el que el grafo admite un emparejamiento unilateral perfecto (es decir, un emparejamiento de tamaño r ), y s = r .

Una asignación desequilibrada se puede reducir a una asignación equilibrada. La reducción ingenua consiste en añadirnorter{\displaystyle nr}nuevos vértices a la parte más pequeña y conectarlos a la parte más grande usando aristas de costo 0. Sin embargo, esto requierenorte(norter){\displaystyle n(nr)}nuevos bordes. Una reducción más eficiente se llama técnica de duplicación . Aquí, un nuevo grafo G'Se construye a partir de dos copias del grafo original G : una copia hacia adelante Gf y una copia hacia atrás Gb. La copia hacia atrás se "invierte", de modo que, en cada lado de G' , ahora hay n + r vértices. Entre las copias, necesitamos agregar dos tipos de aristas de enlace: [ 1 ] : 4–6

  • De grande a grande: desde cada vértice en la parte más grande de Gf , agregue una arista de costo cero al vértice correspondiente en Gb .
  • De pequeño a pequeño: si el grafo original no tiene un emparejamiento unilateral perfecto, entonces desde cada vértice en la parte más pequeña de Gf , agregue una arista de costo muy alto al vértice correspondiente en Gb .

En general, como máximonorte+r{\displaystyle n+r}Se requieren nuevos bordes. El grafo resultante siempre tiene una coincidencia de tamaño perfecta.norte+r{\displaystyle n+r}. Un emparejamiento perfecto de costo mínimo en este grafo debe consistir en emparejamientos de cardinalidad máxima de costo mínimo en Gf y Gb. El principal problema con esta técnica de duplicación es que no hay ganancia de velocidad cuandornorte{\displaystyle r\ll n}.

En lugar de utilizar la reducción, el problema de asignación desequilibrada se puede resolver generalizando directamente los algoritmos existentes para la asignación equilibrada. El algoritmo húngaro se puede generalizar para resolver el problema enO(metros+s2registror){\displaystyle O(ms+s^{2}\log r)}tiempo fuertemente polinomial. En particular, si s = r, entonces el tiempo de ejecución esO(metror+r2registror){\displaystyle O(mr+r^{2}\log r)}. Si los pesos son enteros, entonces el método de Thorup se puede utilizar para obtener un tiempo de ejecución deO(metros+s2registroregistror){\displaystyle O(ms+s^{2}\log \log r)}. [ 1 ] : 6

Solución mediante programación lineal

El problema de asignación se puede resolver presentándolo como un programa lineal . Para mayor comodidad, presentaremos el problema de maximización. Cada arista ( i , j ) , donde i está en A y j está en T, tiene un peso.wij{\textstyle w_{ij}}. Para cada arista(i,j){\displaystyle (i,j)}Tenemos una variableincógnitaij{\textstyle x_{ij}}La variable es 1 si la arista está contenida en la coincidencia y 0 en caso contrario, por lo que establecemos las restricciones del dominio: 0incógnitaij1 para i,jA,T,{\displaystyle 0\leq x_{ij}\leq 1{\text{ para }}i,j\in A,T,\,}incógnitaijZ para i,jA,T.{\displaystyle x_{ij}\in \mathbb {Z} {\text{ para }}i,j\in A,T.}

El peso total del emparejamiento es:(i,j)A×Twijincógnitaij{\displaystyle \sum _{(i,j)\in A\times T}w_{ij}x_{ij}}El objetivo es encontrar la pareja perfecta de peso máximo.

Para garantizar que las variables representen realmente una correspondencia perfecta, agregamos restricciones que dicen que cada vértice es adyacente a exactamente una arista en la correspondencia, es decir, jTincógnitaij=1 para iAiAincógnitaij=1 para jT{\displaystyle {\begin{aligned}\sum _{j\in T}x_{ij}&=1{\text{ para }}i\in A\\\sum _{i\in A}x_{ij}&=1{\text{ para }}j\in T\end{aligned}}}

En resumen, tenemos el siguiente LP:

maximizar(i,j)A×Twijincógnitaijsujeto ajTincógnitaij=1 para iA,iAincógnitaij=1 para jT0incógnitaij1 para i,jA,TincógnitaijZ para i,jA,T{\displaystyle {\begin{aligned}{\text{maximizar}}&\sum _{(i,j)\in A\times T}w_{ij}x_{ij}\\{\text{sujeto a}}&\sum _{j\in T}x_{ij}=1{\text{ para }}i\in A,\,\sum _{i\in A}x_{ij}=1{\text{ para }}j\in T\\&0\leq x_{ij}\leq 1{\text{ para }}i,j\in A,T\\&x_{ij}\in \mathbb {Z} {\text{ para }}i,j\in A,T\end{aligned}}} Se trata de un programa lineal entero. Sin embargo, podemos resolverlo sin las restricciones de integralidad (es decir, eliminando la última restricción), utilizando métodos estándar para la resolución de programas lineales continuos. Si bien esta formulación también permite valores fraccionarios para las variables, en este caso particular, el programa lineal siempre tiene una solución óptima cuando las variables toman valores enteros. Esto se debe a que la matriz de restricciones del programa lineal fraccionario es totalmente unimodular  , es decir, satisface las cuatro condiciones de Hoffman y Gale.

Otros métodos y algoritmos de aproximación

Existen otros enfoques para el problema de asignación, los cuales son revisados ​​por Duan y Pettie [ 10 ] (véase la Tabla II). Su trabajo propone un algoritmo de aproximación para el problema de asignación (y el problema más general de emparejamiento de peso máximo ), que se ejecuta en tiempo lineal para cualquier límite de error fijo.

Tarea de muchos a muchos

En el problema de asignación básico, a cada agente se le asigna como máximo una tarea y a cada tarea se le asigna como máximo un agente. En el problema de asignación de muchos a muchos , [ 11 ] cada agente i puede tomar hasta c i tareas ( c i se llama capacidad del agente ), y cada tarea j puede ser tomada por hasta d j agentes simultáneamente ( d j se llama capacidad de la tarea ). Si las sumas de capacidades en ambos lados son iguales (idoi=jdj{\displaystyle \sum _{i}c_{i}=\sum _{j}d_{j}}), entonces el problema está equilibrado y el objetivo es encontrar una correspondencia perfecta (asignar exactamente c i tareas a cada agente i y exactamente d j agentes a cada tarea j ) de manera que el costo total sea lo más pequeño posible.

El problema se puede resolver reduciéndolo al problema de flujo de red de costo mínimo . [ 12 ] Construya una red de flujo con las siguientes capas:

  • Capa 1: Un nodo fuente s .
  • Capa 2: un nodo para cada agente. Hay un arco desde s a cada agente i , con costo 0 y capacidad c i .
  • Nivel 3: un nodo para cada tarea. Hay un arco desde cada agente i hasta cada tarea j , con el costo correspondiente y capacidad 1.
  • Nivel 4: Un nodo sumidero t . Hay un arco desde cada tarea hasta t , con costo 0 y capacidad d j .

Se puede encontrar un flujo máximo entero de coste mínimo en tiempo polinomial; véase el problema del flujo en redes . Todo flujo máximo entero en esta red corresponde a un emparejamiento en el que se asignan como máximo c i tareas a cada agente i y como máximo d j agentes a cada tarea j (en el caso equilibrado, se asignan exactamente c i tareas a i y exactamente d j agentes a j ). Un flujo máximo de coste mínimo corresponde a una asignación de coste mínimo.

Generalización

Cuando se plantea como un problema de teoría de grafos, el problema de asignación puede extenderse de grafos bipartitos a grafos arbitrarios. El problema correspondiente, que consiste en encontrar un emparejamiento en un grafo ponderado donde se maximiza la suma de los pesos, se denomina problema de emparejamiento de peso máximo .

Otra generalización del problema de asignación consiste en extender el número de conjuntos a emparejar de dos a muchos. De este modo, en lugar de emparejar agentes con tareas, el problema se extiende a emparejar agentes con tareas, intervalos de tiempo y ubicaciones. Esto da como resultado el problema de asignación multidimensional .

Véase también

Referencias

  1. 1 2 3 4 Lyle Ramshaw, Robert E. Tarjan (2012). "Sobre asignaciones de costo mínimo en grafos bipartitos desequilibrados" (PDF) . Laboratorios de investigación de HP .
  2. Fredman, Michael L.; Tarjan, Robert Endre (1987-07-01). "Montículos de Fibonacci y sus usos en algoritmos mejorados de optimización de redes" . J. ACM . 34 (3): 596– 615. doi : 10.1145/28869.28874 . ISSN 0004-5411 . S2CID 7904683 .  
  3. Kawtikwar, Samiran; Nagi, Rakesh (2024-05-01). "HyLAC: Solucionador híbrido de asignación lineal en CUDA" . Journal of Parallel and Distributed Computing . 187 104838. doi : 10.1016/j.jpdc.2024.104838 . ISSN 0743-7315 . 
  4. Thorup, Mikkel (1 de noviembre de 2004). "Colas de prioridad entera con clave decreciente en tiempo constante y el problema de los caminos más cortos desde una única fuente" . Journal of Computer and System Sciences . Número especial sobre STOC 2003. 69 (3): 330– 353. doi : 10.1016/j.jcss.2004.04.003 . ISSN 0022-0000 . 
  5. Gabow, H.; Tarjan, R. (1989-10-01). "Algoritmos de escalado más rápidos para problemas de red". SIAM Journal on Computing . 18 (5): 1013– 1036. doi : 10.1137/0218069 . ISSN 0097-5397 . 
  6. Goldberg, A.; Kennedy, R. (1997-11-01). "Las actualizaciones de precios globales ayudan". SIAM Journal on Discrete Mathematics . 10 (4): 551– 572. doi : 10.1137/S0895480194281185 . ISSN 0895-4801 . 
  7. Orlin, James B.; Ahuja, Ravindra K. (1992-02-01). "Nuevos algoritmos de escalado para los problemas de asignación y ciclo medio mínimo". Mathematical Programming . 54 ( 1– 3): 41– 56. doi : 10.1007/BF01586040 . ISSN 0025-5610 . S2CID 18213947 .  
  8. Alfaro, Carlos A.; Pérez, Sergio L.; Valencia, Carlos E.; Vargas, Marcos C. (1 de junio de 2022). "El problema de la asignación revisitado". Optimization Letters . 16 (5): 1531– 1548. doi : 10.1007/s11590-021-01791-4 . ISSN 1862-4480 . S2CID 238644205 .  
  9. ^ Mulmuley, Ketan ; Vazirani, Umesh ; Vazirani, Vijay (1987). "Hacer coincidir es tan fácil como invertir matrices". Combinatoria . 7 (1): 105– 113. doi : 10.1007/BF02579206 . S2CID 47370049 . 
  10. Duan, Ran; Pettie, Seth (2014-01-01). "Aproximación en tiempo lineal para la coincidencia de peso máximo" . Journal of the ACM . 61 : 1–23 . doi : 10.1145/2529989 . S2CID 207208641 . 
  11. Zhu, Haibin; Liu, Dongning; Zhang, Siqin; Zhu, Yu; Teng, Luyao; Teng, Shaohua (2016-03-07). "Resolución del problema de asignación de muchos a muchos mediante la mejora del algoritmo de Kuhn-Munkres con retroceso" . Theoretical Computer Science . 618 : 30–41 . doi : 10.1016/j.tcs.2016.01.002 . ISSN 0304-3975 . 
  12. DW "Coincidencia de peso máximo de alta multiplicidad" . Computer Science Stack Exchange . Consultado el 15 de enero de 2025 .

Lecturas adicionales

  • Brualdi, Richard A. (2006). Clases de matrices combinatorias . Enciclopedia de Matemáticas y sus Aplicaciones. Vol.  108. Cambridge: Cambridge University Press . ISBN 978-0-521-86565-4. Zbl 1106.05001 . 
  • Burkard, Rainer ; M. Dell'Amico; S. Martello (2012). Problemas de asignación (Reimpresión revisada) . SIAM. ISBN 978-1-61197-222-1.
  • Bertsekas, Dimitri (1998). Optimización de redes: modelos continuos y discretos . Athena Scientific. ISBN 978-1-886529-02-1.
  • Cormen, Thomas; Leiserson, Charles; Rivest, Ronald; Stein, Clifford. «25.3: El algoritmo húngaro para el problema de asignación». Introducción a los algoritmos (4.ª  ed.). págs. 723–739 . ISBN  978-0-262-04630-5.
  • Implementación del algoritmo en NetworkX
  • Implementación del algoritmo en SciPy