Rutea Microrrutas de recolección para Suba
Planificador de microrrutas de recolección de residuos para Suba, en Bogotá, sobre sus calles reales. Un solver de rutas propio en Java, medido contra instancias públicas, que sigue la norma del servicio de aseo y replanifica cuando un camión se avería.
- Stack
- Java 21 · Spring · PostGIS · React · MapLibre
- Estado
- Terminado
- Año
- 2026
- Código
- GitHub ↗
Cargando el plan…
- no aprovechables
- aprovechables
- reserva
- avería
Plan real de Rutea sobre las calles de OpenStreetMap, con la avería tal como la respondió su API. Los contenedores y sus cargas son simulados.
Qué está pasando
La pieza interactiva de este caso está en ymid.me/projects/rutea/
Las dos carreras en un problema
Soy ingeniero ambiental, y la recolección de basuras es el problema de esa carrera que más se parece a un algoritmo: qué camión recoge qué contenedor y en qué orden, sin pasarse de su capacidad ni de su turno. Rutea lo resuelve para Suba, sobre las calles reales de OpenStreetMap y con la norma colombiana del servicio de aseo escrita en el código.
Un solver propio, medido en público
El núcleo es un solver de rutas con capacidad (CVRP) en Java puro, sin librerías de optimización: Clarke-Wright para arrancar, búsqueda local y ALNS, con cuatro búsquedas en paralelo. Lo medí en las 43 instancias X de CVRPLIB de 101 a 301 nodos, las que usa la literatura, con 60 s por instancia: queda a 0,18 % de la mejor solución conocida en frío y a 0,19 % en caliente. En el plan de Suba, Timefold con su configuración por defecto recorre un 35 % más de km en frío y un 33 % más en caliente.
Suba de verdad
Un lector propio de OpenStreetMap arma el grafo dirigido de Suba y del corredor hasta el relleno Doña Juana, a 30 km. Con él, la matriz de 1.701 × 1.701 sale en 377 ms con 16 hilos. El 97,5 % de sus celdas es asimétrico: por los sentidos viales, ir de A a B no cuesta lo mismo que volver.
Los 1.612 contenedores son simulados con cifras oficiales, porque no hay un inventario público. Frente a un barrido ingenuo por cuadrantes, el plan recorre un 20,5 % menos de km y emite un 20,5 % menos de CO₂. Si además encadena viajes, son un 25,3 % menos de km, y con descargas de 40 min bastan 9 compactadores para los 17 viajes.
La norma, en el código
Cada regla cita su decreto y su artículo, y tiene un test que la nombra. El plan marca los 79 contenedores donde no se puede compactar, a 50 m o menos de un colegio o un centro de salud (R07), y las paradas entre las 21:00 y las 06:00 que exigen medidas contra el ruido (R02). Los aprovechables van en vehículos de recicladores hasta una ECA, como manda el Decreto 1381 de 2024, y cada UPZ tiene su horario de paso publicado (R04). Lo que no pude verificar en el texto oficial queda marcado como pendiente, no como hecho.
Cuando algo se rompe
Arriba está una avería tal como la respondió la API. Rutea congela lo recorrido y arranca ALNS desde el plan vigente. En 500 averías al azar, replanificar tarda 124,6 ms en el P99, y la reserva llega en 76 min en el peor caso, lejos de las 3 horas de la norma (R05).
Un cierre de vía no recalcula la matriz: repara solo las filas y columnas cuyos caminos pasaban por esa calle. Tarda 9,2 ms frente a 87,8 ms de calcularla de cero, con el mismo resultado en los 500 cierres medidos. El reloj, las posiciones y los eventos van por WebSocket y quedan en PostGIS.
Lo que todavía es supuesto
Las velocidades por tipo de vía, el consumo de diésel y la parada de 60 s por contenedor son supuestos. Las microrrutas reales del operador no son públicas, así que el barrido es una línea base ingenua, no la operación de hoy. Todo se ve funcionando con un docker compose up.