La planificación por intervalos es una clase de problemas en informática , particularmente en el área del diseño de algoritmos . Estos problemas consideran un conjunto de tareas. Cada tarea está representada por un intervalo que describe el tiempo en el que debe ser procesada por alguna máquina (o, equivalentemente, programada en algún recurso). Por ejemplo, la tarea A podría ejecutarse de 2:00 a 5:00, la tarea B de 4:00 a 10:00 y la tarea C de 9:00 a 11:00. Un subconjunto de intervalos es compatible si no hay dos intervalos que se superpongan en la máquina/recurso. Por ejemplo, el subconjunto {A,C} es compatible, al igual que el subconjunto {B}; pero ni {A,B} ni {B,C} son subconjuntos compatibles, porque los intervalos correspondientes dentro de cada subconjunto se superponen.
El problema de maximización de la programación de intervalos (ISMP) consiste en encontrar el conjunto compatible más grande, es decir, un conjunto de intervalos no superpuestos de tamaño máximo. El objetivo es ejecutar la mayor cantidad de tareas posible, es decir, maximizar el rendimiento . Esto equivale a encontrar un conjunto independiente máximo en un grafo de intervalos .
Una generalización del problema consideramáquinas/recursos. [ 1 ] Aquí el objetivo es encontrarsubconjuntos compatibles cuya unión es la mayor.
En una versión mejorada del problema, los intervalos se dividen en grupos. Un subconjunto de intervalos es compatible si no hay dos intervalos que se superpongan y, además, si no hay dos intervalos que pertenezcan al mismo grupo (es decir, el subconjunto contiene como máximo un único representante de cada grupo). Cada grupo de intervalos corresponde a una tarea y representa varios intervalos alternativos en los que puede ejecutarse.
El problema de decisión de programación de intervalos grupales (GISDP) consiste en decidir si existe un conjunto compatible en el que estén representados todos los grupos. El objetivo es ejecutar una única tarea representativa de cada grupo. GISDPk es una versión restringida de GISDP en la que el número de intervalos en cada grupo es como máximo k .
El problema de maximización de la programación de intervalos grupales (GISMP) consiste en encontrar el conjunto compatible más grande posible: un conjunto de representantes no superpuestos de tamaño máximo. El objetivo es ejecutar una tarea representativa de tantos grupos como sea posible. GISMPk es una versión restringida de GISMP en la que el número de intervalos en cada grupo es como máximo k . Este problema se suele denominar JISPk, donde J significa Trabajo .
GISMP es el problema más general; los otros dos problemas pueden considerarse casos especiales del mismo:
- ISMP es el caso especial en el que cada tarea pertenece a su propio grupo (es decir, es igual a GISMP1).
- GISDP es el problema de decidir si el máximo es exactamente igual al número de grupos.
Todos estos problemas pueden generalizarse asignando un peso a cada intervalo, que representa la ganancia obtenida al realizar la tarea en dicho intervalo. El objetivo es maximizar el peso total.
Todos estos problemas son casos especiales de planificación en una sola máquina , ya que suponen que todas las tareas deben ejecutarse en un solo procesador. La planificación en una sola máquina es un caso especial de planificación óptima de trabajos .
Maximización de la programación de intervalo único
La programación de intervalo único se refiere a la creación de un cronograma de intervalos en el que ningún intervalo se superpone.
Sin ponderar
Varios algoritmos, que pueden parecer prometedores a primera vista, en realidad no encuentran la solución óptima: [ 2 ]
- Seleccionar los intervalos que comienzan antes no es una solución óptima, porque si el intervalo más temprano resulta ser muy largo, aceptarlo nos llevaría a rechazar muchas otras solicitudes más cortas.
- Seleccionar los intervalos más cortos o seleccionar los intervalos con menos conflictos tampoco es lo óptimo.
El siguiente algoritmo voraz , llamado planificación con fecha límite más temprana primero , encuentra la solución óptima para la planificación de intervalo único sin ponderación:
- Seleccione el intervalo, x , con el tiempo de finalización más temprano .
- Eliminar x , y todos los intervalos que intersecan x , del conjunto de intervalos candidatos.
- Repita el proceso hasta que el conjunto de intervalos candidatos esté vacío.
Al seleccionar un intervalo en el paso 1, es posible que debamos eliminar varios intervalos en el paso 2. Sin embargo, todos estos intervalos necesariamente cruzan el tiempo de finalización de x , y por lo tanto, se cruzan entre sí. En consecuencia, como máximo uno de estos intervalos puede estar en la solución óptima. Por lo tanto, por cada intervalo en la solución óptima, existe un intervalo en la solución voraz. Esto demuestra que el algoritmo voraz efectivamente encuentra una solución óptima.
Una explicación más formal la proporciona un argumento de carga .
El algoritmo voraz se puede ejecutar en un tiempo O( n log n ), donde n es el número de tareas, utilizando un paso de preprocesamiento en el que las tareas se ordenan por sus tiempos de finalización.
Ponderado
Los problemas que implican la programación de intervalos ponderados son equivalentes a encontrar un conjunto independiente de peso máximo en un grafo de intervalos . Dichos problemas pueden resolverse en tiempo polinomial. [ 3 ]
Suponiendo que los vectores están ordenados desde el tiempo de finalización más temprano hasta el más tardío, el siguiente pseudocódigo determina el peso máximo de una programación de intervalo único en tiempo Θ(n):
// Los vectores ya están ordenados desde el tiempo de finalización más temprano hasta el más tardío.int v [ numOfVectors + 1 ]; // lista de vectores de intervaloint w [ numOfVectors + 1 ]; // w[j] es el peso para v[j].int p [ numOfVectors + 1 ]; // p[j] es el número de vectores que terminan antes de que comience v[j].int M [ numOfVectors + 1 ];int finalSchedule [];// v[0] no existe, y el primer vector de intervalo se asigna a v[1].w [ 0 ] = 0 ; p [ 0 ] = 0 ; M [ 0 ] = 0 ;// El siguiente código determina el valor de M para cada vector.// El peso máximo del cronograma es igual a M[numOfVectors].para ( int i = 1 ; i < numOfVectors + 1 ; i ++ ) {M [ i ] = max ( w [ i ] + M [ p [ i ]], M [ i - 1 ]);}// Función para construir el cronograma óptimohorario ( j ) {Si ( j == 0 ) { regresar ; }else if ( w [ j ] + M [ p [ j ]] >= M [ j - 1 ]){anteponer ( v [ j ], finalSchedule ); // antepone v[j] a la programación.horario ( p [ j ]);} else { programar ( j - 1 ); }}Ejemplo
Si tenemos los siguientes 9 vectores ordenados por tiempo de finalización, con los pesos encima de cada intervalo correspondiente, podemos determinar cuáles de estos vectores están incluidos en nuestro programa de peso máximo que solo contiene un subconjunto de los siguientes vectores.

