Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseño e Implementacion en Python de Un Modelo de Simulación de Horarios de Servicios Ferroviarios PDF
Diseño e Implementacion en Python de Un Modelo de Simulación de Horarios de Servicios Ferroviarios PDF
Ingeniería de Telecomunicaciones
Título:
El tribunal nombrado para juzgar el proyecto arriba indicado, compuesto por los
siguientes miembros:
Presidente:
Secretario:
Vocal:
Sevilla, a de de 2014
RESUMEN
The Planning of networks and rail transport´s services is a very complex activity. Its main
characteristic is based on the need of a specific infrastructure, dedicated to support the
services provision. That allows to have a clear movement of units and equipment.
The investments needed for the infrastructure’s development, has a significant effect
on management, deployment, and emergence of new services. Especially, when this
kind of transport is usually used by these investments.
This project is focused on the design and implementation of an application using Python
language. This application has to integrate a construction module of rail lines. So that,
it can be possible to simulate any specific timetable with any description of any
passenger’s demand. To accomplish this goal, it is necessary to develop a simulation
module to evaluate basics aspects of schedule service quality, during a specific period
of planning.
AGRADECIMIENTOS
1 INTRODUCCIÓN .................................................................................................. 10
1.1 INTRODUCCIÓN A LA PLANIFICACIÓN FERROVIARIA ........................................................10
1.2 PROBLEMAS ESTRATÉGICOS ......................................................................................11
1.2.1 Diseño de Redes (Network Design) ................................................................11
1.2.2 Planificación de Líneas (Line Planning) ..........................................................14
1.3 PROBLEMAS TÁCTICOS .............................................................................................18
1.3.1 Scheduling y determinación de horarios (Timetabling) .................................18
1.3.2 Platforming .....................................................................................................22
1.3.3 Rolling Stock ...................................................................................................24
1.3.4 Crew Scheduling .............................................................................................30
1.3.5 Crew Rostering ...............................................................................................31
2 OBJETIVO DEL PROYECTO.................................................................................... 35
3 ALCANCE ............................................................................................................ 37
3.1 REQUISITOS MÍNIMOS ALCANZABLES ..........................................................................37
4 DESCRIPCIÓN DEL PROBLEMA DE SCHEDULING.................................................... 38
5 PYTHON COMO LENGUAJE DE DESARROLLO ........................................................ 40
5.1 CARACTERÍSTICAS ...................................................................................................40
5.2 VENTAJAS .............................................................................................................41
5.3 DESVENTAJAS ........................................................................................................41
5.4 PYTHON EN LA WEB................................................................................................42
5.5 MÓDULOS Y PAQUETES EN PYTHON ...........................................................................42
5.6 SAGE ....................................................................................................................43
5.6.1 Características de Sage ..................................................................................43
5.6.2 Paquetes incluidos en Sage ............................................................................45
6 IMPLEMENTACIÓN.............................................................................................. 46
6.1 DESCRIPCIÓN DEL SIMULADOR ..................................................................................46
6.2 PARÁMETROS DEL SIMULADOR..................................................................................47
6.2.1 Parámetros de entrada ..................................................................................47
6.2.2 Parámetros de salida .....................................................................................56
6.3 MODOS DE SIMULACIÓN ..........................................................................................58
6.3.1 Modo 0 ...........................................................................................................58
6.3.2 Modo 1 ...........................................................................................................62
6.3.3 Modo 2 ...........................................................................................................65
7 EVALUACIÓN DE LA IMPLEMENTACIÓN ............................................................... 68
7.1 INTRODUCCIÓN AL ENTORNO DE PRUEBAS...................................................................68
7.2 PRUEBAS REALIZADAS Y RESULTADOS .........................................................................68
7.2.1 Prueba modo de simulación 0 ........................................................................68
7.2.1.1 Fichero de resultados para el modo de simulación 0 .............................80
7.2.2 Prueba modo de simulación 1 ........................................................................86
7.2.2.1 Fichero de resultados para el modo de simulación 1 .............................95
7.2.3 Prueba de simulación modo 2 ..................................................................... 102
7.2.3.1 Fichero de resultados para el modo de simulación 2 .......................... 111
7.2.4 Comparación de los 3 objetos “Horario” obtenidos.................................... 118
8 EXPLICACIÓN DETALLADA DEL CÓDIGO.............................................................. 120
8.1 CLASES .............................................................................................................. 121
8.2 ATRIBUTOS ......................................................................................................... 121
8.2.1 Explicación de atributo: ............................................................................... 123
8.3 MÉTODOS .......................................................................................................... 129
8.4 PSEUDOCÓDIGO .................................................................................................. 130
8.4.1 main() .......................................................................................................... 130
8.4.2 Carga_distancias (DisDataFile) ................................................................... 132
8.4.3 Carga_matriz (MatDataFile) ....................................................................... 132
8.4.4 calcula_cargas (Escala) ............................................................................... 133
8.4.5 class timetable ............................................................................................ 135
8.4.6 Método calcula_tiempos (self) .................................................................... 137
8.4.7 Método rellena_modo2 (self,FileTT) ........................................................... 139
8.4.8 Método calcula_llegadas (self, Escala, TipoDem)....................................... 141
8.4.9 Método: demanda_tren (self,tren,sentido,escala) ..................................... 143
8.4.10 Método: calcula_incompletos() ............................................................... 145
8.4.11 Método: calcula_todo_timetable (Porcentaje1, Porcentaje2) ................ 147
8.4.12 Método calcula_todas_vars_timetable (Porcentaje1, Porcentaje2)....... 149
8.4.13 Método: calcula_FO_UP(self) .................................................................. 149
9 CONCLUSIONES Y LÍNEAS DE TRABAJO FUTURAS ................................................ 152
9.1 CONCLUSIONES ................................................................................................... 152
9.2 LÍNEAS DE TRABAJO FUTURAS................................................................................. 153
10 BIBLIOGRAFÍA ................................................................................................... 154
ÍNDICE DE GRÁFICAS
1 Introducción
10
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
11
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
de una red existente, planteando la inclusión de nuevos tramos sobre una red
desplegada a lo largo de muchos años, cuya topología debe, en general, ser respetada
incluso si su evolución ha sido poco adecuada o si la evolución geográfica de una
región, comarca o área metropolitana ha convertido un buen diseño inicial en una
red poco conveniente.
Pese a que el análisis cuantitativo de este tipo de problemas puede ayudar de forma
importante a los decisores en la elección de un diseño adecuado en relación con los
aspectos mencionados con anterioridad, raramente las decisiones de diseño serán
puramente técnicas.
12
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Revisión bibliográfica.
Varios son los estudios han abordado problemas de diseño de redes de metro o
ferrocarril. La ubicación individual de nuevas líneas ha sido tratada en los trabajos de
Bruno et al. (1998, 2002) y Dufourd et al. (1996). En el primero, se minimiza la suma
ponderada de costes de viaje, mientras que en el segundo se maximiza la cobertura
de la población susceptible de utilizar la nueva línea.
Los artículos de Hamacher et al. (2001) y Laporte et al. (2002) consideran el problema
de localización de estaciones a lo largo de un corredor mediante dos pasos. El
primero de ellos asume que existe una definición parcial de la nueva línea en la que
den ubicarse algunas estaciones. En el segundo paso se considera un conjunto de
puntos candidatos para localizar las estaciones.
13
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Sin embargo una vez establecida nuevas líneas y por tanto ampliada la red con las
nuevas infraestructuras, sería fácil revisar la definición de los servicios a prestar,
redefiniendo las líneas (caminos), sus longitudes, orígenes y destinos adaptando la
oferta a nuevas realidades en el comportamiento de la demanda.
14
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
La solución depende por tanto de la habilidad del modelador y del decisor para definir
el conjunto potencial de líneas candidatas. Sin duda este método facilita
enormemente tanto la formulación del modelo de Line Planning como el
procedimiento de resolución del problema, pero también sesga de forma importante
la calidad de la solución encontrada, que estará por tanto formada por un conjunto
de líneas de entre las definidas a priori.
Por otro lado, la frecuencia de servicio en cada una de las líneas se determina en base
a demandas máximas en cada tramo. Como consecuencia, las frecuencias son
siempre altas. Esta situación empeora conforme se consideran matrices de demanda
correspondientes a períodos más largos. Si por el contrario se consideran matrices
Origen-Destino correspondientes a períodos cortos (p.e. 1 hora), entonces es difícil
que las soluciones encontradas para diferentes períodos coincidan, siendo preciso
llevar a cabo un procedimiento de ajuste de frecuencias para intervalos consecutivos.
Revisión bibliográfica.
Dienst (1978) describe un método de branch and bound (ramificación y poda) para
diseñar un sistema de líneas con el objeto de maximizar el número de pasajeros que
realizan trayectos directos
Bussieck et al. (1996) presentan también un sistema de diseño de líneas con el objeto
de maximizar el número de viajeros directos. Utilizaron variables de decisión
representando la frecuencia de cada línea y asumen que todos los trenes tienen la
misma capacidad, fijada inicialmente. Con el fin de reducir el número de variables de
decisión utilizaron un método de agregación de variables. Esta agrupación exige una
relajación de las restricciones de capacidad de los trenes. El modelo propuesto por
estos autores se resuelve aplicando diferentes técnicas de pre-procesamiento y
usando posteriormente un Solver ILP genérico. Los autores describen diferentes tipos
de desigualdades para mejorar la obtención de cotas inferiores. Posteriormente
Bussieck (1998) presenta una extensión del método propuesto.
16
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Lindner (2000) también estudia la minimización de los costes del sistema de líneas.
Lindner propone un método branch and bound para resolver el problema de diseño.
Su modelo integra el problema de planificación con la obtención de un horario
(Timetabling) de tipo cíclico. La parte del modelo encargada del problema de
Timetabling se basa en el modelo para la programación de eventos periódicos
(Periodic Event Scheduling –PESP) definido por Serafini y Ukovich (1989).
17
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
18
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
han optado por centrar la mayoría de sus esfuerzos en el análisis de horarios de tipo
periódico, en consonancia con las frecuencias obtenidas en la etapa anterior.
Revisión bibliográfica
Este enfoque le permitió resolver instancias pequeñas mediante branch and bound,
calculando cotas a partir de la relajación de las restricciones disyuntivas.
Jovanovic y Harker (1991) resuelven mediante branch and bound una versión de
estos modelos que busca soluciones factibles en lugar de utilizar un procedimiento
de optimización guiado por una función objetivo.
Cai y Goh (1994) utilizan una heurística voraz para uno de los modelos anteriores.
Carey y Lockwood (1995) consideran una heurística que trabaja con los trenes de uno
en uno (en un orden apropiado) y para cada tren resuelven un problema MILP (Mixed
Integer Linear Programming).
Análogo a los modelos comentados con el fin de planificar los horarios de forma
óptima, manteniendo los caminos obtenidos para los trenes previamente calculados.
De forma algo más precisa, el orden relativo de las salidas de los trenes se mantiene
fijo, mientras que los tiempos de salida y llegada, así como el orden de llegada pueden
ser cambiados. Higgings et al. (1997) utilizan un procedimiento de búsqueda tabú
(TabuSearch), para un modelo de la familia antes mencionada.
20
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Nachtigall y Voget (1996) utilizan PESP para generar horarios cíclicos con tiempos de
espera mínimos para los pasajeros. Odijk (1996) utiliza la PESP a un nivel estratégico
para determinar la capacidad de la infraestructura alrededor de las estaciones. Kroon
y Peeters (2003) describen un modelo PESP incluyendo tiempos de viaje variables.
Esto puede resultar en una mayor flexibilidad que conduce a una mayor probabilidad
de obtener una solución factible.
Por último, Kroon et al. (2005) describen una variante de optimización estocástica
del PESP. Su modelo tiene en cuenta de forma explícita las perturbaciones
estocásticas de los procesos ferroviarios, distinguiendo entre un calendario previsto
y la realización de varios horarios bajo las perturbaciones estocásticas
predeterminadas
21
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
1.3.2 Platforming
El problema tiene como objetivo definir para cada tren el andén en el que se detendrá
así como las rutas de llegada y salida, asegurando que se satisfacen todas las
restricciones operativas y minimizando el tiempo necesario para completar los
movimientos entre llegadas y salidas de la estación.
Revisión bibliográfica
22
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
programados de llegada y salida no pueden ser alterados y las rutas de llegada y salida
se determinan únicamente según la elección del andén.
Esta versión del problema se modela como un problema decoloración de grafos con
restricciones adicionales, para el que se propone y aplica un algoritmo heurístico a
ejemplos reales. La misma versión del TPP es estudiada por Billionnet (2003) que
considera una formulación ILP clásica para coloración de grafos y muestra cómo
incorporar al modelo las restricciones asociadas con la lista de parejas incompatibles.
Se resuelven ejemplos generados aleatoriamente usando un solver ILP genérico.
Una visión más general del problema en la que los instantes y rutas de llegada y salida
no están fijadas a priori es abordada por Zwaneveld (1997), Zwaneveld et al. (1996),
Zwaneveld et al. (2001), and Kroon et al. (1997). En realidad, estos autores
diferencian entre rutas de entrada (inbound routes), de salida (outbound routes) y
de andén (platform route) correspondiendo con el trayecto seguido por el tren para
entrar en la estación (sin ir a un andén), el trayecto dentro de la estación y la parada
en el andén y el trayecto para salir de la estación respectivamente. Aunque en la
práctica a cada tren haya que asignarle una ruta de cada tipo, los autores consideran
la posibilidad de que puedan no encontrarse algunas de ellas o, incluso, no se
encuentre ninguna. Esta versión es modelada mediante un problema de conjuntos
estables en un grafo en el que cada nodo corresponde a una elección para un tren
con un coste asociado y las aristas unen tanto nodos asociados al mismo tren como
nodos correspondientes a selecciones incompatibles para distintos trenes. El modelo
es formulado como un ILP con una variable binaria asociada a cada nodo y un grupo
de restricciones en forma de desigualdades. Las referencias anteriores describen
algoritmos heurísticos y exactos basados en la solución del problema PL relajado. Este
enfoque está incluido dentro del sistema STATIONS usado por la compañía alemana
de ferrocarriles para resolver el problema. En Zwaneveld (1997) se recogen los
resultados de problemas reales en las principales estaciones de Alemania.
Los vagones separados de los trenes se podrán usar posteriormente para aumentar
la capacidad de trenes que saldrán de la misma estación. Esto obliga a disponer de
cierto espacio dedicado al almacenamiento de los vagones en las estaciones y de un
sistema de gestión más complejo.
24
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Estas unidades hacen referencia a trenes compuestos por un número fijo de vagones
y locomotoras (una o dos) y que se pueden mover sobre la vía en ambas direcciones.
Ejemplos de esto lo tenemos en los trenes de alta velocidad, compuestos por dos
locomotoras y un número de vagones que suele oscilar entre 6 y 10. Es posible, según
sea necesario enganchar dos unidades para obtener trenes de mayor capacidad en
los momentos precisos que posteriormente se controlan en mando único, cediendo
el poder tractor a la locomotora de cabeza pero aprovechando la potencia de ambas
unidades.
25
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Revisión bibliográfica
Para el caso de redes de alta densidad, Schrijver (1993) describe un modelo para
determinar el mínimo número de unidades que deben ser utilizadas en una línea
simple para evitar falta de asientos. Una línea se define por dos puntos entre los
cuales circulan trenes en ambos sentidos de acuerdo con el horario programado. En
el caso considerado, la compañía ferroviaria trabaja con un servicio de frecuencia
horaria y en el que sólo se utiliza un tipo de unidad (conjunto de locomotora/s y
vagones). Existen, sin embargo, dos subtipos de unidades que se diferencian en
longitud y en el número de asientos de primera y segunda clase. Un tren puede estar
formado por varias unidades de estos subtipos. Para cada viaje, se conoce la
demanda de asientos de primera y segunda clase. Las unidades pueden unirse o
separarse en varias estaciones a lo largo de la línea. Como es obvio, una unidad sólo
podrá unirse a un tren si, en la estación en la que este se encuentra, hay alguna
unidad disponible en ese momento. El modelo es básicamente un modelo de Flujo
Entero Multiproducto con algunas restricciones adicionales.
El modelo propuesto por Schrijver (1993) asume que una composición puede
transformarse en otra composición totalmente diferente en una estación entre dos
viajes consecutivos. En la práctica sin embargo, hay varias restricciones referentes a
la combinación de unidades que se deben tener en cuenta. Por lo tanto no sólo es
importante el número de unidades utilizadas sino el orden que ocupan en la
composición. En este caso particular, sólo se permite una operación (unión o
separación). Además, el lugar en el que las unidades se unen o se separan está
predeterminado: según la estación en la que se encuentre el conjunto las unidades
se añadirán o se separarán del convoy por la parte delantera o trasera. Además,
Schrijver (1993) asume que el material rodante (Rolling Stock) disponible por tren es
tal que se satisface toda la demanda. Sin embargo, en ausencia de un sistema de
reserva la demanda tiene carácter estocástico. Es por ello que no se puede garantizar
26
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
un sitio para cada pasajero. Un asunto que Schrijver (1993) no trata es que, si un tren
llega al final de la línea, este deja la estación cuanto antes. Esto significa que el tren
realizará el primer viaje de la misma línea que salga de la estación, posiblemente
después de que se hayan unido o separado varias unidades. Dicho esto, el primer
viaje de un tren después de llegar al final de la línea es conocido, distinguiéndose
varias secuencias de viajes a las que se denomina tren.
Para hacer frente a los puntos anteriores, Peeters y Kroon (2003) proponen un
modelo que minimice una función ponderada que depende de la escasez de plazas y
de otros costes, aproximados por el número de kilómetros recorridos. Además,
Peeters y Kroon (2003) tienen en cuenta explícitamente el número de cambios en las
composiciones ya que pueden dar una idea de la robustez del material rodante en
circulación. Su enfoque para tratar las restricciones sobre las posibilidades de
transición de una composición otra se basa en el concepto de grafo de transiciones
que será explicado más tarde.
Fioole et al. (2006) trabajan con una versión más compleja del RSCP. Su problema
también incluye la separación y unión de trenes en marcha. Como en estos casos es
complicado aplicar el concepto de grafo de transiciones, especialmente en el caso de
que las ramas en las que se divide la línea no tengan la misma longitud, ellos usan un
modelo MIP que se puede entender como una versión extendida del modelo descrito
por Schrijver (1993). Gracias a varios métodos para mejorar la calidad del modelo LP
relajado, se pueden resolver ejemplos relativamente extensos y complejos llegando
a soluciones próximas al óptimo en un tiempo razonable utilizando CPLEX.
Otro trabajo en el caso de redes de alta densidad es el de Brucker et al. (2003), que
se centra en la reasignación de rutas a transportes tirados por locomotoras. Su
objetivo es ajustar demanda y oferta en una región de Alemania que puede ser
considerada como una red densa. LA asignación de ruta a las locomotoras es llevada
a cabo en una etapa posterior del proceso de planificación y no es objeto de este
epígrafe. Para cada viaje, los instantes de llegada y salida y las estaciones son datos
así como la composición estándar del tren. El flujo de material rodante, impuesto por
los viajes programados, probablemente no es factible dada la disponibilidad limitada
de material rodante, es decir, el material rodante necesario no siempre estará
27
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El modelo descrito por Peeters y Kroon (2003) se puede entender como una
extensión del modelo de Schijver. Para hacer frente al hecho de que en cada estación
las posibilidades de transición de una composición a otra son limitadas, ellos usan el
concepto de grafo de transiciones. Cada tren tiene su propio grafo de transiciones.
Como fue mencionado con anterioridad, un tren es una secuencia de viajes que se
llevan a cabo por el mismo convoy.
Seleccionando una ruta para cada tren mediante los grafos de transiciones, se
determina una composición factible para cada viaje, incluyendo transiciones factibles
entre dos composiciones. Como una unidad sólo se puede unir a una composición, si
está disponible en el momento y la estación justos, la interacción entre diferentes
trenes que viajan simultáneamente se modela haciendo un seguimiento de la
posición de los subtipos en cada instante relevante durante el periodo de tiempo
considerado. La cantidad de material en un evento e es igual al material rodante en
el instante inicial más los vagones que se han separado de sus trenes y menos los
vagones que se han unido a otros trenes en todos los instantes anteriores al evento
e. El modelo garantiza que en todas las estaciones, en cualquier instante el inventario
de todos los subtipos es mayor o igual a cero. Esto da pie a reformular el modelo
28
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Una vez determinados los ciclos, estos ya no pueden variar, ya que son la base para
el problema de gestión de personal o Crew Schedulling. Las restricciones más
importantes están referidas a los requisitos de mantenimiento y al tiempo mínimo
necesario para añadir o quitar vagones del tren (switching time) entre dos viajes
consecutivos que el convoy debe realizar. El switching time depende de los vagones
29
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
en la composición. El cambio de un vagón del “interior” del tren llevará más tiempo
que añadir o quitar un vagón al final del tren. Para cada vagón y día del horizonte de
planificación, en el que el vagón pueda comenzar un ciclo, se genera una red que
representa todos los ciclos potenciales para el vagón. Estas redes incluyen las
posibles condiciones inicial y final para el vagón impuestas por su posición al inicio
del periodo de planificación o por el hecho de que antes de un día dado, el vagón
debe estar en el centro de mantenimiento. El modelo tiene en cuenta tanto las
posiciones de las unidades dentro del tren como que un cambio en la cola del tren
sólo puede ser llevado a cabo por los vagones situados en la cola del conjunto. Se
propone un procedimiento de generación de columnas para resolver el LP relajado y
después se aplica un esquema heurístico de ramificación y corte para encontrar una
solución entera. Generalmente, el tiempo computacional es pequeño.
30
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Puesto que las frecuencias en las diferentes líneas suelen cambiar a lo largo del día
(dependiendo de las fluctuaciones de la demanda de transporte), la organización de
los turnos de trabajo raramente resultará homogénea, de forma que a determinadas
horas del día se concentrarán varios turnos en paralelo.
La definición de los turnos se complica con aspectos relacionados con los derechos
colectivos de los trabajadores adquiridos a lo largo de la actividad profesionaly
reflejados en los convenios laborales específicos firmados entre empresa y
trabajadores.
Una vez obtenido el plan de turnos que proporcione cobertura a todos los servicios
programados, es necesario proceder con la asignación individual del personal
disponible.
31
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Dado que, en la mayoría d los casos, las cargas individuales de trabajo obtenidas (para
cierto intervalo de planificación) en el plan de asignación de personal no son
exactamente las mismas para todos los trabajadores, puede resultar necesario
considerar un sistema rotatorio de turnos que, atendiendo a las especificaciones de
ciertos conductores, permita equilibrar la carga de trabajo a lo largo de un período
completo de explotación (típicamente un año).
Revisión bibliográfica:
Son numerosos los trabajos sobre gestión de personal han sido tratados en la
literatura científica. Para trabajos relativos a transporte masivo y transporte aéreo,
se refiere al lector interesado a las revisiones de Arabeyre et al. (1969), Bodin et al.
(1983), Rousseau (1985), Daduna y Wren (1988), Desrochers y Rousseau (1992),
Barnhart et al. (1994), Desrosiers et al. (1995, Daduna y Voss (2001), y Ernst et al. (
2001,2004a, 2004b).
Los clásicos algoritmos voraces son muy rápidos en la práctica, pero por lo general
no ofrecen soluciones de alta calidad, como se describió en Balas y Ho (1980) y Balas
y Carrera (1996). Jacobs y Brusco (1995) y Beasley y Chu (1996) proponen una
algoritmo genético y un algoritmo de recocido simulado, respectivamente, mientras
que Lorena y Lopes (1994) utilizan un enfoque sustitutivo basado en la relajación del
problema.
Sin embargo, los métodos heurísticos más eficaces para este tipo de problemas
parecen ser los que basados en relajación de Lagrangiana, siguiendo el trabajo
seminal de Balas y Ho (1980) y las mejoras por Beasley (1990), Fisher y Kedia (1990),
Wedelin ( 1995), Balas y Carrera (1996), Ceria et al. (1998), Caprara et al. (1999),
Kroon y Fischetti (2001), y Yagiura et al. (2006), este último haciendo también uso
extensivo de la búsqueda local y proporcionando las mejores soluciones conocidas
hasta ahora, aunque necesitando tiempos de computación considerablemente
mayores que, por ejemplo, los obtenidos por Caprara et al. (1999).
33
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
34
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Se pretende que el constructor de líneas establezca una base sólida sobre la que
simular cualquier línea y cualquier horario (dentro de los diferentes modos
incorporados) cuya descripción se haya introducido en los parámetros de entrada del
simulador. Esto se trata de una herramienta general, capaz de simular cualquier línea
típica de un sistema de transito rápido, de media o de larga distancia y cualquier
horario específico ante cualquier descripción de la demanda, tanto en forma de
matrices origen destino como de demanda variable.
35
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
vía por parte de dos trenes. Este tipo de problemas se consideran líneas de trabajo
futuras y objeto por tanto de proyectos venideros.
36
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
3 Alcance
El alcance del proyecto define y detalla los límites y objetivos que se deberán haber
alcanzado al término de su desarrollo.
Para ello, se ha incluido una lista con los requisitos mínimos que se deben cumplir en
el proyecto.
- Puede haber trenes que comiencen antes del inicio de nuestro espacio
temporal de trabajo, con el fin de acercar los resultados a la realidad
(equivalente a periodos warm up de una simulación, necesarios para
alcanzar un régimen estacionario).
- Puede haber trenes que no necesiten recorrer todas las estaciones y por
tanto que comiencen y acaben en estaciones intermedias. Servicios
especiales tipo Short-turning y lanzaderas que concentren sus
movimientos en zonas específicas de una línea.
37
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En realidad, los horarios regulares son fácilmente memorizados por los usuarios y
también pueden ser calculados con menor esfuerzo. Por otro lado, en el caso de
redes de media y larga distancia, la demanda depende de la programación de los
servicios. En este tipo de escenarios en el que la demanda parece depender de la
programación, el enfoque periódico puede no ser eficiente.
38
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
39
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
5.1 Características
40
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
5.2 Ventajas
5.3 Desventajas
41
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Python está compuesto por módulos y paquetes Un módulo es un objeto que sirve
como contenedor para organizar código. Cada módulo tiene asignado un espacio de
nombres y dentro de ese espacio de nombres puede haber cualquier cantidad de
objetos y como en Python todo es un objeto, también puede contener otros módulos.
42
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En Python, los archivos con extension.py son módulos, mientras que cualquier
directorio que contenga un archivo con el nombre __init__.py se convierte en un
paquete.
5.6 Sage
Mientras que la mayor parte de los entornos de cálculo matemático son entidades
independientes, SAGE provee algunos algoritmos por sí mismo y otros los toma de
otros entornos de cálculo matemático. Esta estrategia le permite a SAGE proveer de
múltiples entornos de cálculo matemáticos dentro de una arquitectura capaz de
evolucionar para satisfacer futuras necesidades.
43
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Filtros para importar y exportar datos, imágenes, vídeo, sonido, CAD, y GIS
44
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
45
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
6 Implementación
El objetivo de esta etapa es desarrollar una aplicación software, que pueda ser
ejecutada correctamente cumpliendo con los criterios especificados en las fases de
análisis y diseño. La dificultad reside en cómo realizar esta implementación de la
mejor manera posible, ya que va a depender de factores como el lenguaje de
programación, la metodología empleada y el entorno de desarrollo establecido.
Dada una línea genérica, las dos direcciones de movimiento de vehículos serán
arbitrariamente definidas como UP (sentido ascendente) y DW (sentido
descendente).
Opcionalmente, se podrán añadir dos ficheros CSV, el primero contiene los horarios
de salida y llegada de cada tren (si se desea simular un horario específico), así como
las estaciones de salida y llegada de los trenes, e incluso aquellas estaciones en las
que un tren no tenga programada una parada (aplicable al modo 2 de simulación) y
un segundo fichero que contiene las estaciones en las cuales los trenes no realizan
46
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
parada cuando se desea simular una estrategia skipping-stop (aplicable a los modos
de simulación 0 y 1).
ENTRADAS
- Fichero de demandas
- Fichero de distancias
- Fichero de horarios
- Variables globales
SALIDAS
- Fichero de resultados
- Graficas de resultados
Modo:
47
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
NumEst:
Número de estaciones.
TrenCap:
HeadwayUp:
HeadwayDw:
HorPlan:
TrenSpeed:
DwellTime:
DisDataFile.txt:
48
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Fichero CSV donde escribimos las distancias entre estaciones. Los datos van
expresados en metros y separados por (;)
Este ejemplo será válido para el caso de tener 7 estaciones y los datos serán
almacenados en un array de dimensión i 6 i 0,5 / i donde el elemento i se
corresponde con la distancia entre las estaciones i, i 1
MatDataFile.txt:
Fichero CSV donde escribimos la demanda de viajeros entre cada par de estaciones.
Este fichero tendrá forma de matriz cuadrada de dimensión ¡*j, donde el elemento ij
se corresponde con el número de pasajeros que se van a desplazar entre las
estaciones i y j.
49
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Horario.txt:
Cada una de las filas restantes define los tiempos de salida y llegada de cada tren a
cada una de las estaciones.
Los tiempos de paso de cada tren por las estaciones se escriben por orden,
escribiendo primero los trenes asociados al sentido Up y posteriormente los
asociados al sentido Dw. El número de columnas es dos veces el de estaciones, ya
que en cada estación se indica el tiempo de llegada y el de salida de cada tren.
𝑁º𝐶𝑜𝑙𝑢𝑚𝑛𝑎𝑠 = 2 ∗ 𝑁º 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑒𝑠
50
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
La primera fila nos indica que en el trayecto tendremos 4 trenes que se desplazan en
sentido Up y 2 que se desplazan en sentido Dw.
Las filas 1,2, 3 y 4, corresponden a los trenes en sentido Up, mientras que las filas 5
y 6 representan los trenes que viajan en sentido DW.
- -3: Indica que el tren pasará de largo por dicha estación sin realizar parada.
51
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
en el final del trayecto por lo que en t=22min se cierran las puertas y finaliza el
servicio.
La fila 6, correspondiente al último tren en sentido Dw, nos estaría indicando que
este tren inicia su trayecto en la estación 2 para t = 20 min, y finaliza el mismo en la
estación 1 para t = 32 min.
El fichero saltos.txt, se corresponde con una matriz donde cada fila representa un
tren, comenzando por los trenes en sentido UP y seguido de los trenes en sentido
DW, por lo que inicialmente será necesario realizar la simulación sin incluir este
fichero para saber el número de trenes que viajan en cada sentido.
𝑁º𝐶𝑜𝑙𝑢𝑚𝑛𝑎𝑠 = 𝑁º𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑒𝑠
Hay que rellenar con un ‘1’ aquellas posiciones de la matriz, en las cuales un tren no
va a realizar parada en una estación, si por el contrario ponemos un ‘0’, el tren
realizará la parada programada.
52
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Como restricciones ningún tren nunca podrá realizar saltos, ni en la estación origen
ni en la estación destino.
53
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
N 1 kn,ij
f (tij ) n ,ij ( t tn ,ij )
i, j [0, NumEst 1]
n 0 1 e
54
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
o ki : Constante.
o i : Pendiente de la sigmoide.
100
- f1,03 (t ) t [0,90]
1 e0.3(t 20)
150
- f 2,03 (t ) t [0,90]
1 e0.8(t 50)
120
- f3,03 (t ) t [0,90]
1 e0.3(t 70)
55
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
56
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Porcentajes de ocupaciones.
Porcentajes de demandas atendidas.
Representa las estaciones en el eje ‘x’ y el tiempo en minutos en el eje ‘y’ y muestra
las trayectorias de los trenes que se desplazan en ambos sentidos con los tiempos de
llegada y salida desde cada una de las estaciones.
Se representa una sub-gráfica para cada tren con la ocupación en función de las
estaciones.
Cada tren se corresponde con cada una de las sub-gráficas y representa el porcentaje
de demandas atendidas y el porcentaje de ocupación en cada estación.
57
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En la gráfica 4 se representa una sub-gráfica para cada estación en cada una de las
cuales se mostrará el tiempo de espera para cada uno de los trenes.
6.3.1 Modo 0
En este modo, el objeto timetable recibe como parámetros de entrada, el fichero que
contiene la distancia entre cada par de estaciones, el fichero que contiene la matriz
58
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
La velocidad del tren, es otra de las variables pasadas al simulador. En este modo se
calcula el tiempo que tarda cada tren, en llegar a cada una de las estaciones y por
consiguiente, el tiempo total que tardaría este, en recorrer la línea completa.
𝑁𝑢𝑚𝐸𝑠𝑡−1
NumEst 1 NumEst 2
0 X 01 X 02 PerfilC arg aDirecto [ j 1
X0 j , j 0
X i 2 , 0]
X 10 0 X 12 NumEst 1 NumEst 2
X 20 X 21 0 PerfilC arg a Re verso [0,
i 1
X i0 ,
j 0
X2 j ]
Posteriormente, se realiza el cálculo del número de trenes que recorrerán cada una
de las estaciones en ambos sentidos. Este modo a diferencias de los modos 1 y 2, no
considera la posibilidad de que se existan trenes en movimiento anteriores al inicio
del intervalo temporal (HorPlan), es decir, el primer tren siempre parte de la estación
0 para t>=0.
59
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
La capacidad de los trenes en ambos sentidos, puede ser establecida de dos formas
diferentes.
60
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Capacidad1=max (PerfilCargaDirecto)
Capacidad2=max (PerfilCargaReverso)
No
If Capacidad1>Capacidad2 TrenCap=Capacidad2
Si
TrenCap=Capacidad1
Exit
El caso 0 se corresponde con la figura 3, donde queda reflejado que todos los trenes
salen desde la estación cero y que el primer tren en salir se produce para un tiempo
t=Desfase inicial.
Por otro lado queda reflejado el momento de llegada de cada tren a cada una de las
estaciones, y su posterior salida. El diferencial de tiempo entre la llegada a una
estación y la salida de la misma, se corresponde con el valor de DwellTime, que es
pasado como parámetro al simulador.
En ambas gráficas se puede dar el caso de que uno o más trenes excedan el espacio
temporal en un momento dado.
61
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
La primera gráfica de la figura 3 se corresponde con los trenes que viajan en sentido
UP, los cuales parten siempre desde la estación 0, mientras que la segunda ilustración
representa los trenes que viajan en sentido Dw y estos a diferencia de los anteriores,
parten desde la última estación hasta finalizar su trayecto en la estación 0.
En esta gráfica se puede observar que el espacio temporal trabajo será de 40 minutos
y como el tren 3 en ambos sentidos excede este tiempo.
6.3.2 Modo 1
Al igual que en el modo anterior, en este modo, el simulador exigirá como parámetros
de entrada el fichero de distancias entre estaciones contiguas, el fichero de
demandas de pasajeros, fichero opcional de saltos y algunos parámetros globales.
62
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
𝑁𝑢𝑚𝐸𝑠𝑡−1
NumEst 1 NumEst 2
0 X 01 X 02 PerfilC arg aDirecto [ j 1
X0 j , j 0
X i 2 , 0]
X 10 0 X 12 NumEst 1 NumEst 2
X 20 X 21 0 PerfilC arg a Re verso [0,
i 1
X i0 ,
j 0
X2 j ]
𝐻𝑜𝑟𝑃𝑙𝑎𝑛 − 𝐷𝑒𝑠𝑓𝑈𝑝
𝑁𝑢𝑚𝑇𝑟𝑒𝑛𝑒𝑠1 =
𝐻𝑒𝑎𝑑𝑈𝑝
𝑇. 𝑉𝑖𝑎𝑗𝑒𝑇𝑜𝑡𝑎𝑙
𝑁𝑢𝑚𝑇𝑟𝑒𝑛𝑒𝑠2 =
𝐻𝑒𝑎𝑑𝑈𝑝
El cálculo del número de trenes en sentido DW, se realizará de igual manera. De este
modo, el número de trenes será la suma de los trenes que salieron para t<0, más el
número de trenes que salen para t>0 cada Headway minutos.
Para la capacidad de los trenes se procede de la misma forma que en caso anterior,
tenemos la opción de pasarla como parámetro de entrada, o de fijarla al valor
máximo del vector ‘Perfil_de_Carga’.
63
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Lo mismo ocurre para los trenes en sentido DW donde el tren 0 sale de la estación 3
en t<0 y para t≈0, éste llega a la estación 2.
Para este tipo de casos, dado que se desconoce la demanda fuera del intervalo de
planificación, la ocupación será pasada como parámetro de entrada al simulador y se
considera por igual para todos los trenes afectados por esa situación.
64
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
6.3.3 Modo 2
Dado que se fijan los instantes de llegada y salida en cada estación, los trenes pueden
variar su velocidad a lo largo de la línea.
La capacidad de cada tren se definirá de la misma forma que los casos anteriores.
65
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En función de la tabla 5, se puede ver claramente como el tren 1 en sentido Up, irá
variando su velocidad a lo largo de su paso por las diferentes estaciones. Esta
situación también se va a producir para el resto de trenes en ambos sentidos.
También se puede ver en las dos gráficas de la figura 5, que hay tantos trenes que
salen desde estación origen en t<0, como trenes que sobrepasan el espacio temporal
y como mencionamos anteriormente, los trenes incompletos una vez sobrepasan la
barrera de t=0, llevaran un cierto porcentaje de ocupación predefinido como
parámetro de entrada.
En los trenes que sobrepasan el espacio temporal (t>HorPlan), todos los pasajeros se
verán obligados a bajar en la última estación en que dicho tren realice una parada,
en consecuencia los pasajeros que viajen en el tren 4 en sentido UP, únicamente
podrán bajar en la estación 1, esto significa, a efectos de simulación, que no se
permitirá la subida al tren de pasajeros con destinos posteriores a la estación 1.
Esto se puede observar entre otros, en el tren 2 desplazándose en sentido UP, el cual
no va a realizar la parada pertinente en la estación 1, o también en el caso del tren 3
desplazándose en sentido DW que tampoco va a realizar parada en la estación 1.
66
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
67
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
7 Evaluación de la implementación
En este apartado, las pruebas se van a realizar en función de los modos de simulación,
mostrando todos los resultados obtenidos a lo largo de cada una de las trayectorias
de los trenes y de esta formar evaluar las diferencias presentes entre los 3 modos de
simulación.
68
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
A simple vista se puede ver como en sentido UP viajarán 4 trenes mientras que en
sentido DW únicamente viajarán 3, esto es debido a que tanto el desfase inicial como
69
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Por otro lado podemos observar cómo el tren 2 y el tren 3 en sentido UP y el tren 2
en sentido DW, son trenes incompletos que no van a realizar el trayecto completo.
En este caso en sentido UP, el tren 2 se va a desplazar entre las estaciones 0 y 4,
mientras que el tren 3 lo hará entre las estaciones 0 y 2. Para el sentido DW, el tren
2 se va a desplazar entre las estaciones 5 y 3.
También debemos tener en cuenta que todos los trenes realizan el mismo trayecto a
la misma velocidad, no obstante la distancia entre cada par de estaciones no tiene
por qué coincidir (en la Figura 6, las estaciones aparecen equiespaciadas, de ahí que
aparentemente los trenes estén realizando trayectos a diferente velocidad. Sin
embargo, esto no es así, todos los trenes se mueven a la misma velocidad en todos
los segmentos).
70
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Analizando la figura 7 correspondiente a los trenes en sentido UP, vemos que para el
tren 0 en la primera estación, se subirán todos los pasajeros (197) y si recordamos
los parámetros pasados al simulador la capacidad de los trenes quedó fijada en 400
plazas.
Cuando en una estación hay esperas previas, estos pasajeros llevarán preferencia a
la hora de subir a un tren, sobre los pasajeros que lleguen nuevos.
71
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Para el tren 0 en la estación 5 suben todos los pasajeros que llegan, mientras que en
la estación 4, ya se producen 50 esperas, pero el problema recae sobre la estación 3,
donde el número de pasajeros que llegan es demasiado alto, dando lugar a que más
de 200 pasajeros queden a la espera del siguiente tren. En las estaciones 2 y 1 de este
mismo tren, aunque se mantiene una ocupación de casi el 100%, no se producen
esperas, dado que la demanda de pasajeros llegados es menor que en las estaciones
anteriores. Finalmente en la estación 0 bajarán todos los pasajeros.
72
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Para el tren 0 en sentido UP, en su trayecto entre las estaciones 0-1, la demanda
atendida es máxima (100%) y el porcentaje de ocupación aumenta hasta alcanzar su
máximo en la estación 2, donde el porcentaje de demandas atendidas caerá hasta
casi el 40% como consecuencia de las esperas producidas.
73
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El tren 0, presenta una ocupación del 100% durante todo el recorrido a excepción de
la primera estación (estación 5), donde la ocupación es del 60%, sin embargo
podemos ver una caída abrupta del porcentaje de demanda atendida en la estación
3, debido al gran número de pasajeros llegados.
74
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Para la siguiente prueba hemos querido realizar un análisis de los tiempos medios de
retraso experimentados por los pasajeros en cada una de las estaciones, para de esta
forma poder hacer un estudio de cuáles son las estaciones más cargadas y poder así
ofrecer otras alternativas, como abrir nuevas servicios con paradas concretas con el
fin de disminuir los tiempos de espera.
Para comenzar el análisis de dicha gráfica, podemos decir que los tiempos medios de
espera en la estación 0, son más o menos constantes dado que se corresponde con
los tiempos mínimos de espera.
1
𝑊𝑎𝑖𝑡𝑇𝑖𝑚𝑒 [𝑒𝑠𝑡] = ∗ (𝐿𝑒𝑎𝑣𝑒𝑇𝑖𝑚𝑒[𝑡𝑟𝑒𝑛, 𝑒𝑠𝑡] − 𝐿𝑒𝑎𝑣𝑒𝑇𝑖𝑚𝑒[𝑡𝑟𝑒𝑛 − 1, 𝑒𝑠𝑡]) + 𝑒𝑎𝑑[𝑡𝑟𝑒𝑛 − 1, 𝑒𝑠𝑡]
2
∗ (𝐿𝑒𝑎𝑣𝑒𝑇𝑖𝑚𝑒[𝑡𝑟𝑒𝑛, 𝑒𝑠𝑡] − 𝐿𝑒𝑎𝑣𝑒𝑇𝑖𝑚𝑒[𝑡𝑟𝑒𝑛 − 1, 𝑒𝑠𝑡])
75
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
est: Estación.
76
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Figura 13: Tiempo medio de espera en cada estación y tren sentido UP modo 0
Por último, también podemos ver reflejado en está Figura, como el tren 2, va a ser
un tren incompleto que iniciará su recorrido en la estación 5 y lo finalizará en la
77
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
estación 4, dando como resultado un tiempo de espera nulo en las estaciones 3,2 y
1.
Figura 14: Tiempo medio de espera en cada estación y tren sentido Dw, modo 0
La última gráfica de este modo de simulación (ver Figura 13), presenta los resultados
globales de cada línea de tren.
78
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En el caso de los trenes 2 y 3, al ser trenes que no van a recorrer todas las estaciones,
van a presentar porcentajes de ocupación y demandas de pasajeros atendidos por
debajo de la media, por lo que se puede pensar en disminuir levemente el tiempo del
desfase inicial para conseguir mayor número de trenes que realicen las trayectorias
completas y así mejorar la calidad de la línea.
Para los trenes en sentido DW, se puede observar que el tren 0 como era de esperar,
presenta un tiempo de espera por encima de la media, no obstante tanto la
ocupación como la demanda atendida, son valores aceptablemente positivos.
79
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
80
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
81
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
82
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
83
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
84
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
85
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Modo de simulación 1.
HeadwayUP (espaciado entre trenes en sentido UP en min) = 8min
HeadwayDW (espaciado entre trenes en sentido DW en min) = 10min
Velocidad del tren = 60 km/h
Desf1 (desfase inicial en sentido UP) = 8 min
Desf2 (desfase inicial en sentido DW) = 10 min
La capacidad de cada tren será fijada en 400 plazas
El porcentaje de ocupación para trenes que salieron desde la estación origen
con anterioridad a t=0 va a ser del 50%.
El porcentaje de ocupación para trenes que finalizan su trayecto antes de
llegar a la última estación será del 0%
Ficheros de distancias y demanda de pasajeros correspondientes a 6
estaciones:
86
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
87
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
A diferencia del modo anterior y como se observa en la Figura 14, tenemos trenes
que salieron desde la estación origen en un instante anterior al comienzo de nuestro
intervalo temporal y gracias a esto, aunque continua habiendo trenes incompletos,
se dispone de un conjunto de servicios que cubren por completo el intervalo
temporal de análisis.
El tren 2 va a pasar de largo por la estación 1 sin realizar parada (Salto), mientras que
el tren 3 recorrerá todas las estaciones a excepción de la 2 donde va a realizar un
Salto.
Aunque los trenes 5 y 6 continúan después de parar en su última estación, estos van
a quedar fuera de nuestro horizonte de análisis y por tanto, el simulador solo va a
88
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
La Figura 15, describe el conjunto de pasajeros en sentido UP, que llegan a una
estación, cuántos de ellos suben, cuantos bajan o los que quedan esperando al
siguiente tren por problemas de capacidad o porque el tren no para en dicha
estación.
89
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El segundo salto producido por el tren 3 en la estación 2, dará lugar a esperas en las
estaciones 0 y 1 como consecuencia de los pasajeros que desean viajar a la estación
2.No obstante, debido a los saltos producidos, las llegadas de pasajeros aumentarán
tanto en la estación 1 para el tren 3, como en la estación 2 para el tren 4, dando lugar
a un aumento en las esperas de pasajeros de ambas estaciones.
90
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El tren 1 en su corto recorrido, tendrá una demanda de pasajeros atendidos del 100%
frente a un 60% de ocupación.
En esta figura también se aprecian el efecto producido por los saltos del tren 2 y del
tren 3 en las estaciones 1 y 2 respectivamente, donde se puede ver que la demanda
cae al 0%, mientras que la ocupación se mantiene constante, como consecuencia de
que no se detienen en las mencionadas estaciones, por lo que ningún pasajero podrá
subir o bajar del tren.
Los saltos introducidos van a provocar esperas en la estación 2 para el tren 4, que
quedarán reflejadas en una disminución de la demanda de pasajeros atendidos,
frente a un 100% de ocupación.
91
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
La siguiente Figura (Figura 17), es muy aclarativa a la hora de apreciar las esperas de
pasajeros provocadas por los saltos de estaciones.
92
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El salto realizado por el tren 3 en la estación 1, dio lugar a una elevada llegada de
pasajeros al tren 4 en esta misma estación, lo que origino gran cantidad de esperas
dando como resultado un tiempo medio de espera por pasajero de 5.6 min en
dicho tren.
Con respecto a la ocupación, se puede decir que el porcentaje de ocupación del tren
2 es inferior a la media, situación evidente dado que este pasa por la estación 1 sin
realizar parada.
Para los trenes 3 y 4 la ocupación será más elevada, mientras que para los trenes 5 y
6, esta vuelve a disminuir ya que se trata de trenes incompletos.
93
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
94
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
95
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
96
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
97
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
98
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
99
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
100
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
101
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En la llamada vemos que todos los datos introducidos en la clase timetable, son
idénticos a los empleados, pero hay que tener en cuenta que en este modo de
simulación esos parámetros no tendrán ningún efecto, ya que los tiempos de salida
y llegada de cada tren vienen proporcionados por el fichero de horario que se desea
imponer sobre la línea, en el ejemplo “horario_prueba2.txt”. Por tanto el simulador
únicamente recogerá el parámetro correspondiente al modo 2 de funcionamiento y
el nombre del fichero que almacena el horario.
102
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
103
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
104
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Una vez introducidos todos los parámetros procedemos a la simulación del modo 2,
comprobando en la Figura 19, correspondiente a los trayectos, que los vehículos
reproducen el comportamiento explicado anteriormente.
105
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El tren 4 vuelve a generar esperas, dado que este únicamente realiza el trayecto
comprendido entre las estaciones 0-3.
106
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El tren 0 mantiene durante todo su trayecto una ocupación media del 25%, dado que
el número de pasajeros llegados es reducido, no obstante presenta un porcentaje de
demanda de pasajeros atendidos del 100% durante todo el recorrido.
107
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
El tren 5 a pesar de realizar el trayecto completo, presentará una caída del porcentaje
de demandas atendidas en las estaciones 2 y 3 como consecuencia de un
desbordamiento en el número de pasajeros llegados, manteniendo así una ocupación
del 100%.
En la siguiente tabla (Tabla 14), se representa el orden en el cual los trenes van a ir
realizando sus paradas para cada estación. En esta tabla vemos claramente como en
la estación 0 (fila 0) el orden de paradas de los trenes va a ser:
108
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
También se ve claramente como la estación 2 (fila 2), va a ser la única en la cual todos
los trenes van a realizar parada.
Tabla 14: Clasificación de los trenes que van a parar en cada estación por orden de llegada, para el
modo de simulación 2.
Dicho esto se procede a simular la siguiente Figura (Figura 22), donde se pueden
apreciar los tiempos medios de espera de los pasajeros, en cada una de las
estaciones.
109
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
110
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
111
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
112
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
113
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
114
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
115
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
116
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
117
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Una vez generados los horarios (utilizando diferentes modos de simulación, o con el
mismo modo de simulación pero variando los parámetros de entrada) se procede a
la ejecución de la función “grafCmp1(horario1, horario2, horario3)” desarrollada en
el simulador, la cual va a mostrar las diferencias entre los horarios obtenidos, en
tanto y en cuanto a su tiempo medio de espera, porcentaje de ocupación media y
porcentaje medio de demandas atendidas. Para la ejecución de la función
“grafCmp1” los horarios obtenidos tienen que tener concordancia en cuanto al
número de estaciones simuladas.
118
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En este ejemplo los resultados obtenidos por el modo 2 de simulación van a ser de
peor calidad. Esto es consecuencia de haber introducido un horario no óptimo a
modo de prueba. El fichero “horarios.txt” contiene trenes que realizan saltos o trenes
que se no se van a desplazar entre origen y destino, dando lugar a altos tiempos de
espera por parte de los pasajeros, y bajos porcentajes de demandas de pasajeros
atendidos.
119
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Una vez explicados los modos de simulación, así como los parámetros de cada modo
y los ficheros de datos, procede a la explicación del código que da lugar al
procedimiento de simulación.
Una vez cargados los datos en el sistema, se va a proceder a calcular los perfiles de
carga en cada una de las estaciones y en los dos sentidos de circulación, para
posteriormente crear al menos un objeto (Timetable) asociado a un modo concreto
y en cuya creación se van a especificar los diferentes prámetros requeridos para la
simulación.
120
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
8.1 Clases
class timetable:
def __init__(self,modo,TTfile,headUP,headDW,TrenSpeed,Desf1,Desf2,OverrideCap):
Esquema 1: Clase
8.2 Atributos
ATRIBUTOS
self.AWT_u/d
self-AWT
self.Acumulado_u/d
self.ESP_tras_ut_u/d = np.zeros(NumEst, dtype=int).reshape(NumEst)
self.Eij_u/d=np.zeros(self.NumTrenU/D*NumEst*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst,NumEst)
self.escala
self.FirstStoppedTrenU/D =np.zeros(NumEst, dtype=int).reshape(NumEst)
self.LLE_tras_ut_u/d=np.zeros(NumEst, dtype=int).reshape(NumEst)
self.LastStoppedTrenU/D=np.zeros(NumEst, dtype=int).reshape(NumEst)
self.MatDemU/D=np.zeros(self.NumTrenU/D*NumEst*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst,NumEst)
self.ND_U/D=np.zeros(self.NumTren*NumEst, dtype=float).reshape(self.NumTren,NumEst)
self.NO_U/D=np.zeros(self.NumTrenD*NumEst, dtype=float).reshape(self.NumTrenD,NumEst)
self.NumSaTrD/U=np.zeros(self.NumTrenD/U, dtype=float).reshape(self.NumTrenD/U
self.NumTrenAntesU/D=np.zeros(self.NumTrenU/D, dtype=float).reshape(self.NumTrenU/D)
121
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
self.NumTrenU/D
self.NumTrenDetrasU/D=np.zeros(self.NumTrenU, dtype=float).reshape(self.NumTrenU/D)
self.Por_ocup_u/d
self.Ret_tras_ut_u/d
self.Sij_u/d=np.zeros(self.NumTrenU/D*NumEst*NumEst, dtype=float).reshape(self.NumU/DTrenU,NumEst,NumEst)
self.TESP_tras_ut_u/d=np.zeros(NumEst, dtype=int).reshape(NumEst)
self.TLLE_tras_ut_u/d=np.zeros(NumEst, dtype=int).reshape(NumEst)
self.Total_u/D
self.TrenAntesD/U=np.zeros(self.NumTrenD/D*NumEst, dtype=float).reshape(self.NumTrenD,/UNumEst)
self.TrenDetrasU/D=np.zeros(self.NumTrenU/D*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst)
self.TrenSaltaU/D=np.zeros(self.NumTrenU/D*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst)
self.TrenSpeed
self.WTA_est_u/d=np.zeros(self.NumTrenU/D, dtype=float)
self.WTA_tren_u/d=np.zeros(NumEst,dtype=float)
self.WT_tras_ut_u/d=np.zeros(NumEst, dtype=int).reshape(NumEst)
self.WTestU/D=np.zeros(NumEst*self.NumTrenU, dtype=float).reshape(self.NumTrenU,NumEst)
self.desfU/D
self.ead_u/d=np.zeros(self.NumTrenU/D*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst)
self.eeij_u/d=np.zeros(self.NumTrenU/D*NumEst*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst,NumEst)
self.headU/D
self.modo
self.neij_u=np.zeros(self.NumTrenU/D*NumEst*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst,NumEst)
self.nsij_u/d=np.zeros(self.NumTrenU/D*NumEst*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst,NumEst)
self.pl_u/d=np.zeros(self.NumTrenU/D*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst)
self.po_u/d=np.zeros(self.NumTrenU/D*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst)
self.pocDemU/D
self.pocU/Dest=np.zeros(NumEst,dtype=float).reshape(NumEst)
self.pocU/D=np.zeros(self.NumTrenU/D,dtype=float).reshape(self.NumTrenU/D)
self.psubU/D=np.zeros(self.NumTrenU/D,dtype=float).reshape(self.NumTrenU/D)
self.psubU/Eest=np.zeros(NumEst,dtype=float).reshape(NumEst)
self.sad_u/d=np.zeros(self.NumTrenU/D*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst)
self.sao_u/d=np.zeros(self.NumTrenU/D*NumEst, dtype=float).reshape(self.NumTrenU/D,NumEst)
self.tarrU/D=np.arange(NumEst*self.NumTrenU/D,dtype=float).reshape(self.NumTrenU/D,NumEst)
self.tdepU/D=np.arange(NumEst*self.NumTrenU/D,dtype=float).reshape(self.NumTrenU/D,NumEst)
self.tfinviajeU/D
122
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
self. AWT_u/d:
Retraso medio en las esperas para el sentido Up y Dw, únicamente de los pasajeros
que llegan durante el recorrido de los trenes, se mide en (min/pasajero).
Self.AWT:
Media entre el retraso Up, Dw y el total de pasajeros que llegan durante Horplan, se
mide en (min/pasajero).
self.Acumulado_u/d:
Pasajeros que esperan en cada estación después de haber pasado el último tren.
Pasajeros que quedan esperando tras la salida del tren, para cada par de estaciones
en ambos sentidos.
self.escala:
Variable que nos indica el primer tren que parará en cada estación.
Pasajeros que llegan a cada estación después de haber pasado el último tren.
123
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Indica el número de personas que se desplazan entre cada par de estaciones para
cada tren.
self.ND_U/D=np.zeros(self.NumTren*NumEst,dtype=float):
Número de pasajeros que se suben a cada tren en cada una de las estaciones.
self.NO_U/D = np.zeros(self.NumTrenD*NumEst).reshape(self.NumTrenD,NumEst):
Número de pasajeros que se baja de cada tren en cada una de las estaciones.
self.NumTrenU/D:
self.Por_ocup_u/d:
124
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
self.Ret_tras_ut_u/d:
Retraso total (suma de pasajeros que esperan en cada estación tras el último tren,
más la suma de pasajeros llegados a cada estación tras el último tren) dividido entre
el tiempo de espera a causa de los retrasos más el tiempo espera de los pasajeros
llegados tras el último tren.
Número de pasajeros que consiguen subir a cada tren para cada par de estaciones.
Tiempo total de esperas acumuladas después del último tren por los pasajeros que
quedan a la espera en cada estación (min).
Tiempo total de espera para todas personas que llegaron después del último tren, en
cada estación).
self.Total_u/D:
Número total de esperas acumuladas después de pasar el último tren más los que
llegan después de pasar este.
self.IncompletosD/U=np.zeros(self.NumTrenU/D*NumEst,dtype = float):
Matriz para trenes incompletos que pueden presentar los siguientes valores:
3: Indica que el tren va a pasar de largo por dicha estación sin realizar parada.
Marca con un ‘1’ las posiciones en las que un tren llegará a una estación para un
tiempo t<0.
self.TrenSpeed:
Retraso medio por persona en cada estación para pasajeros llegados después del
último tren (min/pasajero).
self.WTestU/D=np.zeros(NumEst*self.NumTrenU).reshape(self.NumTrenU,NumEst)
self.desfU/D:
Desfase inicial.
126
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
self.eeij_u/d=np.zeros(self.NumTrenU/D*NumEst*NumEst, dtype=float):
Pasajeros que esperaban y siguen sin poder subir al tren, para cada par de estaciones
y tren.
Pasajeros que esperaban y logran subir, para cada par de estaciones y tren.
self.headU/D:
self.modo:
Pasajeros que llegan y tienen que esperar (por causas de capacidad, o porque el tren
no va a parar en el destino deseado), para cada par de estaciones y tren.
self.pocDemU/D:
127
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
self.psubU/D = np.zeros(self.NumTrenU/D,dtype=float).reshape(self.NumTrenU/D):
self.tarrU/D=np.arange(NumEst*self.NumTrenU/D,dtype=float).reshape(self.NumTr
enU/D,NumEst):
self.tdepU/D=np.arange(NumEst*self.NumTrenU/D,dtype=float)reshape(self.NumTr
enU/D,NumEst)
Tiempo de salida de cada tren desde cada una de las estaciones (min).
self.tfinviajeU/D:
128
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Duración en minutos del trayecto completo de los trenes para los modos de
simulación 0 y 1.
8.3 Métodos
Métodos
RellenaModo0(self,headUP,headDW,TrenSpeed,tviajeU,tviajeD):
RellenaModo1(self,Head1,Head2,TrenSpeed,tviajeU,tviajeD):
RellenaModo2(self,FileTT):
calcula_tiempos(self):
calcula_llegadas(self,Escala=1):
calcula_incompletos(self):
demanda_tren(self,tren,sentido,Escala):
acumulada(self,Est1,Est2,Valor):
calcula_todo_timetable(self,porcentaje,porcentaje2,direcciones=AMBAS):
agrega_llegadas_OD(self):
calcula_todas_vars_timetable_UP/DW(self,porcentaje,porcentaje2):
calcula_FO_Dw(self):
calcula_FO_Dw(self):
report(self,Filereport,direccion=AMBAS):
Plot(self):
129
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
8.4 Pseudocódigo
En este apartado haremos una pequeña definición de cada una de las funciones
principales del simulador, así como entradas, salidas y sus diagrama UML
correspondientes.
8.4.1 main()
130
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
carga_distancias (distancias.txt)
carga_matriz (matriz.txt)
calcula_cargas (escala)
Horario.calcula_llegadas(escala)
Horario.calcula_incompletos ()
Horario.calcula_todo_timetable (Porcentaje1,Porcentaje2)
Horario.report ('Resultados.txt')
Horario.plot ()
Exit
131
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Esta función carga los datos procedentes del fichero DisDataFile en la variable global
LongSeg=np.arange(NumEst-1, dtype=int).reshape(NumEst-1) mediante una función
propia de la librería numpy, np.loadtxt(File)
Entradas:
carga_distancias (DisDataFile):
Exit
Esta función carga los datos procedentes del fichero MatDataFile en la variable global
matriz=np.arange(NumEst*NumEst, dtype=float).reshape(NumEst,NumEst)
mediante una función propia de la libreria numpy, np.loadtxt(File).
Entradas:
132
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
carga_matriz(MatDataFile):
For i (0,Numest):
For j (0,Numest):
matriz[i,j]=Escala*matriz[i,j]
Exit
Entradas:
133
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Exit
134
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Entradas:
135
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
If OverrideCap==1?
Si
TrenCap=max(PerfilCarga)
No
If modo !=2 ? RellenaModo2 (TTFile)
Si
TiempoViaje=long_linea/(TrenSpeed)+(NumEst-1)*DwellTime
No
NumTrenesInicioUp=TiempoViaje/HeadUP
If modo ==0 ?
NumTrenesInicioDw=TiempoViaje/HeadDw
Si
NumTrenesUp=(HorPlan- TrenesUp=(HorPlan-Desf1)/HeadUP
Desf1)/HeadUP TrenesDw=(HorPlan-Desf2)/HeaDw
NumTrenesDw=(HorPlan- NumTrenesUp=NumTrenesInicioUp+TrenesUp
Desf2)/HeaDw NumTrenesDw=NumTrenesInicioUp+TrenesDw
self.calcula_tiempos()
136
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Función para rellenar los tiempos de llegada y salida de los trenes, a cada una de las
estaciones, en los modos 0 y 1.
Después restamos a todos los trenes el tiempo desf1 lo que traslada todo el timetable
hacia la izquierda en el eje de tiempos.
Finalmente todos los que tengan valor < 0 se ponen a -1 = ANTES y los que tengan
valor > HorPlan se ponen a -2 = DESPUÉS.
137
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
No No
If Tiempo llegada[tren,est]<0 : If Tiempo llegada [tren,est]>0 :
Si Si
No
If Tiempo salida [tren,est]<0 : If Tiempo salida [tren,est]>0 :
No
Si Si
Exit
138
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Esta función captura, tanto el número de trenes en cada sentido, como los tiempos
de llegada y salida en el fichero FileTT, y los almacena en los atributos tarrU/D y
tdep/D.
Posteriormente comprueba aquellos tiempos que quedan fuera del intervalo HorPlan
y los debidos a saltos.
Entradas:
139
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
No
if os.path.exists(FileTT): ? print 'El Fichero de entrada '+FileTT+' no existe.'
Si
No No
If Tiempo llegada[tren,est]==-1 : If Tiempo llegada [tren,est]>HorPlan : If Tiempo llegada [tren,est]==-3 :
Si Si Si
Tiempo llegada tren [tren] = ANTES Tiempo llegada [tren,est] = DETRÁS Tiempo llegada [tren,est] = SALTA
No No
If Tiempo salida [tren,est]==-2 : If Tiempo salida [tren,est]>HorPlan : If Tiempo salida [tren,est]==-3 :
Si Si Si
Tiempo salida [tren,est] = ANTES Tiempo salida [tren,est] = DETRÁS Tiempo salida [tren,est] = SALTO
Exit
140
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Función que crea 4 atributos de tipo array y de tamaño NumEst, donde almacenará
cual es el primer tren en parar en cada estación (1 para cada sentido) y cuál es el
último tren en parar en cada estación (1 para cada sentido).
Entradas:
141
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
self.LastStoppedTren[est]=-3
self.FirstStoppedTren[est]=0
No
if self.tdep[tren,est]>0:
Si
FirstStoppedTren[est]=tren
break
self.MatDem[tren]=self.demanda_tren(tren,sentido,Escala)
Exit
142
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Calcula la demanda de pasajeros para cada tren y para cada par de estaciones. Toma
los instantes de salida tdep[tren] según el sentido del trayecto.
Entradas:
Salidas:
143
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
No
if tiempo de salida[tren,est]>0:
Si
Exit
144
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
145
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Si
If tiempo llegada == SALTA Incompletos[tren,est]=3
No
Si
If tiempo salida == DETRÁS Incompletos[tren,est]=2
No
Si
If tiempo salida == ANTES Incompletos[tren,est]=1
No
Si
If tiempo salida == TrenCortoInicio Incompletos[tren,est]=4
No
Si
If tiempo salida == TrenCortoFin Incompletos[tren,est]=5
No
Exit
146
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
En esta función se van a calcular todos los atributos del objeto timetable: Esperas
para cada par de estaciones E(i,j), subidas S(i,j), así como sus componentes ns(i,j),
ne(i,j), es(i,j), ee(i,j) (desagregación por cada par de estaciones) y las plazas libres y
ocupadas pl(tren,estación) y po(tren,estación).
Entradas:
147
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Self.agrega_llegadas_OD()
If tiempo de Si
salida[tren,est]==ANTES Plazas_libres[tren,est] = TrenCap*Porcentaje1/100
No
If tiempo de Si
salida[tren,est]==DETRÁS Plazas_libres[tren,est] = TrenCap*Porcentaje2/100
No
self.calcula_todas_vars_timetables (Porcentaje1,Porcentaje2)
agregaD(self.ead,self.Eij,self.NumTren)
agregaO(self.sao,self.Sij,self.NumTren)
agregaD(self.sad,self.Sij,self.NumTren)
Exit
148
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Realiza el cálculo de todas las variables, subidas, bajadas, plazas libres, plazas
ocupadas, esperas... considerando todos los tipos de trenes (ANTES, DETRÁS y
SALTO). A la hora de subir a un tren, los pasajeros que estuviesen esperando, siempre
llevarán preferencia sobre los recién llegados.
Entradas:
Ahora calculamos la función objetivo del timetable sin contar los que llegan al final
del todo. Primero identificamos el primer tren que para en cada estación.
Entradas:
Salidas:
149
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
150
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
For tren
(PrimeraParada[est],UltimaParada[est]+1)
Acumulador+=(esperas*t.esperas)+(0.5*llegadas*t.espera llegadas)
TiempoEspera[tren,est]=t.esperas+t.espera llegadas
Tiempo de espera[tren]=>Acumulador_tiempo/Acumulador_demanda
Tiempo de espera[est]=>Acumulador_tiempo/Acumulador_demanda
151
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
9.1 Conclusiones
Se cumple, por un lado, el objetivo de disponer de una herramienta para crear una base
sólida, con los elementos necesarios para la construcción de modelos de simulación
ferroviaria y por otro lado el de disponer de un software para simular diferentes
condiciones de servicio y evaluar la efectividad del sistema en términos de calidad, ante
situaciones variables de demanda.
La fase de simulación, es la etapa más compleja del proceso, ya que es necesario llevar
un control exhaustivo de los pasajeros durante todo el trayecto.No obstante, después
de haber realizado múltiples pruebas con el simulador, concluimos que el
comportamiento de un sistema real se corresponde con la parte central de la
simulación, dado que al acotar el espacio temporal, los trenes de los extremos no
realizarán el trayecto completo.
En base a los resultados obtenidos, se puede decir que el modelo presentado refleja el
comportamiento del sistema real, con un reducido margen de error, lo que permite
152
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
realizar los ensayos necesarios para aproximar el comportamiento del sistema real en
un escenario determinado.
Como líneas de trabajo futuro, puede ser necesario el desarrollo de una interfaz gráfica,
facilitando en gran medida la gestión del simulador por parte del usuario.
Esta puede ser desarrollada en QT o PYQT dando como resultado una visual bastante
más atractiva y eliminando la necesidad de estar trabajando sobre el propio código, que
puede resultar algo engorroso.
Por otra parte también tenemos algunas posibles líneas de trabajo futuro, como pueden
ser:
153
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
10 Bibliografía
Abbink, E.W.J., van den Berg, B.W.V., Kroon, L.G., Salomon, M. (2004). Allocation of
railway rolling stock for passenger trains. Transportation Science 38, 33-41.
Allen Downey, Jeffrey Elkner y Chris Meyers 2002, Aprenda a pensar como un
programador con Python.
Arabeyre, J., Fearnley, J., Steiger, F., Teather, W. (1969). The airline crew scheduling
problem: A survey. Transportation Science 3, 140-163.
Balakrishnan, N., Wong, R.T. (1990). A network model for the rotating workforce
scheduling problem. Networks 20, 25-42.
Balas, E., Ho, A. (1980). Set covering algorithms using cutting planes, heuristics and
subgradient optimization: A computational study. Mathematical Programming Study
12,37-60.
Barber F., Abril M., Salido M.A., Ingolotti L., Tormos P., Lova A. (2007). Survey of
automated systems for railway management. Technical Report DSIC-II/01/07,
Department of Computer Systems and Computation. Technical University of Valencia.
Barnhart, C., Johnson, E.L., Nemhauser, G.L., Savelsbergh, M.W.P., Vance, P.H. (1994).
Branchand-price: Column generation for solving huge integer programs. In: Birge, J.R.,
Murty, KG. (Eds.), Mathematical Programming: State of the Art 1994. University of
Michigan Press, Ann Arbor, pp. 186- 207.
Beasley, J.E. (1987). An algorithm for set covering problems. European Journal of
Operational Research 31, 85-93.
154
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Beasley, J.E. (1990). A Lagrangian heuristic for set covering problems. Naval Research
Logistics 37, 151-164.
Beasley, J.E., Chu, P.C. (1996). A genetic algorithm for the set covering
problem.European Journal of Operational Research 94,392-404.
Bodin, L., Golden, B., Assad, A., Ball, M. (1983). Routing and scheduling of vehicles and
crews: The state of the art. Computers & Operations Research 10, 63-211.
Bussieck M.R. (1998). Optimal lines in public rail transport. PhD thesis, Technische
Universität Braunschweig.
Bruno, G., Gendreau, M., and Laporte, G. (2002). A Heuristic for the Location of a Rapid
Transit Line, Computers & Operations Research, 29, pp: 1-12.
Bruno, G., Ghiani, G., and Improta, G. (1998). A Multi-modal Approach to the Location
of a Rapid Transit Line, European Journal of Operational Research, 104, pp: 321-332.
Cai, X., Goh, C.J. (1994). A fast heuristic for the train scheduling problem.Computers &
Operations Research 21,499-510.
Canca D., Zarzo A., Espinosa P. (2009). Operación compartida de líneas de ferrocarril.
Canca D., Zarzo A., Algaba E., Barrena E. (2011). Confrontation of Different Objectives in
the determination of train scheduling. Procedia - Social and Behavioral Sciences, 20,
302-312.
Caprara, A., Fischetti, M., Toth, P., Vigo, D., Guida, P.L. (1997). Algorithms for railway
crew management.Mathematical Programming 79,125-141.
Caprara, A., Fischetti, M., Toth, P., Vigo, D. (1998). Modeling and solving the crew
rostering problem. Operations Research 46, 820-830.
Caprara, A., Fischetti, M., Toth, P. (1999).A heuristic method for the set covering
problem.Operations Research 47,730-743.
Caprara, A., Fischetti, M., Toth, P. (2000).Algorithms for the set covering problem.Annals
of Operations Research 98,353-371.
Ernst, A.T., Jiang, H., Krishnamoorthy, M., Nott, H., Sier, D. (2001).An integrated
optimization model for train crew management. Annals of Operations Research 108,
211-224.
Ernst, A.T., Jiang, H., Krishnamoorthy, M., Owens, B., Sier, D. (2004b).Annotated
bibliography of personnel scheduling and rostering. Annals of Operations Research
127,21-144.
Ernst, A.T., Jiang, H., Krishnamoorthy, M., Sier, D. (2004a). Staff scheduling and
rostering: A review of applications, methods and models. European Journal of
Operational Research 153,3-27.
156
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Ferris M., Rishabh J., Dirkse S. (2011). GDXMRW: Interfacing GAMS and MATLAB
Fores, S., Proll, L., Wren, A. (2001). Experiences with a flexible driver scheduler. In:
Daduna, J.Voss, S. (Eds.), Computer-Aided Transit Scheduling. Lecture Notes in
Economics and Mathematical Systems, vol. 505. Springer-Verlag, Berlin, pp. 137-152.
Freiing, R., Lentink, R.M., Odijk, M. (2001). Scheduling train crews: A case study for the
Dutch railways. In: Daduna, J., Voss, S. (Eds.), Computer-Aided Transit Scheduling.
Lecture Notes in Economics and Mathematical Systems, vol. 505. Springer-Verlag,
Berlin, pp. 153-166.
Freiing, R., Lentink, R.M., Wagelmans, A.P.M. (2004). A decision support system for
crewplanning in passenger transportation using a flexible branch-and-price
algorithm.Annals of Operations Research 127,203-222.
Gamache, M., Soumis, F. (1998).A method for optimally solving the rostering problem.
In: Yu,G. (Ed.), Operations Research in Airline Industry. Kluwer Academic, Boston, pp.
124-157.
Gamache, M., Soumis, F., Marquis, G., Desrosiers, J. (1999). A column generation
approach forlarge scale aircrew rostering problems. Operations Research 47,247-263.
García Álvarez A., Cillero Fernández A. y Rodríguez Jericó M.P. (1998) Operación de
Trenes de Viajeros. Claves para la gestión avanzada del Ferrocarril. Fundación de los
Ferrocarriles Españoles.
157
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
García, R. and Marín, A. (2002). Parking Capacity and Pricing in Park'n Ride Trips: A
Continuous Equilibrium Network Design Problem, Annals of Operations Research, 116,
pp: 153-178.
Hamacher, H., Liebers, A., Schöbel, A., Wagner, D., and Wagner, F. (2001).Locating New
Stops in a Railway Network, Electronic Notes in Theoretical Computer Science, 50, 11
pages.
Higgins A., Kozan E. (1998) Modeling train delays in urban networks, Transportation
Science, 32 (4), 346-357
Higgings, A., Kozan, E., Ferreira, L. (1997). Heuristic techniques for single line train
scheduling. Journal of Heuristics 3,43-62.
Ingolotti L., Lova A., Barber F., Tormos P., Salido M.A., Abril M. (2006). New heuristics to
solve the csop railway timetabling problem. Advances in Applied Artificial Intelligence.
LNAI, Subseries of Lecture Notes in Computer Science.
Jacobs, L.W., Brusco, MJ. (1995). A local search heuristic for large set-covering problems.
Naval Research Logistics 52,1129-1140.
Jovanovic, D., Harker, P.T. (1991). Tactical scheduling of rail operations: The SCAN I
system. Transportation Science 25,46-64.
Kroon, L.G., Dekker, R., Vromans, MJ.C.M. (2005). Cyclic railway timetabling: A
stochastic optimization approach. Technical Report ERS-2005-051-LIS, Erasmus
University Rotterdam.
Kroon, L.G., Peeters, L.W.P. (2003). A variable trip time model for cyclic railway
Kroon, L.G., Romeijn, H.E., Zwaneveld, PJ. (1997). Routing trains through railway
stations: Complexity issues. EuropeanJournal of OperationalResearch 98,485-498.
158
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Kwan, A., Kwan, R., Parker, M., Wren, A. (2001). Producing train driver schedules under
different operating strategies. In: Wilson, N. (Ed.), Computer-Aided Transit Scheduling.
Lecture Notes in Economics and Mathematical Systems, vol. 471. Springer-Verlag,
Berlin, pp. 129-154.
Laporte, G., Marín, A., Mesa, J.A., and Ortega, F.A. (2007). An Integrated Methodology
for the Rapid Transit Network Design Problem. Lecture Notes in Computer Science.
Algorithmic Methods for Railway Optimization, volume 4359, pp: 187-199.
Laporte, G., Mesa, J.A., and Ortega, F.A. (2002).Locating Stations on Rapid Transit
Lines,Computers & Operations Research, 29, pp: 741-759.
Laporte, G., Mesa, J.A., Ortega, F.A., and Sevillano, I. (2005). Maximizing Trip Coverage
in the Location of a Single Rapid Transit Alignment, Annals of Operations Research,
136,pp: 49-63.
Liebchen C., Möhring R. (2002). A case study in periodic timetabling, Electronic Notes in
Theoretical Computer Science, 66 (6), 1-14.
Liebchen C., Peeters L. (2002). Some practical aspects of periodic timetabling, in: P.
Chamoni et al. (Eds.), Operations Research 2001, Germany: Springer.
Liebchen C., Peeters L. (2009). Integral cycle bases for cyclic timetabling, Discrete
Optimization, 6 (1), 98-109
Lorena, L.A.N., Lopes, F.B. (1994). A surrogate heuristic for set covering
problems.European Journal of Operational Research 79,138-150.
Marín, A. (2007). An extension to Rapid Transit Network Design Problem, TOP, 15, pp:
231-241.
Morgado, E., Martins, J. (1992). Scheduling and managing crew in the Portuguese
railways. Expert Systems with Applications 5,301-321.
159
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Nachtigall K., (1994). A Branch and Cut Approach for Periodic Network Programming,
Technical Report 29, Hildesheimer Informatik-Berichte.
Nachtigall K., Voget S., (1997). Minimizing waiting times in integrated fixed interval
timetables by upgrading railway tracks, European Journal of Operational Research, 103
(3), 610-627.
Pham Ngoc H. (2004). Intercity train timetable with better passenger service, Master
Thesis, Centre for Industrial Management, Catholic University Leuven, Belgium.
Ryan, D.M. (1992). The solution of massive generalized set partitioning problems in
aircrew rostering. Journal of the Operational Research Society 43,459-467.
Serafini, P., Ukovich, W. (1989). A mathematical model for periodic event scheduling
problems.SIAM Journal on Discrete Mathematics 2,550-581.
Shannon, R; Johannes, J. D. (1976). «Systems simulation: the art and science». IEEE
Sweetser, A., (1999), "A Comparison of System Dynamics (SD) and Discrete Event
Simulation (DES)", Proceedings of 17th International Conference of the System
Dynamics Society and 5th Australian & New Zealand Systems Conference, Wellington,
New Zealand, 20-23 July, p. 8, The System Dynamics Society.
160
Título: Diseño e implementación en python de un
Organización Industrial modelo de simulación de horarios de servicios
y Gestión de empresas I ferroviarios
Autor: Francisco Hernández de la torre
Tutor: José David Canca Ortiz
Voorhoeve M. (1993). Rail Scheduling with Discrete Sets, Technical Report, University of
Technology, Eindhoven, The Netherlands.
Wardman M., Shires J., Lythgoe W., Tyler J. (2004). Consumer benefits and demand
impacts of regular train timetables, International Journal of Transport Management, 2
(1), 39-49.
161