aplicación de técnicas evolutivas a problemas de scheduling ...

67
PFC: II - DEIO - B - 01/03 15 créditos APLICACIÓN DE TÉCNICAS EVOLUTIVAS A PROBLEMAS DE SCHEDULING FERROVIARIO Bella Sanjuán, Antonio Valencia, septiembre 2004

Transcript of aplicación de técnicas evolutivas a problemas de scheduling ...

Page 1: aplicación de técnicas evolutivas a problemas de scheduling ...

PFC: II - DEIO - B - 01/03 15 créditos

APLICACIÓN DE

TÉCNICAS EVOLUTIVAS

A PROBLEMAS DE

SCHEDULING FERROVIARIO

Bella Sanjuán, Antonio

Valencia, septiembre 2004

Page 2: aplicación de técnicas evolutivas a problemas de scheduling ...

2

Page 3: aplicación de técnicas evolutivas a problemas de scheduling ...

3

INDICE

1. Introducción a los problemas de transporte ferroviario 2. Introducción a los algoritmos genéticos 3. Aplicaciones implementadas 3.1. Trenes 3.2. TrenAGs 4. Estudio comparativo con distintos parámetros del TrenAGs 5. Conclusiones del estudio 6. Bibliografía

Page 4: aplicación de técnicas evolutivas a problemas de scheduling ...

4

1. Introducción a los problemas de transporte ferroviario Una de las tareas más complicadas que las compañías de ferrocarriles afrontan es la construcción de horarios para el tráfico ferroviario. Hasta hace poco estas tareas se realizaban mayormente a mano. Durante los últimos años los ordenadores han sido equipados para realizar el proceso de construcción de los horarios usando bases de datos apropiadas y sistemas gráficos interactivos. [1] Lo ideal sería construir un sistema capaz de crear automáticamente el horario de cualquier línea ferroviaria, pero esta es una tarea muy complicada, dada la gran diversidad de trazados ferroviarios que nos podemos encontrar. Así que en vez de abordar la construcción de una herramienta general, la mayoría de los trabajos se centran en buscar soluciones específicas para líneas concretas que presentan una tipología determinada. A continuación vamos a comentar brevemente algunos de los trabajos encontrados sobre scheduling ferroviario, para poder hacernos una idea de los caminos que se están siguiendo. P. Brucker, S. Heitmann y J. Hurink en su trabajo Scheduling of Trains on a Single-Track Railway-Line [1] han considerado el problema de calcular un horario para un conjunto de trenes en una red ferroviaria con una única línea, donde todos los trenes circulan en la misma dirección. Los trenes pueden pasar a través de varios puntos de paso, caracterizados por un número fijo, pero arbitrario de caminos. Su objetivo es determinar un horario en el que la capacidad de las vías y las condiciones de seguridad sean respetadas, y alguna función objetivo se minimice. F. Barber, M.A. Salido, L. Ingolotti, M. Abril, A. Lova y P. Tormos en su trabajo An Interactive Train Scheduling Tool for Solving and Plotting Running Maps [2] presentan una herramienta para resolver y dibujar horarios de trenes que han sido desarrollados en colaboración con la Red Nacional de Ferrocarriles Españoles (RENFE). Esta herramienta transforma problemas de líneas ferroviarias en modelos matemáticos formales que pueden ser resueltos y entonces dibujar la mejor solución posible. Dada la complejidad de esta clase de problemas, el uso de fases de preproceso y heurísticos se hacen necesarios. Los resultados son dibujados y son filtrados interactivamente por usuarios humanos. L. Ping, J. Limin y K. Xiong en su trabajo Study on GA-based Train Dispatching [3] presentan un algoritmo genético para generar horarios en líneas de doble sentido, primero se establece el modelo, optimizando el horario de los trenes ajustando el orden y el instante de salida de las estaciones, y luego se demuestra su eficiencia mediante simulación en la línea férrea de alta velocidad de Guangzhou a Shenzhen.

Page 5: aplicación de técnicas evolutivas a problemas de scheduling ...

5

A. Higgins, E. Kozan y L. Ferreira han desarrollado varios trabajos relacionados con este tema. En concreto vamos a comentar dos de ellos. En su trabajo Optimal Scheduling of Trains on a Single Line Track [4] desarrollan y usan un modelo diseñado para optimizar horarios de trenes que circulan por vías de una sola línea. El modelo fue desarrollado mediante dos aplicaciones: una herramienta para la toma de decisiones para generar el horario de los trenes en tiempo real y de manera óptima, y una herramienta de planificación para evaluar el impacto de los cambios en el horario. El modelo matemático de programación es solo para horarios de trenes que circulan por vías de una sola línea. La prioridad de cada tren en conflicto depende de una estimación del resto de cruces y del retraso acumulado, así como el retraso actual. Esta prioridad se usa en un procedimiento de ramificación y poda para proporcionar una solución óptima y razonable al tamaño del problema. En otro de sus trabajos: Heuristic Techniques for Single Line Train Scheduling [5] aplican una búsqueda local heurística con una estructura mejorada por vecinos, algoritmos genéticos, búsqueda tabú y dos algoritmos híbridos. Cuando las constantes no temporales son incluidas en el tiempo de la solución, los algoritmos genético e híbridos están a menos del cinco por ciento de la solución óptima en al menos el noventa por cien de las pruebas realizadas. E. Silva y B.M. Smith en sus trabajos A Job-Shop Scheduling Model for the

Single-Track Railway Scheduling Problem [6] y Solving Single-Track Railway

Scheduling Problem Using Constraint Programming [7] explican como el problema de los trenes que circulan por una única línea férrea se puede considerar como un problema de programación de proyectos con recursos limitados, donde cada tramo entre dos puntos de la vía es una actividad que hay que realizar y en cada tramo solo se dispone de un recurso, que es la única vía que existe. Luego los conflictos se producen cuando dos trenes intentan ocupar el mismo tramo de vía. De la lectura de estos trabajos se pueden extraer dos conclusiones muy importantes: la primera es que obtener un horario óptimo para trenes que circulan por líneas de una única vía para ambos sentidos es un problema NP completo y que por tanto para abordarlo se descarta el uso del método exhaustivo de búsqueda de la mejor solución por todo el espacio de búsqueda y es necesario el uso de técnicas heurísticas para una solución que se aproxime lo máximo a la óptima en un tiempo razonable, y que en el mejor de los casos puede llegar a ser la óptima. La segunda conclusión es que el problema de generar horarios para trenes que circulan por líneas de una única vía para ambos sentidos se puede modelar como un problema de programación de proyectos con recursos limitados. Obtenidas estas conclusiones nos planteamos el objetivo de implementar una herramienta para generar horarios para trenes que circulan por líneas de una única vía para ambos sentidos y para ello vamos a utilizar la metodología de los algoritmos genéticos y la programación de proyectos con recursos limitados.

Page 6: aplicación de técnicas evolutivas a problemas de scheduling ...

6

2. Introducción a los algoritmos genéticos A continuación vamos a realizar una breve introducción a los algoritmos genéticos, para más información sobre los algoritmos genéticos se puede recurrir a la bibliografía [8] y [9]. Los algoritmos genéticos (denominados originalmente “planes reproductivos genéticos”) fueron desarrollados por John H. Holland a principios de los 1960s, motivado por resolver problemas de aprendizaje de máquina. El algoritmo genético enfatiza la importancia de la cruza sexual (operador principal) sobre el de la mutación (operador secundario), y usa selección probabilística. El algoritmo básico es el siguiente (Imagen 2.1):

• Generar (aleatoriamente) una población inicial. • Calcular aptitud de cada individuo. • Seleccionar (probabilísticamente) en base a aptitud. • Aplicar operadores genéticos (cruza y mutación) para generar la

siguiente población. • Ciclar hasta que cierta condición se satisfaga.

Imagen 2.1 - Algoritmo Genético

Page 7: aplicación de técnicas evolutivas a problemas de scheduling ...

7

Para poder aplicar el algoritmo genético se requiere de los 5 componentes básicos siguientes:

• Una representación de las soluciones potenciales del problema. • Una forma de crear una población inicial de posibles soluciones

(normalmente un proceso aleatorio). • Una función de evaluación que juegue el papel del ambiente, clasificando

las soluciones en términos de su “aptitud”. • Operadores genéticos que alteren la composición de los hijos que se

producirán para las siguientes generaciones. • Valores para los diferentes parámetros que utiliza el algoritmo genético

(tamaño de la población, probabilidad de cruza, probabilidad de mutación, número máximo de generaciones, etc.)

Vamos a comentar los operadores del algoritmo genético:

• Selección: Una parte fundamental del funcionamiento de un algoritmo genético es, sin lugar a dudas, el proceso de selección de candidatos a reproducirse. En el algoritmo genético este proceso de selección suele realizarse de forma probabilística (es decir, aún los individuos menos aptos tienen una cierta oportunidad de sobrevivir). Básicamente el proceso de selección consiste en elegir los padres que van a evolucionar para crear la nueva generación de individuos. La selección se produce en base a una función de evaluación, que cambia con cada problema, proporcionando a cada individuo un valor de “aptitud” que servirá para, según el criterio que se siga, elegir o descartar el individuo para que evolucione y cree la siguiente generación.

• Cruce: En los sistemas biológicos, la cruza o cruce es un proceso

