Está en la página 1de 67

PFC: II - DEIO - B - 01/03 15 crditos

APLICACIN DE
TCNICAS EVOLUTIVAS
A PROBLEMAS DE
SCHEDULING FERROVIARIO

Bella Sanjun, Antonio

Valencia, septiembre 2004


2
INDICE

1. Introduccin a los problemas de transporte ferroviario

2. Introduccin a los algoritmos genticos

3. Aplicaciones implementadas

3.1. Trenes

3.2. TrenAGs

4. Estudio comparativo con distintos parmetros del TrenAGs

5. Conclusiones del estudio

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]

Lo ideal sera construir un sistema capaz de crear automticamente el horario de


cualquier lnea 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 construccin de una herramienta general, la mayora de los trabajos se
centran en buscar soluciones especficas para lneas concretas que presentan una
tipologa determinada.

A continuacin vamos a comentar brevemente algunos de los trabajos


encontrados sobre scheduling ferroviario, para poder hacernos una idea de los caminos
que se estn 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 lnea, donde todos los trenes
circulan en la misma direccin. Los trenes pueden pasar a travs de varios puntos de
paso, caracterizados por un nmero fijo, pero arbitrario de caminos. Su objetivo es
determinar un horario en el que la capacidad de las vas y las condiciones de seguridad
sean respetadas, y alguna funcin 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 colaboracin con la Red Nacional de Ferrocarriles Espaoles
(RENFE). Esta herramienta transforma problemas de lneas ferroviarias en modelos
matemticos formales que pueden ser resueltos y entonces dibujar la mejor solucin
posible. Dada la complejidad de esta clase de problemas, el uso de fases de preproceso y
heursticos 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 gentico para generar horarios en lneas 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
simulacin en la lnea frrea de alta velocidad de Guangzhou a Shenzhen.

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.

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
lneas de una nica va para ambos sentidos es un problema NP completo y que por
tanto para abordarlo se descarta el uso del mtodo exhaustivo de bsqueda de la mejor
solucin por todo el espacio de bsqueda y es necesario el uso de tcnicas heursticas
para una solucin que se aproxime lo mximo a la ptima en un tiempo razonable, y que
en el mejor de los casos puede llegar a ser la ptima. La segunda conclusin es que el
problema de generar horarios para trenes que circulan por lneas de una nica va para
ambos sentidos se puede modelar como un problema de programacin de proyectos con
recursos limitados.

Obtenidas estas conclusiones nos planteamos el objetivo de implementar una


herramienta para generar horarios para trenes que circulan por lneas de una nica va
para ambos sentidos y para ello vamos a utilizar la metodologa de los algoritmos
genticos y la programacin de proyectos con recursos limitados.

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].

Los algoritmos genticos (denominados originalmente planes reproductivos


genticos) fueron desarrollados por John H. Holland a principios de los 1960s,
motivado por resolver problemas de aprendizaje de mquina.

El algoritmo gentico enfatiza la importancia de la cruza sexual (operador


principal) sobre el de la mutacin (operador secundario), y usa seleccin probabilstica.

El algoritmo bsico es el siguiente (Imagen 2.1):

Generar (aleatoriamente) una poblacin inicial.

Calcular aptitud de cada individuo.

Seleccionar (probabilsticamente) en base a aptitud.

Aplicar operadores genticos (cruza y mutacin) para generar la


siguiente poblacin.

Ciclar hasta que cierta condicin se satisfaga.

Imagen 2.1 - Algoritmo Gentico

6
Para poder aplicar el algoritmo gentico se requiere de los 5 componentes
bsicos siguientes:

Una representacin de las soluciones potenciales del problema.

Una forma de crear una poblacin inicial de posibles soluciones


(normalmente un proceso aleatorio).

Una funcin de evaluacin que juegue el papel del ambiente, clasificando


las soluciones en trminos de su aptitud.

Operadores genticos que alteren la composicin de los hijos que se


producirn para las siguientes generaciones.

