GreenCircuit es una aplicación web (HTML, CSS y JavaScript) enfocada en optimizar rutas de recolección de residuos urbanos. Todo el procesamiento sucede en el navegador; no existe backend. El flujo principal guía al usuario por etapas para configurar el grafo, generar nodos, visualizar el resultado y ejecutar el algoritmo TSP.
El código JavaScript se organiza en módulos especializados, orquestados desde src/js/app.js:
| Módulo | Rol principal |
|---|---|
Graph.js |
Modelo del grafo: nodos, aristas, matriz de adyacencia y métricas. |
RandomGenerator.js |
Genera nodos y layouts (aleatorio, circular, grid) y completa aristas. |
HamiltonianFinder.js |
Backtracking para obtener todos los ciclos hamiltonianos. |
TSPSolver.js |
Evalúa los ciclos y calcula la ruta óptima, peor ruta y ahorros. |
CytoscapeRenderer.js |
Renderiza y estiliza el grafo con Cytoscape.js. |
GraphEditor.js |
Modo edición: agrega nodos, conecta aristas y ajusta pesos manualmente. |
LogDisplay.js |
Consola visual de eventos, matrices y resultados. |
app.js mantiene el estado común (grafo, renderer, logger, modo de ejecución, flags de progreso) y conecta los eventos de UI con las funciones de negocio.
- Configuración: el usuario define (N) (entre 8 y 16). Se crea un grafo vacío y se inicializa el editor.
- Generación: se generan nodos mediante
RandomGeneratory se completa el grafo (aristas con distancias euclidianas).CytoscapeRendereractualiza la vista. - Visualización / Edición manual: el usuario puede editar el grafo (nuevos nodos, eliminar, cambiar pesos).
GraphEditormantiene sincronía conGraphy actualiza estadísticas. - Ejecución:
HamiltonianFinderobtiene todos los ciclos hamiltonianos;TSPSolvercalcula métricas (distancia total, tiempo estimado, emisiones) y selecciona la ruta óptima. Los resultados se muestran en la consola visual y se resalta la ruta en el grafo.
- Nodos: contienen id, nombre, coordenadas, tipo de zona y volumen de residuos.
- Aristas: guardan la distancia (km) entre nodos; se normaliza a dos decimales.
- Matriz de adyacencia: permite consultas O(1) para validar conexiones y sumar distancias.
- Ciclos Hamiltonianos: se generan con backtracking. El algoritmo tiene complejidad O(N!), adecuado para N ≤ 16.
- Métricas TSP: para cada ciclo se calculan distancia total, tiempo (asumiendo 25 km/h) y CO₂ (0.2 kg/km). Se comparan la mejor y la peor rutas para mostrar ahorros.
- Wizard: encabezado con 4 pasos (Configuración → Generación → Visualización → Ejecución) que refleja el estado actual.
- Controles principales: formularios y tarjetas para configurar N, layout y velocidad de ejecución.
- Graph Editor: modo edición con selección guiada, modales para pesos y toasts informativos.
- Logs: panel tipo terminal que registra fases, matrices, ciclos y resultados.
- Sistema de diseño basado en CSS modular (
variables.css,layout.css,components.css,animations.css). - Uso de gradientes suaves, efecto "glass" en la cabecera y patrón de fondo tenue.
- Paleta principal verde (sostenibilidad) con acentos azules.
- Cytoscape.js (CDN) para renderizado interactivo del grafo.
- Flaticon UIcons para iconografía (regular-rounded y solid-rounded).
root
├─ index.html
├─ landing.html
├─ DOCUMENTATION.md
├─ README.md
└─ src/
├─ js/
│ ├─ app.js
│ ├─ Graph.js
│ ├─ GraphEditor.js
│ ├─ CytoscapeRenderer.js
│ ├─ RandomGenerator.js
│ ├─ HamiltonianFinder.js
│ ├─ TSPSolver.js
│ └─ LogDisplay.js
└─ styles/
├─ main.css
├─ layout.css
├─ components.css
├─ animations.css
└─ variables.css
- Añadir pruebas unitarias para los módulos algorítmicos (
Graph,TSPSolver). - Explorar heurísticas rápidas (Nearest Neighbor, 2-opt) para escenarios con más nodos.
- Exportar resultados (CSV/JSON) desde el panel de logs.