complejo que ocurre entre parejas de cromosomas. Estos cromosomas se alinean, luego se fraccionan en ciertas partes y posteriormente intercambian fragmentos entre sí. En computación evolutiva se simula la cruza intercambiando segmentos de cadenas lineales de longitud fija (los cromosomas). Aunque las técnicas de cruza básicas suelen aplicarse a la representación binaria, estas son generalizables a alfabetos de cardinalidad mayor, si bien en algunos casos requieren de ciertas modificaciones. Así que básicamente, el cruce consiste en tomar una parte de la información del padre y la otra de la madre y así crear dos hijos, que cada uno de ellos contiene una parte de la información de su madre y otra de su padre. Estos hijos son nuevas soluciones para nuestro problema (Imagen 2.2).

Page 8: aplicación de técnicas evolutivas a problemas de scheduling ...

8

Imagen 2.2 - Cruce

• Mutación: La mutación se considera como un operador secundario en

los algoritmos genéticos. Es decir, su uso es menos frecuente que el de la cruza. Básicamente consiste en recorrer las cadenas de cromosomas creadas después de la cruza y con una probabilidad muy baja hacer algún cambio en ellas para incrementar la variabilidad (Imagen 2.3).

Imagen 2.3 - Mutación

Hay distintos métodos para cada uno de los operadores y dependiendo del problema que estemos tratando se podrán aplicar unos y no otros, y también habrán algunos que funcionen mejor y otros peor, pero como ya hemos dicho, eso dependerá de cada problema.

Page 9: aplicación de técnicas evolutivas a problemas de scheduling ...

9

3. Aplicaciones implementadas En un principio nuestra idea era realizar una única aplicación y empezamos implementando la aplicación que llamamos Trenes, cuando esta estaba prácticamente terminada, nos dimos cuenta que no mejoraba demasiado los resultados y se nos ocurrió desarrollar otra aplicación quizás más interesante y más potente que la anterior. Esta nueva aplicación la llamamos TrenAGs. El problema de la aplicación Trenes es la dificultad de implementar algunas funcionalidades para que la aplicación sea más flexible, así pues, con más tiempo, se podría haber mejorado la funcionalidad de la aplicación Trenes, pero como ya hemos dicho la nueva aplicación TrenAGs resulta más interesante y además es mucho más flexible y, como veremos, permite realizar pruebas variando distintos parámetros del algoritmo genético. Aunque a continuación comentaremos detalladamente las aplicaciones por separado, antes vamos a señalar las diferencias más importantes entre ellas:

• En Trenes todos los trenes realizan todo el trayecto. La mitad de los trenes realizan el trayecto de ida y otra mitad el de vuelta. En TrenAGs a cada tren se le asigna una estación de origen y otra de destino aleatoriamente entre todas las estaciones del trayecto y además, también aleatoriamente, se indica si el tren circulará en sentido de ida o de vuelta.

• En Trenes las características de los puntos de paso son siempre las

mismas para todos los trenes. En TrenAgs las características de los puntos de paso se asignan aleatoriamente para cada tren (tiempo_asig y par_com).

• En Trenes todos los trenes de ida están cadenciados, esto es que el

instante de salida de un tren de ida de cada una de las estaciones del trayecto respeta la frecuencia de ida con el anterior y el siguiente tren, y lo mismo pasa con los trenes de vuelta. En TrenesAGs no se tiene en cuenta ninguna frecuencia, pues cada uno de los trenes es independiente del resto.

Page 10: aplicación de técnicas evolutivas a problemas de scheduling ...

10

3.1. Trenes La primera pantalla que nos aparece cuando ejecutamos la aplicación Trenes (Imagen 3.1.1) nos permite elegir entre: abrir un trayecto existente o crear un nuevo trayecto.

Imagen 3.1.1 - Pantalla Inicio

Si elegimos la opción de crear un nuevo trayecto nos aparece la pantalla de introducción de datos (Imagen 3.1.2) donde podemos introducir todos los datos del nuevo trayecto.

Imagen 3.1.2 - Pantalla Datos Nuevo Trayecto

En esta pantalla ya nos aparecen algunos datos por defecto, pero lo que si que tendremos que introducir desde el principio son las características de los puntos de paso que componen el trayecto. Para cada punto de paso se tiene que indicar:

• un identificador (id_dep) • el tipo de punto de paso (id_tipo) (por ejemplo: id_tipo = E, indica que el

punto de paso es una estación) • la distancia en kilómetros desde el anterior punto de paso al actual

(distancia)

Page 11: aplicación de técnicas evolutivas a problemas de scheduling ...

11

• el número de vías que hay en el tramo que va desde el punto de paso actual al siguiente (num_vias) (en el problema que nos ocupa, el número de vías va a ser siempre uno)

• el tiempo asignado, en segundos, para ir el tren del punto de paso actual

al siguiente (tiempo_asig) • el tiempo programado, en segundos, para realizar la parada comercial en

el punto de paso actual (par_com) (cuando par_com = 0, indica que en dicho punto de paso el tren no tiene previsto realizar parada comercial)

Si elegimos la opción de abrir un trayecto existente, lo primero que nos aparece es el cuadro de diálogo estándar de Windows para abrir ficheros (Imagen 3.1.3) y así fácilmente podremos elegir el fichero que contiene la información sobre el trayecto que deseamos abrir.

Imagen 3.1.3 - Abrir Trayecto

Una vez elegido el fichero nos aparece la misma pantalla que cuando elegimos la opción crear un nuevo trayecto, pero esta vez en la pantalla aparecen todos los datos del trayecto que estaban guardados en el fichero que abrimos (Imagen 3.1.4).

Page 12: aplicación de técnicas evolutivas a problemas de scheduling ...

12

Imagen 3.1.4 - Pantalla Datos Trayecto Existente

Esta pantalla nos permite cambiar los datos que deseemos y crear o borrar puntos de paso del trayecto o modificar sus características. Antes de continuar vamos a comentar el significado de los datos que aparecen en esta pantalla, por si alguno de ellos no queda suficientemente claro con tan solo ver su nombre.

• Tiempo Recepción Viajeros: es el tiempo mínimo, en segundos, necesario para que un tren pueda apartarse de la vía en caso de alcance o cruce.

• Tiempo Expedición Viajeros: es el tiempo mínimo, en segundos,

necesario para que un tren apartado en caso de alcance o cruce se reincorpore al trayecto.

• Demora Parada NO Solicitada: es el tiempo, en segundos, que pierde

un tren al parar y al arrancar cuando para en una estación donde no tenía previsto realizar parada.

• Hora Salida Primer Tren Ida: es la hora de salida del primer tren de

ida. • Hora Salida Primer Tren Vuelta: es la hora de salida del primer tren de

vuelta.

Page 13: aplicación de técnicas evolutivas a problemas de scheduling ...

13

• Margen Salida Primer Tren Ida: es el margen de tiempo, en segundos, en que puede salir el primer tren de ida, a partir de la hora de salida del primer tren de ida.

• Margen Salida Primer Tren Vuelta: es el margen de tiempo, en

segundos, en que puede salir el primer tren de vuelta, a partir de la hora de salida del primer tren de vuelta.

• Frecuencia Salida Trenes Ida: es el tiempo, en segundos, de frecuencia

en el instante de salida de cada una de las estaciones del trayecto, que mantienen todos los trenes de ida.

• Frecuencia Salida Trenes Vuelta: es el tiempo, en segundos, de

frecuencia en el instante de salida de cada una de las estaciones del trayecto, que mantienen todos los trenes de vuelta.

• Número Salidas de Trenes por Sentido: es el número de trenes que

salen en cada uno de los sentidos. • Individuos de la Población Inicial: es el número de individuos que va a

tener la población inicial del algoritmo genético. • Cortes: es el número de cortes que se van a producir al realizar el cruce

el algoritmo genético. 1 indicará cruce en un punto y 2 cruce en dos puntos.

Una vez realizados todos los cambios deseados, se puede guardar el nuevo trayecto eligiendo la opción guardar, entonces aparece el cuadro de diálogo estándar de Windows para guardar ficheros (Imagen 3.1.5) y así fácilmente podremos elegir donde guardar el fichero con la información del trayecto actual.

Page 14: aplicación de técnicas evolutivas a problemas de scheduling ...

14

Imagen 3.1.5 - Guardar Trayecto

Cuando ya hemos introducido todos los datos del trayecto, ya se puede elegir la opción para generar el horario de los trenes. Al pulsar el botón se abre la pantalla que muestra el horario generado con los datos del trayecto introducidos (Imagen 3.1.6, Imagen

3.1.7).

Page 15: aplicación de técnicas evolutivas a problemas de scheduling ...

15

Imagen 3.1.6 - Pantalla Mostrar Horario

Imagen 3.1.7 - Pantalla Mostrar Gráfico

Page 16: aplicación de técnicas evolutivas a problemas de scheduling ...

16

En esta pantalla podemos visualizar todas las soluciones de la generación actual, permitiéndonos ver el horario o el gráfico. Además siempre podemos volver a la pantalla de datos (Imagen 3.1.4), por si queremos cambiar algo, pulsando el botón Volver a Datos y podemos evolucionar a la siguiente generación de individuos mediante el botón Evolución. En la parte superior derecha nos aparece el mejor tiempo medio, en segundos y en tiempo, de la generación actual, así como el número de las soluciones que tienen ese mejor tiempo. En la parte superior izquierda es donde podemos cambiar de solución que visualizar y del modo que queremos visualizar dicha solución (horario o gráfico) y cuando cambiamos de solución aparece el tiempo medio de dicha solución tanto en segundos como en tiempo. Hasta aquí hemos explicado como funciona la parte visual de la aplicación, a continuación vamos a comentar algunos aspectos interesantes sobre como se ha implementado la funcionalidad de la aplicación. 1. Generar población inicial Para todos los individuos de la población inicial 1.1 - Generar aleatoriamente uno de los sentidos 1.2 - Completar el otro sentido Fin Para 1.1. Generar aleatoriamente uno de los sentidos (Imagen 3.1.8)