Valores para los diferentes parmetros que utiliza el algoritmo gentico


(tamao de la poblacin, probabilidad de cruza, probabilidad de
mutacin, nmero mximo de generaciones, etc.)

Vamos a comentar los operadores del algoritmo gentico:

Seleccin: Una parte fundamental del funcionamiento de un algoritmo


gentico es, sin lugar a dudas, el proceso de seleccin de candidatos a
reproducirse. En el algoritmo gentico este proceso de seleccin suele
realizarse de forma probabilstica (es decir, an los individuos menos
aptos tienen una cierta oportunidad de sobrevivir). Bsicamente el
proceso de seleccin consiste en elegir los padres que van a evolucionar
para crear la nueva generacin de individuos. La seleccin se produce en
base a una funcin de evaluacin, que cambia con cada problema,
proporcionando a cada individuo un valor de aptitud que servir para,
segn el criterio que se siga, elegir o descartar el individuo para que
evolucione y cree la siguiente generacin.

Cruce: En los sistemas biolgicos, 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 computacin evolutiva se simula la
cruza intercambiando segmentos de cadenas lineales de longitud fija (los
cromosomas). Aunque las tcnicas de cruza bsicas suelen aplicarse a la
representacin binaria, estas son generalizables a alfabetos de
cardinalidad mayor, si bien en algunos casos requieren de ciertas
modificaciones. As que bsicamente, el cruce consiste en tomar una
parte de la informacin del padre y la otra de la madre y as crear dos
hijos, que cada uno de ellos contiene una parte de la informacin de su
madre y otra de su padre. Estos hijos son nuevas soluciones para nuestro
problema (Imagen 2.2).

7
Imagen 2.2 - Cruce

Mutacin: La mutacin se considera como un operador secundario en


los algoritmos genticos. Es decir, su uso es menos frecuente que el de la
cruza. Bsicamente consiste en recorrer las cadenas de cromosomas
creadas despus de la cruza y con una probabilidad muy baja hacer algn
cambio en ellas para incrementar la variabilidad (Imagen 2.3).

Imagen 2.3 - Mutacin

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.

El problema de la aplicacin Trenes es la dificultad de implementar algunas


funcionalidades para que la aplicacin sea ms flexible, as pues, con ms tiempo, se
podra haber mejorado la funcionalidad de la aplicacin Trenes, pero como ya hemos
dicho la nueva aplicacin TrenAGs resulta ms interesante y adems es mucho ms
flexible y, como veremos, permite realizar pruebas variando distintos parmetros del
algoritmo gentico.

Aunque a continuacin comentaremos detalladamente las aplicaciones por


separado, antes vamos a sealar las diferencias ms 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 estacin de origen y otra de destino
aleatoriamente entre todas las estaciones del trayecto y adems, tambin
aleatoriamente, se indica si el tren circular en sentido de ida o de vuelta.

En Trenes las caractersticas de los puntos de paso son siempre las


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

En Trenes todos los trenes de ida estn 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.

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.

Imagen 3.1.1 - Pantalla Inicio

Si elegimos la opcin de crear un nuevo trayecto nos aparece la pantalla de


introduccin 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 caractersticas 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 estacin)

la distancia en kilmetros desde el anterior punto de paso al actual


(distancia)

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)

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 opcin de abrir un trayecto existente, lo primero que nos aparece


es el cuadro de dilogo estndar de Windows para abrir ficheros (Imagen 3.1.3) y as
fcilmente podremos elegir el fichero que contiene la informacin 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
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.

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 Recepcin Viajeros: es el tiempo mnimo, en segundos,


necesario para que un tren pueda apartarse de la va en caso de alcance o
cruce.

Tiempo Expedicin Viajeros: es el tiempo mnimo, 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 estacin donde no tena
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.

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.

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.

Nmero Salidas de Trenes por Sentido: es el nmero de trenes que


salen en cada uno de los sentidos.

Individuos de la Poblacin Inicial: es el nmero de individuos que va a