Aquí, introducimos nuestro vector final (donde j=9 en este ejemplo) en nuestra función de programación del bloque de código anterior. Realizamos las acciones de la tabla siguiente hasta que j se establezca en 0, momento en el que solo incluimos en nuestra programación final los intervalos encontrados que cumplieron con elrequisito. Este cronograma final es el cronograma con el peso máximo.
Decisión de programación de intervalos grupales
NP-completo cuando algunos grupos contienen 3 o más intervalos
GISDPk es NP-completo cuando, [ 5 ] incluso cuando todos los intervalos tienen la misma longitud. [ 6 ] Esto se puede demostrar mediante una reducción de la siguiente versión del problema de satisfacibilidad booleana , que se demostró [ 7 ] que es NP-completa al igual que la versión no restringida.
- DejarSea un conjunto de variables booleanas.Sea un conjunto de cláusulas sobre X tal que (1) cada cláusula en C tenga como máximo tres literales y (2) cada variable esté restringida a aparecer una o dos veces positivamente y una vez negativamente en total en C. Decida si existe una asignación a variables de X tal que cada cláusula en C tenga al menos un literal verdadero.
Dado un ejemplo de este problema de satisfacibilidad, construya el siguiente ejemplo de GISDP. Todos los intervalos tienen una longitud de 3, por lo que es suficiente representar cada intervalo por su tiempo de inicio:
- Para cada variable(para i = 1,..., p ), crea un grupo con dos intervalos: uno que comienza en(que representa la tarea)) y otro que comienza en(que representa la tarea)).
- Para cada cláusula(para j = 1,..., q ), cree un grupo con los siguientes intervalos:
- Para cada variableque aparece positivamente por primera vez en C — un intervalo que comienza en.
- Para cada variableque aparece positivamente por segunda vez en C — un intervalo que comienza enNótese que ambos intervalos se intersecan con el intervalo, asociado con.
- Para cada variableque aparece negativamente: un intervalo que comienza enEste intervalo interseca el intervaloasociado con.
Cabe destacar que no hay solapamiento entre los intervalos de los grupos asociados a distintas cláusulas. Esto se garantiza, ya que una variable aparece como máximo dos veces en sentido positivo y una vez en sentido negativo.
El GISDP construido tiene una solución factible (es decir, una programación en la que cada grupo está representado) si y solo si el conjunto dado de cláusulas booleanas tiene una asignación satisfactoria. Por lo tanto, GISDP3 es NP-completo, y también lo es GISDPk para cada.
Polinomio cuando todos los grupos contienen como máximo 2 intervalos.
GISDP2 se puede resolver en tiempo polinomial mediante la siguiente reducción al problema de 2-satisfacibilidad : [ 6 ]
- Para cada grupo creo dos variables que representan sus dos intervalos:y.
- Para cada grupo i , cree las cláusulas:y, que representan la afirmación de que se debe seleccionar exactamente uno de estos dos intervalos.
- Por cada dos intervalos que se intersecan (es decir,y) crear la cláusula:, que representan la afirmación de que se debe seleccionar como máximo uno de estos dos intervalos.
Esta construcción contiene como máximo O( n² ) cláusulas (una por cada intersección entre intervalos, más dos por cada grupo). Cada cláusula contiene dos literales. La satisfacibilidad de dichas fórmulas se puede determinar en tiempo lineal con respecto al número de cláusulas (véase 2-SAT ). Por lo tanto, el GISDP2 se puede resolver en tiempo polinomial.
Maximización de la programación de intervalos grupales
MaxSNP-completo cuando algunos grupos contienen 2 o más intervalos
GISMPk es NP-completo incluso cuando. [ 8 ]
Además, GISMPk es MaxSNP -completo, es decir, no tiene un PTAS a menos que P=NP. Esto se puede demostrar mostrando una reducción que preserva la aproximación de MAX 3-SAT-3 a GISMP2. [ 8 ]
Aproximación polinómica 2
El siguiente algoritmo voraz encuentra una solución que contiene al menos 1/2 del número óptimo de intervalos: [ 8 ]
- Seleccione el intervalo, x , con el tiempo de finalización más temprano .
- Eliminar x , todos los intervalos que intersecan x , y todos los intervalos del mismo grupo de x , del conjunto de intervalos candidatos.
- Continúe hasta que el conjunto de intervalos candidatos esté vacío.
Una explicación formal se da mediante un argumento de acusación .
El factor de aproximación de 2 es ajustado. Por ejemplo, en el siguiente caso de GISMP2:
- Grupo n.º 1: {[0..2], [4..6]}
- Grupo n.º 2: {[1..3]}
El algoritmo voraz selecciona solo 1 intervalo [0..2] del grupo #1, mientras que una programación óptima es seleccionar [1..3] del grupo #2 y luego [4..6] del grupo #1.
Un algoritmo de aproximación más general alcanza una aproximación de 2 factores para el caso ponderado. [ 3 ]
Algoritmos de aproximación basados en programación lineal
Utilizando la técnica de relajación de programación lineal , es posible aproximar la programación óptima con factores de aproximación ligeramente mejores. La razón de aproximación del primer algoritmo de este tipo es asintóticamente 2 cuando k es grande, pero cuando k=2 el algoritmo alcanza una razón de aproximación de 5/3. [ 8 ] El factor de aproximación para un k arbitrario se mejoró posteriormente a 1,582. [ 9 ]
Problemas relacionados
Un problema de programación de intervalos se puede describir mediante un grafo de intersección , donde cada vértice es un intervalo y existe una arista entre dos vértices si y solo si sus intervalos se superponen. En esta representación, el problema de programación de intervalos es equivalente a encontrar el conjunto independiente máximo en este grafo de intersección. Encontrar un conjunto independiente máximo es NP-difícil en grafos generales, pero se puede realizar en tiempo polinomial en el caso especial de los grafos de intersección (ISMP).
Un problema de programación de intervalos de grupo (GISMPk) puede describirse mediante un grafo de intersección de intervalos similar, con aristas adicionales entre cada dos intervalos del mismo grupo, es decir, esta es la unión de aristas de un grafo de intervalos y un grafo que consta de n camarillas disjuntas de tamaño k .
Variaciones
Una clase importante de algoritmos de planificación es la de algoritmos de prioridad dinámica. Cuando ninguno de los intervalos se superpone, la solución óptima es trivial. La solución óptima para la versión no ponderada se puede encontrar con la planificación de plazo más próximo . La planificación de intervalos ponderados es una generalización en la que se asigna un valor a cada tarea ejecutada y el objetivo es maximizar el valor total. La solución no tiene por qué ser única.
El problema de programación de intervalos es unidimensional; solo la dimensión temporal es relevante. El problema del conjunto disjunto máximo es una generalización a dos o más dimensiones. Esta generalización también es NP-completa.
Otra variante es la asignación de recursos, en la que se programa un conjunto de intervalos s utilizando recursos k de manera que se minimice k . Es decir, todos los intervalos deben programarse, pero el objetivo es minimizar el uso de los recursos.
Otra variante se da cuando hay m procesadores en lugar de uno solo. Es decir, m tareas diferentes pueden ejecutarse en paralelo. Véase planificación en máquinas idénticas .
La planificación de tareas en una sola máquina también es un problema muy similar.
Fuentes
- ↑ Kolen, A. (2007). "Programación por intervalos: una revisión" . Naval Research Logistics . 54 (5): 530– 543. doi : 10.1002/nav.20231 . S2CID 15288326 .
- ^ Kleinberg, Jon; Tardos, Éva (2006). Diseño de algoritmos . Pearson/Addison-Wesley. ISBN 978-0-321-29535-4.
- 1 2 Bar-Noy, Amotz; Bar-Yehuda, Reuven; Freund, Ari; (Seffi) Naor, Joseph; Schieber, Baruch (2001-09-01). "Un enfoque unificado para aproximar la asignación y programación de recursos" . Journal of the ACM . 48 (5): 1069– 1090. doi : 10.1145/502102.502107 . ISSN 0004-5411 . S2CID 12329294 .
- ^ Kleinberg, Jon; Tardós, Eva (2006). Diseño de algoritmos (1ª ed.). Pearson. pag. 254.ISBN 9780321295354.
- ↑ Nakajima, K.; Hakimi, SL (1982). "Resultados de complejidad para la planificación de tareas con tiempos de inicio discretos". Journal of Algorithms . 3 (4): 344. doi : 10.1016/0196-6774(82)90030-X .
- 1 2 Mark Keil, J. (1992). "Sobre la complejidad de programar tareas con tiempos de inicio discretos". Operations Research Letters . 12 (5): 293– 295. doi : 10.1016/0167-6377(92)90087-j .
- ↑ Papadimitriou, Christos H.; Steiglitz, Kenneth (julio de 1998). Optimización combinatoria : algoritmos y complejidad . Dover. ISBN 978-0-486-40258-1.
- 1 2 3 4 Spieksma, FCR (1999). "Sobre la aproximabilidad de un problema de programación por intervalos". Journal of Scheduling . 2 (5): 215– 227. CiteSeerX 10.1.1.603.5538 . doi : 10.1002/(sici)1099-1425(199909/10)2:5 < 215::aid-jos27 > 3.0.co ; 2-y . citando a Kolen en comunicación personal
- ↑ Chuzhoy, Julia ; Ostrovsky, Rafail ; Rabani, Yuval (2006). "Algoritmos de aproximación para el problema de selección de intervalos de trabajo y problemas de programación relacionados". Matemáticas de la investigación operativa . 31 (4): 730–738 . CiteSeerX 10.1.1.105.2578 . doi : 10.1287/moor.1060.0218 .
- Programación óptima
- problemas NP-completos