- Se elige aleatoriamente el sentido que se va a generar (ida o vuelta) Para todas las estaciones Para todos los trenes del sentido elegido Si es el primer tren en primera estación - Hora salida estación = Hora Salida Primer Tren + Aleatorio(0..Margen) Sino, Si es primer tren y no primera estación - Hora salida estación = Hora llegada estación + Parada Comercial Estación Sino - Hora salida estación = Hora salida tren anterior de la misma estación + Frecuencia Fin Si - Hora llegada siguiente estación = Hora salida estación + Tiempo Asignado al tramo entre las estaciones Fin Para Fin Para

Page 17: aplicación de técnicas evolutivas a problemas de scheduling ...

17

Imagen 3.1.8 - Generar aleatoriamente uno de los sentidos

1.2. Completar el otro sentido (Imagen 3.1.9)

- Se selecciona el sentido que falta Para todas las estaciones Para todos los trenes - Tramo incorrecto Mientras Tramo incorrecto - 1.2.1 - Programar el tramo - 1.2.2 - Verificar tramo Fin Mientras Fin Para Fin Para

Imagen 3.1.9 - Completar el otro sentido

Page 18: aplicación de técnicas evolutivas a problemas de scheduling ...

18

1.2.1. Programar el tramo Si es el primer tren en primera estación - Hora salida estación = Hora Salida Primer Tren + Aleatorio(0..Margen) Sino, Si tiene Parada Comercial y no es primer tren, o es primera estación - Hora salida estación = Hora salida tren anterior de la misma estación + Frecuencia Sino, Si tiene Parada Comercial y es primer tren - Hora salida estación = Máximo cadenciado de los trenes de la anterior estación, para que se respeten la Frecuencia en estaciones Fin Si - Hora llegada siguiente estación = Hora salida estación + Tiempo Asignado al tramo entre las estaciones 1.2.2. Verificar tramo Si el tren actual se cruza con alguno del otro sentido en el tramo actual - Nueva Hora salida estación = Hora fin tramo del tren del otro sentido + Intervalo de tiempo de seguridad Sino - Tramo correcto Fin Si 2. Evolución Si hemos elegido 1 punto de cruce 2.1 - 1 punto de cruce Sino 2.2 - 2 puntos de cruce Fin Si 2.1. 1 punto de cruce - Elegir aleatoriamente un punto de cruce que coincida con una estación real - La solución hijo toma del padre hasta el punto de cruce y de la madre el resto - La solución hija toma de la madre hasta el punto de cruce y del padre el resto Si el punto de cruce está de la mitad de las estacione para arriba 2.1.1 - Resolver parte de arriba Sino 2.1.2 - Resolver parte de abajo La manera de resolver los conflictos en las partes de arriba y de abajo es similar a como se han resuelto en la Población Inicial, así que en vez de poner pseudocódigo vamos a realizar unos dibujos porque así quedará más claro.

Page 19: aplicación de técnicas evolutivas a problemas de scheduling ...

19

2.1.1. Resolver parte de arriba (Imagen 3.1.10)

- Resolver rama sentido natural - Resolver rama otro sentido hacía detrás - Volver a resolver rama sentido natural

Imagen 3.1.10 - Resolver parte de arriba

En esta imagen se muestran 3 casos que se pueden dar cuando se da el cruce en 1 punto de la mitad de la estaciones hacía arriba y como se resuelve cada uno de ellos. La imagen 1 muestra el estado inicial, la 2 cuando se ha resuelto la rama en el sentido natural (en este caso sentido de vuelta), la 3 cuando se ha resuelto la rama del otro sentido hacía detrás y la 4 cuando se vuelve ha resolver la rama en el sentido natural (en este caso sentido de vuelta). NOTA: estas imágenes no son reales, sólo son ejemplos para que quede claro lo que hace la aplicación para resolver los conflictos que se encuentra. Por tanto, aunque en las imágenes las líneas de los trenes están muy juntas y no cumplirían las restricciones de seguridad, vamos a suponer que las cumple.

Page 20: aplicación de técnicas evolutivas a problemas de scheduling ...

20

2.1.2. Resolver parte de abajo (Imagen 3.1.11) - Resolver rama sentido natural - Resolver rama otro sentido hacía detrás - Volver a resolver rama sentido natural

Imagen 3.1.11 - Resolver parte de abajo

En esta imagen se muestran 3 casos que se pueden dar cuando se da el cruce en 1 punto de la mitad de la estaciones hacía abajo y como se resuelve cada uno de ellos. La imagen 1 muestra el estado inicial, la 2 cuando se ha resuelto la rama en el sentido natural (en este caso sentido de ida), la 3 cuando se ha resuelto la rama del otro sentido hacía detrás y la 4 cuando se vuelve ha resolver la rama en el sentido natural (en este caso sentido de ida).

Page 21: aplicación de técnicas evolutivas a problemas de scheduling ...

21

2.2. 2 puntos de cruce - Elegir aleatoriamente dos puntos de cruce que coincidan con estaciones reales - La solución hijo toma del padre hasta el punto de cruce1 y a partir del cruce2 y de la madre el resto - La solución hija toma de la madre hasta el punto de cruce1 y a partir del cruce2 y del padre el resto 2.1.1 - Resolver parte de arriba 2.1.2 - Resolver parte de abajo Con 2 puntos de cruce se procede igual que con 1 punto, pero dado que hay 2 puntos de cruce, se debe de resolver la parte de arriba y la parte de abajo.

Page 22: aplicación de técnicas evolutivas a problemas de scheduling ...

22

3.2. TrenAGs La primera pantalla que nos aparece cuando ejecutamos la aplicación TrenAGs (Imagen 3.2.1) nos permite elegir entre: abrir una vía férrea existente o crear una nueva vía férrea.

Imagen 3.2.1 - Pantalla Inicio

Si elegimos la opción de crear una nueva vía férrea nos aparece la pantalla de introducción de datos (Imagen 3.2.2) donde podemos introducir todos los datos de la nueva vía férrea.

Imagen 3.2.2 - Pantalla Datos Nueva Vía Férrea

En esta pantalla ya nos aparecen algunos datos por defecto, pero lo que si que tendremos que introducir desde el principio son las características de los puntos de paso que componen el trayecto. Para cada punto de paso se tiene que indicar:

• un identificador (id_dep) • el tipo de punto de paso (id_tipo) (por ejemplo: id_tipo = E, indica que el

punto de paso es una estación) • la distancia en kilómetros desde el anterior punto de paso al actual

(distancia)

Page 23: aplicación de técnicas evolutivas a problemas de scheduling ...

23

• el número de vías que hay en el tramo que va desde el punto de paso actual al siguiente (num_vias) (en el problema que nos ocupa, el número de vías va a ser siempre uno)

Si elegimos la opción de abrir una vía férrea existente, lo primero que nos aparece es el cuadro de diálogo estándar de Windows para abrir ficheros (Imagen 3.2.3) y así fácilmente podremos elegir el fichero que contiene la información sobre la vía férrea que deseamos abrir.

Imagen 3.2.3 - Abrir Vía Férrea

Una vez elegido el fichero nos aparece la misma pantalla que cuando elegimos la opción crear una nueva vía férrea, pero esta vez en la pantalla aparecen todos los datos de la vía férrea que estaban guardados en el fichero que abrimos (Imagen 3.2.4).

Page 24: aplicación de técnicas evolutivas a problemas de scheduling ...

24

Imagen 3.2.4 - Pantalla Datos Vía Férrea Existente

Esta pantalla nos permite cambiar los datos que deseemos y crear o borrar puntos de paso del trayecto o modificar sus características. Antes de continuar vamos a comentar el significado de los datos que aparecen en esta pantalla, por si alguno de ellos no queda suficientemente claro con tan solo ver su nombre.

• Tiempo Recepción Viajeros: es el tiempo mínimo, en segundos, necesario para que un tren pueda apartarse de la vía en caso de alcance o cruce.

• Tiempo Expedición Viajeros: es el tiempo mínimo, en segundos,

necesario para que un tren apartado en caso de alcance o cruce se reincorpore al trayecto.

• Demora Parada NO Solicitada: es el tiempo, en segundos, que pierde

un tren al parar y al arrancar cuando para en una estación donde no tenía previsto realizar parada.

• Número de Trenes: es el número de trenes que circulan en total en

ambos sentidos. Se debe de indicar el número de trenes mínimo y máximo.

• Hora Salida: es la hora de salida de los trenes. Se debe de indicar la hora

de salida mínima y máxima.

Page 25: aplicación de técnicas evolutivas a problemas de scheduling ...

25

• Tiempo Asignado Tramos: es el tiempo asignado, en segundos, para ir el tren del punto de paso actual al siguiente. Se debe de indicar el tiempo asignado mínimo y máximo.

• % Estaciones con Parada Comercial: es el porcentaje de estaciones a

las que se les asignará parada comercial. • Tiempo Parada Comercial: es el tiempo programado, en segundos, para