tener la poblacin inicial del algoritmo gentico.

Cortes: es el nmero de cortes que se van a producir al realizar el cruce


el algoritmo gentico. 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 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

Imagen 3.1.7 - Pantalla Mostrar Grfico

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.

En la parte superior derecha nos aparece el mejor tiempo medio, en segundos y


en tiempo, de la generacin actual, as como el nmero de las soluciones que tienen ese
mejor tiempo. En la parte superior izquierda es donde podemos cambiar de solucin que
visualizar y del modo que queremos visualizar dicha solucin (horario o grfico) y
cuando cambiamos de solucin aparece el tiempo medio de dicha solucin tanto en
segundos como en tiempo.

Hasta aqu hemos explicado como funciona la parte visual de la aplicacin, a


continuacin vamos a comentar algunos aspectos interesantes sobre como se ha
implementado la funcionalidad de la aplicacin.

1. Generar poblacin inicial

Para todos los individuos de la poblacin 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 estacin
- Hora salida estacin = Hora Salida Primer Tren +
Aleatorio(0..Margen)
Sino, Si es primer tren y no primera estacin
- Hora salida estacin = Hora llegada estacin + Parada
Comercial Estacin
Sino
- Hora salida estacin = Hora salida tren anterior de la
misma estacin + Frecuencia
Fin Si

- Hora llegada siguiente estacin = Hora salida estacin + Tiempo


Asignado al tramo entre las estaciones
Fin Para
Fin Para

16
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

17
1.2.1. Programar el tramo

Si es el primer tren en primera estacin


- Hora salida estacin = Hora Salida Primer Tren + Aleatorio(0..Margen)
Sino, Si tiene Parada Comercial y no es primer tren, o es primera estacin
- Hora salida estacin = Hora salida tren anterior de la misma estacin +
Frecuencia
Sino, Si tiene Parada Comercial y es primer tren
- Hora salida estacin = Mximo cadenciado de los trenes de la anterior
estacin, para que se respeten la Frecuencia en estaciones
Fin Si

- Hora llegada siguiente estacin = Hora salida estacin + 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 estacin = Hora fin tramo del tren del otro sentido +
Intervalo de tiempo de seguridad
Sino
- Tramo correcto
Fin Si

2. Evolucin

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 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

La manera de resolver los conflictos en las partes de arriba y de abajo es similar


a como se han resuelto en la Poblacin Inicial, as que en vez de poner pseudocdigo
vamos a realizar unos dibujos porque as quedar ms claro.

18
2.1.1. Resolver parte de arriba (Imagen 3.1.10)

- Resolver rama sentido natural


- Resolver rama otro sentido haca detrs
- 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 haca 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 haca detrs y la 4 cuando se vuelve ha resolver la rama en el sentido natural (en
este caso sentido de vuelta).

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)

- Resolver rama sentido natural


- Resolver rama otro sentido haca detrs
- 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 haca 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
haca detrs y la 4 cuando se vuelve ha resolver la rama en el sentido natural (en este
caso sentido de ida).

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.

Imagen 3.2.1 - Pantalla Inicio

Si elegimos la opcin de crear una nueva va frrea nos aparece la pantalla de


introduccin de datos (Imagen 3.2.2) donde podemos introducir todos los datos de la
nueva va frrea.

Imagen 3.2.2 - Pantalla Datos 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.

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 estacin)

la distancia en kilmetros desde el anterior punto de paso al actual


(distancia)

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)

Si elegimos la opcin de abrir una va frrea existente, lo primero que nos


aparece es el cuadro de dilogo estndar de Windows para abrir ficheros (Imagen 3.2.3) y
as fcilmente podremos elegir el fichero que contiene la informacin sobre la va frrea
que deseamos abrir.

Imagen 3.2.3 - Abrir Va Frrea

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.

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 Recepcin Viajeros: es el tiempo mnimo, en segundos,


necesario para que un tren pueda apartarse de la va en caso de alcance o
cruce.

