Tengo una variación del problema de asignación que el algoritmo habitual Munkres/húngaro parece estar mal equipado para resolver.Problemas del algoritmo de Munkres para asignación no estándar
En el problema de asignación tradicional, hay n trabajadores que deben asignarse a n trabajos, y una matriz que contiene el costo de asignar cada trabajador a cada trabajo.
En esta variación, solo tenemos m (m < n) trabajadores. Como el algoritmo de Munkres requiere un número igual de trabajadores y trabajos, creamos (n - m) trabajadores "ficticios" que pueden asignarse a los trabajos de repuesto. Además, los trabajos mismos están organizados en una gran cantidad de categorías discretas.
Nos gustaría imponer la restricción de que al menos 1 trabajo de cada categoría se asigna a un trabajador real (no simulado). Esto es difícil de hacer elegantemente: puede, por ejemplo, elegir un trabajo aleatorio de cada categoría y desinflar artificialmente cada costo asociado al trabajador real, pero esta es una solución muy cruda que compromete severamente la integridad de la tarea final.
Lo que hacemos actualmente es ejecutar el algoritmo varias veces, evaluando cada vez la asignación de salida y luego modificando la matriz de costos de modo que los costos para todos los trabajos en cualquier categoría que se asignaron solo a los trabajadores ficticios se reduzcan ligeramente. Esto funciona adecuadamente, pero para conjuntos de datos moderadamente grandes (n ~ = 500) el proceso puede tardar un tiempo (cada tarea de Munkres toma quizás 10 segundos para computarse, y con suficientes categorías puede haber un número no trivial de iteraciones).
¿Hay algún algoritmo modificado de Munkres, o un algoritmo completamente diferente, que resuelva este problema de manera más eficiente?
Gracias, esto parece prometedor. No estoy familiarizado con el Flujo de Costos Mínimos - mirándolo ahora - por lo que esta puede ser una pregunta tonta, pero ¿esta formulación garantiza que a cada trabajador se le asigne un trabajo? – daosmith
Sí, el flujo de costo mínimo es una generalización del problema de asignación, sin los nodos C este es un problema de asignación estándar. Algoritmo húngaro resuelve el problema de asignación. – maniek