You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"Este enfoque revela la infraestructura física de transbordo. Al agrupar estaciones cercanas, emergen los grandes polígonos de movilidad de la ciudad."
"Evalúa la convergencia puntual sin agrupaciones, detectando puntos específicos (coordenadas únicas) que soportan una gran carga de vectores vehiculares."
10205
10205
]
@@ -10622,7 +10622,7 @@
10622
10622
"id": "93ef8b59",
10623
10623
"metadata": {},
10624
10624
"source": [
10625
-
"---\n",
10625
+
"<hr/>\n",
10626
10626
"### 6.1. Distribución de la Capilaridad Matemática (Ley de Potencias)\n",
10627
10627
"La topología de la red sigue una distribución de **Scale-Free Network** (Ley de Potencias). \n",
10628
10628
"¿Por qué ocurre esto? En los sistemas de transporte reales, la inmensa mayoría de las paradas actúan como nodos de paso simples (1 conexión de entrada y 1 de salida = FC de 2). Por el contrario, un grupo extremadamente reducido de nodos actúa como absorbedores masivos de rutas (decenas de conexiones). Esta desigualdad genera la curva logarítmica descendente que vemos a continuación."
@@ -10761,7 +10761,7 @@
10761
10761
"id": "1cc75250",
10762
10762
"metadata": {},
10763
10763
"source": [
10764
-
"---\n",
10764
+
"<hr/>\n",
10765
10765
"## 7. Anexo: Diagnóstico Especulativo para Ruta Anillar (Periférico)\n",
10766
10766
"Este apartado aísla los nodos y Macro-Hubs que cruzan o se nombran \"Periférico\". Se divide en la perspectiva Matemática y Geográfica para identificar anclajes potenciales."
10767
10767
]
@@ -17892,7 +17892,7 @@
17892
17892
"id": "a105e9e7",
17893
17893
"metadata": {},
17894
17894
"source": [
17895
-
"---\n",
17895
+
"<hr/>\n",
17896
17896
"**Nota Aclaratoria:** *Los mapas mostrados en la Sección 7 representan únicamente una evaluación de la infraestructura preexistente. Aún no se traza ni se mapea el recorrido geométrico propuesto para el \"Corredor Anillar\", por lo que esta sección se mantiene en un plano puramente especulativo para identificar los puntos naturales de anclaje de la futura línea.*"
Copy file name to clipboardExpand all lines: notebooks/NOTES/graph_builder.md
+7-14Lines changed: 7 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,8 +3,7 @@
3
3
**¿Qué hace este archivo en resumen?**
4
4
Es el "arquitecto" de nuestra red. Toma todas las estaciones y líneas de transporte sueltas y las teje para formar un grafo (una red conectada). Su trabajo más importante es simular la realidad: conectar estaciones cercanas para que el usuario pueda transbordar caminando, cobrándole el tiempo de caminata más el tiempo de espera en el andén.
5
5
6
-
---
7
-
6
+
<hr/>
8
7
## 1. Los Diccionarios Base (Los Acuerdos de la Realidad)
9
8
10
9
Antes de conectar cosas, la clase `VFTGraphBuilder` define las reglas del juego usando diccionarios:
@@ -29,17 +28,15 @@ FALLBACK_FRECUENCIA = {
29
28
}
30
29
```
31
30
32
-
---
33
-
31
+
<hr/>
34
32
## 2. El Director de Orquesta: `build_graph()`
35
33
36
34
Es la función principal. Lo que hace es:
37
35
38
36
1. Construye las vías normales (trenes y camiones avanzando de estación a estación).
39
37
2. Si le decimos que opere en modo `"REALISTIC_INTEGRATION"`, manda llamar a la función de "snapping" para crear los caminos peatonales invisibles entre estaciones cercanas.
40
38
41
-
---
42
-
39
+
<hr/>
43
40
## 3. La Magia de los Transbordos: `_apply_pedestrian_snapping()`
44
41
45
42
Aquí es donde ocurre la integración intermodal. El algoritmo agarra un compás, se para en una estación y busca si hay otras estaciones dentro del radio de tolerancia (ej. 85 metros). Si encuentra una, crea un puente peatonal de ida y vuelta.
## 🚨 Justificación Técnica de la Velocidad Peatonal
68
64
69
65
Para calcular el `tiempo_caminata_min`, en el código hacemos una conversión equivalente a caminar a **5 km/h (1.38 m/s)**.
@@ -74,8 +70,7 @@ Para calcular el `tiempo_caminata_min`, en el código hacemos una conversión eq
74
70
75
71
Como nuestro modelo asume un trayecto de transferencia (población económicamente activa en movimiento continuo dentro de un nodo de transbordo sin esperar semáforos), adoptamos el límite superior de **1.38 m/s (5 km/h)**, logrando un balance entre la norma urbana y los cálculos de isócronas globales.
76
72
77
-
---
78
-
73
+
<hr/>
79
74
## ⚠️ Limitante de Datos: Cobertura Incompleta de Cablebús (CBB)
80
75
81
76
El backend Go (`apimetro_db`) reporta únicamente **19 estaciones de Cablebús** en la tabla `lineas` (verificado 2026-04-18). El sistema real opera con más estaciones distribuidas en las Líneas 1 y 2.
@@ -84,8 +79,7 @@ El backend Go (`apimetro_db`) reporta únicamente **19 estaciones de Cablebús**
84
79
-**Impacto en Fuerza Capilar:** los nodos masivos de CBB reciben menos conexiones de superficie de las reales.
85
80
-**Acción requerida:** verificar tabla `lineas` en `apimetro_db` filtrando `sistema = 'CBB'` y completar el registro de estaciones faltantes. Hasta entonces, los indicadores de CBB deben interpretarse como estimaciones conservadoras.
86
81
87
-
---
88
-
82
+
<hr/>
89
83
## 📐 Fundamento del Coeficiente de Fricción Vial (CF) — alpha por derecho de vía
90
84
91
85
El `FrictionCalculator` en `src/core/models/impedance.py` usa la siguiente tabla de `alpha` para calcular `CF = 1 + (alpha × BETA_SATURACION_CDMX)`:
@@ -103,8 +97,7 @@ El `FrictionCalculator` en `src/core/models/impedance.py` usa la siguiente tabla
103
97
104
98
**Nota metodológica:** Los `FALLBACK_VELOCIDAD` en `VFTImpedanceModel` representan **velocidad de flujo libre** (sin congestión). El CF aplica la penalización. Esta separación evita el double-counting que ocurriría si el fallback ya incorporara congestión y el CF la volviera a aplicar.
105
99
106
-
---
107
-
100
+
<hr/>
108
101
## 🔬 Observación de Semántica de Datos: Banqueta vs. Carril (Apimetro ↔ VFTModel)
Copy file name to clipboardExpand all lines: notebooks/NOTES/impedance.md
+6-12Lines changed: 6 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,8 +3,7 @@
3
3
**¿Qué hace este archivo en resumen?**
4
4
Es el "tasador de tiempo" de la red. Una vez que `graph_builder.py` construyó el grafo con sus nodos y aristas, este módulo recorre cada segmento y le inyecta un **peso temporal en minutos** basado en tres factores reales: la distancia física del tramo, la velocidad comercial del sistema, y el nivel de interferencia del tráfico urbano sobre esa vía. Es la implementación directa de la **Ecuación VFT**.
5
5
6
-
---
7
-
6
+
<hr/>
8
7
## 1. `FrictionCalculator` — El Coeficiente de Fricción Vial (Cf)
9
8
10
9
Este módulo auxiliar traduce el tipo de derecho de vía de una línea en un penalizador matemático. La idea central: no es lo mismo correr por un túnel del Metro (sin semáforos, sin tráfico) que circular en un camión por Insurgentes entre autos particulares.
**Firma importante:** recibe `(lon, lat, lon, lat)` — primero longitud, luego latitud. Los nodos del grafo están almacenados como `(lon, lat)`, así que la llamada siempre es `haversine(u[0], u[1], v[0], v[1])`.
103
100
104
-
---
105
-
101
+
<hr/>
106
102
### 2.3 `apply_impedance()` — La Inyección sobre el Grafo
107
103
108
104
Este método itera sobre todas las aristas del grafo `DiGraph` y aplica la Ecuación VFT en 6 pasos:
@@ -145,8 +141,7 @@ for u, v, data in self.G.edges(data=True):
145
141
146
142
> **Decisión de diseño clave:** el `weight` solo incluye `travel_time_min`, **no**`boarding_cost_min`. El boarding cost se registra como atributo informativo pero no penaliza el camino en los segmentos normales. La penalización por espera ocurre únicamente en las aristas de transbordo peatonal, donde sí se suma al weight (`tiempo_caminata + wait`).
1.**Velocidad INTERURBANO (160 km/h):** El fallback de 160 km/h corresponde a velocidad de diseño del tren, no comercial. La velocidad operativa real es ~70 km/h. Requiere corrección.
| 2 |`src/core/services/graph_builder.py`|`FALLBACK_FRECUENCIA["CBB"]`: 1.0 min → **10.0 min** (alineado con `impedance.py`) | ✅ RESUELTO |
11
11
| 3 |`notebooks/01_Analisis_Impedancia_VFT.ipynb`| Separación de `df_edges` (servicio real) vs `df_transfers` (transbordo peatonal). Antes se mezclaban, contaminando el análisis. | ✅ RESUELTO |
12
12
| 4 |`apimetro_db` (docker-dev, puerto 5433) |`historico_operacion.velocidad_promedio_kmh` para ramal Interurbano corregida a 70.0 km/h vía UPDATE directo. | ✅ RESUELTO |
13
13
14
-
---
14
+
<hr/>
15
15
16
16
### Issues Abiertos (pendientes)
17
17
@@ -40,7 +40,7 @@
40
40
-**Descripción:** Los valores `alpha = {0.0, 0.2, 0.5, 1.0}` para los cuatro tipos de derecho de vía requieren cita exacta del Manual de Calles SEDATU 2019 (tabla y párrafo).
0 commit comments