realizar la parada comercial en el punto de paso actual (cuando par_com = 0, indica que en dicho punto de paso el tren no tiene previsto realizar parada comercial). Se debe de indicar el tiempo de parada comercial mínimo y máximo.

• Número Conjuntos: es el número de conjuntos de trenes distintos que se

van a generar. Una vez realizados todos los cambios deseados, se puede guardar la nueva vía férrea eligiendo la opción guardar, entonces aparece el cuadro de diálogo estándar de Windows para guardar ficheros (Imagen 3.2.5) y así fácilmente podremos elegir donde guardar el fichero con la información de la vía férrea actual.

Imagen 3.2.5 - Guardar Vía Férrea

Cuando ya hemos introducido todos los datos de la vía férrea, ya se puede pasar a elegir los parámetros deseados del algoritmo genético, para ello pulsamos el botón Algoritmo Genético y se abrirá la pantalla de parámetros del algoritmo genético (Imagen

3.2.6).

Page 26: aplicación de técnicas evolutivas a problemas de scheduling ...

26

Imagen 3.2.6 - Parámetros Algoritmo Genético

En esta pantalla podremos indicar los parámetros que queremos que tenga cada uno de los operadores del algoritmo genético, así podremos hacer tantas pruebas diferentes como deseemos variando cada vez alguno de los parámetros. Vamos a comentar el significado de los parámetros para que queden más claros:

• Nº Individuos Población Inicial: es el número de individuos de la población inicial.

• Criterio de Parada: es el tiempo, en minutos, durante el que queremos

que el algoritmo genético evolucione. • Selección: es el método de selección que queremos que el algoritmo

genético utilice. Los métodos de selección entre los que se puede elegir son: torneo a 2, ruleta, sobrante estocástico y ranking.

• Probabilidad de Cruce: es la probabilidad de que se produzca un cruce

cuando evoluciona el algoritmo genético. Si no se produce el cruce, los padres pasan tal cual a la siguiente población.

• Cruce: podemos elegir entre cruce en 1 o 2 puntos. Cuando el cruce es

en 1 punto, la primera parte de la hija pertenece a la madre y la segunda al padre y la primera parte del hijo pertenece al padre y la segunda a la madre.

• Probabilidad de Mutación: es la probabilidad de que se produzca una

mutación en los individuos de la población generada.

Page 27: aplicación de técnicas evolutivas a problemas de scheduling ...

27

Destacar que la mutación es el único parámetro que no se puede modificar, ya que siempre se producirá mutación por inserción, porque creemos que es la más apropiada para la tipología de nuestro problema. En esta pantalla también tenemos que elegir la malla previa y el conjunto de trenes a introducir. En cada horario que generamos vamos a introducir una malla previa, que es un conjunto de trenes con todos los conflictos resueltos y encima de esta malla, que es intocable, se va a programar el otro conjunto de trenes que elijamos. Este nuevo conjunto de trenes es el que tendremos que tratar para conseguir minimizar el tanto por ciento de tiempo por encima del tiempo teórico. Cuando ya hemos introducido todos los parámetros del algoritmo genético ya podemos crear el horario de los trenes, para ello pulsamos el botón Generar Conjuntos. Nos aparece la pantalla para mostrar los horarios (Imagen 3.2.6, Imagen 3.2.7).

Imagen 3.2.6 - Pantalla Mostrar Horario

Page 28: aplicación de técnicas evolutivas a problemas de scheduling ...

28

Imagen 3.2.7 - Pantalla Mostrar Gráfico

Hay que decir que en el horario se muestra el instante de llegada y de salida de cada punto de paso, mientras que en el gráfico las líneas horizontales corresponden a los puntos de paso que son estaciones. Así esta representación se aleja un poco de la realidad, pero este desvío no es demasiado importante, pues lo importante aquí es observar claramente que los trenes no se cruzan en ningún tramo entre dos estaciones. Esta pantalla permite mostrar las soluciones de la generación actual, tanto el horario como el gráfico. Además esta pantalla también permite evolucionar manualmente a la siguiente generación, pulsando el botón Siguiente Generación y en cualquier momento podemos volver a la pantalla de datos de la vía férrea (Imagen 3.2.4) mediante el botón Volver a Datos. En la esquina superior derecha se indica la generación en que nos encontramos, en la esquina superior izquierda se puede elegir la solución de la generación actual que se quiere mostrar y si deseamos ver el horario o el gráfico, y en el centro se muestra el tanto por cien de tiempo sobre teórico de la solución seleccionada y el tanto por cien mínimo de la generación actual. Hasta aquí hemos explicado como funciona la parte visual de la aplicación, a continuación vamos a comentar algunos aspectos interesantes sobre como se ha implementado la funcionalidad de la aplicación.

Page 29: aplicación de técnicas evolutivas a problemas de scheduling ...

29

1. Generar conjuntos Para todos los conjuntos - Asignar número de trenes aleatorio al conjunto entre número de trenes mínimo y máximo Para todos los trenes del conjunto - Asignar sentido aleatorio al tren (ida=0=down, vuelta=1=up) - Asignar una estación de origen aleatoria entre las estaciones de la vía férrea - Asignar una estación de destino aleatoria entre las estaciones de la vía férrea - Asignar una hora de salida aleatoria entre la hora de salida mínima y máxima Para cada punto de paso entre la estación origen y destino - Asignar el tiempo que tarda el tren en ir desde el punto de paso actual al siguiente, de forma aleatoria entre el tiempo asignado mínimo y el máximo Fin Para - Calcular el número de estaciones con parada que habrán en este tramo teniendo en cuenta el % de estaciones con parada comercial Hasta que se complete el número de estaciones con parada - Elegir una estación aleatoriamente entre las estaciones del tramo que no haya sido elegida antes - Asignarle a dicha estación un tiempo de parada comercial aleatorio entre tiempo de parada comercial mínimo y máximo Fin Hasta Fin Para Fin Para 2. Generar mallas previas Para todos los conjuntos 2.1 - Inicializar vector horaMin 2.2 - Hacer una copia del vector horaMin Se hace una copia del vector generado, porque nos será muy útil para calcular el tiempo real que ha tardado cada tren en realizar su recorrido, ya que simplemente habrá que restar el anterior vector a éste, componente a componente. 2.3 - Generar Trenes-Tramo 2.4 - Generar Lista Tren-Tramo Para todos los Tren-Tramo 2.5 - Programar Tramo Fin Para Fin Para 2.1. Inicializar vector horaMin

Page 30: aplicación de técnicas evolutivas a problemas de scheduling ...

30

Se inicializa un vector, cuyo número de componentes corresponde al número de trenes, con el instante de tiempo mínimo en el que puede salir cada tren. Este vector se irá actualizando conteniendo en todo momento el instante de tiempo mínimo en el que cada tren puede efectuar su salida de la estación en la que se encuentre. 2.2. Hacer una copia del vector horaMin Se hace una copia del vector horaMin, que llamamos horaMin2, porque nos será muy útil para calcular el tiempo real que ha tardado cada tren en realizar su recorrido, ya que simplemente habrá que restar componente a componente el vector horaMin al vector horaMin2. Esto es posible a que horaMin2 contiene el instante de salida inicial de cada tren y horaMin contiene el instante de tiempo mínimo en el que cada tren estaría listo para salir desde la estación actual, cuando el tren ha recorrido todas las estaciones en el vector horaMin queda el instante de tiempo en el que el tren ha finalizado su recorrido, ya que no le quedan más estaciones por recorrer. 2.3. Generar Trenes-Tramo (Imagen 3.2.8)

Para todos los trenes del conjunto Para todos los tramos del tren - Se completa una lista con: · el número del tren · el número del tramo · el sentido del tren · el número de puntos de paso · cada punto de paso con la información introducida anteriormente (num_id, id_tipo, tiempo_asig y par_com) · el tiempo que tarda el tren en recorrer todo el tramo Fin Para Fin Para

Imagen 3.2.8 - Ejemplo Lista Trenes Tramos

2.4. Generar Lista Tren-Tramo (Imagen 3.2.9)

Page 31: aplicación de técnicas evolutivas a problemas de scheduling ...

31

Hasta que no queden más Tren-Tramos por introducir - Elegir un tren del conjunto aleatoriamente - Elegir un número de tramos aleatorios de los que le queden por introducir al tren elegido - Introducir los tramos elegidos en la lista Tren-Tramo Fin Hasta

Page 32: aplicación de técnicas evolutivas a problemas de scheduling ...

32

Imagen 3.2.9 - Ejemplo de como se formaría una lista aleatoria Tren-Tramo

Page 33: aplicación de técnicas evolutivas a problemas de scheduling ...

33

2.5. Programar Tramo Las soluciones se guardan en un vector, cuyo número de componentes corresponde al número de tramos que tiene la vía férrea y cada componente es una lista ordenada de menor a mayor instante de tiempo de paso por el tramo por parte de los trenes que circulan por dicho tramo. Cada una de las componentes de estas listas ordenadas contiene:

• el número del tren • el instante de tiempo mínimo en el que el tren empieza a circular por el

tramo • el instante de tiempo máximo en el que el tren abandona el tramo • el sentido en el que circula el tren (ida=0=down, vuelta=1=up) • el número de puntos de paso • cada punto de paso con su información • y un flag, para diferenciar los trenes de la maya previa elegida de los del