Tiempo Expedicin Viajeros: es el tiempo mnimo, 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 estacin donde no tena
previsto realizar parada.

Nmero de Trenes: es el nmero de trenes que circulan en total en


ambos sentidos. Se debe de indicar el nmero de trenes mnimo y
mximo.

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


de salida mnima y mxima.

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.

% 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
mnimo y mximo.

Nmero Conjuntos: es el nmero de conjuntos de trenes distintos que se


van a generar.

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.

Imagen 3.2.5 - Guardar Va Frrea

Cuando ya hemos introducido todos los datos de la va frrea, ya se puede pasar


a elegir los parmetros deseados del algoritmo gentico, para ello pulsamos el botn
Algoritmo Gentico y se abrir la pantalla de parmetros del algoritmo gentico (Imagen
3.2.6).

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.

Vamos a comentar el significado de los parmetros para que queden ms claros:

N Individuos Poblacin Inicial: es el nmero de individuos de la


poblacin inicial.

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


que el algoritmo gentico evolucione.

Seleccin: es el mtodo de seleccin que queremos que el algoritmo


gentico utilice. Los mtodos de seleccin entre los que se puede elegir
son: torneo a 2, ruleta, sobrante estocstico y ranking.

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


cuando evoluciona el algoritmo gentico. Si no se produce el cruce, los
padres pasan tal cual a la siguiente poblacin.

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 Mutacin: es la probabilidad de que se produzca una


mutacin en los individuos de la poblacin generada.

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.

En esta pantalla tambin 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 terico.

Cuando ya hemos introducido todos los parmetros del algoritmo gentico ya


podemos crear el horario de los trenes, para ello pulsamos el botn 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

27
Imagen 3.2.7 - Pantalla Mostrar Grfico

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 grfico las lneas horizontales corresponden a los
puntos de paso que son estaciones. As esta representacin se aleja un poco de la
realidad, pero este desvo no es demasiado importante, pues lo importante aqu es
observar claramente que los trenes no se cruzan en ningn tramo entre dos estaciones.

Esta pantalla permite mostrar las soluciones de la generacin actual, tanto el


horario como el grfico. Adems esta pantalla tambin permite evolucionar
manualmente a la siguiente generacin, pulsando el botn Siguiente Generacin y en
cualquier momento podemos volver a la pantalla de datos de la va frrea (Imagen 3.2.4)
mediante el botn Volver a Datos. En la esquina superior derecha se indica la
generacin en que nos encontramos, en la esquina superior izquierda se puede elegir la
solucin de la generacin actual que se quiere mostrar y si deseamos ver el horario o el
grfico, y en el centro se muestra el tanto por cien de tiempo sobre terico de la solucin
seleccionada y el tanto por cien mnimo de la generacin actual.

Hasta aqu hemos explicado como funciona la parte visual de la aplicacin, a


continuacin vamos a comentar algunos aspectos interesantes sobre como se ha
implementado la funcionalidad de la aplicacin.

28
1. Generar conjuntos

Para todos los conjuntos


- Asignar nmero de trenes aleatorio al conjunto entre nmero de trenes
mnimo y mximo
Para todos los trenes del conjunto
- Asignar sentido aleatorio al tren (ida=0=down, vuelta=1=up)
- Asignar una estacin de origen aleatoria entre las estaciones de
la va frrea
- Asignar una estacin de destino aleatoria entre las estaciones de
la va frrea
- Asignar una hora de salida aleatoria entre la hora de salida
mnima y mxima

Para cada punto de paso entre la estacin 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 mnimo y el
mximo
Fin Para

- Calcular el nmero de estaciones con parada que habrn en este


tramo teniendo en cuenta el % de estaciones con parada comercial
Hasta que se complete el nmero de estaciones con parada
- Elegir una estacin aleatoriamente entre las estaciones
del tramo que no haya sido elegida antes
- Asignarle a dicha estacin un tiempo de parada
comercial aleatorio entre tiempo de parada comercial mnimo y mximo
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

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.

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 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.

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 nmero del tren
el nmero del tramo
el sentido del tren
el nmero de puntos de paso
cada punto de paso con la informacin 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)

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

