4. Modelos de simulación y optimización integrados para la asignación de muelles
Se vuelve a presentar la figura 13 para mostrar de forma esquemática el problema que es abordado en este apartado. Aunque el modelo de simulación tiene en cuentas como mínimo tres operativas En la figura 23 está en color naranja la que es optimizada según el propósito de este trabajo.
Figura 23 Operativa gestionada
En éste capítulo se realiza el análisis de la operativa de asignación de muelles en las terminales portuarias de contenedores, presentándose una aplicación al caso de la terminal de contenedores Batan del Puerto de Sevilla (PS). Para gestionar la asignación de este importante recurso se utiliza una metodología que integra simulación y optimización utilizando el software ARENA 11.0. Se propone un modelo matemático y se desarrolla un enfoque de solución basado en un algoritmo genético para resolver el problema de programación entera mixta. El objetivo es minimizar el tiempo total de servicio para cada buque considerando el criterio de asignación primero en llegar–primero en servirse (First come – First Served FCFS).
Debido a que el Puerto de Sevilla ha remplazado su vieja esclusa para así lograr un incremento en el tráfico de buques. Se estima un incremento en el tráfico de buques y contenedores actuales para identificar futuros cuellos de botella en la terminal. De acuerdo con los resultados obtenidos se analizan las mejoras obtenidas con el modelo propuesto comparándolas con la actual estrategia de asignación. Todo lo anterior será expuesto y discutido en los siguientes apartados.
4.1. La optimización por simulación como herramienta de gestión
La simulación de eventos discretos proporciona una excelente herramienta para la evaluación de diferentes estrategias de asignación de recursos, ubicación de contenedores, posicionamiento de grúas y ayuda a la toma de decisiones en los subsistemas involucrados de las TCP, Arango et al (2010b).
Autores como Fu (2002) afirman que hasta mediados de los años noventa la simulación y optimización eran utilizadas de forma separada, pero en la última década se han realizado diferentes trabajos que utilizan esta metodología en sectores de la industria tan diversos como:
Sistemas para la maximización de la producción y minimización de los ciclos de tiempo.
Cadenas de suministro para reducir los niveles de inventario e incrementar el nivel de servicio al cliente en tiempos de respuesta.
Call centers para minimizar costes del sistema e incrementar el nivel de servicio al cliente reduciendo los tiempos de espera.
Finanzas para maximizar los retornos y disminuir el nivel de riesgo.
Control de inventarios para disminuir los costes de almacenaje.
Sistemas de servidores de colas para minimizar los tiempos de espera.
Industria logística para disminuir los costes de operación.
En la mayoría de los casos la utilización de esta metodología ha tenido buenos resultados, lo que ha generado una gran cantidad de usuarios. Pero lo más importante es el desarrollo del software de simulación y optimización integrados.
Según Fu (2002) estas herramientas informáticas son la relación más prospera entre la investigación operativa y la ciencia de la computación.
Los softwares son un buen comienzo para gestionar recursos, pero fallan al no sacar el máximo rendimiento de la metodología. En Fu (2001) se identifican los principales software de optimización por simulación y sus proveedores los cueles se relacionan en la tabla 11.
Tabla 11 Softwares de optimización para plataformas de simulación
Como se puede ver en la anterior tabla, todos los paquetes informáticos aplican heurísticas basadas en algoritmos de búsquedas entre sus estrategias de simulación. Según Boesel et al (2001) el desarrollo de la optimización por simulación no hubiese sido posible sin la utilización de estas estrategias. Otros métodos utilizados son clasificados en Carson y Maria (1997) y Swisher et al (2000), los cuales son presentados de forma esquemática en la figura 24.
Metodos de Optimización por Simulación
Metodos basados en Busquedas
Estimacion de diferencias
Estimador de la probabilidad
Analisis de la perturbacion
Frecuencias dominantes en
los experimentos
Optimizacion estocastica
Responce Surface Methodology
Metodos Heuristicos
Busqueda Tabu Algotimo
Genetico
Recorrido simulado
Estrategias evolutivas
Busqueda simple
Equipos A Metodos Estaticos
Comparaciones Multiples
Ranking and selection
Importancia de la muestra
4.2. Caso de estudio
El Puerto de Sevilla está ubicado en la ribera del río Guadalquivir y es el único puerto interior de España; ha sido a través del tiempo uno de los principales puertos de cabotaje del sur del país gracias a su alto nivel de conectividad con el resto de España y Europa por los principales medios de transporte como: fluviales, terrestres, aéreos y ferroviarios. Esto por su regularidad y alta frecuencia en rutas como Madrid–Sevilla–Tenerife y también por ser conexión con países como Portugal, Alemania, Francia, etc., siendo un nodo clave en las redes de transporte marítimo de corta distancia (TMCD).
El actual cuello de botella del puerto de Sevilla es su esclusa ya que esta solo permite la llegada de pequeños buques. Por lo tanto se está construyendo una nueva esclusa de mayores dimensiones que permitirá la entrada al puerto de buques de mayor tamaño en los próximos años. En la figura 25 se muestra la futura apariencia del puerto con la nueva esclusa.
Figura 25 Futura apariencia del puerto de Sevilla. Proyecto de desarrollo Fuente: © Autoridad Portuaria de Sevilla
La nueva esclusa es de gran importancia para el puerto de Sevilla, ya que permitirá que este continúe siendo uno de los principales nodos de las redes de transporte intermodal del sur de España. La Autoridad Portuaria de Sevilla (APS) calcula que con la nueva esclusa se mejorara el rendimiento del puerto y se duplicará el tráfico de buques actuales. Lo que obliga a que otros procesos y recursos sean gestionados para mantener ese nivel de competitividad deseado.
Para el modelo de simulación propuesto se toman datos de tráfico reales de la APS, los cuales corresponden al flujo de contenedores y al flujo de buques portacontenedores que llegan al puerto. Para representar el futuro flujo de buques
portacontenedores que llegará al puerto con la nueva esclusa se han considerado los datos del flujo de los buques que transportan cereal, cemento y chatarra. Esto es con el objetivo de que todos los datos de entrada sean reales.
Como se explicó en el capítulo 3, una de las formas de medir el rendimiento de los puertos es por la cantidad de tiempo que pasan los buques atracados en la terminal realizando las operaciones de carga y descarga. Por lo cual se ha decidido optimizar la gestión de muelles de la terminal de contenedores del Puerto de Sevilla ya que ésta cuenta con dos grúas pórtico, por lo cual existe gran probabilidad que pueda convertirse en un nuevo cuello de botella del puerto.
En el modelo de simulación se contemplan: la llegada de los buques, el paso por la esclusa, la carga y descarga de contenedores y la salida del puerto. Se propone un modelo de optimización para gestionar la asignación de los muelles y se desarrolla una heurística basada en un algoritmo genético (AG) para resolver el problema de asignación de muelle (BAP).
Anteriores trabajos que gestionan los procesos de las TCP utilizando simulación y optimización, son los de Cortes et al (2007) donde se propone un modelo de simulación para analizar el tráfico de buques en el puerto de Sevilla, los autores consideran todos los tipos de mercancías que son movilizadas en el puerto. Liu et al (2002) que proponen un modelo de simulación para analizar el rendimiento de cuatro terminales de contenedores automatizadas y analizar los costes de funcionamiento. En los trabajos propuestos por Demetro et al (2006) y Legato et al (2009) son utilizados modelos de optimización por simulación de forma complementaria para la programación y asignación de diferentes recursos, como las grúas RTG.
4.2.1. Escenario de simulación
La Autoridad Portuaria de Sevilla entidad encargada de gestionar el Puerto de Sevilla incorpora varias terminales especializadas en el manejo de diferentes mercancías como; la terminal UTE Batan para contenedores, TLP Esclusa para cereales, Holcim para cemento, GPMA para hierro y metales, TLD Grupo Gallardo para chatarra, etc.
En el modelo de simulación presentado se considera la terminal de contenedores Batan y las instalaciones necesarias para la operación de contenedores, la figura 25
Figura 26 Escenario de simulación Fuente: Elaboración propia
El terminal de contenedores Batan 1 y Batan 2 son dos terminales de contenedores localizados en la misma dársena (Centenario). Por lo tanto todos los recursos como grúas pórtico, carretillas pórtico e instalaciones son usadas por ambas para la manipulación de contenedores. Por lo tanto se consideran que estas dos terminales equivalen a una terminal con dos muelles (muelle Batan 1 y muelle Batan 2).
Descripción del modelo:
Al puerto de Sevilla llegan buques portacontenedores para realizar operaciones de descarga y carga en los muelles cada t_llegada_B días. Los buques llegan hasta la entrada del puerto y esperan a los barcos remolcadores limitados por Rmax, los cuales guían a los buques hasta el muelle asignado. A cada buque se le asigna un muelle existiendo un número limitado para su atraque de Mmax. Si todos los muelles y/o remolcadores están ocupados, los buques deben esperar en la entrada del puerto.
El tiempo que estará cada buque en el muelle dependerá de tres puntos clave: 1.) La cantidad de contenedores a descargar y cargar; 2.) La ubicación en la explanada de los contenedores a cargar en el buque; y 3.) La cantidad de carretillas disponibles para realizar el transporte de los contenedores. Cada muelle tendrá asignado sólo una grúa pórtico manejando igual número de grúas y muelles.
De igual forma al puerto llegan camiones para carga o descarga de contenedores (a diferencia de los buques cada camión solo puede realizar una de las dos operaciones) cada t_llegada_C minutos. En cada camión se realiza un control a la entrada y se asigna una plaza dentro del puerto en donde debe esperar para ser atendido por la maquinaria de manipulación existiendo un número limitado de plazas de Pmax, a su vez también existe una cantidad limitada de grúas para
realizar todas las operaciones de movilización de contenedores para carga y descarga tanto a camiones como a buques de Gmax. Cada camión que llega con contenedores al puerto tarda un tiempo constante de t_descar_Ca minutos para su descarga, a diferencia del tiempo de carga que viene dado por una distribución triangular teniendo en cuenta que los contenedores están localizados en diferentes lugares y también la disponibilidad de las grúas, en la figura 27 se muestra el diagrama de ciclo de actividades.
Figura 27 Diagrama de ciclo de actividades
4.2.2. Datos de entrada
Los datos de tráfico utilizados están resumidos en la tabla 5, estos fueron obtenidos del portal web de la APS (www.apsevilla.com) durante febrero del 2009.
Los datos muestran que en promedio llegan al puerto 32 buques portacontenedores por mes, lo que indica que el PS tiene un bajo nivel de tráfico comparado con puertos como el de Barcelona o Algeciras, esto es debido a que la actual esclusas solo permite que al puerto lleguen buques de pequeñas dimensiones.
Tabla 12 Trafico del puerto de Sevilla en febrero de 2009 Origen /
Destino Frecuencia carga Buques
Mínimo Contenedores
Máximo Promedio
España 2/Semana contene 8 64 429 243
Marruecos 1/Semana contene 4 100 157 114
España 1/Semana contene 4 54 86 75
Alemania 1/Semana contene 4 30 43 41
España 1/Semana contene 4 64 86 75
Reino Unido 1/Semana contene 4 43 430 214
Holanda 1/Semana contene 4 86 114 98
Reino Unido 3/Semana Chatarra 12 75 75 75
España 2/Semana Cereal 8 75 75 75
Marruecos 1/Semana cemento 4 75 75 75
La tabla 12 corresponde al mes de febrero de 2009 y resume la información correspondiente al flujo de buques y contenedores durante este mes. Al Puerto de Sevilla llegaron 32 buques portacontenedores que transportaron 9954 TEUs, de los cuales el 57% fueron cargados en el PS (contenedores de salida). La APS estima que el flujo de buques portacontenedores se duplique con la entrada en funcionamiento de la nueva esclusas. Para simular este tráfico adicional se ha considerado los datos de las líneas marítimas que transportan cemento, cereales y chatarra en el PS. Estas líneas están relacionadas al final de la tabla.
La información correspondiente a la infraestructura disponible con que cuenta el PS para realizar las diferentes operaciones de manipulación en la terminal Batan ha sido tomada de la memoria anual del puerto de Sevilla del 2008, y se presenta en la tabla 13.
Tabla 13 Infraestructura de la terminal de contenedores del Puerto de Sevilla
Remolcadores Carretillas Rampas
Ro-Ro Zona de
almacenaje Capacidad
/TEUS Grúas pórtico
2 17 2 97,310m2 150,000 2
Las dos tablas anteriores resumen de forma general parte de la información más importante que se tiene en cuenta para el modelo de simulación. También se consideran aspectos como:
Fechas de llegada y salida de los buques
Tiempo de permanencia de los buques dentro del puerto
Cantidad de contenedores a cargar y descargar
Como se explico anteriormente para simular el trafico adicional que representara el futuro incremento en el flujo de buques que llegan al puerto, se consideraron las líneas marítimas que transportan cemento, cereales y chatarra ya que estas fueron las que presentaron mayor frecuencia en el mes de febrero de 2009. El único dato tomado de la información de estas líneas fue la fecha y hora de llegada de cada buque, por lo cual para tener información del flujo de contenedores a cargar y descargar por cada buque, se calculo la cantidad de contenedores promedios a descargar y cargar por las buques portacontenedores que llegaron al puerto en el mismo mes y éste le fue asignado a las nuevas líneas. Lo anterior se realizo para representar tanto los contenedores a cargar como a descargar.
4.3. Modelo matemático
Lai y Shih (1992) consideran los tiempos de llegada de los buques como factor clave en la estrategia de asignación de muelle. Ellos proponen una heurística para resolver el BAP teniendo como criterio que el primero en llegar es el primero en servirse (first-come-first-served strategy FCFS). El objetivo del modelo propuesto en este capítulo es la minimización del tiempo de servicio total para cada buque, respetando el orden de llegadas. Nótese que este objetivo no garantiza que la suma total del tiempo de servicio para todos los buques sea mínima. También es considerado un BAP discreto, utilizado en Cordeau et al (2005) para muelles con conjunto de puntos de atraque limitados, que para este caso corresponden a dos muelles. Se realizan las siguientes consideraciones:
Cada buque portacontenedores debe ser servido en uno y solo un muelle.
El tiempo de operación de para cada buque depende del muelle en que sea servido. Por ejemplo si un buque esta en el muelle Batan 1 y todos los contenedores que van a ser cargados y descargados de éste tiene como localización la ZA 1 el tiempo de transporte será igual para todos, pero si por el contrario algunos contenedores están en la ZA 1 y otros en la ZA 2, el tiempo de transporte de cada contendor dependerá de la distancia entre el muelle y las ZA correspondiente.
El tiempo necesario para atravesar la esclusa no se considera ya que es una constante.
El BAP es formulado de la siguiente forma:
Parámetros:
Número de buques tal que . Numero de muelles tal que . Datos:
Es el tiempo de transporte de cada buque de la esclusa al muelle y viceversa, este transporte es realizado con la ayuda de los remolcadores
Tiempo de manipulaciones del buque en el muelle el cual es pre-calculado según la cantidad de contenedores a descargar y cargar y la localización de estos en la terminal.
Tiempo de llegada del buque
Variables:
Instante en que se inician las operaciones del buque .
Variable binaria que toma el valor de 1, si la buque i es servido en el muelle j; 0 de otra forma.
Variable binaria que toma el valor de 1, si la buque i’ que llego al puerto después que el buque inicia operaciones en el muelle j.
Restricciones
Esta restricción garantiza que cada buque esté asignado a un muelle
Esta restricción asegura que cada buque sólo pueda ser servido después de su llegada.
Se puede decir que esta es la restricción más importante del modelo propuesto ya que garantiza que si un buque que llego al puerto después que el buque , y es servido antes que esté en el muelle , es porque el tiempo de servicio del buque en el muelle es mayor que el tiempo de servicio en el muelle . La restricción
permite que algunos buques que lleguen a la cola de espera puedan ser servidos antes que los que han llegado primero, sólo si los buques en puerto no incrementan su tiempo total de servicio.
Esta restricción complementa la restricción previa ya que garantiza que el buque que continua en la cola de espera de muelle por ceder el paso tenga otro muelle asignado.
Las restricciones (9.6), (9.7) son definiciones de variables binarias y la (9.8) de una variable continúa que sólo puede tomar valores positivos.
Modelo
Sujeto a
El objetivo del modelo es minimizar el tiempo total de servicio para cada buque, el cual está compuesto por el tiempo que demora en el muelle realizando las operaciones de carga y descarga de contenedores más el tiempo de espera en el puerto a que su muelle asignado quede libre. También son considerados los tiempos de desplazamiento del buque dentro del puerto los cuales son principalmente el remolque desde la esclusa hasta el muelle y viceversa.
4.4. Modelo de simulación
Los sistemas de modelado visual interactivo (VIMS) se fundamentan en la existencia de sistemas operativos que presentan una interfaz gráfica de usuario (GUI) como, por ejemplo, Microsoft Windows.
Los modelos son creados utilizando el ratón para seleccionar objetos de simulación predefinidos en algún menú y colocarlos en la pantalla en el lugar apropiado. Los caminos que recorren las entidades de simulación (contenedores, maquinaria, etc.) son creados en la pantalla dibujando líneas que unen los iconos de los objetos formando una red lógica.
Arena es un ejemplo de este tipo de sistemas. Este entorno permite que SIMAN, un lenguaje de bloques, pueda ser tratado como VIMS, con todas las ventajas que ofrece el modelado visual. Por lo cual el lenguaje Arena es considerado una herramienta de simulación de ‘alto nivel’ ya que opera a través de interfaces gráficos muy intuitivos que se usan fácilmente mediante el ratón. Los modelos se construyen utilizando bloques constructivos básicos que se conectan entre sí.
Además, se puede observar la evolución de la simulación mediante un sistema de animación gráfica.
Arena proporciona una serie de módulos de simulación gráfica y modelado intercambiables que se pueden combinar para obtener una amplia variedad de modelos de simulación. Los módulos de Arena están compuestos de componentes SIMAN. De hecho, se pueden crear nuevos módulos SIMAN que podrían ser usados junto a los módulos de alto nivel de Arena. Esto hace de Arena una herramienta de gran versatilidad y potencia. Además, el usuario puede pulsar en el icono de un objeto y desplegar una ventana con formularios donde se puede parametrizar el elemento en cuestión.
Se propone un modelo de simulación para la estrategia de asignación de muelles actual en el puerto de Sevilla y una variación de este modelo al cual se le incorpora
un modulo adicional que integra el modelo matemático al modelo de simulación.
De acuerdo con lo expuesto en el apartado 4.2.1, el modelo de simulación está compuesto por los siguientes grupos de módulos.
Llegada de camiones
Llegada de buques
Remolque de buques
Sistema para la asignación de muelles
Operación de descarga y carga en los muelles
Nuevo sistema para la asignación de muelles
Estos módulos representan las principales operaciones de manipulación que se llevan a cabo en la terminal de contenedores del Puerto de Sevilla y son explicados con más detalle en los siguientes apartados.
4.4.1. Llegada de camiones
La figura 28 muestra los módulos que representan la llegada de los camiones al PS en el cual se utiliza un modulo Decide para clasificar los camiones que llegan al puerto dependiendo del tipo de operación que van a realizar ya sea cargar o descargar contendores. Módulos Process representan estas operaciones y utilizan grúas como recurso necesario. Por último módulos Asigne actualizan las variables que almacenan la información de los contenedores de importación y exportación que hay en la zona de almacenaje.
Figura 28 Módulos de llegada de camiones
Estos módulos son incluidos en el modelo de simulación para representar el flujo de contenedores que entra y sale del puerto por modos terrestres y para influir en la disponibilidad de las carretillas pórtico pues son utilizadas para movilizar los contenedores. Esto afecta directamente la operación de buque ya que disminuye la cantidad de carretillas disponibles.
4.4.2. Llegada de buques
De acuerdo a la información del tráfico de buques de la tabla 12 y teniendo en cuenta información complementaria como fecha y hora de llegada y salida del puerto, se muestra en la figura 29 los intervalos de tiempo entre las llegada de un buque y el siguiente, así como también con que probabilidad ocurre esto.
Figura 29 Intervalos de tiempo entre las llegadas de los buques
Mediante un modulo Create se modela la llegada de los buques al puerto, se crea una entidad que lo representará según las probabilidades de llegada que se muestran en la figura 30. Cada buque tiene unas características particulares tales como; contenedores a descargar, contenedores a cargar, localización de estos, etc.
las cuales se le otorgan con un modulo Assign. El paso por la esclusa es representado con un modulo Process que sólo permite el paso de un buque a la vez.
Figura 30. Módulo de llegada de buques
Los últimos módulos, modelan con un bucle conformado por módulos Assign y Choose la ubicación del buque en la cola espera_muelle.
0,0%
5,0%
10,0%
15,0%
20,0%
25,0%
30,0%
0-5 5-10 10-15 15-20 20-25 25-30 30-35 35-40 40-45 45-50
Probabilidad
Horas
4.4.3. Sistema para la asignación de muelles
Este grupo de módulos representa la estrategia de asignación actual en el PS la cual tiene como criterio de asignación el orden de llegada de los buques. Para modelar esto se utiliza un modulo Seize para solicitar el muelle y tres módulos Choose para asignar el muelle dependiendo si esta uno o los dos libres. Si es uno el que está libre se le asigna éste al buque para que inicie operaciones lo más rápido posible y si son dos los que están libres se evalúa el que más le convenga al buque para asignarle este. La figura 31 muestra este grupo de módulos.
Figura 31. Módulos de asignación de Muelle
4.4.4. Remolque de buques
Los dos remolcadores son creados cuando inicia la simulación, y son enviados a dos grupos de módulos que representan la operación de remolque de los buques.
En la figura 32 se muestran los módulos de esta operativa, correspondiente a un remolcador ya que son exactamente iguales para ambos. Estos módulos conforman tres subgrupos como se puede ver en la figura.
Figura 32 Módulos de remolque de buques
Los primeros módulos de la figura 32 corresponden al subgrupo de módulos de espera y búsqueda de llamadas. Cuando un buque necesita ser remolcado envía una señal mediante un modulo Signal a los remolcadores que están en este subgrupo y así se atiendan la llamada. Los remolcadores esperan esta señal en un módulo Wait y al salir pasan a estar ocupados por lo cual con un modulo Assign se modifica este atributo. Mediante bucles conformados por módulos Choose y Assigns se busca en el sistema el buque que necesita al remolcador y se guarda como atributo la localización de éste.
El subgrupo a mitad de la figura modela la recogida de los buques, en el cual según la información que tiene el remolcador de la localización del buque que lo necesita es enviado a este lugar con un modulo Route. Y por último el tercer subgrupo tiene como objetivo coordinar la recogida de los buques según el orden de llegada de estos.
4.4.5. Operación de descarga y carga en los muelles
Los módulos de la figura 33 representan las operaciones de manipulación que se realizan en los muelles y la zona de almacenamiento de la terminal de contenedores. El tiempo que tarda un buque en el muelle dependerá de las características asignadas a su llegada tales como la cantidad de contenedores a cargar y descargar, la localización de estos contenedores en la ZA y la disponibilidad de carretillas en ese instante de tiempo. Se consideran dos muelles en el modelo de simulación, pero al ser exactamente iguales solo son mostrados en la figura los módulos del muelle Batan 1.
Al muelle llega el buque guiado por el remolcador por lo cual con un modulo Dropoff se separan, de forma que el buque continúe en los módulos del muelle y el remolcador quede libre. De forma similar son separados del buque los contenedores que serán descargados con un modulo Separate para así iniciar la operación de descarga.
Se utiliza un modulo Hold para asegurar que las operaciones de descarga inicien después de haber terminado con las operaciones de carga.
Con respecto a la programación de las dos grúas pórtico se considera que cada grúa está asociada a un muelle de manera que al asignar un muelle a un buque se le ha asignado implícitamente una grúa. También se considera que cuando solo este un muelle ocupado realizando operaciones de carga y descarga con su respectiva grúa, la grúa del otro muelle que se encuentra libre puede ser utilizada de manera que se minimice el tiempo de servicio. Esto se da si y solo si:
No hay buques en cola
No se está remolcando un buque con destino al muelle libre.
Figura 33. Módulo de operaciones de descarga y carga en el muelle
4.4.6. Nuevo sistema para la asignación de muelles
Como la simulación se ha llevado a cabo en la herramienta ARENA, se ha podido desarrollar un algoritmo genético que resuelve el modelo de optimización en un modulo VBA el cual funcionan como interface entre el modelo de simulación y un editor de Visual Basic que posee ARENA
El editor de Visual Basic es en donde se inserta el programa o conjunto de rutinas a ejecutar. ARENA ofrece mucha versatilidad en cuanto a que la ejecución del programa generado se puede ejecutar en el momento que uno desee. Se puede ejecutar al comienzo de la simulación, al final de la misma, cuando se pulse una tecla, etc.
ARENA también permite la posibilidad de que el programa se ejecute cuando una entidad cualquiera de la simulación entre en un modulo denominado VBA. Esta opción es la elegida para diseñar el modulo de asignación de muelles que integra el modelo de simulación con el de optimización. Este es mostrado en la figura 34.
Figura 34 Modulo para la asignación de muelles con VBA
Este nuevo modulo remplaza el explicado en el apartado 4.4.3 y es el único cambio que se realiza en el modelo de simulación mostrado en los apartados anteriores. El modulo VBA es usado para insertar el modelo de optimización mediante heurísticas basadas en un algoritmo genético, todo esto es hecho en lenguaje Visual Basic. Cuando un buque entra en el modulo VBA se ejecuta el algoritmo el cual toma información del modelo de simulación tal como buques en espera de muelle, cantidad de contenedores a movilizar por cada uno, etc. la cual utiliza para gestionar la asignación de muelle según los criterios del modelo de optimización.
Devuelve la información al modelo de simulación la cual tiene la nueva asignación de muelles.
4.5. Algoritmo genético
Para solucionar el modelo de optimización se diseña un algoritmo genético. Cada vez que un buque llega al modelo de simulación y entra al modulo VBA, este integra el modelo de optimización y el modelo de simulación para reasignar los muelles a los buques en el puerto, incluyendo los recién llegados.
A continuación se describen una serie de conceptos a tener en cuenta en el diseño del algoritmo genético, además de mostrar el funcionamiento del algoritmo diseñado para este modelo en cuestión.
4.5.1. Individuo
Los individuos o cromosomas, se representan como una cadena a través de un alfabeto finito, en el que cada elemento se denomina gen. Dichos genes constituyen los cromosomas. En el ADN humano el alfabeto es AGTC (adenina, guanina, timina y citosina) y en los algoritmos genéticos generalmente se utiliza el alfabeto binario (0,1). Por tanto los cromosomas de los individuos de la población serán una cadena de ceros y unos, siendo éstos, genes de dicho cromosoma. En ocasiones puede recurrirse a una especificación del cromosoma mediante números reales en vez de números binarios.
En la codificación del individuo del modelo propuesto se usa una estrategia de asignación de muelle. De este modo, el individuo está formado por una cadena binaria de 20 genes o bits. Los genes están agrupados por parejas, formando así 10 parejas. Cada pareja de bits representa un buque, el cual puede tener asignado el muelle 1 o el muelle 2. Esto se representará con un uno en el primer bit de la pareja si se trata del muelle 1 o con un uno en el segundo bit si se trata del muelle 2, pudiendo tener por tanto los siguientes casos:
00 --> No existe asignación ni del muelle 1 ni del muelle 2
10 --> Existe asignación en muelle 1
01 --> Existe asignación en muelle 2
Merece la pena señalar que en ningún caso se producirá la opción restante en la que ambos muelles están asignados a un buque. En la figura 34 se muestra la estructura de un individuo que representa una solución posible al modelo.
Buque
portacontenedores 1 2 3 4 5 6 7 8 9 10
Individuo 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 0 0 0 0
Muelle No. 1 2 1 1 2 1 2 2
Figura 35 Estructura de un individuo
El cromosoma mostrado en la figura 34 muestra la representación de un cromosoma típico para la reprogramación de los dos muelles, en el cual se tiene asignados los buques 1, 3, 4 y 6 al muelle 1 y serán atendidos según el orden de llegada y los buques 2, 5, 7 y 8 al muelle 2. Los buques 9 y 10 tienen los dos genes con valor cero (0) lo que indica que esos lugares de la cola están vacios. Por lo tanto los buques en puerto son 8.
4.5.2. Población
La población viene determinada por un conjunto de individuos que poseen ciertas semejanzas. En los algoritmos genéticos serán conjuntos finitos de cadenas de ceros y unos, es decir de cromosomas. En este modelo será de tamaño variable hasta un máximo de 20 individuos. Veremos más adelante que dicha población podrá ser por tanto de tamaño 2, 4, 8, 16 o 20.
Dado que los individuos están formados por una secuencia de 20 enteros que serán ceros y unos, y dado que la población más amplia en este algoritmo se constituye con 20 individuos a lo sumo, se llega a la conclusión de que las dimensiones de la matriz población serán de [20 x 20], como se observa en la figura 35.
Figura 36 Estructura de población
Cada fila de dicha matriz representa un individuo, pudiéndose tener hasta 20 individuos.
Varios son los índices que se utilizan en esta matriz para su mejor accesibilidad y manejo. Podemos agrupar los índices que se moverán por filas y aquellos que lo harán por columnas.
Í n d i c e s d e f i l a s
Existen dos índices que se desplazan en la matriz por filas. Son los siguientes:
i_f_pob
i_max_pob
El primero es un índice que indicará en todo momento con que individuo se está trabajando y constituye una forma sencilla de tenerlo localizado y poder acceder a él en cualquier momento.
El segundo será por el contrario un índice invariable a lo largo de la ejecución del algoritmo e indicará la longitud máxima de la población. Dado que es un índice de filas, su valor podría estar comprendido entre 0 y 19. Y podrá ser 1, 3, 7, 15 o 19.
Esto dependerá del número de buques que están en el puerto a la espera de ser atendidos en el instante de tiempo que se ejecuta el algoritmo, a continuación es explicado de forma más detallada.
Valdrá 1 cuando sólo se tengan dos individuos en la población. Esto será cuando en estado sólo haya un 1, lo cual significará que sólo hay un buque en la cola de espera. En este caso se podrá tener por tanto sólo dos individuos en la población.
Uno tendrá el buque asignado al muelle 1, es decir con 10 en la pareja de genes correspondientes, y otro tendrá el buque asignado al muelle 2, es decir con 01 en dicha pareja de genes.
Valdrá 3 cuando se tengan 4 individuos en la población, provenientes de las diferentes combinaciones que se pueden dar cuando se tengan dos buques en la cola de espera.
Valdrá 7 cuando hay 8 individuos en la población, es decir se tengan 3 buques en estado, y valdrá 15 cuando haya 16 individuos, provenientes de 4 buques.
Como último caso, valdrá 19 siempre que haya 5 o más buques en la cola de espera, en ese caso se podrían obtener como mínimo 32 individuos diferentes, lo cual supera el máximo establecido para la población, que es de 20 individuos.
Debe quedar de manifiesto que el índice i_f_pob siempre tendrá un valor inferior o igual al índice i_max_pob dado que el primero apuntará a un individuo de la población, y el segundo siempre lo hará al último individuo de la misma.
4.5.3. Función de aptitud
La función de aptitud es una función que mide la idoneidad de un individuo. La naturaleza se encarga de eliminar al menos adaptado y por eso se hace necesaria una función que determine como de bueno o de malo es un individuo. Esta varía dependiendo del problema en cuestión, pero en general, suele ser una función que tiene por entrada un individuo y por salida un número real.
Generalmente en los algoritmos genéticos, el mejor individuo de la población viene determinado por el valor de fitness mayor de todos, ya que se trata de una función de aptitud. Sin embargo, en el algoritmo genético que se desarrollado, se considera la función opuesta, es decir, el individuo de menor aptitud es considerado como el individuo mejor de la población.
Esto se debe a que la función de aptitud ofrece una medida estimada del tiempo aproximado que tardarían los dos muelles en servir los buques que tienen asignados. De esta forma, el individuo mejor de todos será aquel que tarde menos tiempo en realizar las operaciones de los buques. Es decir aquel que tenga la aptitud más baja (el menor valor). Con esa asignación de buques, los muelles tardarán menos tiempo en atenderlos que con otra asignación distinta correspondiente a otro individuo.
A partir de ahora y para mayor comodidad se hablará de aptitud de un individuo, refiriéndose al valor obtenido al evaluar a dicho individuo por la función aptitud, es decir será el valor de salida de la función
Para almacenar los valores correspondientes a la aptitud de cada individuo se diseña una matriz de dimensiones [20 x 2], cuya funcionalidad se describe a continuación.
La matriz aptitud dispone de un sólo índice para moverse por la misma. Se trata del índice i_f_fit que valdrá desde 0 hasta 19 (índice por filas). No se dispone de ningún índice por columnas. La primera columna vendrá determinada por la posición del individuo en la población (desde 0 hasta 19 como máximo), como se verá a continuación, mientras que la segunda vendrá determinada por el valor de la aptitud de ese individuo. Para hacer referencia a una o a otra columna se indicará un 0 o un 1 en el segundo campo de la matriz aptitud. La estructura de la matriz aptitud es mostrada en la figura 37.
Figura 37 Estructura de la matriz aptitud
La primera columna vendrá determinada por números del 0 al 19, aumentando conforme aumentan las filas. Estos números hacen referencia a los individuos que se encuentran en la población en esa misma posición de fila.
La segunda columna hace referencia al valor de la aptitud que tiene cada individuo de la población. De este modo, si en la primera fila de la matriz aptitud se tienen los valores 0, 32, en primera y segunda columna respectivamente, significará que el primer individuo de la población, el de la fila 0, tendrá una aptitud de 32.
También se diseña una matriz AptitudO la cual tiene las mismas dimensiones que la matriz aptitud, aunque su propósito es distinto ya que es una matriz en la que los individuos están ordenados según su valor de aptitud. De este modo, en las primeras filas de dicha matriz AptitudO, estarán los individuos con el menos calor de aptitud, es decir los mejores individuos en este caso.
La segunda columna indica la aptitud que el individuo tiene, mientras que la primera columna indica la posición de dicho individuo en la población.
Supóngase el caso de que se tiene en la primera fila de la matriz AptitudO están los valores 3 y 84 en su primera y segunda columna respectivamente. En tal caso, esto indicaría que el mejor individuo, es decir aquel de aptitud más baja (por encontrarse en la primera fila de AptitudO), tiene un valor de aptitud de 84 y se trata del individuo que se encuentra en la tercera posición de la población, ya que el primer individuo de la misma es el cero.
4.5.4. Operadores genéticos
En este apartado de explicaran los dos procesos para modificar la población y su funcionamiento en el algoritmo diseñado.
C r u c e
El cruce constituye uno de los dos procesos de reproducción en una población. En dicho proceso de reproducción hay que señalar que a la hora de generarse un nuevo individuo, de la forma que sea, se elimina otro de la población. Con esto se pretende imitar a la naturaleza en la que unos individuos nacen y otros mueren, con la salvedad de que en este caso la población no va a variar de tamaño.
En el proceso de cruce, un par de individuos (padre y madre) se cruzan para formar un nuevo individuo (hijo), el cual entrará a formar parte de la población.
Esto se realiza en primer lugar tomando dos individuos al azar de la población y el hijo o cromosoma resultante de dicho cruce vendrá caracterizado por ambos.
En aquellas parejas de genes en las que los genes del padre sean igual a los de la madre, el hijo heredará una réplica exacta de estos. Y en aquellas parejas de genes en las que el padre tenga 10 y la madre 01 o viceversa, será en donde se producirá un cruce, heredando el hijo en este caso con una probabilidad de 0.5 los genes del padre y con una probabilidad de 0.5 los genes de la madre.
Con este cruce se modifica la asignación de ese buque. Es decir, si en dicha pareja de genes se tiene 01, estará asignado al muelle 2 mientras que si tiene 10, estará asignado al muelle 1.
Por tanto, se debe señalar que si el padre difiere de la madre en una sola pareja de genes, el hijo heredará completamente los mismos genes que el padre o que la madre, produciéndose en este caso la duplicidad del individuo que es conocido como incesto
Para prevenir la duplicidad de individuos, los dos individuos escogidos al azar de la población, que serán el padre y la madre, no podrán ser excesivamente parecidos en cuanto a información genética. Si únicamente se comprobara que ambos no difirieran en una única pareja de genes, lo que se estaría previendo sería la duplicidad del individuo, como antes se ha explicado. Por lo cual se establece que padre y madre deben diferir en al menos tres parejas de genes.
M u t a c i ó n
La mutación constituye el otro proceso de reproducción y consiste en la modificación de uno o varios genes de un individuo. El nuevo individuo mutado entrará a formar parte de la población. En muchos algoritmos genéticos tras la mutación, el individuo mutado reemplaza al individuo original en la población, sin embargo en otros muchos el individuo original se mantiene en la población saliendo de la misma otro individuo supuestamente peor adaptado que él. En este trabajo es considerada la segunda opción.
La mutación se realiza sobre un individuo elegido al azar de la población, y consiste en la modificación de una pareja de genes. O bien dos genes mutan de 01 a 10 o viceversa. Esta mutación se produce sobre una pareja de genes que están por tanto a 01 o a 10, nunca sobre una pareja de genes que esté a 00, pues significa que no hay buque en ese lugar de la cola.
Con esto se consigue modificar la asignación de un buque. Si estaba asignado el muelle 1 pasará ahora a estarlo el muelle 2 o viceversa.
Se puede pensar de antemano que una forma posible de realizar este proceso sería buscar aleatoriamente una pareja de genes de hijo de entre las 10 posibles.
Posteriormente comprobar si en esa pareja existe muelle asignado, es decir si se tiene un 10 o 01, y pasar a cambiar su valor en caso afirmativo o buscar otra en caso negativo.
Sin embargo, en casos en los que se tienen pocos buques, se podrían realizar muchas búsquedas innecesarias, hasta dar con la pareja de genes que exista muelle asignado. Por tal motivo se planteo una forma en la que no hubiera que hacer muchas búsquedas, la cual consiste en una sola elección aleatoria de entre todos los genes de hijo.
En la nueva forma para realizar el proceso, lo primero que se haría sería comprobar si esta pareja de genes tiene buque. Si fuera así, se tomaría esta pareja de genes para su modificación, y si no, se recorrería hijo a partir de ella de derecha a izquierda, con el fin de que la primera que se encontrara fuera la elegida a mutar.
Sin embargo, este procedimiento presenta un problema ya que no todas las parejas de genes que constituyen hijo tendrían la misma probabilidad de ser mutadas, discriminando así a unas frente a otras.
Supóngase el caso de que sólo se tienen dos buques que son el buque dos y el buque tres. En este caso, serían la segunda y la tercera pareja de genes de hijo las que tendrían buque. Al realizar la elección aleatoria de una pareja de genes, se mutaría siempre la pareja de genes correspondiente al tercer buque a no ser que la elección cayera exactamente en la segunda pareja de genes de hijo.
Un número muy pequeño de posibilidades, frente a todas las demás en las que la pareja a mutar terminaría siendo la pareja de genes del tercer buque. Con el fin de que no se hicieran muchas elecciones, fuera rápido, eficaz y todas las parejas de genes fueran equiprobables, se desarrolló este proceso, el cual consta de tres partes:
Recuento de buques asignados: En este sub-bloque, se cuentan los buques que hay. Para eso se utiliza un contador y se recorre la matriz estado incrementando el valor del mismo en aquellos casos en los que sí lo hay.
Colocación en los genes a mutar: De entre el número de buques que hay, se elige uno aleatoriamente. Si por ejemplo se tienen cinco buques, se elige un número aleatorio entre 1 y 5. Dicho número dará la pareja a mutar.
Mutación de los genes: Posteriormente lo único que quedaría por hacer sería ver si la pareja tiene asignado el muelle 1, es decir 10, en cuyo caso se modificaría y pasaría a estar asignado al muelle 2, es decir 01, o viceversa.
4.5.5. Estructura del algoritmo genético
Para explicar cómo opera el algoritmo genético se ha diseñado un diagrama de flujo que muestra la estructura de la heurística utilizada para resolver el modelo de optimización. Cada bloque del diagrama está formado por un conjunto de sentencias en Visual Basic que se ejecutan cada vez que una entidad entra al modulo VBA. Este diagrama se muestra en la figura 38.
Figura 38 Estructura de la heurística utilizada
Para facilitar la interacción entre el modelo de simulación y el algoritmo, se diseña un array o matriz unidimensional formado por 10 enteros denominada matriz estado. En dicho array se tendrá información acerca de cuál es el orden de llegada de los buques que están esperando en la cola y por ende cuantos hay. Un 0 en cualquier elemento del array indica que no existe buque en ese lugar de la cola, mientras que un 1 indica que sí lo hay.
Supóngase por ejemplo que en el segundo elemento de la matriz estado se tiene un 1. Esto indicará que en el segundo lugar de la cola hay un buque. Estado no dará información acerca de qué muelle está asignado a ese buque, ya que será posteriormente el algoritmo genético el que decida cuál es el más apropiado.
Por tanto, la matriz estado simplemente se encarga de tener la información existente en ese momento en la simulación por medio de ceros y unos en sus elementos.
Población actual es la final
Operadores genéticos
Toma de información actual del Arena Generación de la población inicial
Calculo de la aptitud de cada individuo
Mutación Cruce
Generación de nuevo Individuo
Calculo de las aptitudes de la nueva población
Envió de la información de la programación
a Arena
Fin Si
No
Se dispone también de un índice denominado i_est que será el encargado de moverse a lo largo de la matriz estado. Sus valores valdrán desde 0, momento en el que apuntará al comienzo del array, primer lugar de la cola, hasta 9, momento en el que apuntará al final del array, último lugar de la cola.
A continuación se describe el funcionamiento de cada uno de los bloques del diagrama del anterior diagrama
I n f o r m a c i ó n a c t u a l d e l s i s t e m a
En este bloque se realiza una análisis de la programación de muelles para lo cual se realiza es una exploración de las variables utilizadas en la simulación, AsigM1 y AsigM2. Esto es con el objetivo de saber cuántos buques están asignados a los muelles y no están en operación. Es indiferente a que muelle están asignados los buques pues hay probabilidad que tras la ejecución del algoritmo la asignación cambie.
Con esta información se van asignando ceros o unos en estado, dependiendo de que no haya buque o de que sí lo haya, respectivamente.
G e n e r a c i ó n d e l a p o b l a c i ó n
Este bloque se divide en tres partes que son:
Recuento de buques en el puerto
Asignación fija
Asignación aleatoria
Cada una de estas partes agrupa un conjunto de sentencias que son utilizadas o no dependiendo de la situación actual del sistema
Recuento de buques en el puerto
En este conjunto de sentencias lo que se persigue es saber a cuántos buques se le tiene que asignar muelle. Para esto, se recorre estado buscando cuantos unos posee. El número de unos que tenga más el buque que ha llegado serán los buques que hay en el puerto esperando ser atendidos. Para tal efecto, se utiliza un contador que irá incrementándose cada vez que se encuentra uno. Al finalizar la búsqueda y en función de los buques en el puerto, se entra o bien en el bloque de
Asignación fija
En este bloque se entra siempre que el número de buques en el puerto sea menor o igual que cuatro. Si se produce esto, no se podrá completar la población de veinte individuos diferentes. Si sólo hay un buque se tendrán dos individuos. Si hay dos buques se tendrán cuatro. Si son tres los buques, ocho serán los individuos, y si por el contrario son cuatro, podrá haber dieciséis individuos. En todos los casos, no se llega a completar la población por lo que la asignación de los individuos ha de ser fija, conociéndose de antemano los individuos que la formarán.
Al crearse la matriz población al inicio del programa, se incluyen ceros en todos sus elementos, por lo que la creación de los individuos consiste en asignar los unos correspondientes en los distintos elementos.
Lo primero que se hace es asignar el valor apropiado al índice i_max_pob en función de los buques que se tengan. Si se tienen por ejemplo tres buques, el número de individuos será 8, asignándole de esta forma el valor 7 al índice i_max_pob.
La creación de la población no se lleva a cabo en este caso por individuos, sino que se realiza por parejas de genes como se explica a continuación.
Se recorre estado desde el comienzo hasta el final, buscando unos. Conforme se va recorriendo estado con el índice i_est se recorre también la población horizontalmente con los índices i_c1_pob e i_c2_pob. Si estado posee cero no se realiza nada, pero en el momento en el que aparece un 1 en estado, se realiza lo siguiente:
Por tratarse del primer uno que se encuentra, se introducen unos de forma alternada en i_c1_pob e i_c2_pob en todos los individuos que forman la población. De esta forma, siguiendo con el ejemplo anterior se tendrán en la pareja de genes correspondientes a dicho buque 10,01,10,01,10,01,10,01 en los ocho individuos que constituyen la población.
Con el segundo 1 encontrado en estado se realiza lo mismo, pero en vez de alternando cada individuo, será cada dos individuos. Las ocho asignaciones quedarán de la siguiente forma: 10,10,01,01,10,10,01,01.
Por último en el tercer buque, se asignarán en las parejas de genes correspondientes lo mismo pero alternando cada cuatro individuos, es decir,
10,10,10,10,01,01,01,01. De esta forma se completan los ocho individuos con las ocho combinaciones posibles. Para esta asignación se utilizan varias variables denominadas: uno, dos, cuatro y ocho.
Asignación aleatoria
En este bloque se entra siempre que el número de buques que haya que asignar sea mayor o igual a 5. En este caso, la población podría ser más amplia de 20 individuos, por lo que aquellos que la formen podrán ser cualesquiera, desconociéndose de antemano. Así, lo primero que se asigna es el índice i_max_pob con un valor de 19, ya que la población se completará con 20 individuos.
A diferencia de la asignación fija, la asignación de los individuos no se hará por parejas de genes, sino que será por individuos, es decir se completará un individuo, luego otro, y así sucesivamente hasta completar los veinte.
El individuo que se esté asignando se irá recorriendo a la vez que se recorre estado. De esta forma, en el momento en el que aparezca un 1 en estado, se asignará un 10 o 01 en dicha pareja de genes. Esta asignación se realizará mediante probabilidades. Con probabilidad 0.5 se asignará 10 y con probabilidad 0.5 se asignará 01.
Tras la creación de un nuevo individuo, y antes de pasar a crear el siguiente aumentando el índice de filas i_f_pob, se evaluará si este individuo aleatoriamente creado ya está en la población. Si es así, no se aumentará el índice i_f_pob y se volverá a crear otro individuo sobre él. Si por el contrario no existe duplicidad, se aumentará i_f_pob y el individuo habrá pasado a formar parte de la población inicial. Este proceso se repite hasta completar de este modo toda la población.
Para finalizar, se realizan un conjunto de secuencias con el fin de visualizar en variables definidas en ARENA la población formada. Por tanto, se hace una correspondencia entre variables que pertenecen al algoritmo genético y otras variables distintas que corresponden a la simulación en ARENA. De esta forma se puede ver en la zona de animación la población con todos sus individuos.
C a l c u l o d e l v a l o r a p t i t u d d e c a d a i n d i v i d u o d e l a p o b l a c i ó n
Para calcular la aptitud de un individuo se realiza una cuenta simple en la que se realiza un sumatorio del tiempo total de servicio para cada buque en la cola según el muelle asignado y la localización de los contenedores en la ZA. La evaluación se lleva a cabo en dos partes, una primera en la que se evalúa el tiempo que tardará el muelle 1 en atender los buques según la cantidad de contenedores a cargar y descargar, la localización de estos en la ZA y en el caso que este en operaciones, el tiempo que tardara en terminar y una segunda en la que se evalúa el del muelle 2.
Posteriormente se suman dichos tiempos y esa suma se considera el tiempo total, es decir el valor de aptitud del individuo más el tiempo que falta para que los buques en muelle finalicen las operaciones.
A continuación se realiza una evaluación de la aptitud de los distintos individuos que conforman la población inicial. Para ello se utiliza un bucle while que se ejecuta mientras que el índice de filas de la población i_f_fit sea menor o igual al índice i_max_pob, que apunta al último individuo de la misma. A continuación se presenta el seudocódigo que calcula la aptitud de cada individuo.
i_f_pob = individuo analizado i_c1_pob = 0
Mientras i_c1_pob <= 18
Si pob(i_f_pob, i_c1_pob) = 1 entonces
Buques asignados a M1 = Buques asignados a M1 + 1
Toma de información de arena de las características del buque Si la localización de los espacios para almacenaje = 1 entonces
Tiempo de descarga = contenedores a descargar * tiempo entre M1 y ZA1 Si no
Tiempo de descarga = contenedores a descargar * tiempo entre M1 y ZA2 Fin si
Si la localización de los contenedores a cargar = 1 Entonces
Tiempo de carga = contenedores a cargar * tiempo entre M1 y ZA1 Si no
Tiempo de carga = contenedores a cargar * tiempo entre M1 y ZA2 Fin si
Tiempo en M1 = Tiempo en M1 + (Tiempo de descarga + Tiempo de carga) Fin si
i_c1_pob = i_c1_pob + 2 Fin mientras
Si Tiempo en M1 > 0 Entonces
d1 = Tiempo en M1 + Tiempo restante de operación actual en M1 Si no
d1 = 0
El anterior cálculo es realizado para los buques que tienen asignado el muelle 1, para los buques asignados al muelle 2 se utiliza un bucle igual, pero considerando las operaciones en el muelle 2.
i_f_pob = individuo analizado i_c2_pob = 1
Mientras i_c2_pob <= 19
Si pob(i_f_pob, i_c2_pob) = 1 entonces
Buques asignados a M2 = Buques asignados a M2 + 1
Toma de información de arena de las características del buque Si la localización de los espacios para almacenaje = 1 entonces
Tiempo de descarga = contenedores a descargar * tiempo entre M2 y ZA1 Si no
Tiempo de descarga = contenedores a descargar * tiempo entre M2 y ZA2 Fin si
Si la localización de los contenedores a cargar = 1 Entonces
Tiempo de carga = contenedores a cargar * tiempo entre M2 y ZA1 Si no
Tiempo de carga = contenedores a cargar * tiempo entre M2 y ZA2 Fin si
Tiempo en M2 = Tiempo en M2 + (Tiempo de descarga + Tiempo de carga) Fin si
i_c2_pob = i_c2_pob + 2 Fin mientras
Si Tiempo en M2 > 0 Entonces
d2 = Tiempo en M2 + Tiempo restante de operación actual en M2 Si no
d2 = 0
Aptitud del individuo = d1 + d2
Cada vez que se halla la aptitud de un individuo de la población su valor se almacena en la matriz aptitud. En la primera columna, índice i_f_fit a cero, se almacena la posición del individuo en la población, que irá desde 0 hasta 19. En la segunda columna, índice i_f_fit a uno, se almacena su valor de aptitud. Esta matriz aptitud por tanto no estará ordenada en función de los valores de aptitud de los individuos, sino que estará ordenada en función de la posición que éstos ocupan en la población.
Al igual que en el bloque anterior, existen al final un conjunto de sentencias mediante un bucle while con la finalidad de visualizar los valores de aptitud en la simulación.
Esta matriz aptitud no se verá modificada a lo largo de la ejecución del algoritmo
posteriormente sí se modificará, pero debido a que no se volverá a visualizar de nuevo, no se apreciarán sus modificaciones.
En AptitudO sí se modificarán sus valores a lo largo de la ejecución del algoritmo.
De este modo, comparando los valores de aptitud y AptitudO al final de dicha ejecución, se podrá visualizar la mejora que el algoritmo genético provoca.
Posteriormente a la asignación de los valores de aptitud de los individuos de la población inicial, se pasa a ordenarlos según su aptitud en la matriz AptitudO que se encargará desde este momento hasta el final de mantener a los individuos que forman la población ordenados según su aptitud.
Para ello se lleva a cabo una búsqueda en la matriz aptitud de los individuos con menor valor de aptitud, con el fin de ir incorporándolos a AptitudO. Conforme se van incorporando a AptitudO, se modifica su valor en la matriz aptitud asignando un valor de 1000, lo suficientemente alto como para que no se vuelva a elegir dicho individuo.
Por lo tanto queda claro que al final de toda la ordenación, la matriz aptitud sí habrá cambiado aunque debido a que no se volverá a visualizar, ni a utilizar más, sus modificaciones pasarán inadvertidas.
V e r i f i c a c i ó n d e l t a m a ñ o d e l a p o b l a c i ó n
Una vez se ha ordenado la matriz AptitudO, se mira si la población consta de 20 individuos o si por el contrario son menos los que la forman. En el caso de que sean menos los que la forman, no tendrá ningún sentido ejecutar las iteraciones del algoritmo genético, puesto que todas las posibilidades de asignación de buques estarán representadas en la población.
Por tanto, se pasará a buscar el individuo que tenga mejor aptitud, es decir aquel que se encuentre en la primera posición de AptitudO. Éste se tomará como mejor solución y se pasará a ejecutar el bloque de asignación de muelles a buques a ARENA, último bloque del programa.
P r o c e s o s g e n é t i c o s
Si la población es de 20 individuos, eso significará que al menos existen 5 buques, por lo que habrá posibles individuos que no hayan entrado en la población inicial.
De este modo, las iteraciones del algoritmo genético sí que tendrán sentido. Será en este caso en el que se ejecutará los bloques de mutación o cruce. El algoritmo se itera 50 veces y por tanto habrá 50 modificaciones de individuos.
De todas estas iteraciones, en unas se producirá mutación y en otras cruce. Se producirá cruce en un 80% de las veces y mutación en un 20% ya que el operador cruce los individuos escogidos difieren de tres parejas de genes lo que proporciona una menor probabilidad de generar individuos que ya existan en la población.
Merece la pena destacar que realmente la probabilidad de producirse cruce no es exactamente 0.2 debido a que en numerosas ocasiones se podrá producir la duplicidad de individuo, en cuyo caso no se habrá producido una iteración del algoritmo, pues no variará el índice destinado a contar las iteraciones, i. Esto se debe a que sólo se contabiliza como una iteración correcta del algoritmo el caso en el que no se produce duplicidad de individuo.
Por esto, se podrá dar el caso en el que se produzca mutación, y que posteriormente no se complete la iteración por haber duplicidad de individuo. De esta forma queda reflejado que la probabilidad real de mutación será por tanto algo menor a 0.2.
Como en el apartado 4.4.4 se explico en funcionamiento del bloque cruce y en el 4.5.5. El del bloque mutación, no serán explicados nuevamente.
G e n e r a c i ó n d e l n u e v o h i j o
Una vez realizado o bien un cruce o bien una mutación, se pasará a ejecutar este bloque. Se realiza una comparación entre hijo y los 20 individuos que forman la población. Si hijo coincide exactamente con algún miembro de la población, se considera que se ha producido duplicidad de individuo.
Dicho bloque dará un valor cero o uno al indicador de duplicidad. Si no se ha producido duplicidad de individuo valdrá 0 y si sí se ha producido, valdrá 1. Si no ha habido duplicidad, se pasarán a ejecutar una serie de bloques. Estos bloques se encargarán de introducir al nuevo individuo en la población y variar la matriz