conjunto elegido, si el flag es 1 indica que el tren pertenece a la maya previa y si vale 2 indica que pertenece al conjunto elegido.

En este punto debemos señalar el paralelismo con la programación de proyectos con recursos limitados, puesto que cada lista ordenada es como un proyecto en el que tenemos un sólo recurso (la única vía) y que por tanto en cada instante de tiempo solo una actividad (un tren) puede hacer uso de este recurso (la vía). En cada componente de estas listas ordenadas indicamos el instante de tiempo mínimo y máximo durante el cual el tren está circulando por la vía (la actividad está haciendo uso del recurso) y que por tanto durante este periodo de tiempo ningún otro tren podrá entrar en este tramo (ninguna otra actividad podrá hacer uso del recurso). También es importante señalar que en cada tramo nos guardamos el sentido en el que circula el tren, pero que a la hora de programarlo éste no nos importa, ya que lo único que importa es el momento en el que entra el tren al tramo (mínimo) y el momento en el que lo abandona (máximo). Por último antes de pasar al pseudocódigo, decir que esta ha sido la parte más complicada de programar de toda la aplicación y a la que se ha tenido que dedicar más tiempo, pues hay muchos casos posibles y hay que tenerlos todos en cuenta y además hay que respetar las restricciones de seguridad. Por eso vamos a intentar explicar esta parte lo más fácil y comprensiblemente posible, aunque en el fondo es más difícil de programar de lo que a primera vista parece. Básicamente lo que se hace es coger el tren-tramo que toca programar y buscarle la primera posición factible de la lista ordenada del tramo correspondiente. La factibilidad se respeta si en cada instante de tiempo no hay más de un tren programado y

Page 34: aplicación de técnicas evolutivas a problemas de scheduling ...

34

se respetan las restricciones de seguridad. Explicada la idea básica, vamos a intentar ampliarla un poco más mediante el siguiente pseudocódigo. - Elegir primer tramo de la lista Tren-Tramo Si número de trenes programados en el tramo = 0 - Programar el tren en la primera posición de la lista ordenada - Actualizar el vector horaMin Sino Si número de trenes programados en el tramo = 1 Si instante máximo del tren a programar < instante mínimo del primer tren programado en el tramo - Desplazar el tren programado en primera posición a la segunda - Programar el tren actual en la primera posición - Actualizar el vector horaMin Sino - Programar el tren en la segunda posición - Actualizar el vector horaMin Fin Si Sino Si número de trenes programados en el tramo > 1 Si instante máximo del tren a programar < instante mínimo del primer tren programado en el tramo - Desplazar el tren programado en primera posición a la segunda - Programar el tren actual en la primera posición - Actualizar el vector horaMin Sino Si instante máximo del último tren programado en el tramo < instante mínimo del tren a programar - Programar el tren en la última posición + 1 - Actualizar el vector horaMin Sino - Recorrer los trenes programados hasta que se encuentre una posición factible donde programarlo - Desplazar todos los trenes programados desde la posición encontrada una posición atrás - Programar el tren en la posición encontrada - Actualizar el vector horaMin Fin Si Fin Si - Eliminar el primer componente de la lista tren-tramo, que es el que acabamos de programar

Page 35: aplicación de técnicas evolutivas a problemas de scheduling ...

35

3. Generar soluciones 3.1 - Generar población inicial Mientras no se cumpla el tiempo del criterio de parada 3.2 - Algoritmo Genético Para el número de individuos de la población inicial (*) Para todos los Tren-Tramo 2.5 - Programar Tramo Fin Para 3.3 - Calcular % sobre tiempo teórico Fin Para 3.4 - Ordenar vector Listas Fin Mientras (*) Se va a utilizar a partir de ahora mucho el nombre de la variable número de individuos de la población inicial, aunque realmente no se están tratando dichos individuos, pero como el número de individuos de todas las generaciones va a ser el mismo, utilizaremos ese nombre, ya que en la aplicación también se hace así. 3.1. Generar población inicial Para el número de individuos de la población inicial 2.3 - Generar Trenes-Tramo 2.4 - Generar Lista Tren-Tramo - Guardar la Lista Tren-Tramo en el vector Listas - Meter en la solución la malla previa elegida resuelta anteriormente Para todos los Tren-Tramo 2.5 - Programar Tramo Fin Para - Calcular el % de tiempo sobre teórico (función objetivo) y guardarlo asociado a la lista en el vector de listas Fin Para Los pasos 2.3, 2.4 y 2.5 se repiten aquí, así que no hace falta volverlos a explicar. El único que cambia un poco es el paso 2.5, porque anteriormente se estaban programando las mallas previas y ahora se programa el conjunto elegido, de todas formas los cambios son mínimos y se deben a que cambia el nombre y el valor de algunas variables, pero en el fondo el algoritmo es el mismo, que es lo que nos importa aquí para explicar el funcionamiento de la aplicación. 3.2 Algoritmo Genético 3.2.1 - Selección 3.2.2 - Cruce 3.2.3 - Mutación 3.2.1. Selección

Page 36: aplicación de técnicas evolutivas a problemas de scheduling ...

36

Hemos implementado 4 métodos de selección:

• Selección mediante torneo a 2 • Selección mediante la ruleta • Selección mediante sobrante estocástico sin reemplazo • Selección mediante ranking

3.2.1.1. Selección mediante torneo a 2 - Barajar el vector Listas - Recorrer el vector Listas 2 a 2, quedándose cada vez con la lista que menor valor tenga en la función objetivo (% tiempo sobre teórico), las listas elegidas serán las madres - Barajar el vector Listas - Recorrer el vector Listas 2 a 2, quedándose cada vez con la lista que menor valor tenga en la función objetivo (% tiempo sobre teórico), las listas elegidas serán los padres 3.2.1.2. Selección mediante la ruleta - Barajar el vector Listas (*) - Calcular la aptitud de cada lista del vector (la aptitud de cada lista se calcula como la diferencia entre la suma de todas las funciones objetivos y la función objetivo de la lista actual, se calcula de esta forma porque la mejor aptitud es la que tenga la mínima función objetivo) - Calcular el valor esperado de cada lista del vector (el valor esperado de cada lista se calcula dividiendo el valor de la función objetivo de la lista entre el resultado de dividir la suma de las aptitudes de cada lista entre el número de listas) - Calcular la suma de valores esperados T Repetir el número de veces de individuos de la población (coincide con el número de listas del vector Listas) - Generar número aleatorio r entre 0.0 y T - Ciclar a través de las listas del vector sumando los valores esperados de cada lista hasta que la suma sea mayor o igual que r - La lista que haga que esta suma exceda el límite es la seleccionada (las listas seleccionadas son los progenitores elegidos para generar la siguiente generación) Fin Repetir (*) Al principio de algunos método de selección se baraja el vector Listas, este no es un paso de los algoritmos originales, pero como nosotros en la aplicación una vez generada una generación la ordenamos en función de la función objetivo de menor a mayor, aquí barajamos el vector Listas, para que el vector no esté ordenado en los métodos que no requieren dicha ordenación.

Page 37: aplicación de técnicas evolutivas a problemas de scheduling ...

37

3.2.1.3. Selección mediante sobrante estocástico sin reemplazo - Barajar el vector Listas (*) - Calcular la aptitud de cada lista del vector - Calcular el valor esperado de cada lista del vector - El número entero de los valores esperados de cada lista son seleccionados directamente como progenitores de la siguiente generación Hasta completar el número de individuos de la población Si la parte no entera de los valores es mayor o igual que un número aleatorio entre 0 y 1 - La lista es elegida como progenitor de la siguiente generación Fin Si Fin Hasta 3.2.1.4. Selección mediante ranking El vector Listas está ordenado de menor a mayor en función de la función objetivo, la idea de este método es que las listas con mejor valor de la función objetivo tendrán una mayor probabilidad de ser elegidas, así las primeras listas del vector tienen mayor probabilidad de ser elegidas para ser los progenitores de la siguiente generación. q = 2 / número de individuos de la población inicial r = 2 * ((q - (1 / nº indv. población inicial)) / (nº indv. pobl. inicial - 1)) Para todas las listas del vector Listas (coincide con el número de individuos de la población inicial) - La probabilidad de la lista = (q - (nº lista * r)) * 100 Fin Para Hasta completar número de individuos de la población inicial (hasta completar todas las listas del vector Listas) - Generar un número aleatorio entre 0 y 99 - Ir sumando todas las probabilidades de las listas hasta que dicho valor sea mayor que el número aleatorio generado - La última lista cuya probabilidad ha hecho que la suma de probabilidades supere el valor aleatorio, es elegida como progenitor Fin Hasta 3.2.2. Cruce

Page 38: aplicación de técnicas evolutivas a problemas de scheduling ...

38

Hemos implementado 2 métodos de cruce:

• Cruce en 1 punto • Cruce en 2 puntos

El cruce no se produce siempre, el porcentaje de cruce es un dato que le indicamos al algoritmo genético. Por ejemplo, si el % de cruce es del 80%, esto significa que en un 80% de los casos se produce el cruce, generando un hijo y una hija a partir de un padre y de una madre, y en un 20% de los caso no se produce el cruce, en tal caso el padre y la madre pasan directamente a la siguiente generación. 3.2.2.1. Cruce en 1 punto (Imagen 3.2.10)