Las soluciones se guardan en un vector, cuyo nmero de componentes


corresponde al nmero de tramos que tiene la va frrea 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 nmero del tren

el instante de tiempo mnimo en el que el tren empieza a circular por el


tramo

el instante de tiempo mximo en el que el tren abandona el tramo

el sentido en el que circula el tren (ida=0=down, vuelta=1=up)

el nmero de puntos de paso

cada punto de paso con su informacin

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 sealar el paralelismo con la programacin de proyectos


con recursos limitados, puesto que cada lista ordenada es como un proyecto en el que
tenemos un slo recurso (la nica va) y que por tanto en cada instante de tiempo solo
una actividad (un tren) puede hacer uso de este recurso (la va). En cada componente de
estas listas ordenadas indicamos el instante de tiempo mnimo y mximo durante el cual
el tren est circulando por la va (la actividad est haciendo uso del recurso) y que por
tanto durante este periodo de tiempo ningn otro tren podr entrar en este tramo
(ninguna otra actividad podr hacer uso del recurso).

Tambin es importante sealar 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 (mnimo) y el
momento en el que lo abandona (mximo).

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.

Bsicamente lo que se hace es coger el tren-tramo que toca programar y buscarle


la primera posicin factible de la lista ordenada del tramo correspondiente. La
factibilidad se respeta si en cada instante de tiempo no hay ms de un tren programado y

33
se respetan las restricciones de seguridad. Explicada la idea bsica, vamos a intentar
ampliarla un poco ms mediante el siguiente pseudocdigo.

- Elegir primer tramo de la lista Tren-Tramo


Si nmero de trenes programados en el tramo = 0
- Programar el tren en la primera posicin de la lista ordenada
- Actualizar el vector horaMin
Sino Si nmero de trenes programados en el tramo = 1
Si instante mximo del tren a programar < instante mnimo del primer
tren programado en el tramo
- Desplazar el tren programado en primera posicin a la segunda
- Programar el tren actual en la primera posicin
- Actualizar el vector horaMin
Sino
- Programar el tren en la segunda posicin
- Actualizar el vector horaMin
Fin Si
Sino Si nmero de trenes programados en el tramo > 1
Si instante mximo del tren a programar < instante mnimo del primer
tren programado en el tramo
- Desplazar el tren programado en primera posicin a la segunda
- Programar el tren actual en la primera posicin
- Actualizar el vector horaMin
Sino Si instante mximo del ltimo tren programado en el tramo <
instante mnimo del tren a programar
- Programar el tren en la ltima posicin + 1
- Actualizar el vector horaMin
Sino
- Recorrer los trenes programados hasta que se encuentre una
posicin factible donde programarlo
- Desplazar todos los trenes programados desde la posicin
encontrada una posicin atrs
- Programar el tren en la posicin 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

34
3. Generar soluciones

3.1 - Generar poblacin inicial


Mientras no se cumpla el tiempo del criterio de parada
3.2 - Algoritmo Gentico
Para el nmero de individuos de la poblacin inicial (*)
Para todos los Tren-Tramo
2.5 - Programar Tramo
Fin Para
3.3 - Calcular % sobre tiempo terico
Fin Para
3.4 - Ordenar vector Listas
Fin Mientras

(*) Se va a utilizar a partir de ahora mucho el nombre de la variable nmero de


individuos de la poblacin inicial, aunque realmente no se estn tratando dichos
individuos, pero como el nmero de individuos de todas las generaciones va a ser el
mismo, utilizaremos ese nombre, ya que en la aplicacin tambin se hace as.

3.1. Generar poblacin inicial

Para el nmero de individuos de la poblacin inicial


