El objetivo de este proyecto ha sido el diseño de un modelo de optimización de líneas ferroviarias lo más veraz y útil posible, con el fin de generar soluciones reales considerando el consumo, determinando las frecuencias y usando datos reales relativos a capacidades de trenes que se usan en las redes de cercanías españolas.
El modelo propuesto tiene como principal finalidad el estudio y la reducción del consumo energético de este tipo de transporte, resulta aplicable de forma general a cualquier línea y, por tanto, es una herramienta útil para reducir costes totales de funcionamiento.
Para ello han sido desarrollados dos objetivos, uno de ellos teniendo únicamente en cuenta la disminución del consumo, y el segundo teniendo también en cuenta el coste de la maquinaria necesario para desarrollar la actividad, considerando así mismo el punto de vista de los pasajeros, medido en términos del tiempo promedio de viaje.
Han sido resueltos seis escenarios diferentes en los que hemos podido estudiar cómo afecta al consumo la variación de la demanda de pasajeros, la variación de los modelos de trenes estudiados y el cambio en las condiciones de la vía, tanto para variaciones de las restricciones de velocidad como para la variación de las pendientes de la vía.
El diseño de la codificación del modelo es la parte más compleja de proyecto, debido al elevado número de variables y el grado de las ecuaciones del mismo. En el modelo propuesto existe un elevado número de datos, algunos definidos como escalares y otros como parámetros matriciales. La elección de los valores específicos de todos estos datos afecta a la naturaleza del estudio. Por otro lado, constituyen una gran riqueza para la realización de experimentos reales dado que el modelo propuesto es genérico y por tanto capaz de optimizar el horario regular en cualquier tipo de línea.
En base a los resultados obtenidos, se puede indicar que el modelo muestra el comportamiento real del sistema, lo que nos permite realizar optimizaciones reales de las líneas de transporte por ferrocarril en función de las condiciones del estudio que se desee realizar.
94
Bibliografía
Álvarez, A. G. (2011). Costes operativos de los servicios de transporte de viajeros por ferrocarril,Parte I. Fundación de los Ferrocarriles Españoles.
Álvarez, A. G. (2011). Introducción a los costes en el transporte. Fundación de los Ferrocarriles Españoles.
Cheng, G., Shiwen, Z., Feng, Z., Jianguo, J., & Xinheng, W. (2014). An Integrated Energy-Efficient Operation Methodology for Metro Systems Based on a Real Case of Shanghai Metro Line One. Energies, 7305-7329.
Ferropedia. (s.f.). Obtenido de www.ferropedia.es
GAMS. (s.f.). The General Algebraic Modeling System. Obtenido de http://www.gams.com/
García Álvarez, A., & Martin Cañizares, M. d. (2008). Consumo de energía y emisiones asociadas al transporte por ferrocarril. Grupo Gestor del Proyecto EnerTrans.
García Álvarez, A., & Martín Cañizares, M. d. (2010). Metodología de cálculo del consumo de energía de los trenes de viajeros y actuaciones en el diseño del material rodante para su reducción. Grupo Gestor del Proyecto ElecRail.
García Álvarez, A., Cillero Hernandez, A., & Jericó Rodriguez, P. (2011). Operación de trenes de viajeros, claves para la gestión avanzada del ferrocarril. Parte I. Fundación de los Ferrocarriles Españoles.
Gattuso, D., & Restuccia, A. (2013). A tool for railway transport cost evaluation. Elsevier Ltd.
Gerben M, S., & Rob M.P, G. (2015). Running time supplements: energy-efficient train control versus robust timetables. 6th International Conference on Railway Operations Modelling and Analysis - RailTokyo2015. Tokyo: Department of Transport and Planning, Delft University of Technology.
Gerben M, S., & Rob M.P, G. (2015). The interplay between energy-efficient train control and scheduled running time supplements. Journal of Rail Transport Planning & Management, 1-15.
Gurría, E. A. (2005). Determinación de las condiciones óptimas de conducción como forma de reducir el consumo energético de los trenes. Universidad Pontificia Comillas(ICAI).
Haichuan, T., C. Tyler, D., P.E, Xiaoyun, F., & PhD. (2015). Optimization of Train Speed Profiles for a Metro Transit System by Genetic Algorithms. Southwest Jiaotong University, Chengdu, China.
K.M, K., K.T, K., & M.S, H. (2011). A Model and Approaches for Synchronized Energy Saving in Timetabling. Korea Railroad Research Institute, Uiwang-City, Korea.
95 López, Á. M. (2012). Diseño e implementación en Matlab de un modelo de simulación para el ámbito ferroviario. Universidad de Sevilla, Departamento de Organización Industrial y Gestión de Empresas I.
Lu, S. (2011). Optimising Power Management Strategies for Railway Traction Systems. The University of Birmingham, UK.
Renfe. (s.f.). Red Nacional de los Ferrocarriles Españoles. Obtenido de www.renfe.com
Shuai, S., Xiang, L., Tao, T., & Ziyou, G. (2013). A Subway Train Timetable Optimization Approach Based on Energy-Efficient Operation Strategy. IEEE Transactions on intelligente transportation vol 14 no 2, 883-893.
Torre, F. H. (2014). Diseño e implementación en Python de un modelo de simulación de horarios de servicios ferroviarios. Universidad de Sevilla, Departamento de Organización Industrial y Gestión de Empresas I.
Xiang, L., & Hong K, L. (2014). An energy-efficient scheduling and speed control approach. Transportation Research Part B, 73-89.
96
Anexo
sets
otrack conjunto de open tracks - a todos los efectos secciones entre par de estaciones - /1*5/ Maxseg numero máximo de segmentos dentro de un opentrack /1*4/
otrackseg(otrack,Maxseg) conjunto explícito de segmentos de toda la línea /1.1, 1.2, 2.1, 3.1, 4.1, 5.1/ ;
alias (otrack,o,oo); alias (station,s,ss,sss); alias (maxseg,ms,mss); parameter
posicion(o,ms) DATO orden absoluto de los segmentos en la línea en sentido up /1.1=1, 1.2=2, 2.1=3, 3.1=4, 4.1=5, 5.1=6/ orden_u(o,ms) SE CALCULA orden relativo de los diferentes segmentos a calcular de forma automática
orden_d(o,ms) SE CALCULA orden relativo de los diferentes segmentos a calcular de forma automática sglon(o,ms) DATO longitud de segmentos en km /1.1=3, 1.2=4, 2.1=6, 3.1=3, 4.1=4, 5.1=5/
sgvel(o,ms) DATO (se usaría si se deseara trabajar con velocidades fijadas) velocidad de segmentos km por hora /1.1=45, 1.2=35, 2.1=50, 3.1=50, 4.1=50, 5.1=50/
sgvel_u(o,ms) DATO velocidad máxima que se permite en cada uno de los segmentos km por hora up /1.1=110, 1.2=110, 2.1=110, 3.1=110, 4.1=110, 5.1=110/
97 sgvel_d(o,ms) DATO velocidad máxima que se permite en cada uno de los segmentos km por hora down /1.1=110, 1.2=110, 2.1=110, 3.1=110, 4.1=110, 5.1=110/
sgvelmin_u(o,ms) DATO velocidad máxima que se permite en cada uno de los segmentos km por hora up /1.1=40, 1.2=40, 2.1=40, 3.1=40, 4.1=40, 5.1=40/
sgvelmin_d(o,ms) DATO velocidad máxima que se permite en cada uno de los segmentos km por hora down /1.1=40, 1.2=40, 2.1=40, 3.1=40, 4.1=40, 5.1=40/
sgcur(o,ms) DATO readio de curvatura de los segmentos en km /1.1=0, 1.2=0, 2.1=5, 3.1=0, 4.1=0, 5.1=0/
sgpen(o,ms) DATO pendiente de segmentos en porcentaje en sentido up metros de subida por cada 100 m de avance /1.1=0.8, 1.2=-0.8, 2.1=0, 3.1=0.8, 4.1=0.8, 5.1=-0.8/
qar_u(o) SE CALCULA carga en el segmento entre estaciones s y s up medida en pasajeros por hora qar_d(o) SE CALCULA carga en el segmento entre estaciones s y s dw medida en pasajeros por hora qar(o) SE CALCULA carga máxima entre los dos sentidos
qmax SE CALCULA carga máxima a lo largo de toda la línea
llegadas_u(s) SE CALCULA personas que llegan a una estación con destino al resto up llegadas_d(s) SE CALCULA personas que llegan a una estación con destino al resto dw bajadas_u(s) SE CALCULA bajadas en estación s direccion up
bajadas_d(s) SE CALCULA bajadas en estación s direccion dw
bajadas_ot_u(o) SE CALCULA bajadas al final de opentrack o (estación o+1) dirección up bajadas_ot_d(o) SE CALCULA bajadas al final de opentrack o (estación o) dirección dw total_u SE CALCULA total de personas que han viajado en dirección up
98 total_d SE CALCULA total de personas que han viajado en dirección dw
linelen SE CALCULA longitud de la línea - se calcula -
tlen SE CALCULA tiempo necesario para recorrer la línea en un sentido si las velocidades fueran constantes -se calcula - tciclo SE CALCULA tiempo total en dar vuelta incluyendo paradas y doble sentido - se calcula - si las velocidades fueran constantes
altura(o,ms) SE CALCULA valor subido en km de cada segmento dentro de cada open track arco(o,ms) SE CALCULA sirve para calcular el ángulo de una subida
arcograd(o,ms) SE CALCULA para pasar el ángulo de subida a radianes par_veq_u(o,ms) SE CALCULA velocidad de equilibrio en subida
par_veq_d(o,ms) SE CALCULA velocidad de equilibrio en subida(por la pendiente) ;
**************************************************************************** * Características del tren en cuanto a consumo
**************************************************************************** Scalar
*Tiempos
dwell tiempo de parada en cada estación bajada y recogida de pasajeros - minutos - /1/ tvuelta tiempo empleado en dar vuelta tren en estación inicial y final - minutos- /5/ tseg tiempo de seguridad entre dos trenes consecutivos en cualquier estación /2/
99 * Datos de tren
Factorscala factor de escala para hacer crecer la demanda /1/ C coeficiente aerodinámico /5.0E-3/
Q flujo entrante de aire en m^3 por s /100/
num_eje_loc numero de ejes de la locomotora /3/ num_eje_vag numero de ejes de los vagones /4/
vagonsize número de personas que caben en un vagón /208/ Coef_resist_meca coeficiente resistencia mecánica /5E-4/ nl número de locomotoras /2/
pesoloc peso locomotoras toneladas /40/ pesovag peso vagón toneladas /26/
Pot_max_llantas potencia máxima en llantas del tren en kw /2100/ Mg peso de las partes giratorias del tren/1/
* Otros datos y constantes de conversión
vmin velocidad mínima de los trenes para la velocidad de equilibrio /10/ grav gravedad /9.8/
from_km_to_ms conversión km por hora a metros segundo /0.27777/ from_ms_to_km la contraria /3.6/
100 from_min_to_h al contrario /0.0166666/
* Valores auxiliares que se usan en restricciones de variables binarias COTA1 para ecuaciones de comparación de pendiente /100/ COTA2 para ecuaciones de comparación de velocidad /300/ coste_vagon coste de un vagon /1E+6/
coste_locomotora coste de una locomotora /3E+6/ ;
Positive variables
vsegvel_u(o,ms) velocidad en cada segmento suponiendo que son variables y están acotadas por limitaciones max vsegvel_d(o,ms) velocidad en cada segmento suponiendo que son variables y están acotadas por limitaciones max tviaje_u tiempo total promedio de viaje sentido u
tviaje_d tiempo total promedio de viaje sentido d ATT_u tiempo promedio de viaje u
ATT_d tiempo promedio de viaje d ATT tiempo promedio de viaje y espera Consumo_u consumo de un tren dirección up Consumo_d consumo de un tren dirección dw
sconsumo_u(o,ms) consumo en segmento ms de opentrack o sentido up sconsumo_d(o,ms) consumo en segmento ms de opentrack o sentido dw
101 inc_vel_u(o,ms) incremento de diferencias de velocidades al cuadrado subida
inc_vel_d(o,ms) incremento de diferencias de velocidades al cuadrado bajada veq_u(o,ms) velocidad de equilibrio en subida
veq_d(o,ms) velocidad de equilibrio en subida(por la pendiente)
rt_u(o,ms) running time por segmento en sentido up para resolver singularidad en ecuaciones de tiempo de ciclo rt_d(o,ms) running time por segmento en sentido dw para resolver singularidad en ecuaciones de tiempo de ciclo sum_rt_u Suma de tienmpos de recorrido en sentido up
sum_rt_d Suma de tiempos de recorrido en sentido dw ;
Integer variables
headway headway de la línea freq frequency de la la línea nv numero de vagones por tren
fleetsize número de trenes necesarios en la línea
vtciclo Tamaño del tiempo de ciclo (ida y vuelta de un tren en la línea) en minutos
vdwell Tiempo de parada en estaciones por ahora el mismo en todas las estaciones para todos los trenes aunque fácilmente cambiable
vtvuelta Tiempo de vuelta del tren en cabeceras de la línea ;
102 Binary variables
compara_pen_u(o,ms) comparador de pendientes para cada tramo de subida compara_pen_d(o,ms) comparador de pendientes para cada tramo de bajada compara_vel_u(o,ms) comparador de diferencias de velocidades al cuadrado subida compara_vel_d(o,ms) comparador de diferencias de velocidades al cuadrado bajada ;
Free variable
VarFO valor de la función objetivo
vsgpeneq_u(o,ms) pendientes equilibrio subida vsgpeneq_d(o,ms) pendientes equilibrio bajada ;
Table demanda(s,s) demanda entre estaciones 1 2 3 4 5 6 1 0 80 100 250 150 50 2 100 0 100 200 250 60 3 100 50 0 100 150 80 4 250 150 75 0 80 50 5 150 200 100 60 0 50 6 100 100 50 100 75 0
103 ; parameter numseg(o); set segments(ms); loop(o,segments(ms)=yes$otrackseg(o,ms); display segments; numseg(o)=card(segments); ); display numseg; loop(o, loop(ms, orden_u(o,ms)=-1; orden_d(o,ms)=-1; orden_u(o,ms)$otrackseg(o,ms)=posicion(o,ms)-sum(oo$(ord(oo)<ord(o)),numseg(oo)); orden_d(o,ms)$otrackseg(o,ms)=numseg(o)- orden_u(o,ms)+1; ); ); display orden_u,orden_d;
104 linelen=sum(otrackseg(o,ms),sglon(o,ms));
tlen=sum(otrackseg(o,ms),60*(sglon(o,ms)/sgvel(o,ms)))+dwell*(card(s)-1); tciclo=2*tvuelta+2*tlen;
display linelen,tlen, tciclo;
loop(o, qar_u(o)=sum(s$(ord(s)<=ord(o)),sum(ss$(ord(ss)>ord(o)),demanda(s,ss)*Factorscala)); ); display qar_u; loop(o, qar_d(o)=sum(s$(ord(s)>ord(o)),sum(ss$(ord(ss)<=ord(o)),demanda(s,ss)*Factorscala)); ); display qar_d; loop(o, qar(o)=max(qar_u(o),qar_d(o)); ); qmax=0; loop(o, if (qmax < qar(o),qmax=qar(o));
105 ); display qar,qmax; loop(s$(ord(s)<card(s)), llegadas_u(s)=sum(ss$(ord(ss)>ord(s)),demanda(s,ss)*Factorscala); ); loop(s$(ord(s)>1), llegadas_d(s)=sum(ss$(ord(ss)<ord(s)),demanda(s,ss)*Factorscala); ); display llegadas_u,llegadas_d; total_u=sum(s, llegadas_u(s)); total_d=sum(s, llegadas_d(s));
display llegadas_u, llegadas_d,total_u, total_d;
106 bajadas_u(s)=sum(ss$(ord(ss)<ord(s)),demanda(ss,s)*Factorscala); ); loop(s$(ord(s)<card(s)), bajadas_d(s)=sum(ss$(ord(ss)>ord(s)),demanda(ss,s)*Factorscala); );
display bajadas_u, bajadas_d;
loop(o,bajadas_ot_u(o)=sum(s$(ord(s)=ord(o)+1),bajadas_u(s)); );
loop(o,bajadas_ot_d(o)=sum(s$(ord(s)=ord(o)),bajadas_d(s)); );
display bajadas_ot_u, bajadas_ot_d;
loop(o, loop(ms, arco(o,ms)=0;
107 arco(o,ms)$(sgpen(o,ms)>0 AND (otrackseg(o,ms)))=arctan(sgpen(o,ms));
arco(o,ms)$(sgpen(o,ms)<0 AND (otrackseg(o,ms)))=arctan(-sgpen(o,ms)); arcograd(o,ms)=arco(o,ms)*360/(2*pi); ); ); loop(o, loop(ms, altura(o,ms)=0;
altura(o,ms)$(sgpen(o,ms)>0 AND (otrackseg(o,ms)))=sglon(o,ms)*sin(arco(o,ms)); altura(o,ms)$(sgpen(o,ms)<0 AND (otrackseg(o,ms)))=sglon(o,ms)*sin(arco(o,ms)); ); ); display arco,arcograd,altura; headway.lo=3; headway.up=30; freq.lo=2; freq.up=20; nv.lo=0;
108 fleetsize.lo=0; *fleetsize.fx=2; vdwell.lo=1; vdwell.up=5; vsegvel_u.lo(o,ms)=sgvelmin_u(o,ms); vsegvel_d.lo(o,ms)=sgvelmin_d(o,ms); vsegvel_u.up(o,ms)=sgvel_u(o,ms); vsegvel_d.up(o,ms)=sgvel_d(o,ms); rt_u.lo(o,ms)=0; rt_u.lo(o,ms)=0; rt_u.up(o,ms)=60; rt_u.up(o,ms)=60; vtvuelta.lo=2; vtvuelta.up=60; veq_u.lo(o,ms)=vmin; veq_d.lo(o,ms)=vmin; veq_u.up(o,ms)=5*sgvel_u(o,ms); veq_d.up(o,ms)=5*sgvel_d(o,ms);
109 ****************************************************************************
***
*** COMIENZAN LAS RESTRICCIONES DEL MODELO ***
*************************************************************************** * Restricciones 1. Relación entre headway y freceuencia
*************************************************************************** Equation rela_head_freq relacion entre frecuencia y headway;
rela_head_freq.. headway*freq=e=60;
***************************************************************************
* Restricciones 2. Capacidad suficiente para atender la demanda en el segmento más cargado de la línea ***************************************************************************
Equation capacidad capacidad mínima requerida; capacidad.. qmax=l=(nv+nl)*vagonsize*freq;
*COMENTARIO: Esta restricción es válida sólo si los vagones tractores también llevan pasajeros. En otro caso qmax=g=(nv)*vagonsize*freq;
***************************************************************************
* Restricciones 3. Auxiliares, Sólo para medir la capacidad sobrante y saber si los trenes van muy vacios. Es para comprobar coherencia en la solución del problema.
110 Positive variables
ocupa_d(o) ocupa_u(o) ;
Equation ocupacion1(o) cálculo de ocupacion de los trenes;
ocupacion1(o).. ocupa_u(o)=e=((nv+nl)*vagonsize*freq)-qar_u(o); Equation ocupacion2(o) cálculo de ocupacion de los trenes;
ocupacion2(o).. ocupa_d(o)=e=((nv+nl)*vagonsize*freq)-qar_d(o);
***************************************************************************
* Restricciones 4. Relación entre headway, tiempo de ciclo y tamaño de la flota que se necesita para prestar el horario durante el tiempo
*************************************************************************** Equation fleet_size cálculo del número de trenes que hacen falta;
fleet_size.. fleetsize*headway=e=vtciclo;
*************************************************************************** * Restricciones 5A. Relaciones lógicas entre distintos tiempos
*************************************************************************** Equation acotar_dwell acotando dwell time;
111 ***************************************************************************
* Restricciones 5B. Relaciones lógicas entre distintos tiempos
*************************************************************************** Equation acotar_headway acotando headway;
acotar_headway.. vdwell+vtvuelta=l=headway; Equation acotar_headway2 acotando headway; acotar_headway2.. vdwell+tseg=l=headway;
*************************************************************************** * Restricciones 6. Calculando tiempos de recorrido por sentido.
*************************************************************************** Equation runtime_up(o,ms) para evitar dividir por vsgvel en ecuaciones tviaje;
runtime_up(o,ms)$otrackseg(o,ms).. rt_u(o,ms)*vsegvel_u(o,ms)=e=sglon(o,ms)*60;
Equation runtime_dw(o,ms) para evitar dividir por vsgvel en ecuaciones tviaje;
runtime_dw(o,ms)$otrackseg(o,ms).. rt_d(o,ms)*vsegvel_d(o,ms)=e=sglon(o,ms)*60; ***************************************************************************
* Restricciones 6B. Calculando suma de tiempos de recorrido por sentido. *************************************************************************** Equation Sumart_u;
112 Sumart_u.. sum_rt_u=e=sum(otrackseg(o,ms),rt_u(o,ms));
Equation Sumart_d;
Sumart_d.. sum_rt_d=e=sum(otrackseg(o,ms),rt_d(o,ms));
*************************************************************************** * Restricciones 7. Calculando tiempo de ciclo
*************************************************************************** Equation defineTciclo definir el tiempo de ciclo cuando es variable;
defineTciclo.. vtciclo=e=2*vdwell*card(s)+2*vtvuelta+(sum(otrackseg(o,ms),(rt_u(o,ms))) +sum(otrackseg(o,ms),(rt_d(o,ms))));
************************************************************************** * Restricciones 8.
**************************************************************************
Equation tviaje_up calculo del tiempo viajando sobre tramos computando volúmenes;
tviaje_up.. tviaje_u=e=sum(o, qar_u(o)*sum(otrackseg(oo,ms)$(ord(oo)=ord(o)), rt_u(o,ms))) +sum(s$(ord(s)<card(s)),llegadas_u(s)*(headway)/2)
+sum(o$(ord(o)<card(o)),(qar_u(o)-bajadas_ot_u(o))*vdwell);
113 tviaje_dw.. tviaje_d=e=sum(o, qar_d(o)*sum(otrackseg(oo,ms)$(ord(oo)=ord(o)), rt_d(o,ms)))
+sum(s$(ord(s)>1),llegadas_d(s)*(headway)/2)
+sum(o$(ord(o)>1),(qar_u(o)-bajadas_ot_d(o))*vdwell);
Equation att_up promedio up; att_up.. ATT_u=e=tviaje_u/total_u;
Equation att_dw promedio dw; att_dw.. ATT_d=e=tviaje_d/total_d;
Equation att_tot promedio total;
att_tot.. ATT=e=(total_u*ATT_u+total_d*ATT_d)/(total_u+total_d);
******************************************************************** * Calculo de consumo de energía
**************************************************************** Positive variables
* Por cada segmento ******************
114 * Energia mecanica en recta por segmento
vCResMec_u(o,ms) consumo energía mecánica en recta subida vCResMec_d(o,ms) consumo energía mecánica en recta bajada * Energia mecanica en curva por segmento
vCResCur_u(o,ms) consumo energía mecánica en curva subida vCResCur_d(o,ms) consumo energía mecánica en curva bajada * Energia mecanica entrada aire por segmento
vCResEntrAir_u(o,ms) consumo energía entrada aire subida vCResEntrAir_d(o,ms) consumo energía entrada aire bajada * Energia mecanica resistencia aerodinámica por segmento
vCResAerodin_u(o,ms) consumo energía resistencia aire subida vCResAerodin_d(o,ms) consumo energía resistencia aire bajada * Energia mecanica gravitatoria por segmento
vCResGrav_u(o,ms) consumo energía gravedad subida vCResGrav_d(o,ms) consumo energía gravedad bajada * Energia mecanica resistencia por frenada por segmento
vCResFrenos_u(o,ms) consumo energía disipada frenos subida vCResFrenos_d(o,ms) consumo energía disipada frenos bajada * Energia mecanica cambio de velocidad (cinética) por segmento
115 vCReCinetica_u(o,ms) consumo energía cambio velocidad subida
vCReCinetica_d(o,ms) consumo energía cambio velocidad bajada
* Por líneas *************
* Variables por línea (acumulación de segmentos)
* Energia mecanica en recta por línea
vlCResMec_u consumo energía mecánica en recta subida vlCResMec_d consumo energía mecánica en recta bajada * Energia mecanica en curva por línea
vlCResCur_u consumo energía mecánica en curva subida vlCResCur_d consumo energía mecánica en curva bajada * Energia mecanica resistencia entrada aire por línea
vlCResEntrAir_u consumo energía entrada aire subida vlCResEntrAir_d consumo energía entrada aire bajada * Energia mecanica resistencia aerodinámica por línea
vlCResAerodin_u consumo energía resistencia aire subida vlCResAerodin_d consumo energía resistencia aire bajada
116 * Energia mecanica gravitatoria por línea
vlCResGrav_u consumo energía gravedad subida vlCResGrav_d consumo energía gravedad bajada * Energia mecanica resistencia frenos línea
vlCResFrenos_u consumo energía disipada frenos subida vlCResFrenos_d consumo energía disipada frenos bajada * Energia mecánica variaciones de e cinética por línea
vlCReCinetica_u consumo energía cambio velocidad subida vlCReCinetica_d consumo energía cambio velocidad bajada
* Auxiliares
Numero_Ejes numero de ejes del tren Masa masa del tren sin pasajeros Acurv(o,ms) área de curvatura
* Energia consumida total sumando ambos sentidos vlCResMec_t consumo energía mecánica en recta total vlCResCur_t consumo energía mecánica en curva total vlCResEntrAir_t consumo energía entrada aire total
117 vlCResAerodin_t consumo energía resistencia aire total
vlCResGrav_t consumo energía potencial gravitatoria total vlCResFrenos_t consumo energía disipada frenos total vlCReCinetica_t consumo energía cambio de velocidad total vlConsumototal consumo total de todas las energías
* Variables que se usan para el cálculo de energía cinética (por segmento)
vVel_ini_u(o,ms) variable diferencias al cuadrado de velocidades del primer otrack subida
vVel_u(o,ms) variable diferencias al cuadrado de velocidades en cualquier otrack menos el inicial en subida vVel_ini_d(o,ms) variable diferencias al cuadrado de velocidades del primer otrack subida
vVel_d(o,ms) variable diferencias al cuadrado de velocidades en cualquier otrack menos el inicial en subida * Variables que se usan para el cálculo de energía cinética (por línea)
sum_dif_vel_u suma de diferencias de todas las velocidades al cuadrado en sentido subida sum_dif_vel_d suma de diferencias de todas las velocidades al cuadrado en sentido bajada ;
Binary variables
compara_pen_u(o,ms) comparador de pendientes para cada tramo de subida compara_pen_d(o,ms) comparador de pendientes para cada tramo de bajada
118 compara_vel_u(o,ms) comparador de diferencias de velocidades al cuadrado subida
compara_vel_d(o,ms) comparador de diferencias de velocidades al cuadrado bajada ;
*************************************************************************** * Restricciones 9.
*************************************************************************** Equation calculo_numero_ejes numero de ejes;
calculo_numero_ejes.. Numero_ejes=e=nl*num_eje_loc+nv*num_eje_vag; Equation Masa_del_tren masa del tren;
Masa_del_tren.. Masa=e=nl*pesoloc+nv*pesovag;
*************************************************************************** * Restricciones 10.
*************************************************************************** ******************************************************************
* Calculo del consumo de energía en recta
****************************************************************** * Sentido UP
119 Consumo_resis_mecanica_u(o,ms)$(otrackseg(o,ms))..
vCResMec_u(o,ms)=e=(Coef_resist_meca*1000*(Masa+0.07*qar_u(o))+0.65*Masa+13*Numero_ejes)*sglon(o,ms)*(10/3600); * Sumando UP para toda la línea
Equation Consumo_resis_mecanica_linea_u consumo energia mecánica en recta;
Consumo_resis_mecanica_linea_u.. vlCResMec_u=e=sum(otrackseg(o,ms), vCResMec_u(o,ms));
*Sentido DW
Equation Consumo_resis_mecanica_d(o,ms) consumo energía mecánica en recta; Consumo_resis_mecanica_d(o,ms)$(otrackseg(o,ms))..
vCResMec_d(o,ms)=e=(Coef_resist_meca*1000*(Masa+0.07*qar_d(o))+0.65*Masa+13*Numero_ejes)*sglon(o,ms)*(10/3600); * Sumando DW para toda la línea
Equation Consumo_resis_mecanica_linea_d consumo energía mecánica en recta;
Consumo_resis_mecanica_linea_d.. vlCResMec_d=e=sum(otrackseg(o,ms), vCResMec_d(o,ms));
* Sumando para ambos sentidos
Equation Consumo_total_resis_mecanica_linea consumo total de la resistencia mecánica en recta; Consumo_total_resis_mecanica_linea.. vlCResMec_t=e=(vlCResMec_u+vlCResMec_d);
*************************************************************************** * Restricciones 11.
120 ******************************************************************
* Calculo del consumo de energía en curva
****************************************************************** Equation Area_curvatura(o,ms) curvatura de tramos q no son rectos;
Area_curvatura(o,ms)$(sgcur(o,ms)<> 0 and (otrackseg(o,ms))).. Acurv(o,ms)=e=600/(1000*sgcur(o,ms));
* Sentido UP
Equation Resist_curva_u(o,ms) consumo energía mecánica en curva;
Resist_curva_u(o,ms)$(otrackseg(o,ms)).. vCResCur_u(o,ms)$(sgcur(o,ms) <>
0)=e=(1/3600)*sglon(o,ms)*(Masa+0.07*qar_u(o))*Acurv(o,ms) ; * Sumando UP para toda la línea
Equation Resist_curva_linea_u consumo energía mecánica en curva;
Resist_curva_linea_u.. vlCResCur_u=e=sum(otrackseg(o,ms)$(sgcur(o,ms) <> 0), vCResCur_u(o,ms));
* Sentido DW
Equation Resist_curva_d(o,ms) consumo energía mecánica en curva;
Resist_curva_d(o,ms)$(otrackseg(o,ms)).. vCResCur_d(o,ms)=e=(1/3600)*sglon(o,ms)*(Masa+0.07*qar_d(o))*Acurv(o,ms); * Sumando DW para toda la línea
121 Resist_curva_linea_d.. vlCResCur_d=e=sum(otrackseg(o,ms), vCResCur_d(o,ms));
* Sumando para ambos sentidos
Equation Resist_curva_linea_total consumo energía mecánica en curva total; Resist_curva_linea_total.. vlCResCur_t=e= (vlCResCur_u+ vlCResCur_d); *************************************************************************** * Restricciones 12.
*************************************************************************** ******************************************************************
* Calculo del consumo de energía entrada aire
****************************************************************** * Sentido UP
Equation Resist_entrada_aire_u(o,ms) consumo energía entrada aire;
Resist_entrada_aire_u(o,ms)$(otrackseg(o,ms)).. vCResEntrAir_u(o,ms)=e=0.034*Q*vsegvel_u(o,ms)*sglon(o,ms)*(10/3600); * Sumando UP para toda la línea
Equation Resist_entrada_aire2_u consumo energía entrada aire;
Resist_entrada_aire2_u.. vlCResEntrAir_u=e=sum(otrackseg(o,ms),vCResEntrAir_u(o,ms)); * Sentido DW
122 Resist_entrada_aire_d(o,ms)$(otrackseg(o,ms)).. vCResEntrAir_d(o,ms)=e=0.034*Q*vsegvel_d(o,ms)*sglon(o,ms)*(10/3600) ;
* Sumando DW para toda la línea
Equation Resist_entrada_aire2_d consumo energía entrada aire;
Resist_entrada_aire2_d.. vlCResEntrAir_d=e=sum(otrackseg(o,ms), vCResEntrAir_d(o,ms)); * Sumando para ambos sentidos
Equation Resist_entrada_aire_total consumo energía entrada aire total;
Resist_entrada_aire_total.. vlCResEntrAir_t=e= vlCResEntrAir_u+ vlCResEntrAir_d;
*************************************************************************** * Restricciones 13.
*************************************************************************** ******************************************************************
* Calculo del consumo de energía por resistencia del aire (aerodinámica) ****************************************************************** * Sentido UP
Equation Resist_aerodinamica_u(o,ms) consumo energía resistencia aire;
Resist_aerodinamica_u(o,ms)$(otrackseg(o,ms)).. vCResAerodin_u(o,ms)=e=C*(vsegvel_u(o,ms)**2)*sglon(o,ms)*(10/3600); * Sumando UP para toda la línea
123 Equation Resist_aerodinamica2_u consumo energía resistencia aire;