Recorrer el vector Listas e ir eligiendo secuencialmente una madre y un padre, en cada posición par hay una madre y en cada posición impar un padre. - Elegir aleatoriamente una posición de la lista Tren-Tramo 3.2.2.1.1 - Generar el hijo 3.2.2.1.2 - Generar la hija Fin Recorrer 3.2.2.1.1. Generar el hijo El hijo se guardará en la posición impar del vector Listas - Hasta la posición elegida por el punto de cruce, la lista hijo toma los Tren-Tramos de la lista padre tal cual - A partir del punto de cruce, se recorre toda la lista madre y si el Tren-Tramo aún no está en la lista hijo, se añade a ésta (de esta forma estamos creando nuevas listas, pero respetando las relaciones de precedencia entre los Tren-Tramos, asegurando que ningún tramo de ningún tren será programado hasta que no estén programados todos los tramos anteriores pertenecientes a dicho tren) 3.2.2.1.2. Generar la hija La hija se guardará en la posición par del vector Listas - Hasta la posición elegida por el punto de cruce, la lista hija toma los Tren-Tramos de la lista madre tal cual - A partir del punto de cruce, se recorre toda la lista padre y si el Tren-Tramo aún no está en la lista hija, se añade a ésta

Page 39: aplicación de técnicas evolutivas a problemas de scheduling ...

39

Imagen 3.2.10 - Ejemplo de cruce en 1 punto

3.2.2.2. Cruce en 2 puntos (Imagen 3.2.11) Recorrer el vector Listas e ir eligiendo secuencialmente una madre y un padre, en cada posición par hay una madre y en cada posición impar un padre. - Elegir aleatoriamente una posición de la lista Tren-Tramo (cruce1) - Elegir aleatoriamente otra posición de la lista Tren-Tramo (cruce2) 3.2.2.2.1 - Generar el hijo 3.2.2.2.2 - Generar la hija Fin Recorrer 3.2.2.2.1. Generar el hijo El hijo se guardará en la posición impar del vector Listas - Hasta la posición elegida por el punto de cruce1 y a partir de la posición elegida por el punto de cruce2, la lista hijo toma los Tren-Tramos de la lista padre tal cual - A partir del punto de cruce1 y hasta el punto de cruce2, se recorre toda la lista madre y si el Tren-Tramo aún no está en la lista hijo, se añade a ésta

Page 40: aplicación de técnicas evolutivas a problemas de scheduling ...

40

3.2.2.2.2. Generar la hija La hija se guardará en la posición par del vector Listas - Hasta la posición elegida por el punto de cruce1 y a partir de la posición elegida por el punto de cruce2, la lista hija toma los Tren-Tramos de la lista madre tal cual - A partir del punto de cruce1 y hasta el punto de cruce2, se recorre toda la lista padre y si el Tren-Tramo aún no está en la lista hija, se añade a ésta

Imagen 3.2.11 - Ejemplo de cruce en 2 puntos

3.2.3. Mutación Hemos implementado un único método de mutación:

• Mutación por inserción Sólo hemos implementado este método porque nos parece que era el más adecuado para la tipología de nuestro problema. La mutación se produce después del cruce, en nuestro caso se intentará mutar cada componente de cada lista del vector Listas generado, que contiene la nueva generación. La probabilidad de mutación es un dato que le aportamos al algoritmo genético. Por ejemplo, si la probabilidad de cruce es del 5%, esto significa que solo en el 5% de las veces se producirá la mutación.

Page 41: aplicación de técnicas evolutivas a problemas de scheduling ...

41

3.2.3.1. Mutación por inserción (Imagen 3.2.12)

La mutación por inserción consiste en intentar desplazar una componente de la lista Tren-Tramo hacía adelante o hacía detrás, para favorecer la variabilidad de soluciones. Para todas las listas del vector Listas Para todas las componentes de la lista - Buscar en la lista el Tren-Tramo predecesor cuyo tren coincida con el tren de la componente actual (si no tiene ningún predecesor entonces se marca la posición "-1" como la predecesora) - Buscar en la lista el Tren-Tramo sucesor cuyo tren coincida con el tren de la componente actual (si no tiene ningún sucesor entonces se marca la posición "número de Trenes-Tramos + 1" como la sucesora) - Elegir aleatoriamente una posición entre la posición de la predecesora + 1 y la posición de la sucesora - 1 - Insertar la componente actual en la posición elegida Fin Para Fin Para Recordar que la mutación sólo se produce en un tanto por ciento de las veces, o sea este código solo se ejecutará ese tanto por ciento de las veces y el resto de ocasiones la componente que se está tratando se quedará donde está.

Imagen 3.2.12 - Ejemplo de mutación por inserción

3.3. Calcular % sobre tiempo teórico La función objetivo es minimizar el % sobre el tiempo teórico y seguidamente vamos a explicar como es bastante fácil calcular este valor para cada solución. - Tiempo Real = Suma de todos los tiempos asignados y todas las paradas comerciales de cada punto de paso de todos los trayectos de todos los trenes del conjunto elegido - Tiempo Teórico = Restar componente a componente los vectores horaMin menos horaMin2 (como ya habíamos comentado anteriormente) - % tiempo sobre teórico = (Tiempo Real / Tiempo Teórico) * 100 - 100 (este valor se asocia al campo funcionObjetivo de la lista del vector Lista correspondiente)

Page 42: aplicación de técnicas evolutivas a problemas de scheduling ...

42

3.4. Ordenar vector Listas Por último, señalar que el vector Listas se ordena de menor a mayor valor del campo funcionObjetivo de las listas.

Page 43: aplicación de técnicas evolutivas a problemas de scheduling ...

43

4. Estudio comparativo con distintos parámetros del TrenAGs Hemos realizado varias pruebas cambiando los distintos parámetros del algoritmo genético de la aplicación TrenAGs. Primeramente vamos a indicar las características técnicas del ordenador en el que hemos realizado las pruebas:

• Ordenador portátil Fujitsu Siemens Computer Intel Pentium 4 CPU 2.4 GHz

• 256 MB de memoria RAM • Sistema operativo Microsoft Windows XP Home Edition Versión 2002 • Disco duro de 27.8 GB con 13.7 GB de espacio libre en disco

Seguidamente vamos a presentar el fichero con el que hemos realizado las pruebas, que ha sido el fichero ejemplo.via, este fichero contiene todas las características de cada punto de paso de la vía que hemos utilizado como ejemplo y las restricciones de seguridad de los trenes que circulan por ella. - Número de puntos de paso: 40 puntos de paso - Tiempo de recepción viajeros: 180 segundos - Tiempo de expedición viajeros: 60 segundos - Demora por parada no solicitada: 60 segundos - Número de trenes de los conjuntos: entre 20 y 60 trenes - Hora de salida de los trenes: entre 7:00:00 y 19:00:00 - Tiempo asignado para los tramos entre puntos de paso: entre 30 y 390 segundos - Porcentaje de estaciones con parada comercial: 10 % - Tiempo parada comercial: entre 60 y 120 segundos - Número de conjuntos: 5 conjuntos

Page 44: aplicación de técnicas evolutivas a problemas de scheduling ...

44

Características fijas de los puntos de paso:

orden id_dep id_tipo distancia num_vias 1 22302 E 0 1 2 22302 E 5,3 1 3 A2230 B 1,5 1 4 22300 E 4,2 1 5 23000 D 1,1 1 6 23001 D 3,1 1 7 23002 E 3,7 1 8 23003 D 5,4 1 9 23004 E 4,7 1 10 23018 D 1,9 1 11 D2301 R 7,9 1 12 23005 E 1,6 1 13 23006 E 8,6 1 14 23007 D 7,1 1 15 23008 E 4,7 1 16 23017 D 0,8 1 17 23009 E 8,6 1 18 23010 E 9,7 1 19 23011 E 1,9 1 20 23012 E 4,9 1 21 23013 E 6,4 1 22 23014 D 4,8 1 23 31400 E 5,3 1 24 31413 E 8,5 1 25 31401 E 4,9 1 26 D3142 R 2,5 1 27 31402 E 3,8 1 28 31403 D 3,9 1 29 31404 E 4,8 1 30 31405 D 5,4 1 31 31406 E 6 1 32 31407 D 4,8 1 33 B3142 B 1 1 34 31408 D 2 1 35 31409 E 4,8 1 36 31410 E 7,8 1 37 D3143 R 2,8 1 38 31411 E 3,3 1 39 B3141 B 6 1 40 31412 E 2,3 1

Page 45: aplicación de técnicas evolutivas a problemas de scheduling ...

45

Hacer pruebas con todas las combinaciones de parámetros del algoritmo genético que podemos cambiar sería imposible, sobretodo porque uno de los parámetros es el criterio de parada que se indica en minutos y por tanto podríamos hacer infinitas pruebas tan sólo cambiando este parámetro, así que hemos ido haciendo las pruebas modificando los parámetros que hemos considerado más interesantes. En concreto hemos dejado fijos para todas las pruebas la probabilidad de cruce al 80% y la probabilidad de mutación al 5%, porque consideramos que estos son unos valores apropiados para el estudio realizado. Además hemos "agrupado" los parámetros número de individuos de la población inicial y criterio de parada, concretamente con las pruebas realizadas con 20 individuos de población inicial, hemos fijado el criterio de parada en 1 minuto y cuando el número de individuos de la población inicial era 50, el criterio de parada era de 5 minutos. El resto de parámetros: método de selección y método de cruce son independientes del resto, en concreto hemos utilizado los métodos de selección mediante torneo a 2, sobrante estocástico sin reemplazo y ranking, o sea, que no hemos usado el método de la ruleta, pero éste está implementado y recordamos que se podría utilizar para realizar otras pruebas. De los métodos de cruce no hay nada que decir, pues hemos utilizado los dos métodos implementados: el método de cruce en 1 punto y el de cruce en 2 puntos. Por último decir que para las combinaciones de parámetros cuyo criterio de parada era de 1 minuto hemos realizado pruebas con los 20 escenarios que podíamos generar agrupando 2 a 2 los conjuntos donde el primer conjunto es la malla previa resuelta sin conflictos y el segundo conjunto es el resto de los conjuntos. Y cuando el criterio de parada era de 5 minutos se ha realizado pruebas con 12 de los 20 escenarios, pues para realizar las 12 pruebas se necesita al menos 1 hora de tiempo.