2.3 - Generar Trenes-Tramo
2.4 - Generar Lista Tren-Tramo
- Guardar la Lista Tren-Tramo en el vector Listas
- Meter en la solucin la malla previa elegida resuelta anteriormente
Para todos los Tren-Tramo
2.5 - Programar Tramo
Fin Para
- Calcular el % de tiempo sobre terico (funcin 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 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 Algoritmo Gentico

3.2.1 - Seleccin
3.2.2 - Cruce
3.2.3 - Mutacin

3.2.1. Seleccin

35
Hemos implementado 4 mtodos de seleccin:

Seleccin mediante torneo a 2

Seleccin mediante la ruleta

Seleccin mediante sobrante estocstico sin reemplazo

Seleccin mediante ranking

3.2.1.1. Seleccin mediante torneo a 2

- Barajar el vector Listas


- Recorrer el vector Listas 2 a 2, quedndose cada vez con la lista que menor
valor tenga en la funcin objetivo (% tiempo sobre terico), las listas elegidas sern las
madres
- Barajar el vector Listas
- Recorrer el vector Listas 2 a 2, quedndose cada vez con la lista que menor
valor tenga en la funcin objetivo (% tiempo sobre terico), las listas elegidas sern los
padres

3.2.1.2. Seleccin 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 funcin objetivo
de la lista actual, se calcula de esta forma porque la mejor aptitud es la que tenga la
mnima funcin objetivo)
- Calcular el valor esperado de cada lista del vector (el valor esperado de cada
lista se calcula dividiendo el valor de la funcin objetivo de la lista entre el resultado de
dividir la suma de las aptitudes de cada lista entre el nmero de listas)
- Calcular la suma de valores esperados T
Repetir el nmero de veces de individuos de la poblacin (coincide con el
nmero de listas del vector Listas)
- Generar nmero aleatorio r entre 0.0 y T
- Ciclar a travs 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 lmite es la seleccionada (las
listas seleccionadas son los progenitores elegidos para generar la siguiente generacin)
Fin Repetir

(*) Al principio de algunos mtodo de seleccin se baraja el vector Listas, este


no es un paso de los algoritmos originales, pero como nosotros en la aplicacin una vez
generada una generacin la ordenamos en funcin de la funcin objetivo de menor a
mayor, aqu barajamos el vector Listas, para que el vector no est ordenado en los
mtodos que no requieren dicha ordenacin.

36
3.2.1.3. Seleccin mediante sobrante estocstico sin reemplazo

- Barajar el vector Listas (*)


- Calcular la aptitud de cada lista del vector
- Calcular el valor esperado de cada lista del vector
- El nmero entero de los valores esperados de cada lista son seleccionados
directamente como progenitores de la siguiente generacin
Hasta completar el nmero de individuos de la poblacin
Si la parte no entera de los valores es mayor o igual que un nmero
aleatorio entre 0 y 1
- La lista es elegida como progenitor de la siguiente generacin
Fin Si
Fin Hasta

3.2.1.4. Seleccin mediante ranking

El vector Listas est ordenado de menor a mayor en funcin de la funcin


objetivo, la idea de este mtodo es que las listas con mejor valor de la funcin objetivo
tendrn 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 generacin.

q = 2 / nmero de individuos de la poblacin inicial


r = 2 * ((q - (1 / n indv. poblacin inicial)) / (n indv. pobl. inicial - 1))
Para todas las listas del vector Listas (coincide con el nmero de individuos de la
poblacin inicial)
- La probabilidad de la lista = (q - (n lista * r)) * 100
Fin Para
Hasta completar nmero de individuos de la poblacin inicial (hasta completar
todas las listas del vector Listas)
- Generar un nmero aleatorio entre 0 y 99
- Ir sumando todas las probabilidades de las listas hasta que dicho valor
sea mayor que el nmero 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

37
Hemos implementado 2 mtodos 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 gentico. 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 generacin.

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 posicin par hay una madre y en cada posicin impar un padre.
- Elegir aleatoriamente una posicin 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 posicin impar del vector Listas

- 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)

3.2.2.1.2. Generar la hija

