Documentos de Académico
Documentos de Profesional
Documentos de Cultura
APLICACIN DE
TCNICAS EVOLUTIVAS
A PROBLEMAS DE
SCHEDULING FERROVIARIO
3. Aplicaciones implementadas
3.1. Trenes
3.2. TrenAGs
6. Bibliografa
3
1. Introduccin a los problemas de transporte ferroviario
Una de las tareas ms complicadas que las compaas de ferrocarriles afrontan
es la construccin de horarios para el trfico ferroviario. Hasta hace poco estas tareas se
realizaban mayormente a mano. Durante los ltimos aos los ordenadores han sido
equipados para realizar el proceso de construccin de los horarios usando bases de datos
apropiadas y sistemas grficos interactivos. [1]
4
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 diseado
para optimizar horarios de trenes que circulan por vas de una sola lnea. 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 planificacin para evaluar el impacto de los cambios en el horario. El
modelo matemtico de programacin es solo para horarios de trenes que circulan por
vas de una sola lnea. La prioridad de cada tren en conflicto depende de una estimacin
del resto de cruces y del retraso acumulado, as como el retraso actual. Esta prioridad se
usa en un procedimiento de ramificacin y poda para proporcionar una solucin ptima
y razonable al tamao del problema. En otro de sus trabajos: Heuristic Techniques for
Single Line Train Scheduling [5] aplican una bsqueda local heurstica con una
estructura mejorada por vecinos, algoritmos genticos, bsqueda tab y dos algoritmos
hbridos. Cuando las constantes no temporales son incluidas en el tiempo de la solucin,
los algoritmos gentico e hbridos estn a menos del cinco por ciento de la solucin
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 lnea frrea se puede considerar como un problema
de programacin de proyectos con recursos limitados, donde cada tramo entre dos
puntos de la va es una actividad que hay que realizar y en cada tramo solo se dispone
de un recurso, que es la nica va que existe. Luego los conflictos se producen cuando
dos trenes intentan ocupar el mismo tramo de va.
5
2. Introduccin a los algoritmos genticos
A continuacin vamos a realizar una breve introduccin a los algoritmos
genticos, para ms informacin sobre los algoritmos genticos se puede recurrir a la
bibliografa [8] y [9].
6
Para poder aplicar el algoritmo gentico se requiere de los 5 componentes
bsicos siguientes:
7
Imagen 2.2 - Cruce
Hay distintos mtodos para cada uno de los operadores y dependiendo del
problema que estemos tratando se podrn aplicar unos y no otros, y tambin habrn
algunos que funcionen mejor y otros peor, pero como ya hemos dicho, eso depender de
cada problema.
8
3. Aplicaciones implementadas
En un principio nuestra idea era realizar una nica aplicacin y empezamos
implementando la aplicacin que llamamos Trenes, cuando esta estaba prcticamente
terminada, nos dimos cuenta que no mejoraba demasiado los resultados y se nos ocurri
desarrollar otra aplicacin quizs ms interesante y ms potente que la anterior. Esta
nueva aplicacin la llamamos TrenAGs.
9
3.1. Trenes
La primera pantalla que nos aparece cuando ejecutamos la aplicacin Trenes
nos permite elegir entre: abrir un trayecto existente o crear un nuevo
(Imagen 3.1.1)
trayecto.
En esta pantalla ya nos aparecen algunos datos por defecto, pero lo que si que
tendremos que introducir desde el principio son las caractersticas de los puntos de paso
que componen el trayecto.
un identificador (id_dep)
10
el nmero de vas que hay en el tramo que va desde el punto de paso
actual al siguiente (num_vias) (en el problema que nos ocupa, el nmero
de vas va a ser siempre uno)
Una vez elegido el fichero nos aparece la misma pantalla que cuando elegimos la
opcin 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).
11
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 caractersticas.
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.
12
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.
Una vez realizados todos los cambios deseados, se puede guardar el nuevo
trayecto eligiendo la opcin guardar, entonces aparece el cuadro de dilogo estndar de
Windows para guardar ficheros (Imagen 3.1.5) y as fcilmente podremos elegir donde
guardar el fichero con la informacin del trayecto actual.
13
Imagen 3.1.5 - Guardar Trayecto
Cuando ya hemos introducido todos los datos del trayecto, ya se puede elegir la
opcin para generar el horario de los trenes. Al pulsar el botn se abre la pantalla que
muestra el horario generado con los datos del trayecto introducidos (Imagen 3.1.6, Imagen
3.1.7).
14
Imagen 3.1.6 - Pantalla Mostrar Horario
15
En esta pantalla podemos visualizar todas las soluciones de la generacin actual,
permitindonos ver el horario o el grfico. Adems siempre podemos volver a la
pantalla de datos (Imagen 3.1.4), por si queremos cambiar algo, pulsando el botn Volver
a Datos y podemos evolucionar a la siguiente generacin de individuos mediante el
botn Evolucin.
16
Imagen 3.1.8 - Generar aleatoriamente uno de los sentidos
17
1.2.1. Programar el tramo
Si el tren actual se cruza con alguno del otro sentido en el tramo actual
- Nueva Hora salida estacin = Hora fin tramo del tren del otro sentido +
Intervalo de tiempo de seguridad
Sino
- Tramo correcto
Fin Si
2. Evolucin
- Elegir aleatoriamente un punto de cruce que coincida con una estacin real
- La solucin hijo toma del padre hasta el punto de cruce y de la madre el resto
- La solucin 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
18
2.1.1. Resolver parte de arriba (Imagen 3.1.10)
NOTA: estas imgenes no son reales, slo son ejemplos para que quede claro lo
que hace la aplicacin para resolver los conflictos que se encuentra. Por tanto, aunque
en las imgenes las lneas de los trenes estn muy juntas y no cumpliran las
restricciones de seguridad, vamos a suponer que las cumple.
19
2.1.2. Resolver parte de abajo (Imagen 3.1.11)
20
2.2. 2 puntos de cruce
- Elegir aleatoriamente dos puntos de cruce que coincidan con estaciones reales
- La solucin hijo toma del padre hasta el punto de cruce1 y a partir del cruce2 y
de la madre el resto
- La solucin 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.
21
3.2. TrenAGs
La primera pantalla que nos aparece cuando ejecutamos la aplicacin TrenAGs
(Imagen 3.2.1) nos permite elegir entre: abrir una va frrea existente o crear una nueva va
frrea.
En esta pantalla ya nos aparecen algunos datos por defecto, pero lo que si que
tendremos que introducir desde el principio son las caractersticas de los puntos de paso
que componen el trayecto.
un identificador (id_dep)
22
el nmero de vas que hay en el tramo que va desde el punto de paso
actual al siguiente (num_vias) (en el problema que nos ocupa, el nmero
de vas va a ser siempre uno)
Una vez elegido el fichero nos aparece la misma pantalla que cuando elegimos la
opcin crear una nueva va frrea, pero esta vez en la pantalla aparecen todos los datos
de la va frrea que estaban guardados en el fichero que abrimos (Imagen 3.2.4).
23
Imagen 3.2.4 - Pantalla Datos Va Frrea Existente
Esta pantalla nos permite cambiar los datos que deseemos y crear o borrar
puntos de paso del trayecto o modificar sus caractersticas.
24
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 mnimo y mximo.
Una vez realizados todos los cambios deseados, se puede guardar la nueva va
frrea eligiendo la opcin guardar, entonces aparece el cuadro de dilogo estndar de
Windows para guardar ficheros (Imagen 3.2.5) y as fcilmente podremos elegir donde
guardar el fichero con la informacin de la va frrea actual.
25
Imagen 3.2.6 - Parmetros Algoritmo Gentico
En esta pantalla podremos indicar los parmetros que queremos que tenga cada
uno de los operadores del algoritmo gentico, as podremos hacer tantas pruebas
diferentes como deseemos variando cada vez alguno de los parmetros.
26
Destacar que la mutacin es el nico parmetro que no se puede modificar, ya
que siempre se producir mutacin por insercin, porque creemos que es la ms
apropiada para la tipologa de nuestro problema.
27
Imagen 3.2.7 - Pantalla Mostrar Grfico
28
1. Generar conjuntos
29
Se inicializa un vector, cuyo nmero de componentes corresponde al nmero de
trenes, con el instante de tiempo mnimo en el que puede salir cada tren. Este vector se
ir actualizando conteniendo en todo momento el instante de tiempo mnimo en el que
cada tren puede efectuar su salida de la estacin en la que se encuentre.
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 mnimo en el que cada tren estara
listo para salir desde la estacin 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 ms estaciones por recorrer.
30
Hasta que no queden ms Tren-Tramos por introducir
- Elegir un tren del conjunto aleatoriamente
- Elegir un nmero de tramos aleatorios de los que le queden por
introducir al tren elegido
- Introducir los tramos elegidos en la lista Tren-Tramo
Fin Hasta
31
Imagen 3.2.9 - Ejemplo de como se formara una lista aleatoria Tren-Tramo
32
2.5. Programar Tramo
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.
Por ltimo antes de pasar al pseudocdigo, decir que esta ha sido la parte ms
complicada de programar de toda la aplicacin y a la que se ha tenido que dedicar ms
tiempo, pues hay muchos casos posibles y hay que tenerlos todos en cuenta y adems
hay que respetar las restricciones de seguridad. Por eso vamos a intentar explicar esta
parte lo ms fcil y comprensiblemente posible, aunque en el fondo es ms difcil de
programar de lo que a primera vista parece.
33
se respetan las restricciones de seguridad. Explicada la idea bsica, vamos a intentar
ampliarla un poco ms mediante el siguiente pseudocdigo.
34
3. Generar soluciones
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 mnimos 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 aplicacin.
3.2.1 - Seleccin
3.2.2 - Cruce
3.2.3 - Mutacin
3.2.1. Seleccin
35
Hemos implementado 4 mtodos de seleccin:
36
3.2.1.3. Seleccin mediante sobrante estocstico sin reemplazo
3.2.2. Cruce
37
Hemos implementado 2 mtodos de cruce:
Cruce en 1 punto
Cruce en 2 puntos
- Hasta la posicin 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
an no est en la lista hijo, se aade a sta (de esta forma estamos creando nuevas listas,
pero respetando las relaciones de precedencia entre los Tren-Tramos, asegurando que
ningn tramo de ningn tren ser programado hasta que no estn programados todos los
tramos anteriores pertenecientes a dicho tren)
- Hasta la posicin 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
an no est en la lista hija, se aade a sta
38
Imagen 3.2.10 - Ejemplo de cruce en 1 punto
39
3.2.2.2.2. Generar la hija
3.2.3. Mutacin
Slo hemos implementado este mtodo porque nos parece que era el ms
adecuado para la tipologa de nuestro problema.
40
3.2.3.1. Mutacin por insercin (Imagen 3.2.12)
Recordar que la mutacin slo se produce en un tanto por ciento de las veces, o
sea este cdigo 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.
- 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 Terico = Restar componente a componente los vectores horaMin
menos horaMin2 (como ya habamos comentado anteriormente)
- % tiempo sobre terico = (Tiempo Real / Tiempo Terico) * 100 - 100 (este
valor se asocia al campo funcionObjetivo de la lista del vector Lista correspondiente)
41
3.4. Ordenar vector Listas
Por ltimo, sealar que el vector Listas se ordena de menor a mayor valor del
campo funcionObjetivo de las listas.
42
4. Estudio comparativo con distintos parmetros del TrenAGs
Hemos realizado varias pruebas cambiando los distintos parmetros del
algoritmo gentico de la aplicacin TrenAGs.
43
Caractersticas fijas de los puntos de paso:
44
Hacer pruebas con todas las combinaciones de parmetros del algoritmo
gentico que podemos cambiar sera imposible, sobretodo porque uno de los parmetros
es el criterio de parada que se indica en minutos y por tanto podramos hacer infinitas
pruebas tan slo cambiando este parmetro, as que hemos ido haciendo las pruebas
modificando los parmetros que hemos considerado ms interesantes.
En concreto hemos dejado fijos para todas las pruebas la probabilidad de cruce
al 80% y la probabilidad de mutacin al 5%, porque consideramos que estos son unos
valores apropiados para el estudio realizado.
Por ltimo decir que para las combinaciones de parmetros cuyo criterio de
parada era de 1 minuto hemos realizado pruebas con los 20 escenarios que podamos
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.
45
A continuacin vamos a mostrar los resultados obtenidos en cada una de estas
pruebas:
MEDIA = 73 %
46
Parmetros del Algoritmo Gentico
MEDIA = 79 %
47
Parmetros del Algoritmo Gentico
MEDIA = 75 %
48
Parmetros del Algoritmo Gentico
MEDIA = 73 %
49
Parmetros del Algoritmo Gentico
MEDIA = 79 %
50
Parmetros del Algoritmo Gentico
MEDIA = 75 %
51
Parmetros del Algoritmo Gentico
MEDIA = 64 %
52
Parmetros del Algoritmo Gentico
MEDIA = 69 %
53
Parmetros del Algoritmo Gentico
MEDIA = 65 %
54
Parmetros del Algoritmo Gentico
MEDIA = 64 %
55
Parmetros del Algoritmo Gentico
MEDIA = 70 %
56
Parmetros del Algoritmo Gentico
MEDIA = 65 %
57
5. Conclusiones del estudio
A la vista de estos primeros resultados podemos decir que los parmetros del
algoritmo gentico que mejores resultados han dado han sido:
ya que los dos conjuntos de pruebas han dado un 64% de media en el porcentaje
de tiempo sobre terico.
Ahora vamos a agrupar las pruebas por diferencia de parmetros, para ver si
podemos obtener ms conclusiones.
58
Mtodos de Seleccin: Torneo a 2 vs. Sobrante Estocstico vs. Ranking
59
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 %
En cada fila se muestran los resultados obtenidos al realizar tres pruebas con los
mismos parmetros, slo difieren en el mtodo de seleccin utilizado, en la primera
columna se ha utilizado el mtodo de seleccin mediante torneo a 2, en la segunda
columna el mtodo de seleccin mediante sobrante estocstico sin reemplazo y en la
tercera columna el mtodo de ranking.
Observando la tabla vemos que los mejores resultados se obtienen con el mtodo
de torneo a 2, con poca diferencia respecto al mtodo de ranking y los peores resultados
se obtienen con el mtodo del sobrante estocstico sin reemplazo. Adems hemos
calculado las medias de los resultados y confirmamos numricamente lo observado.
60
Mtodos de Cruce: 1 punto de cruce vs. 2 puntos de cruce
61
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%
62
83% 78%
60% 53%
En cada fila se muestran los resultados obtenidos al realizar dos pruebas con los
mismos parmetros, slo difieren en el mtodo de cruce utilizado, en la primera
columna se ha utilizado el mtodo de cruce en 1 punto y en la segunda columna el
mtodo 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 mtodo sea
mejor que el otro. Adems hemos calculado las medias de los resultados y confirmamos
numricamente lo observado.
63
Nmero de Individuos de la Poblacin Inicial y Criterio de Parada: 20 individuos y 1
minuto vs. 50 individuos y 5 minutos
64
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%
En cada fila se muestran los resultados obtenidos al realizar dos pruebas con los
mismos parmetros, slo difieren en el nmero de individuos de la poblacin inicial y
en el tiempo del criterio de parada, en la primera columna se ha utilizado 20 individuos
en la poblacin inicial y un criterio de parada de 1 minuto y en la segunda columna se
ha utilizado 50 individuos de poblacin inicial y un criterio de parada de 5 minutos.
65
Resumiendo las conclusiones de nuestro estudio para nuestro problema podemos
decir que:
66
6. Bibliografa
[1] P. Brucker, S. Heitmann y J. Hurink, Scheduling of Trains on a Single-Track
Railway-Line.
[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.
[12] J. Garca, J.I. Rodrguez y A. Brazlez, Aprenda Visual Basic 6.0 como si estuviera
en primero, 1999.
67