Page 46: aplicación de técnicas evolutivas a problemas de scheduling ...

46

A continuación vamos a mostrar los resultados obtenidos en cada una de estas pruebas: Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 20 - Criterio de parada: 1 minuto - Método de selección: selección mediante torneo a 2 - Método de cruce: 1 punto de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 61 % 0 - 2 62 % 0 - 3 62 % 0 - 4 87 % 1 - 0 73 % 1 - 2 79 % 1 - 3 86 % 1 - 4 89 % 2 - 0 45 % 2 - 1 63 % 2 - 3 76 % 2 - 4 59 % 3 - 0 81 % 3 - 1 71 % 3 - 2 93 % 3 - 4 96 % 4 - 0 68 % 4 - 1 77 % 4 - 2 56 % 4 - 3 71 %

MEDIA = 73 %

Page 47: aplicación de técnicas evolutivas a problemas de scheduling ...

47

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 20 - Criterio de parada: 1 minuto - Método de selección: selección mediante sobrante estocástico sin reemplazo - Método de cruce: 1 punto de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 66 % 0 - 2 69 % 0 - 3 71 % 0 - 4 93 % 1 - 0 81 % 1 - 2 85 % 1 - 3 88 % 1 - 4 97 % 2 - 0 48 % 2 - 1 73 % 2 - 3 83 % 2 - 4 61 % 3 - 0 87 % 3 - 1 79 % 3 - 2 96 % 3 - 4 102 % 4 - 0 71 % 4 - 1 83 % 4 - 2 60 % 4 - 3 80 %

MEDIA = 79 %

Page 48: aplicación de técnicas evolutivas a problemas de scheduling ...

48

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 20 - Criterio de parada: 1 minuto - Método de selección: selección mediante ranking - Método de cruce: 1 punto de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 64 % 0 - 2 63 % 0 - 3 66 % 0 - 4 90 % 1 - 0 76 % 1 - 2 80 % 1 - 3 86 % 1 - 4 91 % 2 - 0 45 % 2 - 1 69 % 2 - 3 77 % 2 - 4 62 % 3 - 0 82 % 3 - 1 74 % 3 - 2 93 % 3 - 4 98 % 4 - 0 69 % 4 - 1 79 % 4 - 2 54 % 4 - 3 74 %

MEDIA = 75 %

Page 49: aplicación de técnicas evolutivas a problemas de scheduling ...

49

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 20 - Criterio de parada: 1 minuto - Método de selección: selección mediante torneo a 2 - Método de cruce: 2 puntos de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 62 % 0 - 2 61 % 0 - 3 63 % 0 - 4 85 % 1 - 0 70 % 1 - 2 81 % 1 - 3 84 % 1 - 4 91 % 2 - 0 44 % 2 - 1 67 % 2 - 3 79 % 2 - 4 62 % 3 - 0 82 % 3 - 1 73 % 3 - 2 91 % 3 - 4 100 % 4 - 0 71 % 4 - 1 76 % 4 - 2 51 % 4 - 3 70 %

MEDIA = 73 %

Page 50: aplicación de técnicas evolutivas a problemas de scheduling ...

50

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 20 - Criterio de parada: 1 minuto - Método de selección: selección mediante sobrante estocástico sin reemplazo - Método de cruce: 2 puntos de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 67 % 0 - 2 68 % 0 - 3 68 % 0 - 4 92 % 1 - 0 84 % 1 - 2 84 % 1 - 3 90 % 1 - 4 95 % 2 - 0 49 % 2 - 1 73 % 2 - 3 79 % 2 - 4 64 % 3 - 0 89 % 3 - 1 83 % 3 - 2 104 % 3 - 4 103 % 4 - 0 69 % 4 - 1 84 % 4 - 2 60 % 4 - 3 72 %

MEDIA = 79 %

Page 51: aplicación de técnicas evolutivas a problemas de scheduling ...

51

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 20 - Criterio de parada: 1 minuto - Método de selección: selección mediante ranking - Método de cruce: 2 puntos de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 62 % 0 - 2 62 % 0 - 3 67 % 0 - 4 89 % 1 - 0 77 % 1 - 2 78 % 1 - 3 86 % 1 - 4 97 % 2 - 0 47 % 2 - 1 69 % 2 - 3 78 % 2 - 4 62 % 3 - 0 83 % 3 - 1 72 % 3 - 2 92 % 3 - 4 101 % 4 - 0 69 % 4 - 1 80 % 4 - 2 55 % 4 - 3 76 %

MEDIA = 75 %

Page 52: aplicación de técnicas evolutivas a problemas de scheduling ...

52

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 50 - Criterio de parada: 5 minutos - Método de selección: selección mediante torneo a 2 - Método de cruce: 1 punto de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 62 % 0 - 2 60 % 0 - 3 57 % 0 - 4 86 % 2 - 0 43 % 2 - 1 63 % 2 - 3 74 % 2 - 4 60 % 4 - 0 68 % 4 - 1 73 % 4 - 2 56 % 4 - 3 67 %

MEDIA = 64 %

Page 53: aplicación de técnicas evolutivas a problemas de scheduling ...

53

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 50 - Criterio de parada: 5 minutos - Método de selección: selección mediante sobrante estocástico sin reemplazo - Método de cruce: 1 punto de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 66 % 0 - 2 65 % 0 - 3 65 % 0 - 4 91 % 2 - 0 46 % 2 - 1 67 % 2 - 3 76 % 2 - 4 63 % 4 - 0 71 % 4 - 1 83 % 4 - 2 59 % 4 - 3 73 %

MEDIA = 69 %

Page 54: aplicación de técnicas evolutivas a problemas de scheduling ...

54

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 50 - Criterio de parada: 5 minutos - Método de selección: selección mediante ranking - Método de cruce: 1 punto de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 62 % 0 - 2 61 % 0 - 3 62 % 0 - 4 86 % 2 - 0 46 % 2 - 1 62 % 2 - 3 76 % 2 - 4 59 % 4 - 0 67 % 4 - 1 75 % 4 - 2 54 % 4 - 3 65 %

MEDIA = 65 %

Page 55: aplicación de técnicas evolutivas a problemas de scheduling ...

55

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 50 - Criterio de parada: 5 minutos - Método de selección: selección mediante torneo a 2 - Método de cruce: 2 puntos de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 59 % 0 - 2 60 % 0 - 3 59 % 0 - 4 86 % 2 - 0 44 % 2 - 1 60 % 2 - 3 74 % 2 - 4 59 % 4 - 0 68 % 4 - 1 78 % 4 - 2 52 % 4 - 3 66 %

MEDIA = 64 %

Page 56: aplicación de técnicas evolutivas a problemas de scheduling ...

56

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 50 - Criterio de parada: 5 minutos - Método de selección: selección mediante sobrante estocástico sin reemplazo - Método de cruce: 2 puntos de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 68 % 0 - 2 66 % 0 - 3 65 % 0 - 4 91 % 2 - 0 48 % 2 - 1 67 % 2 - 3 79 % 2 - 4 67 % 4 - 0 70 % 4 - 1 81 % 4 - 2 59 % 4 - 3 77 %

MEDIA = 70 %

Page 57: aplicación de técnicas evolutivas a problemas de scheduling ...

57

Parámetros del Algoritmo Genético - Número de individuos de la población inicial: 50 - Criterio de parada: 5 minutos - Método de selección: selección mediante ranking - Método de cruce: 2 puntos de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5%

Malla Previa - Conjunto % Tiempo sobre Teórico 0 - 1 63 % 0 - 2 61 % 0 - 3 61 % 0 - 4 86 % 2 - 0 43 % 2 - 1 65 % 2 - 3 79 % 2 - 4 59 % 4 - 0 67 % 4 - 1 78 % 4 - 2 53 % 4 - 3 67 %

MEDIA = 65 %

Page 58: aplicación de técnicas evolutivas a problemas de scheduling ...

58

5. Conclusiones del estudio A la vista de estos primeros resultados podemos decir que los parámetros del algoritmo genético que mejores resultados han dado han sido: - Número de individuos de la población inicial: 50 - Criterio de parada: 5 minutos - Método de selección: selección mediante torneo a 2 - Método de cruce: 1 punto de cruce y 2 puntos de cruce - Probabilidad de cruce: 80% - Probabilidad de mutación: 5% ya que los dos conjuntos de pruebas han dado un 64% de media en el porcentaje de tiempo sobre teórico. Ahora vamos a agrupar las pruebas por diferencia de parámetros, para ver si podemos obtener más conclusiones.

Page 59: aplicación de técnicas evolutivas a problemas de scheduling ...

59

Métodos de Selección: Torneo a 2 vs. Sobrante Estocástico vs. Ranking

