Variables de intervalo
Describe un bloque de creación básico de planificación, el intervalo.
Informalmente hablando, una variable de intervalo representa un intervalo de tiempo durante el cual sucede algo (se realiza una actividad, una tarea) y cuya posición en el tiempo es un elemento desconocido del problema de planificación. Un intervalo se caracteriza por un valor inicial, un valor final y un tamaño. Una característica importante de las variables de intervalo es el hecho de que pueden ser opcionales; es decir, se puede decidir no considerarlas en la planificación de la solución. Este concepto es crucial en las aplicaciones que presentan como mínimo una de las características siguientes:
actividades opcionales (operaciones, tareas) que pueden quedar sin realizarse (con un impacto en el coste); entre los ejemplos se incluyen tareas externalizadas, de mantenimiento o de control
actividades que se pueden ejecutar en un conjunto de recursos alternativos (máquinas, recursos humanos) posiblemente con distintas características (velocidad, calendario) y restricciones de compatibilidad
operaciones que se pueden procesar en distintas modalidades temporales (por ejemplo, en serie o en paralelo)
modalidades alternativas para ejecutar una actividad determinada, cada una de las cuales especifica una combinación específica de recursos
procesos alternativos para ejecutar un orden de producción determinado, especificándose un proceso como una secuencia de operaciones que requieren recursos
descripción jerárquica de un proyecto como una estructura de desglose de trabajos con tareas descompuestas en subtareas, siendo opcional parte del proyecto (con un impacto en el coste si no se realiza), y así sucesivamente.
Formalmente, una variable de intervalo a es una variable cuyo dominio dom(a) es un subconjunto de '
. Se dice que una variable de intervalo es fija si su dominio se reduce a un singleton; es decir, si '
' denota una variable de intervalo fija:
intervalo está ausente: '
= '
; ointervalo está presente:
= [s,e)
Las variables de intervalo que faltan tienen un significado especial. Informalmente hablando, una variable de intervalo que no está presenta no la considera ninguna restricción o expresión en variables de intervalo en las que esté implicada. Por ejemplo, si se utiliza una variable de intervalo ausente en una restricción noOverlap, la restricción se comportará como si nunca se hubiera especificado el intervalo a la restricción. Si una variable de intervalo a ausente se utiliza en una restricción de precedencia entre variables de intervalo a y b, esta restricción no afecta a la variable de intervalo b. Cada restricción especifica cómo trata las variables de intervalo ausentes.
La semántica de las restricciones definida en las variables de intervalo la describen las propiedades que deben tener los intervalos fijos para que la restricción sea True. Si está presente un intervalo fijo '
y tal que '
=[s, e), denotaremos s( '
' ) su valor entero inicial s, e( '
) su valor entero final e y l( '
) su longitud entera positiva definida como e( '
)-s( '
). El estado de presencia x( '
' ) será igual a 1. Para un intervalo fijo ausente, x( '
) = 0 y el inicio, el final y la longitud son indefinidos.
Hasta que no se encuentre una solución no se puede saber si un intervalo faltará o si estará presente. En este caso, indicamos que el intervalo es opcional. Para ser precisos, se dice que un intervalo está ausente cuando dom(a) = {
}, presente cuando '
dom(a) y opcional en todos los demás casos.
Intensidad y tamaño
A veces la intensidad del “trabajo” no es la misma durante todo el intervalo. Por ejemplo, consideremos un trabajador que no trabaja los fines de semana (su intensidad de trabajo durante los fines de trabajo es 0%) y los viernes trabaja sólo media jornada (el viernes la intensidad es del 50%). Para este trabajador, 7 días-hombre de trabajo abarcarán más que sólo 7 días. En este ejemplo, 7 días-hombre representarán lo que denominamos el tamaño del intervalo; es decir, lo que sería la duración del intervalo si la función de intensidad fuera siempre del 100%.
Para modelizar estas situaciones, puede especificar un rango para el tamaño de una variable de intervalo y una función de intensidad escalonada entera F. Para un intervalo presente fijo '
', se aplicará la siguiente relación en cualquier solución entre el inicio, el final, el tamaño sz del intervalo y la granularidad entera G (por defecto, la función de intensidad se expresa en porcentaje, por lo que la granularidad G es 100):