La hija se guardar en la posicin par del vector Listas

- 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

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 posicin par hay una madre y en cada posicin impar un padre.
- Elegir aleatoriamente una posicin de la lista Tren-Tramo (cruce1)
- Elegir aleatoriamente otra posicin 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 posicin impar del vector Listas

- Hasta la posicin elegida por el punto de cruce1 y a partir de la posicin


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 an no est en la lista hijo, se aade a sta

39
3.2.2.2.2. Generar la hija

La hija se guardar en la posicin par del vector Listas

- Hasta la posicin elegida por el punto de cruce1 y a partir de la posicin


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 an no est en la lista hija, se aade a sta

Imagen 3.2.11 - Ejemplo de cruce en 2 puntos

3.2.3. Mutacin

Hemos implementado un nico mtodo de mutacin:

Mutacin por insercin

Slo hemos implementado este mtodo porque nos parece que era el ms
adecuado para la tipologa de nuestro problema.

La mutacin se produce despus del cruce, en nuestro caso se intentar mutar


cada componente de cada lista del vector Listas generado, que contiene la nueva
generacin.

La probabilidad de mutacin es un dato que le aportamos al algoritmo gentico.


Por ejemplo, si la probabilidad de cruce es del 5%, esto significa que solo en el 5% de
las veces se producir la mutacin.

40
3.2.3.1. Mutacin por insercin (Imagen 3.2.12)

La mutacin por insercin consiste en intentar desplazar una componente de la


lista Tren-Tramo haca adelante o haca detrs, 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 ningn predecesor entonces se marca la
posicin "-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 ningn sucesor entonces se marca la
posicin "nmero de Trenes-Tramos + 1" como la sucesora)
- Elegir aleatoriamente una posicin entre la posicin de la
predecesora + 1 y la posicin de la sucesora - 1
- Insertar la componente actual en la posicin elegida
Fin Para
Fin Para

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.

Imagen 3.2.12 - Ejemplo de mutacin por insercin

3.3. Calcular % sobre tiempo terico

La funcin objetivo es minimizar el % sobre el tiempo terico y seguidamente


vamos a explicar como es bastante fcil calcular este valor para cada solucin.

- 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.

Primeramente vamos a indicar las caractersticas tcnicas del ordenador en el


que hemos realizado las pruebas:

Ordenador porttil Fujitsu Siemens Computer Intel Pentium 4 CPU 2.4


GHz

256 MB de memoria RAM

Sistema operativo Microsoft Windows XP Home Edition Versin 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
caractersticas de cada punto de paso de la va que hemos utilizado como ejemplo y las
restricciones de seguridad de los trenes que circulan por ella.

- Nmero de puntos de paso: 40 puntos de paso


- Tiempo de recepcin viajeros: 180 segundos
- Tiempo de expedicin viajeros: 60 segundos
- Demora por parada no solicitada: 60 segundos
- Nmero 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
- Nmero de conjuntos: 5 conjuntos

43
Caractersticas 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

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.

Adems hemos "agrupado" los parmetros nmero de individuos de la poblacin


inicial y criterio de parada, concretamente con las pruebas realizadas con 20 individuos
de poblacin inicial, hemos fijado el criterio de parada en 1 minuto y cuando el nmero
de individuos de la poblacin inicial era 50, el criterio de parada era de 5 minutos.

El resto de parmetros: mtodo de seleccin y mtodo de cruce son


independientes del resto, en concreto hemos utilizado los mtodos de seleccin
mediante torneo a 2, sobrante estocstico sin reemplazo y ranking, o sea, que no hemos
usado el mtodo de la ruleta, pero ste est implementado y recordamos que se podra
utilizar para realizar otras pruebas. De los mtodos de cruce no hay nada que decir, pues
hemos utilizado los dos mtodos implementados: el mtodo de cruce en 1 punto y el de
cruce en 2 puntos.

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:

Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 20


