Metodología de estimación de bajada en buses

Esta sección describe la metodología utilizada para estimar el punto de bajada de una etapa de viaje en bus. La estimación se basa en la trayectoria GPS del bus, la ubicación de subida y la siguiente transacción de la misma persona usuaria dentro del día.

La lógica general consiste en recorrer la trayectoria GPS del bus desde el punto de subida hacia adelante, buscando el punto GPS que minimiza un índice de tiempo generalizado. Este índice combina el tiempo transcurrido dentro del vehículo y la distancia caminable desde un posible punto de bajada hasta la siguiente transacción de la persona usuaria.


1. Determinación del GPS de subida

Primero se identifica el GPS asociado a la subida de la persona usuaria. Este punto corresponde al registro GPS del bus más coherente con el momento y ubicación de la validación o subida.

A partir de este GPS de subida se inicia la búsqueda hacia adelante en la trayectoria del vehículo.

Conceptualmente:

gps_subida = GPS del bus asociado a la transacción de subida
trayectoria_bus = secuencia ordenada de GPS del vehículo

La trayectoria se encuentra ordenada temporalmente, por lo que el algoritmo recorre los registros GPS posteriores al GPS de subida.


2. Búsqueda del punto probable de bajada

Una vez determinado el GPS de subida, se recorre la trayectoria del bus GPS a GPS. Para cada punto GPS candidato se calcula la distancia entre ese punto y la siguiente transacción de la persona usuaria.

La siguiente transacción puede representar una nueva subida, por ejemplo en otro bus, metro o tren. Bajo el supuesto de continuidad del viaje, el punto de bajada de la etapa actual debería estar cerca del lugar donde ocurre la siguiente transacción, considerando una distancia caminable razonable.

En este proceso se utiliza una distancia caminable máxima de:

distancia_caminable_maxima = 500 metros

Es decir, solo se consideran candidatos de bajada ubicados a 500 metros o menos de la siguiente transacción.


3. Índice de tiempo generalizado

Para cada GPS candidato de bajada se calcula un índice de tiempo generalizado. Este índice busca balancear dos componentes:

  1. El tiempo de viaje acumulado en el bus.
  2. El tiempo equivalente de caminata desde el punto candidato de bajada hasta la siguiente transacción.

La fórmula utilizada es:

indice = (distancia_a_siguiente_transaccion / velocidad_caminata) * penalizacion_caminata
         + tiempo_gps_candidato

Donde:

velocidad_caminata = 1.5 m/s
penalizacion_caminata = 2.5

Por lo tanto:

indice = (distancia_a_siguiente_transaccion / 1.5) * 2.5
         + tiempo_gps_candidato

El algoritmo selecciona como bajada estimada el GPS candidato que tenga el menor índice, siempre que cumpla las condiciones de consistencia espacial y temporal.


4. Caso con siguiente transacción disponible

Cuando existe una siguiente transacción de la misma persona usuaria, el algoritmo utiliza esa transacción como referencia espacial y temporal para estimar la bajada.

Para cada GPS posterior al GPS de subida:

  • Se calcula la distancia entre el GPS candidato y la ubicación de la siguiente transacción.
  • Se calcula el tiempo estimado de caminata entre ambos puntos.
  • Se calcula el tiempo disponible para el transbordo.
  • Se verifica que la persona usuaria tenga tiempo suficiente para caminar desde el punto candidato hasta la siguiente transacción.
  • Se exige que la distancia esté dentro del umbral caminable.
  • Se selecciona el GPS que minimiza el índice de tiempo generalizado.

La condición temporal principal es:

tiempo_transbordo - tiempo_caminata > 0

Esto significa que el tiempo entre el GPS candidato de bajada y la siguiente transacción debe ser suficiente para caminar desde el punto de bajada estimado hasta el punto donde ocurre la siguiente validación.


5. Caso de última transacción del día

Cuando la etapa corresponde a la última transacción del día, no existe una siguiente transacción real para calcular un tiempo de transbordo.

En este caso, la metodología utiliza como referencia la primera transacción del día, pero solo para evaluar distancia espacial. No se puede calcular una condición de consistencia temporal de transbordo.

Por lo tanto, el algoritmo:

  • Recorre los GPS posteriores al GPS de subida.
  • Calcula la distancia entre cada GPS candidato y la ubicación de referencia.
  • Calcula el índice de tiempo generalizado.
  • Considera solo puntos dentro de la distancia caminable máxima.
  • Selecciona el GPS con menor índice.

En este caso no se aplica la condición:

tiempo_transbordo - tiempo_caminata > 0

porque no existe una siguiente transacción posterior que permita estimar el tiempo real disponible para caminar.


6. Condición de término de búsqueda

