En esta sección desarrollamos varias formulaciones de programación matemática para el SBTP. Todos ellas utilizan variables de decisión binarias para determinar las decisiones estratégicas sobre los barcos que son atendidos/rechazados:
Dado que la función objetivo depende de los tiempos de espera de los barcos atendidos, los cuales, a su vez, dependen de sus tiempos de inicio del servicio, definimos las siguientes variables de decisión adicionales:
Usando las variables y la función objetivo se puede escribir como
Las condiciones que regulan la relación entre las variables anteriores, y su relación con la duración del ciclo, dependen de si coinciden o no los ciclos de llegada, servicio y terminación de los buques atendidos involucrados. Por ejemplo, para barcos cuyos ciclos de llegada y servicio coinciden, se cumple que . Por el contrario, este límite inferior del valor de ya no es válido para los barcos cuyo servicio comienza en el siguiente ciclo después de su llegada, para los cuales debe cumplirse para garantizar que se respeta la duración del ciclo. Teniendo en cuenta que la duración del ciclo debe incluir los tiempos de servicio, la cota anterior se puede reforzar a . Se puede hacer una observación similar con respecto a los tiempos de espera. Mientras que la duración del ciclo impone ese para los barcos cuyos ciclos de llegada y servicio coinciden, para barcos con diferentes ciclos de llegada y servicio tenemos que .
La observación anterior indica que, para calcular con precisión los tiempos de espera derivados de planificaciones de servicio factibles, se necesita información adicional que indique si el ciclo de servicio de cada barco atendido coincide o no con su ciclo de llegada. Para ello, asociadas a cada definimos dos nuevas variables binarias complementarias y , donde (y ) si y solo si el envío es atendido y su ciclo de servicio coincide con su ciclo de llegada, mientras que (y ) si y solo si el barco es atendido pero su ciclo de servicio es el ciclo siguiente a su ciclo de llegada. Por lo tanto,
Las restricciones () también garantizan que se respete la relación de los barcos de cada clase.
La transición entre ciclos consecutivos se controla mediante un conjunto adicional de variables binarias , tal que si y sólo si el barco está atendido y su ciclo de servicio no coincide con su ciclo de terminación. Esto significa que el ciclo de servicio del barco coincide con su ciclo de llegada () pero no coincide con su ciclo de terminación (). Además, con la ayuda de las variables , también podemos relacionar las horas de salida de los barcos servidos con las variables e . Esto es:
La figura x1-4001r1 ilustra la definición de las variables anteriores con un ejemplo con dos atraques, cinco barcos, clases de barco de un solo barco y un horizonte temporal . Los tiempos de llegada y servicio están dados por y , respectivamente. La figura muestra una solución en la que los barcos reciben servicio en el atraque 1 (en ese orden) y los barcos en el atraque 2. Dado que todos los barcos reciben servicio, tenemos , . En la solución mostrada, los tiempos de inicio vienen dados por , con tiempos de espera asociados . Como de tenemos , ya que sus ciclos de servicio y llegada coinciden; en cambio, , lo que significa que el servicio para el 5 comienza en el siguiente ciclo al que llega, por lo que . Además ya que su ciclo de servicio no coincide con su ciclo de terminación.
Para obtener el cronograma real de cada amarre y garantizar que el tiempo total de procesamiento de todos los barcos atendidos en el mismo atraque no exceda el horizonte de tiempo cíclico , definimos variables predecesoras adicionales, que, incluso si no dan una asignación explícita de barcos a los atracaderos, permiten determinar la secuencia de servicio en los atraques, ya que definen el orden en que los barcos son atendidos en cada ciclo e, implícitamente, definen grupos de barcos atendidos cíclicamente en el mismo atraque. En particular, sea:
Las restricciones que regulan la secuencia de servicios de cada atraque son:
Las restricciones () imponen que cada barco servido tenga un predecesor único, mientras que () indican que cada barco servido puede preceder como máximo a un barco. El último barco atendido en cada atraque en cada ciclo no precederá a ningún otro barco. Las restricciones () también garantizan que todos los barcos de cada clase sean atendidos o rechazados. Las restricciones () imponen que no se utilicen más de atraques.
Tengase en cuenta que debido a la naturaleza cíclica de la plantilla de atraque, con las variables predecesoras anteriores puede haber múltiples representaciones de la plantilla de atraque asociadas con una secuencia determinada de barcos. La única diferencia entre todas las representaciones equivalentes es, en esencia, el barco de la secuencia que se designa como el primer barco procesado en el atraque. Cualquier barco atendido puede seleccionarse como el primer barco en su atraque y el período de tiempo en que comienza su servicio puede usarse como referencia para garantizar que la duración de la secuencia de todos los barcos atendidos en ese atraque no exceda la duración del ciclo . Por ejemplo, en el ejemplo de la Figura x1-4001r1 podríamos elegir , .
Definimos un conjunto final de variables de decisión asociadas a los momentos en los que tienen lugar algunos eventos:
Junto con las restricciones que determinan los valores de las variables , los pares de barcos procesados consecutivamente en el mismo atraque deben satisfacer los siguientes conjuntos de restricciones:
Las restricciones ()-() solo se activan para pares de barcos , , tales que . En particular, () establece que, si sigue a , entonces el servicio de no puede comenzar antes de la terminación del servicio de . De manera similar, () impone que, si sigue a , el tiempo de inactividad inmediatamente antes del servicio de debe ser al menos la diferencia entre el tiempo de inicio de y el tiempo de finalización de . Los tiempos de ocupación de buques consecutivos en un mismo atraque están regulados por ().
Las desigualdades () y () que aparecen a continuación establecen límites superiores para la ocupación y los tiempos de inactividad, respectivamente.
Tenga en cuenta que los tiempos de ocupación se reducen a cero para los barcos que no reciben servicio, así como para los primeros barcos atendidos en cada atraque. Los límites superiores , , garantizan que se respete la duración del ciclo. Los tiempos de inactividad distintos de cero solo pueden aparecer para barcos cuyos ciclos de llegada y servicio coincidan (de lo contrario, el barco será atendido tan pronto como el atraque esté disponible en el siguiente ciclo). Es decir, para cada atraque, implícitamente establecemos el inicio de su ciclo en la hora de inicio del primer barco atendido en el atraque.
Se puede comprobar fácilmente que en el ejemplo de la figura x1-4001r1, los valores de estas variables son , , .
Por lo tanto una formulación válida para el SBTP es:
La formulación F0 se puede reforzar agregando límites inferiores y superiores más estrictos a los tiempos de inicio, tiempos de espera y tiempos de terminación (ver ()-() a continuación), que se reducen a cero para los barcos sin servicio:
Desafortunadamente, a pesar de los refuerzos anteriores (u otros de naturaleza similar), las cotas de programación lineal (LP) de la formulación F0 tienden a ser muy débiles, lo cual se debe al tipo M-grande de restricciones ()-(). Por esta razón, en las siguientes secciones desarrollaremos otras formulaciones en las que estas restricciones pueden eliminarse, a expensas de introducir conjuntos adicionales de variables de decisión binarias.