Torneo a 2 Sobrante Estocástico Ranking 61 % 66 % 64 % 62 % 69 % 63 % 62 % 71 % 66 % 87 % 93 % 90 % 73 % 81 % 76 % 79 % 85 % 80 % 86 % 88 % 86 % 89 % 97 % 91 % 45 % 48 % 45 % 63 % 73 % 69 % 76 % 83 % 77 % 59 % 61 % 62 % 81 % 87 % 82 % 71 % 79 % 74 % 93 % 96 % 93 % 96 % 102 % 98 % 68 % 71 % 69 % 77 % 83 % 79 % 56 % 60 % 54 % 71 % 80 % 74 % 62 % 67 % 62 % 61 % 68 % 62 % 63 % 68 % 67 % 85 % 92 % 89 % 70 % 84 % 77 % 81 % 84 % 78 % 84 % 90 % 86 % 91 % 95 % 97 % 44 % 49 % 47 % 67 % 73 % 69 % 79 % 79 % 78 % 62 % 64 % 62 % 82 % 89 % 83 % 73 % 83 % 72 % 91 % 104 % 92 % 100 % 103 % 101 % 71 % 69 % 69 % 76 % 84 % 80 % 51 % 60 % 55 % 70 % 72 % 76 % 62 % 66 % 62 % 60 % 65 % 61 % 57 % 65 % 62 % 86 % 91 % 86 % 43 % 46 % 46 %

Page 60: aplicación de técnicas evolutivas a problemas de scheduling ...

60

63 % 67 % 62 % 74 % 76 % 76 % 60 % 63 % 59 % 68 % 71 % 67 % 73 % 83 % 75 % 56 % 59 % 54 % 67 % 73 % 65 % 59 % 68 % 63 % 60 % 66 % 61 % 59 % 65 % 61 % 86 % 91 % 86 % 44 % 48 % 43 % 60 % 67 % 65 % 74 % 79 % 79 % 59 % 67 % 59 % 68 % 70 % 67 % 78 % 81 % 78 % 52 % 59 % 53 % 66 % 77 % 67 %

MEDIA TORNEO A 2 = 70% MEDIA SOBRANTE ESTOCÁCTICO = 75% MEDIA RANKING = 71% En cada fila se muestran los resultados obtenidos al realizar tres pruebas con los mismos parámetros, sólo difieren en el método de selección utilizado, en la primera columna se ha utilizado el método de selección mediante torneo a 2, en la segunda columna el método de selección mediante sobrante estocástico sin reemplazo y en la tercera columna el método de ranking. Observando la tabla vemos que los mejores resultados se obtienen con el método de torneo a 2, con poca diferencia respecto al método de ranking y los peores resultados se obtienen con el método del sobrante estocástico sin reemplazo. Además hemos calculado las medias de los resultados y confirmamos numéricamente lo observado.

Page 61: aplicación de técnicas evolutivas a problemas de scheduling ...

61

Métodos de Cruce: 1 punto de cruce vs. 2 puntos de cruce

1 punto de cruce 2 puntos de cruce 66% 62% 69% 61% 71% 63% 93% 85% 81% 70% 85% 81% 88% 84% 97% 91% 48% 44% 73% 67% 83% 79% 61% 62% 87% 82% 79% 73% 96% 91% 102% 100% 71% 71% 83% 76% 60% 51% 80% 70% 64% 67% 63% 68% 66% 68% 90% 92% 76% 84% 80% 84% 86% 90% 91% 95% 45% 49% 69% 73% 77% 79% 62% 64% 82% 89% 74% 83% 93% 104% 98% 103% 69% 69% 79% 84% 54% 60% 74% 72% 62% 62% 60% 62% 57% 67% 86% 89% 43% 77%

Page 62: aplicación de técnicas evolutivas a problemas de scheduling ...

62

63% 78% 74% 86% 60% 97% 68% 47% 73% 69% 56% 78% 67% 62% 66% 83% 65% 72% 65% 92% 91% 101% 46% 69% 67% 80% 76% 55% 63% 76% 71% 59% 83% 60% 59% 59% 73% 86% 62% 44% 61% 60% 62% 74% 86% 59% 46% 68% 62% 78% 76% 52% 59% 66% 67% 68% 75% 66% 54% 65% 65% 91% 66% 48% 69% 67% 71% 79% 93% 67% 81% 70% 85% 81% 88% 59% 97% 77% 48% 63% 73% 61% 83% 61% 61% 86% 87% 43% 79% 65% 96% 79% 102% 59% 71% 67%

Page 63: aplicación de técnicas evolutivas a problemas de scheduling ...

63

83% 78% 60% 53%

MEDIA 1 PUNTO DE CRUCE = 72% MEDIA 2 PUNTOS DE CRUCE = 72% En cada fila se muestran los resultados obtenidos al realizar dos pruebas con los mismos parámetros, sólo difieren en el método de cruce utilizado, en la primera columna se ha utilizado el método de cruce en 1 punto y en la segunda columna el método de cruce en 2 puntos. Observando la tabla vemos que los resultados en ambos casos son muy parecidos, y que por tanto en este problema no podemos asegurar que un método sea mejor que el otro. Además hemos calculado las medias de los resultados y confirmamos numéricamente lo observado.

Page 64: aplicación de técnicas evolutivas a problemas de scheduling ...

64

Número de Individuos de la Población Inicial y Criterio de Parada: 20 individuos y 1 minuto vs. 50 individuos y 5 minutos

20 individuos y 1 minuto 50 individuos y 5 minutos 61% 62% 62% 60% 62% 57% 87% 86% 45% 43% 63% 63% 76% 74% 59% 60% 68% 68% 77% 73% 56% 56% 71% 67% 66% 66% 69% 65% 71% 65% 93% 91% 48% 46% 73% 67% 83% 76% 61% 63% 71% 71% 83% 83% 60% 59% 80% 73% 64% 62% 63% 61% 66% 62% 90% 86% 45% 46% 69% 62% 77% 76% 62% 59% 69% 67% 79% 75% 54% 54% 74% 65% 62% 59% 61% 60% 63% 59% 85% 86% 44% 44% 67% 60% 79% 74% 62% 59%

Page 65: aplicación de técnicas evolutivas a problemas de scheduling ...

65

71% 68% 76% 78% 51% 52% 70% 66% 67% 68% 68% 66% 68% 65% 92% 91% 49% 48% 73% 67% 79% 79% 64% 67% 69% 70% 84% 81% 60% 59% 72% 77% 62% 63% 62% 61% 67% 61% 89% 86% 47% 43% 69% 65% 78% 79% 62% 59% 69% 67% 80% 78% 55% 53% 76% 67%

MEDIA 20 INDIVIDUOS y 1 MINUTO = 68% MEDIA 50 INDIVIDUOS y 5 MINUTOS = 66% En cada fila se muestran los resultados obtenidos al realizar dos pruebas con los mismos parámetros, sólo difieren en el número de individuos de la población inicial y en el tiempo del criterio de parada, en la primera columna se ha utilizado 20 individuos en la población inicial y un criterio de parada de 1 minuto y en la segunda columna se ha utilizado 50 individuos de población inicial y un criterio de parada de 5 minutos. Observando la tabla vemos que se obtiene resultados un poco mejores cuando se toman 50 individuos de población inicial y 5 minutos como criterio de parada. Además hemos calculado las medias de los resultados y confirmamos numéricamente lo observado.

Page 66: aplicación de técnicas evolutivas a problemas de scheduling ...

66

Resumiendo las conclusiones de nuestro estudio para nuestro problema podemos decir que:

• El mejor método de selección es el método de selección mediante torneo a 2

• Los dos métodos de cruce implementados ofrecen similares resultados y

por tanto son ambos igual de buenos • Y la mejor elección para el número de individuos de la población inicial

es 50 individuos, con un criterio de parada de 5 minutos

Page 67: aplicación de técnicas evolutivas a problemas de scheduling ...

67

6. Bibliografía [1] P. Brucker, S. Heitmann y J. Hurink, Scheduling of Trains on a Single-Track Railway-Line. [2] F. Barber, M.A. Salido, L. Ingolotti, M. Abril, A. Lova y P. Tormos, An Interactive Train Scheduling Tool for Solving and Plotting Running Maps. [3] L. Ping, J. Limin y K. Xiong, Study on GA-based Train Dispatching. [4] A. Higgins, E. Kozan y L. Ferreira, Optimal Scheduling of Trains on a Single Line Track, 1994. [5] A. Higgins, E. Kozan y L. Ferreira, Heuristic Techniques for Single Line Train Scheduling, 1997. [6] E. Silva y B.M. Smith, A Job-Shop Scheduling Model for the Single-Track Railway Scheduling Problem, 2000. [7] E. Silva, Solving Single-Track Railway Scheduling Problem Using Constraint Programming, 2001. [8] J.J. Merelo, Informática Evolutiva. [9] C.A. Coello, Introducción a la Computación Evolutiva, 2003. [10] P. Tormos y A.Lova, Apuntes de la Asignatura Gestión de Proyectos Informáticos. Facultad de Informática. Universidad Politécnica de Valencia. Curso 2003-04. [11] J. Alcaraz y C. Maroto, A Robust Algorithm for Resource Allocation in Project Scheduling, 2001. [12] J. García, J.I. Rodríguez y A. Brazález, Aprenda Visual Basic 6.0 como si estuviera en primero, 1999.