- Criterio de parada: 1 minuto
- Mtodo de seleccin: seleccin mediante torneo a 2
- Mtodo de cruce: 1 punto de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

46
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 20


- Criterio de parada: 1 minuto
- Mtodo de seleccin: seleccin mediante sobrante estocstico sin reemplazo
- Mtodo de cruce: 1 punto de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

47
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 20


- Criterio de parada: 1 minuto
- Mtodo de seleccin: seleccin mediante ranking
- Mtodo de cruce: 1 punto de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

48
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 20


- Criterio de parada: 1 minuto
- Mtodo de seleccin: seleccin mediante torneo a 2
- Mtodo de cruce: 2 puntos de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

49
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 20


- Criterio de parada: 1 minuto
- Mtodo de seleccin: seleccin mediante sobrante estocstico sin reemplazo
- Mtodo de cruce: 2 puntos de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

50
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 20


- Criterio de parada: 1 minuto
- Mtodo de seleccin: seleccin mediante ranking
- Mtodo de cruce: 2 puntos de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

51
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 50


- Criterio de parada: 5 minutos
- Mtodo de seleccin: seleccin mediante torneo a 2
- Mtodo de cruce: 1 punto de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

52
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 50


- Criterio de parada: 5 minutos
- Mtodo de seleccin: seleccin mediante sobrante estocstico sin reemplazo
- Mtodo de cruce: 1 punto de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

53
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 50


- Criterio de parada: 5 minutos
- Mtodo de seleccin: seleccin mediante ranking
- Mtodo de cruce: 1 punto de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

54
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 50


- Criterio de parada: 5 minutos
- Mtodo de seleccin: seleccin mediante torneo a 2
- Mtodo de cruce: 2 puntos de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

55
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 50


- Criterio de parada: 5 minutos
- Mtodo de seleccin: seleccin mediante sobrante estocstico sin reemplazo
- Mtodo de cruce: 2 puntos de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

56
Parmetros del Algoritmo Gentico

- Nmero de individuos de la poblacin inicial: 50


- Criterio de parada: 5 minutos
- Mtodo de seleccin: seleccin mediante ranking
- Mtodo de cruce: 2 puntos de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

Malla Previa - Conjunto % Tiempo sobre Terico


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 %

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:

- Nmero de individuos de la poblacin inicial: 50


- Criterio de parada: 5 minutos
- Mtodo de seleccin: seleccin mediante torneo a 2
- Mtodo de cruce: 1 punto de cruce y 2 puntos de cruce
- Probabilidad de cruce: 80%
- Probabilidad de mutacin: 5%

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

Torneo a 2 Sobrante Estocstico 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 %

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 %

MEDIA TORNEO A 2 = 70%


MEDIA SOBRANTE ESTOCCTICO = 75%
MEDIA RANKING = 71%

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

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%

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%

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 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

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%

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%

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 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.

Observando la tabla vemos que se obtiene resultados un poco mejores cuando se


toman 50 individuos de poblacin inicial y 5 minutos como criterio de parada. Adems
hemos calculado las medias de los resultados y confirmamos numricamente lo
observado.

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

El mejor mtodo de seleccin es el mtodo de seleccin mediante


torneo a 2

Los dos mtodos de cruce implementados ofrecen similares resultados y


por tanto son ambos igual de buenos

Y la mejor eleccin para el nmero de individuos de la poblacin inicial


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

66
6. Bibliografa
[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, Informtica Evolutiva.

[9] C.A. Coello, Introduccin a la Computacin Evolutiva, 2003.

[10] P. Tormos y A.Lova, Apuntes de la Asignatura Gestin de Proyectos Informticos.


Facultad de Informtica. Universidad Politcnica de Valencia. Curso 2003-04.

[11] J. Alcaraz y C. Maroto, A Robust Algorithm for Resource Allocation in Project


Scheduling, 2001.

[12] J. Garca, J.I. Rodrguez y A. Brazlez, Aprenda Visual Basic 6.0 como si estuviera
en primero, 1999.

67

También podría gustarte