Supongo que tengo un gráfico donde los nodos son cargas de trabajo de varios tipos y los bordes son dependencias entre las cargas de trabajo. (Esto es un DAG ya que las dependencias cíclicas no deben existir.)Algoritmo para transformar un DAG de flujo de trabajo en una asignación de recursos paralela?
También tengo un conjunto de agentes múltiples que pueden realizar el trabajo.
Algunas variedades de carga de trabajo se pueden dar a cualquier agente, otras se deben administrar a un agente específico y otras se deben administrar a un agente de un grupo particular de agentes.
¿Cómo puedo asignar cargas de trabajo de tal manera que:
Sin carga de trabajo se le da a un agente hasta que se completen todas sus cargas de trabajo de bloqueo
el menor tiempo posible se requiere para completar la gráfica carga total de trabajo . (Tenga en cuenta que minimizar el tiempo de inactividad del agente generalmente es bueno, pero no un requisito fundamental; puede haber escenarios en los que un agente en particular permanezca inactivo por más tiempo, pero el tiempo total para completar todos los trabajos en todos los agentes es mínimo).
Las cargas de trabajo tienen estimaciones de duración, pero asuma por simplicidad que cada carga de trabajo tarda el mismo tiempo en computarse. (Simplemente descomponga cada carga de trabajo en múltiples cargas de trabajo dependientes en serie hasta que cada carga de trabajo sea efectivamente una operación de tiempo constante.)
Conozco la clasificación topológica de DAG, pero eso produce un ordenamiento de nodos único y en serie. Tengo varios agentes operando en paralelo, y las relaciones son tales que se pueden realizar optimizaciones de tiempo potencialmente grandes mediante el reordenamiento no obvio de las tareas.
El resultado de esto se representaría mejor como un diagrama de Gantt con una duración total mínima. De hecho, si piensas en el problema como la asignación de tickets de errores en un hito a los ingenieros de un equipo, con el objetivo de lograr el hito lo antes posible, entonces entiendes la idea. (No ... no me digas que importe mi gráfico en MS Project y luego lo exportes :) - ¡Me interesa el algoritmo que lo respalda!)
Punteros a algoritmos bien conocidos, bibliotecas de software o cuestiones generales y principios son muy apreciados!
Buen resumen. Ordenar tareas por el número de dependencias es una heurística decente, pero puede llevar a una infrautilización de recursos paralelos (también conocidos como aulas), especialmente si tiene una dependencia entre algunas clases y sus aulas; por ejemplo, si algunas conferencias necesitan un proyector y solo algunas las aulas tenían proyectores instalados. En ese caso, será difícil mantener todas las aulas llenas, especialmente si muchas conferencias necesitan proyectores. – Yetanotherjosh