Fundamental diagram of traffic.

Aplicaciones de Python a la ingeniería Civil - Tráfico.

Python, y la programación en general, no son solo herramientas que pueden utilizar los ingenieros informáticos. La realidad es que la programación es una herramienta muy útil en cualquier trabajo técnico e incluso también en trabajos "de letras".
Para demostrar esto vamos a ver el diagrama fundamental del tráfico. En el que se basa toda la ciencia del tránsito y modelaje del mismo. Lo que vamos a demostrar aquí es la base de la ciencia que decide cuánto tiempo ha de durar el verde del semáforo de al lado de tu casa, cuantos carriles ha de haber en la autovía, etc.
Para obtener el diagrama fundamental vamos a utilizar datos abiertos de Fochzentrum Jülich. En esta institución realizaron a partir de 2010 experimentos que consistían en hacer que una gran cantidad de personas recorriera pasillos, intersecciones de pasillos, etc. Cada persona llevaba un gorro con un código QR y unas cámaras situadas sobre ellos guardaba sus posiciones 25 veces por segundo.

BaSiGo Project

Nuestro experimento. Pasillo unidirecional.

Vamos a estudiar este experimento. Em el cual los participantes en el experimento tenían que recorrer un pasillo de izquierda a derecha. El pasillo mide 18 metros, nosotros analizaremos que pasa en los 10 metros centrales. El experimento empieza con una entrada de 1 metro de ancho y una salida de 5 metros de ancho. En cada repetición del experimento la entrada se agranda y la salida se achica, como podemos ver en las imágenes inferiores:

Setup Width

Al principio la entrada es estrecha y la salida es muy ancha, esto permite que los participantes fluyan sin impedimento alguno. Con cada repetición del experimento y con el estrechamiento de la salida se va creando un cuello de botella.
Para analizar este experimento vamos a utilizar pandas y para interpretar el resultado utilizaremos Holoviz. No voy a describir el código, puedes encontrar el mismo aquí.

Definamos el diagrama fundamental del tráfico. Es un gráfico que compara flujo y densidad y también tiene en cuenta la velocidad. Vamos a describir cada una de estas variables:

  • Densidad: Cantidad de participantes en el pasillo en un momento dado dividido por el area del pasillo.
  • Flujo: Cantidad de gente que cruza la salida del pasillo por segundo.
  • Velocidad: Velocidad media de todos los participantes en un momento dado.

Vamos a dibujar la densidad en el eje X y el flujo en el eje Y. El color de cada uno de los puntos representará la velocidad.

Aquí podemos ver el diagrama fundamental resultado de la primera repetición del experimento, en la cual la entrada es de 1 metro y la salida es de 5 metros de ancho.

In [6]:
import holoviews as hv
import hvplot.pandas
hv.extension('bokeh')
uni_corr_exp[0].plot_fd().opts(xlim=(0,3),ylim=(0,2.5))
Out[6]:

Analizando este gráfico observamos que tenemos velocidades altas. Siempre por arriba de 1.3 metros por segundo y que la densidad y el flujo parecen tener una relación directa, cuanta más densidad y más gente dentro del pasillo más flujo y mas gente que puede salir. Cuando esto se da decimos que estamos en free flow.

En esta imagen podemos ver el momento en el que el pasillo estaba más ocupado, el momento de mayor densidad.

In [7]:
uni_corr_exp[0].draw_most_dense()
Out[7]:

Pasemos directamente a la repetición número 7 del experimento que tiene una entrada de 5 metros de ancho y una salida de 3 metros de ancho.

In [8]:
uni_corr_exp[6].plot_fd() 
Out[8]:

Observamos velocidades más bajas, por debajo de 0.5 metros por segundo. Podríamos decir que cuando la densidad sobrepasa las 8 personas por metro cuadrado hay una caida importante de la velocidad y el flujo deja de crecer o empieza a decrecer.

Si vemos el momento más denso del experimento observamos algo muy diferente:

In [9]:
uni_corr_exp[6].draw_most_dense() 
Out[9]:

Para poder concluir la explicación sobre el diagrama fundamental combinaremos los gráficos de todaslas repeticiones del experimento, desde el 1 hasta el 9.

In [10]:
fdiagram = uni_corr_exp[0].fddata.hvplot.points(x='DENSITY', y='FLOW', color='SPEED', cmap='RdYlGn')
for exp in uni_corr_exp:
    fdiagram *= exp.plot_fd()
fdiagram
Out[10]:

Podemos ver dos áreas diferenciadas, una con densidades menores que 7 y otra con densidades mayores. En la primera, de la parte izquierda tenemos free flow, conforme más gente hay en el pasillo más gente puede salir de él. A partir de una densidad de 7 personas por metro cuadrado el pasillo se atasca y el flujo cae, de hecho a partir de ese punto la relación entre densidad y flujo pasa a ser indirecta, cuanto más densidad menos flujo, al contrario que en la parte izquierda.

Este diagrama es la base de la teoría del tráfico, todas las infraestructuras se diseñan intentando que estén siempre en la parte izquierda. Ya sean estas infraestructuras autopistas para vehículos o pasillos para personas. En posteriores artículos intentaremos emular estos datos reales a través de el modelaje con agentes. Si quieres ver más artículos sobre Python y modelaje de tránsito puedes visitarme aquí