La búsqueda sobre la trayectoria del bus no continúa indefinidamente. El algoritmo se detiene cuando se cumple alguna de las siguientes condiciones:

tiempo_gps_candidato - tiempo_gps_subida > 2 horas

Es decir, si han pasado más de dos horas desde el GPS de subida, se detiene la búsqueda.

En el caso con siguiente transacción disponible, también se detiene si el tiempo de transbordo se vuelve negativo:

tiempo_transbordo < 0

Esto ocurre cuando el GPS candidato ya se encuentra temporalmente después de la siguiente transacción, por lo que no puede representar una bajada válida anterior al nuevo evento de viaje.


7. Distancia recorrida en vehículo

Durante el recorrido de la trayectoria GPS, el algoritmo acumula la distancia recorrida por el bus entre puntos GPS consecutivos.

Esta distancia acumulada permite estimar la distancia recorrida en vehículo entre la subida y la bajada seleccionada.

Conceptualmente:

distancia_en_vehiculo_acumulada += distancia(gps_actual, gps_siguiente)

Cuando un GPS candidato pasa a ser el mejor candidato de bajada, se guarda la distancia acumulada hasta ese punto:

distancia_en_vehiculo_recorrida = distancia_en_vehiculo_acumulada

Este valor puede utilizarse como estimación de la distancia de la etapa sobre la trayectoria recorrida por el vehículo.


Pseudocódigo de estimación de bajada

Entrada:
    gps_subida
    trayectoria_bus
    siguiente_transaccion
    existe_siguiente_transaccion
    distancia_caminable_maxima = 500 metros
    velocidad_caminata = 1.5 m/s
    penalizacion_caminata = 2.5
    tiempo_maximo_busqueda = 2 horas

Inicializar:
    indice_minimo = infinito
    distancia_minima = infinito
    gps_bajada = no_encontrado

    distancia_en_vehiculo_acumulada = 0
    distancia_en_vehiculo_recorrida = 0

Recorrer cada gps_candidato desde gps_subida hasta el final de la trayectoria_bus:

    distancia_a_siguiente = distancia_2d(
        ubicacion_siguiente_transaccion,
        ubicacion_gps_candidato
    )

    indice = (distancia_a_siguiente / velocidad_caminata) * penalizacion_caminata
             + tiempo_gps_candidato

    gps_siguiente = GPS posterior a gps_candidato

    Si gps_siguiente existe:
        distancia_en_vehiculo_acumulada += distancia_2d(
            ubicacion_gps_candidato,
            ubicacion_gps_siguiente
        )

    Si existe_siguiente_transaccion:

        tiempo_transbordo = tiempo_siguiente_transaccion - tiempo_gps_candidato
        tiempo_caminata = distancia_a_siguiente / velocidad_caminata

        Si indice < indice_minimo
           Y distancia_a_siguiente <= distancia_caminable_maxima
           Y tiempo_transbordo - tiempo_caminata > 0:

            gps_bajada = gps_candidato
            indice_minimo = indice
            distancia_minima = distancia_a_siguiente
            distancia_en_vehiculo_recorrida = distancia_en_vehiculo_acumulada

        Si tiempo_gps_candidato - tiempo_gps_subida > tiempo_maximo_busqueda
           O tiempo_transbordo < 0:

            detener búsqueda

    Si no existe_siguiente_transaccion:

        Si indice < indice_minimo
           Y distancia_a_siguiente <= distancia_caminable_maxima:

            gps_bajada = gps_candidato
            indice_minimo = indice
            distancia_minima = distancia_a_siguiente
            distancia_en_vehiculo_recorrida = distancia_en_vehiculo_acumulada

        Si tiempo_gps_candidato - tiempo_gps_subida > tiempo_maximo_busqueda:

            detener búsqueda

Salida:
    gps_bajada
    distancia_minima
    indice_minimo
    distancia_en_vehiculo_recorrida

Interpretación metodológica

El punto de bajada estimado corresponde al GPS del bus que mejor equilibra la cercanía espacial con la siguiente transacción y la factibilidad temporal de que la persona usuaria haya caminado desde ese punto hasta la siguiente validación.

La distancia caminable máxima de 500 metros funciona como restricción espacial. Esto evita seleccionar puntos de bajada demasiado alejados de la siguiente transacción.

La condición temporal del transbordo evita seleccionar puntos del bus que, aunque estén espacialmente cerca de la siguiente transacción, no dejan tiempo suficiente para que la persona usuaria camine hasta el siguiente punto de validación.

El índice de tiempo generalizado penaliza la caminata, asignándole un peso mayor que el tiempo en vehículo. Esto refleja que, en la práctica, una persona usuaria no necesariamente elige el punto espacialmente más cercano, sino un punto que resulta razonable considerando el avance del bus, el tiempo disponible y la conexión con la siguiente etapa.