La teoría de horarios es una rama de las matemáticas discretas que se ocupa de problemas de ordenación. En el caso general, los problemas se formulan de la siguiente manera: Se especifica un determinado conjunto de trabajos (requisitos) con un determinado conjunto de características: la duración del procesamiento del requisito (el caso más simple), el costo del procesamiento del requisito, el momento llega la solicitud, la fecha límite para completar el servicio de la solicitud. Se da un determinado conjunto de máquinas (dispositivos) , en las que se deben cumplir los requisitos de acuerdo con un cierto orden.
Se plantea la tarea de optimización discreta : construir un cronograma que minimice el tiempo para completar el trabajo, el costo del trabajo, etc. El cronograma es una indicación de qué máquinas y en qué momento se deben atender los requisitos (trabajo realizado).
Las tareas de la teoría de la programación se pueden dividir en dos grupos:
Hay varias variantes de problemas de teoría de programación, algunos de ellos son NP-completos , algunos pertenecen a la clase de problemas polinómicos , para algunos problemas no fue posible demostrar la pertenencia a ninguna clase de complejidad. Existe la conjetura de que una tarea que permite interrupciones no es más difícil que una tarea sin interrupciones. Para la mayoría de los problemas se observa, excepto uno, donde para una variante sin interrupción se demuestra que pertenece a la clase de problemas polinómicos , mientras que para un problema similar con interrupciones no se demuestra que pertenece a ninguna clase de complejidad.
De acuerdo con la disciplina de realizar trabajos en máquinas, se pueden distinguir cuatro clases principales de tareas:
La última tarea se denomina monoetapa , las tres primeras se denominan multietapa , ya que para cada requerimiento existen varias etapas u operaciones de servicio en distintos dispositivos. Son posibles varias combinaciones de restricciones y disciplinas de servicio, pero los algoritmos que son polinómicos en el tiempo de ejecución solo se conocen para los problemas más simples de estas clases.
En particular, para el problema de Flow shop en dos máquinas, existe el algoritmo de Johnson [1] de complejidad temporal , que construye un cronograma con el mínimo tiempo total de servicio.
Para una tarea con fechas de vencimiento con un número arbitrario de dispositivos e interrupciones del servicio, existe un algoritmo de complejidad de tiempo , que construye un cronograma que respeta las fechas de vencimiento [2] .
La solución de los problemas de Open shop y Job shop con un dispositivo sin interrupciones es alguna permutación de los requisitos, y para una función objetivo arbitraria estos problemas son NP-completos. Pero para algunas funciones objetivo específicas, se han encontrado algoritmos polinómicos. [3] [4] [5]
Los problemas de teoría de programación (scheduling) escritos en tiempo continuo tienen, por regla general, un conjunto infinito de soluciones factibles. El método de ordenamiento nos permite reducir los problemas de programación a problemas de optimización en conjuntos finitos de permutaciones de trabajos. Se formula un enunciado general del problema de la teoría de la programación (scheduling) en tiempo continuo, en el que se describen los componentes de la solución mediante funciones enteras de tiempo y que puede ser resuelto por el método de ordenación. [6]
Dos formas de reducir los problemas originales a problemas de orden se basan en los conceptos de soluciones compactas (activas) y cuasi-compactas (semiactivas). [7] En el preprint anterior de V. V. Shmelev [6] , se generalizan los conceptos de soluciones compactas y cuasi -compactas y, sobre esta base, se propone un nuevo concepto de soluciones monótonas . Cada solución monótona es a la vez compacta y cuasi-compacta, por lo que generalmente hay menos soluciones de este tipo. Esto simplifica la solución de problemas de pedido.
Para describir problemas dinámicos de asignación de recursos con retardos complejos, incluidos los vectoriales y distribuidos, que incluyen problemas de teoría de programación (scheduling), Shmelev V.V. en 1983 [6] fue el primero en utilizar de forma implícita y continua el tiempo de la operación de convolución . . Posteriormente, utilizó esta operación de forma explícita para tiempo discreto y formuló la formulación general del problema de la teoría de programación (scheduling) en forma de problema de programación dinámica lineal con convoluciones . [8] [9] Esta declaración le permite describir de manera simple y compacta una gran cantidad de problemas dinámicos, incluidos aquellos con variables enteras . Shmelev V. V. extendió sus resultados sobre el método de las funciones de penalización exactas a este escenario.