Es decir, la duración del intervalo será al menos lo suficientemente larga para abarcar los requisitos de trabajo proporcionados por el tamaño del intervalo, teniendo en cuenta la función de intensidad. Sin embargo, cualquier sobreestimación es siempre estrictamente inferior a una unidad de trabajo.
Si no se especifica la intensidad, se supone que es la función de intensidad total constante '
= 100%, por lo que en ese caso sz(a) = l(a). Tenga en cuenta que el tamaño no se define para los intervalos que faltan.
La función de paso de intensidad F debe ser una función por pasos con valores enteros y no se permite que sobrepase la granularidad (100 de forma predeterminada).
La figura siguiente muestra una variable de intervalo de tamaño 14 con su función de intensidad. Se representa una solución válida donde el intervalo se inicia en 10 y finaliza en 27. Realmente, en este caso:


Formulación de OPL
Normalmente, la estructura del problema indicará si un intervalo puede ser opcional o no, y la palabra clave opcional se utiliza (o no) en la definición de la variable de intervalo. En el caso en el que la opcionalidad depende de los datos de entrada, puede especificar un parámetro booleano para que sea un campo de opcionalidad: optional(true), que equivale a optional y optional(false), que equivale a la omisión de optional.
Se puede especificar una ventana [StartMin,EndMax] para restringir la posición de la variable de intervalo. Por defecto, una variable de intervalo comenzará después de 0 y terminará antes de maxint/2. El tamaño fijo o el intervalo de tamaño para el intervalo se especifica con la palabra clave size. Tenga en cuenta que estos límites se tienen en cuenta sólo cuando la variable de intervalo está presente en la planificación final, es decir, permiten especificar límites adicionales en la variable de intervalo si el intervalo está presente en la planificación final. Para los intervalos que faltan, simplemente se ignoran.
dvar interval a [optional[(IsOptional)]]
[in StartMin..EndMax]
[size SZ | in SZMin .. SZMax]
[intensity F]
Donde:
int IsOptional, StartMin, EndMax, SZ, SZMin, SZMax;
stepFunction F;
-maxint/2 + 1 <= StartMin <= maxint/2 - 1
-maxint/2 + 1 <= EndMax <= maxint/2 - 1
0 <= SZ <= maxint/2 - 1
0 <= SZMin <= maxint/2 - 1
0 <= SZMax <= maxint/2 - 1
Ejemplos
Para ejemplos del uso de intervalo, vea las palabras clave CP interval, optional, size, e intensity en la Referencia Rápida del Lenguaje OPL.
Visualización del dominio de variable de intervalo
El dominio de una variable de intervalo se visualiza tal como se muestra en este ejemplo:
A1[0..1: 10..990 -- (5..10)5..990 --> 25..1000]
Después del nombre de la variable de intervalo (aquí A1), el primer rango (aquí 0..1) representa el dominio del estado de presencia de booleano de la variable de intervalo. Por lo tanto, 0..1 representa una variable de intervalo opcional cuyo estado aún no se ha fijado, 0 una variable de intervalo que falta y 1 una variable de intervalo presente.
Los demás campos describen la posición de la variable de intervalo, y se omite si la variable de intervalo no está presente, ya que en este caso esta información no es relevante. Por lo tanto, una variable de intervalo que falta se visualiza como:
A1[0]
Cuando la variable de intervalo posiblemente está presente:
- el primer rango de los demás campos representa el dominio del inicio de intervalo
- el segundo rango (entre paréntesis) representa el dominio del tamaño de intervalo
- el tercer rango representa el dominio de la duración de intervalo
- el cuarto y último rango representa el dominio de la finalización de intervalo
Tenga en cuenta que el segundo rango se puede omitir en el caso de que el tamaño y la longitud de la variable de intervalo no sean necesariamente iguales.
Cuando los valores se han fijado, los rangos min..max se sustituyen por un único valor. Por ejemplo, la siguiente visualización representa una variable de intervalo fija de tamaño 5 que está presente, se inicia en 10 y finaliza en 35:
A1[1: 10 -- (5)25 --> 35]