From a2f9e725ded15f57214168a4267a10582887cd38 Mon Sep 17 00:00:00 2001 From: Leandro Afonso Date: Sun, 7 Dec 2025 00:35:06 +0000 Subject: [PATCH] feat: Implement batch performance analysis dialog and routing policies - Added BatchAnalysisDialog for running multiple simulations and generating reports. - Implemented LeastCongestedRouteSelector for dynamic routing based on congestion levels. - Created RandomRouteSelector for baseline random routing strategy. - Developed ShortestPathRouteSelector to select routes based on the shortest path. - Defined RouteSelector interface to standardize routing policy implementations. - Introduced RoutingPolicy enum to manage available routing strategies. --- .gitignore | 5 +- main/analysis/HIGH_LOAD_20251207-001113.csv | 6 + main/analysis/HIGH_LOAD_20251207-001113.txt | 215 +++++++ main/analysis/LOW_LOAD_20251207-000957.csv | 6 + main/analysis/LOW_LOAD_20251207-000957.txt | 209 +++++++ main/analysis/MEDIUM_LOAD_20251207-001034.csv | 6 + main/analysis/MEDIUM_LOAD_20251207-001034.txt | 203 +++++++ main/graphing.py | 169 ++++++ main/graphs/completion_rate_comparison.png | Bin 0 -> 81980 bytes main/graphs/dwelling_time_comparison.png | Bin 0 -> 84498 bytes main/graphs/summary_statistics.png | Bin 0 -> 202427 bytes main/graphs/waiting_time_comparison.png | Bin 0 -> 83149 bytes .../src/main/java/sd/IntersectionProcess.java | 8 +- .../java/sd/analysis/MultiRunAnalyzer.java | 65 ++- .../java/sd/analysis/SimulationRunResult.java | 8 +- .../main/java/sd/config/SimulationConfig.java | 9 + .../sd/coordinator/CoordinatorProcess.java | 134 ++++- .../sd/dashboard/BatchAnalysisDialog.java | 545 ++++++++++++++++++ .../sd/dashboard/DashboardStatistics.java | 33 ++ .../main/java/sd/dashboard/DashboardUI.java | 63 +- .../dashboard/SimulationProcessManager.java | 26 + main/src/main/java/sd/logging/EventType.java | 1 + main/src/main/java/sd/model/Intersection.java | 22 +- main/src/main/java/sd/model/MessageType.java | 6 + main/src/main/java/sd/model/TrafficLight.java | 16 +- .../routing/LeastCongestedRouteSelector.java | 151 +++++ .../java/sd/routing/RandomRouteSelector.java | 122 ++++ .../main/java/sd/routing/RouteSelector.java | 25 + .../main/java/sd/routing/RoutingPolicy.java | 36 ++ .../sd/routing/ShortestPathRouteSelector.java | 89 +++ .../main/java/sd/util/VehicleGenerator.java | 152 ++--- main/src/main/resources/network_config.json | 2 +- .../main/resources/simulation-high.properties | 11 +- .../main/resources/simulation-low.properties | 11 +- .../resources/simulation-medium.properties | 9 + main/src/main/resources/simulation.properties | 6 + main/start.sh | 60 -- 37 files changed, 2197 insertions(+), 232 deletions(-) create mode 100644 main/analysis/HIGH_LOAD_20251207-001113.csv create mode 100644 main/analysis/HIGH_LOAD_20251207-001113.txt create mode 100644 main/analysis/LOW_LOAD_20251207-000957.csv create mode 100644 main/analysis/LOW_LOAD_20251207-000957.txt create mode 100644 main/analysis/MEDIUM_LOAD_20251207-001034.csv create mode 100644 main/analysis/MEDIUM_LOAD_20251207-001034.txt create mode 100644 main/graphing.py create mode 100644 main/graphs/completion_rate_comparison.png create mode 100644 main/graphs/dwelling_time_comparison.png create mode 100644 main/graphs/summary_statistics.png create mode 100644 main/graphs/waiting_time_comparison.png create mode 100644 main/src/main/java/sd/dashboard/BatchAnalysisDialog.java create mode 100644 main/src/main/java/sd/routing/LeastCongestedRouteSelector.java create mode 100644 main/src/main/java/sd/routing/RandomRouteSelector.java create mode 100644 main/src/main/java/sd/routing/RouteSelector.java create mode 100644 main/src/main/java/sd/routing/RoutingPolicy.java create mode 100644 main/src/main/java/sd/routing/ShortestPathRouteSelector.java delete mode 100755 main/start.sh diff --git a/.gitignore b/.gitignore index 33742bb..8b0c728 100644 --- a/.gitignore +++ b/.gitignore @@ -53,4 +53,7 @@ build/ *.pdf # JAR built pom file -dependency-reduced-pom.xml \ No newline at end of file +dependency-reduced-pom.xml + +# Python env +venv/ \ No newline at end of file diff --git a/main/analysis/HIGH_LOAD_20251207-001113.csv b/main/analysis/HIGH_LOAD_20251207-001113.csv new file mode 100644 index 0000000..0e268bf --- /dev/null +++ b/main/analysis/HIGH_LOAD_20251207-001113.csv @@ -0,0 +1,6 @@ +Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema +1,1784,877,49.16,64.58,61.43,32.29,129.16 +2,1782,363,20.37,53.77,51.01,26.88,107.53 +3,1786,883,49.44,53.09,50.08,26.54,106.17 +4,1845,179,9.70,63.92,60.27,31.96,127.84 +5,1872,953,50.91,65.41,62.16,32.70,130.81 diff --git a/main/analysis/HIGH_LOAD_20251207-001113.txt b/main/analysis/HIGH_LOAD_20251207-001113.txt new file mode 100644 index 0000000..fb8a356 --- /dev/null +++ b/main/analysis/HIGH_LOAD_20251207-001113.txt @@ -0,0 +1,215 @@ +================================================================================ +ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO +================================================================================ +Configuração: simulation-high.properties +Número de Execuções: 5 +Data da Análise: 2025-12-07 00:11:13 + +-------------------------------------------------------------------------------- +MÉTRICAS GLOBAIS +-------------------------------------------------------------------------------- + +Veículos Gerados: + Média: 1813.80 Desvio Padrão: 41.93 + Mediana: 1786.00 IC 95%: [1754.13, 1873.47] + Mín: 1782.00 Máx: 1872.00 + +Veículos Completados: + Média: 651.00 Desvio Padrão: 354.20 + Mediana: 877.00 IC 95%: [146.96, 1155.04] + Mín: 179.00 Máx: 953.00 + +Taxa de Conclusão (%): + Média: 35.92 Desvio Padrão: 19.44 + Mediana: 49.16 IC 95%: [8.25, 63.58] + Mín: 9.70 Máx: 50.91 + +Tempo Médio no Sistema (segundos): + Média: 60.15 Desvio Padrão: 6.17 + Mediana: 63.92 IC 95%: [51.38, 68.93] + Mín: 53.09 Máx: 65.41 + +Tempo Médio de Espera (segundos): + Média: 56.99 Desvio Padrão: 5.93 + Mediana: 60.27 IC 95%: [48.55, 65.43] + Mín: 50.08 Máx: 62.16 + + +-------------------------------------------------------------------------------- +ANÁLISE POR TIPO DE VEÍCULO +-------------------------------------------------------------------------------- + +--- BIKE --- + Contagem de Veículos: + Média: 135.40 Desvio Padrão: 77.66 + Mediana: 167.00 IC 95%: [24.89, 245.91] + Mín: 37.00 Máx: 211.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 55.15 Desvio Padrão: 12.01 + Mediana: 54.23 IC 95%: [38.07, 72.24] + Mín: 43.41 Máx: 74.99 + + +--- LIGHT --- + Contagem de Veículos: + Média: 395.00 Desvio Padrão: 207.62 + Mediana: 540.00 IC 95%: [99.55, 690.45] + Mín: 107.00 Máx: 548.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 59.79 Desvio Padrão: 7.28 + Mediana: 61.58 IC 95%: [49.43, 70.15] + Mín: 50.81 Máx: 69.26 + + +--- HEAVY --- + Contagem de Veículos: + Média: 120.60 Desvio Padrão: 72.95 + Mediana: 142.00 IC 95%: [16.79, 224.41] + Mín: 35.00 Máx: 202.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 49.20 Desvio Padrão: 8.62 + Mediana: 50.31 IC 95%: [36.94, 61.46] + Mín: 35.51 Máx: 58.20 + + +-------------------------------------------------------------------------------- +ANÁLISE POR INTERSEÇÃO +-------------------------------------------------------------------------------- + +--- Cr1 --- + Tamanho Máximo da Fila: + Média: 3.20 Desvio Padrão: 5.54 + Mediana: 1.00 IC 95%: [-4.68, 11.08] + Mín: 0.00 Máx: 13.00 + + Tamanho Médio da Fila: + Média: 3.20 Desvio Padrão: 5.54 + Mediana: 1.00 IC 95%: [-4.68, 11.08] + Mín: 0.00 Máx: 13.00 + + Veículos Processados: + Média: 378.40 Desvio Padrão: 252.94 + Mediana: 512.00 IC 95%: [18.46, 738.34] + Mín: 58.00 Máx: 600.00 + + +--- Cr2 --- + Tamanho Máximo da Fila: + Média: 0.60 Desvio Padrão: 1.34 + Mediana: 0.00 IC 95%: [-1.31, 2.51] + Mín: 0.00 Máx: 3.00 + + Tamanho Médio da Fila: + Média: 0.60 Desvio Padrão: 1.34 + Mediana: 0.00 IC 95%: [-1.31, 2.51] + Mín: 0.00 Máx: 3.00 + + Veículos Processados: + Média: 390.40 Desvio Padrão: 223.14 + Mediana: 409.00 IC 95%: [72.87, 707.93] + Mín: 59.00 Máx: 599.00 + + +--- Cr3 --- + Tamanho Máximo da Fila: + Média: 6.20 Desvio Padrão: 8.67 + Mediana: 0.00 IC 95%: [-6.14, 18.54] + Mín: 0.00 Máx: 18.00 + + Tamanho Médio da Fila: + Média: 6.20 Desvio Padrão: 8.67 + Mediana: 0.00 IC 95%: [-6.14, 18.54] + Mín: 0.00 Máx: 18.00 + + Veículos Processados: + Média: 339.00 Desvio Padrão: 239.34 + Mediana: 416.00 IC 95%: [-1.59, 679.59] + Mín: 57.00 Máx: 622.00 + + +--- Cr4 --- + Tamanho Máximo da Fila: + Média: 0.60 Desvio Padrão: 0.89 + Mediana: 0.00 IC 95%: [-0.67, 1.87] + Mín: 0.00 Máx: 2.00 + + Tamanho Médio da Fila: + Média: 0.60 Desvio Padrão: 0.89 + Mediana: 0.00 IC 95%: [-0.67, 1.87] + Mín: 0.00 Máx: 2.00 + + Veículos Processados: + Média: 123.40 Desvio Padrão: 116.13 + Mediana: 109.00 IC 95%: [-41.85, 288.65] + Mín: 21.00 Máx: 316.00 + + +--- Cr5 --- + Tamanho Máximo da Fila: + Média: 2.40 Desvio Padrão: 1.14 + Mediana: 2.00 IC 95%: [0.78, 4.02] + Mín: 1.00 Máx: 4.00 + + Tamanho Médio da Fila: + Média: 2.40 Desvio Padrão: 1.14 + Mediana: 2.00 IC 95%: [0.78, 4.02] + Mín: 1.00 Máx: 4.00 + + Veículos Processados: + Média: 200.80 Desvio Padrão: 114.19 + Mediana: 261.00 IC 95%: [38.31, 363.29] + Mín: 70.00 Máx: 305.00 + + +--- ExitNode --- + Tamanho Máximo da Fila: Sem dados + + Tamanho Médio da Fila: Sem dados + + Veículos Processados: + Média: 651.00 Desvio Padrão: 354.20 + Mediana: 877.00 IC 95%: [146.96, 1155.04] + Mín: 179.00 Máx: 953.00 + + +-------------------------------------------------------------------------------- +RESUMOS INDIVIDUAIS DAS EXECUÇÕES +-------------------------------------------------------------------------------- + +Execução #1 [simulation-high.properties]: + Gerados: 1784, Completados: 877 (49.2%) + Tempo Médio no Sistema: 64.58s + Tempo Médio de Espera: 61.43s + +Execução #2 [simulation-high.properties]: + Gerados: 1782, Completados: 363 (20.4%) + Tempo Médio no Sistema: 53.77s + Tempo Médio de Espera: 51.01s + +Execução #3 [simulation-high.properties]: + Gerados: 1786, Completados: 883 (49.4%) + Tempo Médio no Sistema: 53.09s + Tempo Médio de Espera: 50.08s + +Execução #4 [simulation-high.properties]: + Gerados: 1845, Completados: 179 (9.7%) + Tempo Médio no Sistema: 63.92s + Tempo Médio de Espera: 60.27s + +Execução #5 [simulation-high.properties]: + Gerados: 1872, Completados: 953 (50.9%) + Tempo Médio no Sistema: 65.41s + Tempo Médio de Espera: 62.16s + +================================================================================ +FIM DO RELATÓRIO +================================================================================ diff --git a/main/analysis/LOW_LOAD_20251207-000957.csv b/main/analysis/LOW_LOAD_20251207-000957.csv new file mode 100644 index 0000000..01d1b2c --- /dev/null +++ b/main/analysis/LOW_LOAD_20251207-000957.csv @@ -0,0 +1,6 @@ +Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema +1,371,187,50.40,42.28,38.65,21.14,84.57 +2,361,263,72.85,29.15,25.29,14.57,58.30 +3,368,197,53.53,38.02,33.95,19.01,76.04 +4,350,239,68.29,32.38,28.36,16.19,64.75 +5,373,212,56.84,23.36,19.96,11.68,46.73 diff --git a/main/analysis/LOW_LOAD_20251207-000957.txt b/main/analysis/LOW_LOAD_20251207-000957.txt new file mode 100644 index 0000000..073c0fb --- /dev/null +++ b/main/analysis/LOW_LOAD_20251207-000957.txt @@ -0,0 +1,209 @@ +================================================================================ +ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO +================================================================================ +Configuração: simulation-low.properties +Número de Execuções: 5 +Data da Análise: 2025-12-07 00:09:57 + +-------------------------------------------------------------------------------- +MÉTRICAS GLOBAIS +-------------------------------------------------------------------------------- + +Veículos Gerados: + Média: 364.60 Desvio Padrão: 9.34 + Mediana: 368.00 IC 95%: [351.30, 377.90] + Mín: 350.00 Máx: 373.00 + +Veículos Completados: + Média: 219.60 Desvio Padrão: 31.19 + Mediana: 212.00 IC 95%: [175.22, 263.98] + Mín: 187.00 Máx: 263.00 + +Taxa de Conclusão (%): + Média: 60.38 Desvio Padrão: 9.71 + Mediana: 56.84 IC 95%: [46.57, 74.20] + Mín: 50.40 Máx: 72.85 + +Tempo Médio no Sistema (segundos): + Média: 33.04 Desvio Padrão: 7.41 + Mediana: 32.38 IC 95%: [22.50, 43.58] + Mín: 23.36 Máx: 42.28 + +Tempo Médio de Espera (segundos): + Média: 29.24 Desvio Padrão: 7.30 + Mediana: 28.36 IC 95%: [18.85, 39.63] + Mín: 19.96 Máx: 38.65 + + +-------------------------------------------------------------------------------- +ANÁLISE POR TIPO DE VEÍCULO +-------------------------------------------------------------------------------- + +--- BIKE --- + Contagem de Veículos: + Média: 41.00 Desvio Padrão: 6.96 + Mediana: 43.00 IC 95%: [31.09, 50.91] + Mín: 33.00 Máx: 50.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 25.91 Desvio Padrão: 3.91 + Mediana: 26.98 IC 95%: [20.35, 31.47] + Mín: 19.60 Máx: 30.06 + + +--- LIGHT --- + Contagem de Veículos: + Média: 134.00 Desvio Padrão: 24.07 + Mediana: 130.00 IC 95%: [99.74, 168.26] + Mín: 104.00 Máx: 167.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 29.34 Desvio Padrão: 6.83 + Mediana: 27.89 IC 95%: [19.62, 39.06] + Mín: 20.73 Máx: 36.42 + + +--- HEAVY --- + Contagem de Veículos: + Média: 44.60 Desvio Padrão: 3.44 + Mediana: 46.00 IC 95%: [39.71, 49.49] + Mín: 40.00 Máx: 48.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 32.11 Desvio Padrão: 15.90 + Mediana: 30.74 IC 95%: [9.48, 54.74] + Mín: 18.09 Máx: 58.73 + + +-------------------------------------------------------------------------------- +ANÁLISE POR INTERSEÇÃO +-------------------------------------------------------------------------------- + +--- Cr1 --- + Tamanho Máximo da Fila: + Média: 0.60 Desvio Padrão: 1.34 + Mediana: 0.00 IC 95%: [-1.31, 2.51] + Mín: 0.00 Máx: 3.00 + + Tamanho Médio da Fila: + Média: 0.60 Desvio Padrão: 1.34 + Mediana: 0.00 IC 95%: [-1.31, 2.51] + Mín: 0.00 Máx: 3.00 + + Veículos Processados: + Média: 63.80 Desvio Padrão: 17.25 + Mediana: 57.00 IC 95%: [39.25, 88.35] + Mín: 48.00 Máx: 91.00 + + +--- Cr2 --- + Tamanho Máximo da Fila: + Média: 0.80 Desvio Padrão: 1.79 + Mediana: 0.00 IC 95%: [-1.75, 3.35] + Mín: 0.00 Máx: 4.00 + + Tamanho Médio da Fila: + Média: 0.80 Desvio Padrão: 1.79 + Mediana: 0.00 IC 95%: [-1.75, 3.35] + Mín: 0.00 Máx: 4.00 + + Veículos Processados: + Média: 56.20 Desvio Padrão: 18.51 + Mediana: 50.00 IC 95%: [29.86, 82.54] + Mín: 35.00 Máx: 78.00 + + +--- Cr3 --- + Tamanho Máximo da Fila: + Média: 1.00 Desvio Padrão: 1.41 + Mediana: 0.00 IC 95%: [-1.01, 3.01] + Mín: 0.00 Máx: 3.00 + + Tamanho Médio da Fila: + Média: 1.00 Desvio Padrão: 1.41 + Mediana: 0.00 IC 95%: [-1.01, 3.01] + Mín: 0.00 Máx: 3.00 + + Veículos Processados: + Média: 63.20 Desvio Padrão: 23.97 + Mediana: 56.00 IC 95%: [29.09, 97.31] + Mín: 41.00 Máx: 104.00 + + +--- Cr4 --- + Tamanho Máximo da Fila: + Média: 1.80 Desvio Padrão: 2.49 + Mediana: 0.00 IC 95%: [-1.74, 5.34] + Mín: 0.00 Máx: 5.00 + + Tamanho Médio da Fila: + Média: 1.80 Desvio Padrão: 2.49 + Mediana: 0.00 IC 95%: [-1.74, 5.34] + Mín: 0.00 Máx: 5.00 + + Veículos Processados: + Média: 51.00 Desvio Padrão: 16.05 + Mediana: 53.00 IC 95%: [28.16, 73.84] + Mín: 31.00 Máx: 70.00 + + +--- Cr5 --- + Tamanho Máximo da Fila: Sem dados + + Tamanho Médio da Fila: Sem dados + + Veículos Processados: + Média: 86.60 Desvio Padrão: 34.20 + Mediana: 65.00 IC 95%: [37.94, 135.26] + Mín: 62.00 Máx: 139.00 + + +--- ExitNode --- + Tamanho Máximo da Fila: Sem dados + + Tamanho Médio da Fila: Sem dados + + Veículos Processados: + Média: 219.60 Desvio Padrão: 31.19 + Mediana: 212.00 IC 95%: [175.22, 263.98] + Mín: 187.00 Máx: 263.00 + + +-------------------------------------------------------------------------------- +RESUMOS INDIVIDUAIS DAS EXECUÇÕES +-------------------------------------------------------------------------------- + +Execução #1 [simulation-low.properties]: + Gerados: 371, Completados: 187 (50.4%) + Tempo Médio no Sistema: 42.28s + Tempo Médio de Espera: 38.65s + +Execução #2 [simulation-low.properties]: + Gerados: 361, Completados: 263 (72.9%) + Tempo Médio no Sistema: 29.15s + Tempo Médio de Espera: 25.29s + +Execução #3 [simulation-low.properties]: + Gerados: 368, Completados: 197 (53.5%) + Tempo Médio no Sistema: 38.02s + Tempo Médio de Espera: 33.95s + +Execução #4 [simulation-low.properties]: + Gerados: 350, Completados: 239 (68.3%) + Tempo Médio no Sistema: 32.38s + Tempo Médio de Espera: 28.36s + +Execução #5 [simulation-low.properties]: + Gerados: 373, Completados: 212 (56.8%) + Tempo Médio no Sistema: 23.36s + Tempo Médio de Espera: 19.96s + +================================================================================ +FIM DO RELATÓRIO +================================================================================ diff --git a/main/analysis/MEDIUM_LOAD_20251207-001034.csv b/main/analysis/MEDIUM_LOAD_20251207-001034.csv new file mode 100644 index 0000000..50a86c8 --- /dev/null +++ b/main/analysis/MEDIUM_LOAD_20251207-001034.csv @@ -0,0 +1,6 @@ +Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema +1,950,416,43.79,49.34,45.70,24.67,98.68 +2,886,480,54.18,35.08,31.69,17.54,70.16 +3,954,535,56.08,43.76,40.30,21.88,87.51 +4,948,354,37.34,41.68,37.96,20.84,83.37 +5,898,312,34.74,52.56,49.26,26.28,105.13 diff --git a/main/analysis/MEDIUM_LOAD_20251207-001034.txt b/main/analysis/MEDIUM_LOAD_20251207-001034.txt new file mode 100644 index 0000000..3b57656 --- /dev/null +++ b/main/analysis/MEDIUM_LOAD_20251207-001034.txt @@ -0,0 +1,203 @@ +================================================================================ +ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO +================================================================================ +Configuração: simulation-medium.properties +Número de Execuções: 5 +Data da Análise: 2025-12-07 00:10:34 + +-------------------------------------------------------------------------------- +MÉTRICAS GLOBAIS +-------------------------------------------------------------------------------- + +Veículos Gerados: + Média: 927.20 Desvio Padrão: 32.48 + Mediana: 948.00 IC 95%: [880.97, 973.43] + Mín: 886.00 Máx: 954.00 + +Veículos Completados: + Média: 419.40 Desvio Padrão: 90.64 + Mediana: 416.00 IC 95%: [290.42, 548.38] + Mín: 312.00 Máx: 535.00 + +Taxa de Conclusão (%): + Média: 45.23 Desvio Padrão: 9.64 + Mediana: 43.79 IC 95%: [31.50, 58.95] + Mín: 34.74 Máx: 56.08 + +Tempo Médio no Sistema (segundos): + Média: 44.48 Desvio Padrão: 6.81 + Mediana: 43.76 IC 95%: [34.79, 54.18] + Mín: 35.08 Máx: 52.56 + +Tempo Médio de Espera (segundos): + Média: 40.98 Desvio Padrão: 6.83 + Mediana: 40.30 IC 95%: [31.26, 50.71] + Mín: 31.69 Máx: 49.26 + + +-------------------------------------------------------------------------------- +ANÁLISE POR TIPO DE VEÍCULO +-------------------------------------------------------------------------------- + +--- BIKE --- + Contagem de Veículos: + Média: 75.80 Desvio Padrão: 15.96 + Mediana: 71.00 IC 95%: [53.09, 98.51] + Mín: 56.00 Máx: 95.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 42.34 Desvio Padrão: 10.81 + Mediana: 39.70 IC 95%: [26.96, 57.72] + Mín: 31.96 Máx: 55.19 + + +--- LIGHT --- + Contagem de Veículos: + Média: 263.20 Desvio Padrão: 58.29 + Mediana: 265.00 IC 95%: [180.25, 346.15] + Mín: 204.00 Máx: 344.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 39.13 Desvio Padrão: 6.35 + Mediana: 38.08 IC 95%: [30.09, 48.17] + Mín: 30.47 Máx: 47.99 + + +--- HEAVY --- + Contagem de Veículos: + Média: 80.40 Desvio Padrão: 19.11 + Mediana: 80.00 IC 95%: [53.20, 107.60] + Mín: 52.00 Máx: 102.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 48.02 Desvio Padrão: 30.99 + Mediana: 34.44 IC 95%: [3.92, 92.11] + Mín: 32.46 Máx: 103.40 + + +-------------------------------------------------------------------------------- +ANÁLISE POR INTERSEÇÃO +-------------------------------------------------------------------------------- + +--- Cr1 --- + Tamanho Máximo da Fila: + Média: 5.60 Desvio Padrão: 11.44 + Mediana: 0.00 IC 95%: [-10.67, 21.87] + Mín: 0.00 Máx: 26.00 + + Tamanho Médio da Fila: + Média: 5.60 Desvio Padrão: 11.44 + Mediana: 0.00 IC 95%: [-10.67, 21.87] + Mín: 0.00 Máx: 26.00 + + Veículos Processados: + Média: 156.00 Desvio Padrão: 122.81 + Mediana: 98.00 IC 95%: [-18.76, 330.76] + Mín: 35.00 Máx: 306.00 + + +--- Cr2 --- + Tamanho Máximo da Fila: Sem dados + + Tamanho Médio da Fila: Sem dados + + Veículos Processados: + Média: 172.00 Desvio Padrão: 121.88 + Mediana: 116.00 IC 95%: [-1.44, 345.44] + Mín: 66.00 Máx: 322.00 + + +--- Cr3 --- + Tamanho Máximo da Fila: + Média: 0.60 Desvio Padrão: 1.34 + Mediana: 0.00 IC 95%: [-1.31, 2.51] + Mín: 0.00 Máx: 3.00 + + Tamanho Médio da Fila: + Média: 0.60 Desvio Padrão: 1.34 + Mediana: 0.00 IC 95%: [-1.31, 2.51] + Mín: 0.00 Máx: 3.00 + + Veículos Processados: + Média: 168.40 Desvio Padrão: 133.38 + Mediana: 121.00 IC 95%: [-21.40, 358.20] + Mín: 48.00 Máx: 326.00 + + +--- Cr4 --- + Tamanho Máximo da Fila: Sem dados + + Tamanho Médio da Fila: Sem dados + + Veículos Processados: + Média: 71.80 Desvio Padrão: 20.39 + Mediana: 77.00 IC 95%: [42.79, 100.81] + Mín: 38.00 Máx: 92.00 + + +--- Cr5 --- + Tamanho Máximo da Fila: + Média: 3.60 Desvio Padrão: 3.85 + Mediana: 2.00 IC 95%: [-1.87, 9.07] + Mín: 0.00 Máx: 10.00 + + Tamanho Médio da Fila: + Média: 3.60 Desvio Padrão: 3.85 + Mediana: 2.00 IC 95%: [-1.87, 9.07] + Mín: 0.00 Máx: 10.00 + + Veículos Processados: + Média: 150.60 Desvio Padrão: 43.37 + Mediana: 126.00 IC 95%: [88.88, 212.32] + Mín: 116.00 Máx: 209.00 + + +--- ExitNode --- + Tamanho Máximo da Fila: Sem dados + + Tamanho Médio da Fila: Sem dados + + Veículos Processados: + Média: 419.40 Desvio Padrão: 90.64 + Mediana: 416.00 IC 95%: [290.42, 548.38] + Mín: 312.00 Máx: 535.00 + + +-------------------------------------------------------------------------------- +RESUMOS INDIVIDUAIS DAS EXECUÇÕES +-------------------------------------------------------------------------------- + +Execução #1 [simulation-medium.properties]: + Gerados: 950, Completados: 416 (43.8%) + Tempo Médio no Sistema: 49.34s + Tempo Médio de Espera: 45.70s + +Execução #2 [simulation-medium.properties]: + Gerados: 886, Completados: 480 (54.2%) + Tempo Médio no Sistema: 35.08s + Tempo Médio de Espera: 31.69s + +Execução #3 [simulation-medium.properties]: + Gerados: 954, Completados: 535 (56.1%) + Tempo Médio no Sistema: 43.76s + Tempo Médio de Espera: 40.30s + +Execução #4 [simulation-medium.properties]: + Gerados: 948, Completados: 354 (37.3%) + Tempo Médio no Sistema: 41.68s + Tempo Médio de Espera: 37.96s + +Execução #5 [simulation-medium.properties]: + Gerados: 898, Completados: 312 (34.7%) + Tempo Médio no Sistema: 52.56s + Tempo Médio de Espera: 49.26s + +================================================================================ +FIM DO RELATÓRIO +================================================================================ diff --git a/main/graphing.py b/main/graphing.py new file mode 100644 index 0000000..8980165 --- /dev/null +++ b/main/graphing.py @@ -0,0 +1,169 @@ +import pandas as pd +import matplotlib.pyplot as plt +import glob +import os + +# Find CSV files using glob +def load_latest_csv(pattern): + """Load the most recent CSV file matching the pattern""" + files = glob.glob(pattern) + if not files: + print(f"Warning: No files found matching '{pattern}'") + return None + # Sort by modification time, get the latest + latest_file = max(files, key=os.path.getmtime) + print(f"Loading: {latest_file}") + return pd.read_csv(latest_file) + +# Carregar dados +print("Looking for analysis files...") +low = load_latest_csv('analysis/LOW_LOAD_*.csv') +medium = load_latest_csv('analysis/MEDIUM_LOAD_*.csv') +high = load_latest_csv('analysis/HIGH_LOAD_*.csv') + +# Check if we have all data +if low is None or medium is None or high is None: + print("\nError: Missing analysis files!") + print("Please run the batch analysis first:") + exit(1) + +# Print available columns for debugging +print("\nAvailable columns in LOW_LOAD CSV:") +print(low.columns.tolist()) + +# Create output directory for graphs +os.makedirs('graphs', exist_ok=True) + +# 1. Gráfico: Dwelling Time vs Load +plt.figure(figsize=(10, 6)) +dwelling_times = [ + low['TempoMédioSistema'].mean(), + medium['TempoMédioSistema'].mean(), + high['TempoMédioSistema'].mean() +] +plt.bar(['Low', 'Medium', 'High'], dwelling_times, color=['green', 'orange', 'red']) +plt.ylabel('Average Dwelling Time (s)') +plt.title('System Performance vs Load') +plt.xlabel('Load Scenario') +plt.grid(axis='y', alpha=0.3) +for i, v in enumerate(dwelling_times): + plt.text(i, v + 1, f'{v:.2f}s', ha='center', va='bottom') +plt.savefig('graphs/dwelling_time_comparison.png', dpi=300, bbox_inches='tight') +print("\nGraph saved: graphs/dwelling_time_comparison.png") +plt.close() + +# 2. Gráfico: Completion Rate vs Load +plt.figure(figsize=(10, 6)) +completion_rates = [ + low['TaxaConclusão'].mean(), + medium['TaxaConclusão'].mean(), + high['TaxaConclusão'].mean() +] +plt.bar(['Low', 'Medium', 'High'], completion_rates, color=['green', 'orange', 'red']) +plt.ylabel('Completion Rate (%)') +plt.title('Vehicle Completion Rate vs Load') +plt.xlabel('Load Scenario') +plt.grid(axis='y', alpha=0.3) +plt.ylim(0, 100) +for i, v in enumerate(completion_rates): + plt.text(i, v + 2, f'{v:.1f}%', ha='center', va='bottom') +plt.savefig('graphs/completion_rate_comparison.png', dpi=300, bbox_inches='tight') +print("Graph saved: graphs/completion_rate_comparison.png") +plt.close() + +# 3. Gráfico: Waiting Time vs Load +plt.figure(figsize=(10, 6)) +waiting_times = [ + low['TempoMédioEspera'].mean(), + medium['TempoMédioEspera'].mean(), + high['TempoMédioEspera'].mean() +] +plt.bar(['Low', 'Medium', 'High'], waiting_times, color=['green', 'orange', 'red']) +plt.ylabel('Average Waiting Time (s)') +plt.title('Average Waiting Time vs Load') +plt.xlabel('Load Scenario') +plt.grid(axis='y', alpha=0.3) +for i, v in enumerate(waiting_times): + plt.text(i, v + 1, f'{v:.2f}s', ha='center', va='bottom') +plt.savefig('graphs/waiting_time_comparison.png', dpi=300, bbox_inches='tight') +print("Graph saved: graphs/waiting_time_comparison.png") +plt.close() + +# 4. Gráfico: Summary Statistics +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(14, 10)) +loads = ['Low', 'Medium', 'High'] + +# Vehicles generated +ax1.bar(loads, [low['VeículosGerados'].mean(), medium['VeículosGerados'].mean(), high['VeículosGerados'].mean()], color=['green', 'orange', 'red']) +ax1.set_title('Vehicles Generated') +ax1.set_ylabel('Count') +ax1.grid(axis='y', alpha=0.3) + +# Vehicles completed +ax2.bar(loads, [low['VeículosCompletados'].mean(), medium['VeículosCompletados'].mean(), high['VeículosCompletados'].mean()], color=['green', 'orange', 'red']) +ax2.set_title('Vehicles Completed') +ax2.set_ylabel('Count') +ax2.grid(axis='y', alpha=0.3) + +# Min/Max dwelling time +x = range(3) +width = 0.35 +ax3.bar([i - width/2 for i in x], [low['TempoMínimoSistema'].mean(), medium['TempoMínimoSistema'].mean(), high['TempoMínimoSistema'].mean()], width, label='Min', color='lightblue') +ax3.bar([i + width/2 for i in x], [low['TempoMáximoSistema'].mean(), medium['TempoMáximoSistema'].mean(), high['TempoMáximoSistema'].mean()], width, label='Max', color='darkblue') +ax3.set_title('Min/Max Dwelling Time') +ax3.set_ylabel('Time (s)') +ax3.set_xticks(x) +ax3.set_xticklabels(loads) +ax3.legend() +ax3.grid(axis='y', alpha=0.3) + +# Performance summary +metrics = ['Dwelling\nTime', 'Waiting\nTime', 'Completion\nRate'] +low_vals = [low['TempoMédioSistema'].mean(), low['TempoMédioEspera'].mean(), low['TaxaConclusão'].mean()] +med_vals = [medium['TempoMédioSistema'].mean(), medium['TempoMédioEspera'].mean(), medium['TaxaConclusão'].mean()] +high_vals = [high['TempoMédioSistema'].mean(), high['TempoMédioEspera'].mean(), high['TaxaConclusão'].mean()] + +x = range(len(metrics)) +width = 0.25 +ax4.bar([i - width for i in x], low_vals, width, label='Low', color='green') +ax4.bar(x, med_vals, width, label='Medium', color='orange') +ax4.bar([i + width for i in x], high_vals, width, label='High', color='red') +ax4.set_title('Performance Summary') +ax4.set_xticks(x) +ax4.set_xticklabels(metrics) +ax4.legend() +ax4.grid(axis='y', alpha=0.3) + +plt.tight_layout() +plt.savefig('graphs/summary_statistics.png', dpi=300, bbox_inches='tight') +print("Graph saved: graphs/summary_statistics.png") +plt.close() + +# Print summary statistics +print("\n" + "="*60) +print("SUMMARY STATISTICS") +print("="*60) +print(f"\nLOW LOAD:") +print(f" Avg Dwelling Time: {low['TempoMédioSistema'].mean():.2f}s") +print(f" Avg Waiting Time: {low['TempoMédioEspera'].mean():.2f}s") +print(f" Completion Rate: {low['TaxaConclusão'].mean():.1f}%") +print(f" Vehicles Generated: {low['VeículosGerados'].mean():.0f}") +print(f" Vehicles Completed: {low['VeículosCompletados'].mean():.0f}") + +print(f"\nMEDIUM LOAD:") +print(f" Avg Dwelling Time: {medium['TempoMédioSistema'].mean():.2f}s") +print(f" Avg Waiting Time: {medium['TempoMédioEspera'].mean():.2f}s") +print(f" Completion Rate: {medium['TaxaConclusão'].mean():.1f}%") +print(f" Vehicles Generated: {medium['VeículosGerados'].mean():.0f}") +print(f" Vehicles Completed: {medium['VeículosCompletados'].mean():.0f}") + +print(f"\nHIGH LOAD:") +print(f" Avg Dwelling Time: {high['TempoMédioSistema'].mean():.2f}s") +print(f" Avg Waiting Time: {high['TempoMédioEspera'].mean():.2f}s") +print(f" Completion Rate: {high['TaxaConclusão'].mean():.1f}%") +print(f" Vehicles Generated: {high['VeículosGerados'].mean():.0f}") +print(f" Vehicles Completed: {high['VeículosCompletados'].mean():.0f}") + +print("\n" + "="*60) +print("All graphs saved in 'graphs/' directory!") +print("="*60) \ No newline at end of file diff --git a/main/graphs/completion_rate_comparison.png b/main/graphs/completion_rate_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7071fcd75722c76b2736baf919a8a328f08c43 GIT binary patch literal 81980 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 Rrb6$wQ{~U!qqZ2k{cl#pW}W~5 literal 0 HcmV?d00001 diff --git a/main/graphs/dwelling_time_comparison.png b/main/graphs/dwelling_time_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..60bc18e4e573cd462f879e51aaa756d541980e30 GIT binary patch literal 84498 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 z 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 E4=pW=R{#J2 literal 0 HcmV?d00001 diff --git a/main/graphs/summary_statistics.png b/main/graphs/summary_statistics.png new file mode 100644 index 0000000000000000000000000000000000000000..481282e416c88d42e615d2a3808f9f2ccf3f891a GIT binary patch literal 202427 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 R!EiavB< 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 literal 0 HcmV?d00001 diff --git a/main/graphs/waiting_time_comparison.png b/main/graphs/waiting_time_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..5d400b83a2e0705d6ef0e5bdbe3196e55e0d0fd0 GIT binary patch literal 83149 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

IPqQ|a3o%8Q1MBQrUSyBXk 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 (double) r.getTotalVehiclesGenerated()))); report.append("\n"); - report.append(analyzeMetric("Vehicles Completed", + report.append(analyzeMetric("Veículos Completados", extractValues(r -> (double) r.getTotalVehiclesCompleted()))); report.append("\n"); - report.append(analyzeMetric("Completion Rate (%)", + report.append(analyzeMetric("Taxa de Conclusão (%)", extractValues(r -> r.getTotalVehiclesGenerated() > 0 ? 100.0 * r.getTotalVehiclesCompleted() / r.getTotalVehiclesGenerated() : 0.0))); report.append("\n"); - report.append(analyzeMetric("Average System Time (seconds)", + report.append(analyzeMetric("Tempo Médio no Sistema (segundos)", extractValues(r -> r.getAverageSystemTime()))); report.append("\n"); - report.append(analyzeMetric("Average Waiting Time (seconds)", + report.append(analyzeMetric("Tempo Médio de Espera (segundos)", extractValues(r -> r.getAverageWaitingTime()))); report.append("\n"); // Per-vehicle-type analysis report.append("\n"); report.append("-".repeat(80)).append("\n"); - report.append("PER-VEHICLE-TYPE ANALYSIS\n"); + report.append("ANÁLISE POR TIPO DE VEÍCULO\n"); report.append("-".repeat(80)).append("\n\n"); for (VehicleType type : VehicleType.values()) { report.append("--- ").append(type).append(" ---\n"); - report.append(analyzeMetric(" Vehicle Count", + report.append(analyzeMetric(" Contagem de Veículos", extractValues(r -> (double) r.getVehicleCountByType().getOrDefault(type, 0)))); report.append("\n"); - report.append(analyzeMetric(" Avg System Time (seconds)", + report.append(analyzeMetric(" Tempo Médio no Sistema (segundos)", extractValues(r -> r.getAvgSystemTimeByType().getOrDefault(type, 0.0)))); report.append("\n"); - report.append(analyzeMetric(" Avg Waiting Time (seconds)", + report.append(analyzeMetric(" Tempo Médio de Espera (segundos)", extractValues(r -> r.getAvgWaitTimeByType().getOrDefault(type, 0.0)))); report.append("\n\n"); } // Per-intersection analysis report.append("-".repeat(80)).append("\n"); - report.append("PER-INTERSECTION ANALYSIS\n"); + report.append("ANÁLISE POR INTERSEÇÃO\n"); report.append("-".repeat(80)).append("\n\n"); Set allIntersections = new TreeSet<>(); @@ -119,22 +123,22 @@ public class MultiRunAnalyzer { for (String intersection : allIntersections) { report.append("--- ").append(intersection).append(" ---\n"); - report.append(analyzeMetric(" Max Queue Size", + report.append(analyzeMetric(" Tamanho Máximo da Fila", extractValues(r -> (double) r.getMaxQueueSizeByIntersection().getOrDefault(intersection, 0)))); report.append("\n"); - report.append(analyzeMetric(" Avg Queue Size", + report.append(analyzeMetric(" Tamanho Médio da Fila", extractValues(r -> r.getAvgQueueSizeByIntersection().getOrDefault(intersection, 0.0)))); report.append("\n"); - report.append(analyzeMetric(" Vehicles Processed", + report.append(analyzeMetric(" Veículos Processados", extractValues(r -> (double) r.getVehiclesProcessedByIntersection().getOrDefault(intersection, 0)))); report.append("\n\n"); } // Individual run summaries report.append("-".repeat(80)).append("\n"); - report.append("INDIVIDUAL RUN SUMMARIES\n"); + report.append("RESUMOS INDIVIDUAIS DAS EXECUÇÕES\n"); report.append("-".repeat(80)).append("\n\n"); for (SimulationRunResult result : results) { @@ -142,7 +146,7 @@ public class MultiRunAnalyzer { } report.append("=".repeat(80)).append("\n"); - report.append("END OF REPORT\n"); + report.append("FIM DO RELATÓRIO\n"); report.append("=".repeat(80)).append("\n"); return report.toString(); @@ -153,7 +157,7 @@ public class MultiRunAnalyzer { */ private String analyzeMetric(String metricName, List values) { if (values.isEmpty() || values.stream().allMatch(v -> v == 0.0)) { - return metricName + ": No data\n"; + return metricName + ": Sem dados\n"; } double mean = StatisticalAnalysis.mean(values); @@ -165,9 +169,9 @@ public class MultiRunAnalyzer { return String.format( "%s:\n" + - " Mean: %10.2f Std Dev: %10.2f\n" + - " Median: %10.2f 95%% CI: [%.2f, %.2f]\n" + - " Min: %10.2f Max: %10.2f\n", + " Média: %10.2f Desvio Padrão: %10.2f\n" + + " Mediana: %10.2f IC 95%%: [%.2f, %.2f]\n" + + " Mín: %10.2f Máx: %10.2f\n", metricName, mean, stdDev, median, ci[0], ci[1], min, max ); } @@ -192,14 +196,21 @@ public class MultiRunAnalyzer { } } + /** + * Generates a CSV summary for easy import into spreadsheet tools. + */ + public void saveCSV(String filename) throws IOException { + saveCSVSummary(filename); + } + /** * Generates a CSV summary for easy import into spreadsheet tools. */ public void saveCSVSummary(String filename) throws IOException { try (PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename)))) { // Header - writer.println("Run,VehiclesGenerated,VehiclesCompleted,CompletionRate," + - "AvgSystemTime,AvgWaitingTime,MinSystemTime,MaxSystemTime"); + writer.println("Execução,VeículosGerados,VeículosCompletados,TaxaConclusão," + + "TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema"); // Data rows for (SimulationRunResult result : results) { diff --git a/main/src/main/java/sd/analysis/SimulationRunResult.java b/main/src/main/java/sd/analysis/SimulationRunResult.java index 4d8a608..6913946 100644 --- a/main/src/main/java/sd/analysis/SimulationRunResult.java +++ b/main/src/main/java/sd/analysis/SimulationRunResult.java @@ -127,10 +127,10 @@ public class SimulationRunResult { @Override public String toString() { return String.format( - "Run #%d [%s]:\n" + - " Generated: %d, Completed: %d (%.1f%%)\n" + - " Avg System Time: %.2fs\n" + - " Avg Waiting Time: %.2fs", + "Execução #%d [%s]:\n" + + " Gerados: %d, Completados: %d (%.1f%%)\n" + + " Tempo Médio no Sistema: %.2fs\n" + + " Tempo Médio de Espera: %.2fs", runNumber, configurationFile, totalVehiclesGenerated, diff --git a/main/src/main/java/sd/config/SimulationConfig.java b/main/src/main/java/sd/config/SimulationConfig.java index 75306e3..f0dfffe 100644 --- a/main/src/main/java/sd/config/SimulationConfig.java +++ b/main/src/main/java/sd/config/SimulationConfig.java @@ -270,6 +270,15 @@ public class SimulationConfig { return Double.parseDouble(properties.getProperty("simulation.arrival.fixed.interval", "2.0")); } + /** + * Gets the routing policy to use for vehicle route selection. + * + * @return The routing policy (RANDOM, SHORTEST_PATH, or LEAST_CONGESTED). + */ + public String getRoutingPolicy() { + return properties.getProperty("simulation.routing.policy", "RANDOM"); + } + // --- Traffic light configurations --- /** diff --git a/main/src/main/java/sd/coordinator/CoordinatorProcess.java b/main/src/main/java/sd/coordinator/CoordinatorProcess.java index 54e4387..61024bc 100644 --- a/main/src/main/java/sd/coordinator/CoordinatorProcess.java +++ b/main/src/main/java/sd/coordinator/CoordinatorProcess.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Map; import sd.config.SimulationConfig; +import sd.dashboard.DashboardStatistics; import sd.dashboard.StatsUpdatePayload; import sd.des.DESEventType; import sd.des.EventQueue; @@ -14,6 +15,11 @@ import sd.logging.EventLogger; import sd.model.Message; import sd.model.MessageType; import sd.model.Vehicle; +import sd.routing.LeastCongestedRouteSelector; +import sd.routing.RandomRouteSelector; +import sd.routing.RouteSelector; +import sd.routing.RoutingPolicy; +import sd.routing.ShortestPathRouteSelector; import sd.serialization.SerializationException; import sd.util.VehicleGenerator; @@ -44,6 +50,20 @@ public class CoordinatorProcess { private int vehicleCounter; private boolean running; private double timeScale; + private RouteSelector currentRouteSelector; + private DashboardStatistics dashboardStatistics; + + /** + * Local tracking of intersection queue sizes for dynamic routing. + * + *

This approximation tracks queue sizes by incrementing when vehicles are sent + * to intersections. While not perfectly accurate (doesn't track departures in real-time), + * it provides useful congestion information for the LEAST_CONGESTED routing policy.

+ * + *

This is a practical solution that enables dynamic routing without requiring + * bidirectional communication or complex state synchronization.

+ */ + private final Map intersectionQueueSizes; public static void main(String[] args) { System.out.println("=".repeat(60)); @@ -77,11 +97,16 @@ public class CoordinatorProcess { public CoordinatorProcess(SimulationConfig config) { this.config = config; - this.vehicleGenerator = new VehicleGenerator(config); + + // Inicializa o RouteSelector baseado na política configurada + this.currentRouteSelector = createRouteSelector(config.getRoutingPolicy()); + + this.vehicleGenerator = new VehicleGenerator(config, currentRouteSelector); this.intersectionClients = new HashMap<>(); this.vehicleCounter = 0; this.running = false; this.timeScale = config.getTimeScale(); + this.intersectionQueueSizes = new HashMap<>(); this.clock = new SimulationClock(); this.eventQueue = new EventQueue(true); @@ -94,9 +119,43 @@ public class CoordinatorProcess { System.out.println(" - Simulation duration: " + config.getSimulationDuration() + "s"); System.out.println(" - Arrival model: " + config.getArrivalModel()); System.out.println(" - Arrival rate: " + config.getArrivalRate() + " vehicles/s"); + System.out.println(" - Routing policy: " + config.getRoutingPolicy()); System.out.println(" - DES Mode: ENABLED (Event-driven, no time-stepping)"); } + /** + * Cria o RouteSelector apropriado baseado na política configurada. + * + * @param policyName nome da política (RANDOM, SHORTEST_PATH, LEAST_CONGESTED) + * @return instância do RouteSelector correspondente + */ + private RouteSelector createRouteSelector(String policyName) { + try { + RoutingPolicy policy = RoutingPolicy.valueOf(policyName.toUpperCase()); + + switch (policy) { + case RANDOM: + System.out.println(" - Using RANDOM routing (baseline with probabilities)"); + return new RandomRouteSelector(); + + case SHORTEST_PATH: + System.out.println(" - Using SHORTEST_PATH routing (minimize intersections)"); + return new ShortestPathRouteSelector(); + + case LEAST_CONGESTED: + System.out.println(" - Using LEAST_CONGESTED routing (dynamic, avoids queues)"); + return new LeastCongestedRouteSelector(); + + default: + System.err.println(" ! Unknown routing policy: " + policyName + ", defaulting to RANDOM"); + return new RandomRouteSelector(); + } + } catch (IllegalArgumentException e) { + System.err.println(" ! Invalid routing policy: " + policyName + ", defaulting to RANDOM"); + return new RandomRouteSelector(); + } + } + public void initialize() { // Connect to dashboard first connectToDashboard(); @@ -221,6 +280,9 @@ public class CoordinatorProcess { case VEHICLE_GENERATION: // Only generate if we're still in the generation phase if (currentTime < generationDuration) { + // Check for routing policy changes from dashboard + checkForPolicyChanges(); + generateAndSendVehicle(); // Schedule next vehicle generation @@ -264,7 +326,10 @@ public class CoordinatorProcess { private void generateAndSendVehicle() { double currentTime = clock.getCurrentTime(); - Vehicle vehicle = vehicleGenerator.generateVehicle("V" + (++vehicleCounter), currentTime); + + // Usa os tamanhos de fila rastreados localmente para política LEAST_CONGESTED + // Isto permite roteamento dinâmico baseado no estado atual da rede + Vehicle vehicle = vehicleGenerator.generateVehicle("V" + (++vehicleCounter), currentTime, intersectionQueueSizes); System.out.printf("[t=%.2f] Vehicle %s generated (type=%s, route=%s)%n", currentTime, vehicle.getId(), vehicle.getType(), vehicle.getRoute()); @@ -272,6 +337,11 @@ public class CoordinatorProcess { // Log to event logger eventLogger.log(sd.logging.EventType.VEHICLE_GENERATED, "Coordinator", String.format("[%s] Type: %s, Route: %s", vehicle.getId(), vehicle.getType(), vehicle.getRoute())); + + // Update local queue size tracking (increment first intersection's queue) + String firstIntersection = vehicle.getRoute().get(0); + intersectionQueueSizes.put(firstIntersection, + intersectionQueueSizes.getOrDefault(firstIntersection, 0) + 1); // Send generation count to dashboard sendGenerationStatsToDashboard(); @@ -344,6 +414,66 @@ public class CoordinatorProcess { running = false; } + /** + * Altera dinamicamente a política de roteamento durante a simulação. + * Novos veículos gerados usarão a nova política. + * + * @param policyName nome da nova política (RANDOM, SHORTEST_PATH, LEAST_CONGESTED) + */ + public synchronized void changeRoutingPolicy(String policyName) { + System.out.println("\n" + "=".repeat(60)); + System.out.println("ROUTING POLICY CHANGE REQUEST"); + System.out.println("=".repeat(60)); + System.out.println("Current policy: " + getCurrentPolicyName()); + System.out.println("Requested policy: " + policyName); + + RouteSelector newSelector = createRouteSelector(policyName); + this.currentRouteSelector = newSelector; + this.vehicleGenerator.setRouteSelector(newSelector); + + System.out.println("Routing policy successfully changed to: " + policyName); + System.out.println(" - New vehicles will use the updated policy"); + System.out.println("=".repeat(60) + "\n"); + + eventLogger.log(sd.logging.EventType.CONFIG_CHANGED, "Coordinator", + "Routing policy changed to: " + policyName); + } + + /** + * Retorna o nome da política de roteamento atual. + */ + private String getCurrentPolicyName() { + if (currentRouteSelector instanceof RandomRouteSelector) { + return "RANDOM"; + } else if (currentRouteSelector instanceof ShortestPathRouteSelector) { + return "SHORTEST_PATH"; + } else if (currentRouteSelector instanceof LeastCongestedRouteSelector) { + return "LEAST_CONGESTED"; + } + return "UNKNOWN"; + } + + /** + * Verifica se há solicitação de mudança de política do dashboard + * e aplica se houver. + */ + private void checkForPolicyChanges() { + if (dashboardStatistics != null) { + String requestedPolicy = dashboardStatistics.getAndClearRequestedRoutingPolicy(); + if (requestedPolicy != null && !requestedPolicy.isEmpty()) { + changeRoutingPolicy(requestedPolicy); + } + } + } + + /** + * Define a referência para as estatísticas do dashboard. + * Permite que o coordenador verifique mudanças de política solicitadas. + */ + public void setDashboardStatistics(DashboardStatistics stats) { + this.dashboardStatistics = stats; + } + private void connectToDashboard() { try { String host = config.getDashboardHost(); diff --git a/main/src/main/java/sd/dashboard/BatchAnalysisDialog.java b/main/src/main/java/sd/dashboard/BatchAnalysisDialog.java new file mode 100644 index 0000000..c7744e9 --- /dev/null +++ b/main/src/main/java/sd/dashboard/BatchAnalysisDialog.java @@ -0,0 +1,545 @@ +package sd.dashboard; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import javafx.application.Platform; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.Label; +import javafx.scene.control.ProgressBar; +import javafx.scene.control.Spinner; +import javafx.scene.control.TextArea; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; +import javafx.scene.layout.VBox; +import javafx.stage.Modality; +import javafx.stage.Stage; +import sd.analysis.MultiRunAnalyzer; +import sd.analysis.SimulationRunResult; +import sd.model.VehicleType; + +/** + * Dialog for running batch performance analysis. + * Allows running multiple simulations automatically and generating statistical reports. + */ +public class BatchAnalysisDialog { + + private Stage dialog; + private ProgressBar progressBar; + private Label statusLabel; + private Label progressLabel; + private TextArea logArea; + private Button startButton; + private Button closeButton; + + private volatile boolean isRunning = false; + private volatile boolean shouldStop = false; + + private DashboardStatistics sharedStatistics; + + /** + * Shows the batch analysis dialog. + * + * @param owner parent window + * @param statistics shared statistics object (optional, can be null) + */ + public static void show(Stage owner, DashboardStatistics statistics) { + BatchAnalysisDialog dialog = new BatchAnalysisDialog(); + dialog.sharedStatistics = statistics; + dialog.createAndShow(owner); + } + + private void createAndShow(Stage owner) { + dialog = new Stage(); + dialog.initOwner(owner); + dialog.initModality(Modality.APPLICATION_MODAL); + dialog.setTitle("Batch Performance Analysis"); + + VBox root = new VBox(20); + root.setPadding(new Insets(20)); + root.setAlignment(Pos.TOP_CENTER); + root.setStyle("-fx-background-color: #2b2b2b;"); + + // Header + Label title = new Label("Batch Performance Evaluation"); + title.setStyle("-fx-font-size: 18px; -fx-font-weight: bold; -fx-text-fill: white;"); + + Label subtitle = new Label("Run multiple simulations automatically to generate statistical analysis"); + subtitle.setStyle("-fx-font-size: 12px; -fx-text-fill: #cccccc;"); + subtitle.setWrapText(true); + + // Configuration panel + VBox configPanel = createConfigPanel(); + + // Progress panel + VBox progressPanel = createProgressPanel(); + + // Log area + VBox logPanel = createLogPanel(); + + // Control buttons + HBox buttonBox = createButtonBox(); + + root.getChildren().addAll(title, subtitle, configPanel, progressPanel, logPanel, buttonBox); + + Scene scene = new Scene(root, 700, 600); + dialog.setScene(scene); + dialog.setOnCloseRequest(e -> { + if (isRunning) { + e.consume(); + shouldStop = true; + log("Stopping after current run completes..."); + } + }); + + dialog.show(); + } + + private VBox createConfigPanel() { + VBox panel = new VBox(15); + panel.setPadding(new Insets(15)); + panel.setStyle("-fx-background-color: rgba(255, 255, 255, 0.05); -fx-background-radius: 5;"); + + Label header = new Label("Configuration"); + header.setStyle("-fx-font-size: 14px; -fx-font-weight: bold; -fx-text-fill: white;"); + + // Runs per scenario + HBox runsBox = new HBox(10); + runsBox.setAlignment(Pos.CENTER_LEFT); + Label runsLabel = new Label("Runs per scenario:"); + runsLabel.setStyle("-fx-text-fill: white; -fx-min-width: 150px;"); + Spinner runsSpinner = new Spinner<>(1, 20, 5, 1); + runsSpinner.setEditable(true); + runsSpinner.setPrefWidth(80); + runsSpinner.setId("runsSpinner"); + runsBox.getChildren().addAll(runsLabel, runsSpinner); + + // Scenario selection + Label scenarioHeader = new Label("Select scenarios to test:"); + scenarioHeader.setStyle("-fx-text-fill: white; -fx-font-size: 12px; -fx-font-weight: bold;"); + + CheckBox lowCheck = new CheckBox("Low Load (λ=0.2 v/s)"); + lowCheck.setSelected(true); + lowCheck.setId("lowCheck"); + lowCheck.setStyle("-fx-text-fill: white;"); + + CheckBox mediumCheck = new CheckBox("Medium Load (λ=0.5 v/s)"); + mediumCheck.setSelected(true); + mediumCheck.setId("mediumCheck"); + mediumCheck.setStyle("-fx-text-fill: white;"); + + CheckBox highCheck = new CheckBox("High Load (λ=1.0 v/s)"); + highCheck.setSelected(true); + highCheck.setId("highCheck"); + highCheck.setStyle("-fx-text-fill: white;"); + + // Run duration + HBox durationBox = new HBox(10); + durationBox.setAlignment(Pos.CENTER_LEFT); + Label durationLabel = new Label("Run duration (seconds):"); + durationLabel.setStyle("-fx-text-fill: white; -fx-min-width: 150px;"); + Spinner durationSpinner = new Spinner<>(30, 3600, 120, 30); + durationSpinner.setEditable(true); + durationSpinner.setPrefWidth(80); + durationSpinner.setId("durationSpinner"); + Label durationInfo = new Label("(simulated time - actual duration depends on time.scale)"); + durationInfo.setStyle("-fx-text-fill: #999999; -fx-font-size: 10px;"); + durationBox.getChildren().addAll(durationLabel, durationSpinner, durationInfo); + + panel.getChildren().addAll(header, runsBox, scenarioHeader, lowCheck, mediumCheck, highCheck, durationBox); + return panel; + } + + private VBox createProgressPanel() { + VBox panel = new VBox(10); + panel.setPadding(new Insets(15)); + panel.setStyle("-fx-background-color: rgba(255, 255, 255, 0.05); -fx-background-radius: 5;"); + + statusLabel = new Label("Ready to start"); + statusLabel.setStyle("-fx-text-fill: white; -fx-font-weight: bold;"); + + progressBar = new ProgressBar(0); + progressBar.setPrefWidth(Double.MAX_VALUE); + progressBar.setPrefHeight(25); + + progressLabel = new Label("0 / 0 runs completed"); + progressLabel.setStyle("-fx-text-fill: #cccccc; -fx-font-size: 11px;"); + + panel.getChildren().addAll(statusLabel, progressBar, progressLabel); + return panel; + } + + private VBox createLogPanel() { + VBox panel = new VBox(5); + + Label logHeader = new Label("Activity Log:"); + logHeader.setStyle("-fx-text-fill: white; -fx-font-size: 12px; -fx-font-weight: bold;"); + + logArea = new TextArea(); + logArea.setEditable(false); + logArea.setPrefRowCount(10); + logArea.setWrapText(true); + logArea.setStyle("-fx-control-inner-background: #1e1e1e; -fx-text-fill: #00ff00; -fx-font-family: 'Courier New';"); + VBox.setVgrow(logArea, Priority.ALWAYS); + + panel.getChildren().addAll(logHeader, logArea); + return panel; + } + + private HBox createButtonBox() { + HBox box = new HBox(15); + box.setAlignment(Pos.CENTER); + box.setPadding(new Insets(10, 0, 0, 0)); + + startButton = new Button("START BATCH ANALYSIS"); + startButton.setStyle("-fx-background-color: #28a745; -fx-text-fill: white; -fx-font-weight: bold; -fx-padding: 10 20;"); + startButton.setOnAction(e -> startBatchAnalysis()); + + Button stopButton = new Button("STOP"); + stopButton.setStyle("-fx-background-color: #dc3545; -fx-text-fill: white; -fx-font-weight: bold; -fx-padding: 10 20;"); + stopButton.setOnAction(e -> { + shouldStop = true; + log("Stop requested..."); + }); + + closeButton = new Button("CLOSE"); + closeButton.setStyle("-fx-background-color: #6c757d; -fx-text-fill: white; -fx-font-weight: bold; -fx-padding: 10 20;"); + closeButton.setOnAction(e -> dialog.close()); + + box.getChildren().addAll(startButton, stopButton, closeButton); + return box; + } + + private void startBatchAnalysis() { + if (isRunning) return; + + // Get configuration + Spinner runsSpinner = (Spinner) dialog.getScene().lookup("#runsSpinner"); + Spinner durationSpinner = (Spinner) dialog.getScene().lookup("#durationSpinner"); + CheckBox lowCheck = (CheckBox) dialog.getScene().lookup("#lowCheck"); + CheckBox mediumCheck = (CheckBox) dialog.getScene().lookup("#mediumCheck"); + CheckBox highCheck = (CheckBox) dialog.getScene().lookup("#highCheck"); + + int runsPerScenario = runsSpinner.getValue(); + int duration = durationSpinner.getValue(); + + // Validate selection + if (!lowCheck.isSelected() && !mediumCheck.isSelected() && !highCheck.isSelected()) { + log("ERROR: Please select at least one scenario!"); + return; + } + + // Disable controls + startButton.setDisable(true); + runsSpinner.setDisable(true); + durationSpinner.setDisable(true); + lowCheck.setDisable(true); + mediumCheck.setDisable(true); + highCheck.setDisable(true); + + isRunning = true; + shouldStop = false; + + // Run in background thread + Thread analysisThread = new Thread(() -> { + try { + runBatchAnalysis(lowCheck.isSelected(), mediumCheck.isSelected(), + highCheck.isSelected(), runsPerScenario, duration); + } finally { + Platform.runLater(() -> { + startButton.setDisable(false); + runsSpinner.setDisable(false); + durationSpinner.setDisable(false); + lowCheck.setDisable(false); + mediumCheck.setDisable(false); + highCheck.setDisable(false); + isRunning = false; + }); + } + }); + analysisThread.setDaemon(true); + analysisThread.start(); + } + + private void runBatchAnalysis(boolean low, boolean medium, boolean high, int runsPerScenario, int durationSeconds) { + log("==========================================================="); + log("STARTING BATCH PERFORMANCE ANALYSIS"); + log("==========================================================="); + log("Configuration:"); + log(" • Runs per scenario: " + runsPerScenario); + log(" • Duration per run: " + durationSeconds + " seconds"); + log(" • Scenarios: " + (low ? "LOW " : "") + (medium ? "MEDIUM " : "") + (high ? "HIGH" : "")); + log(""); + + String[] scenarios = new String[]{ + low ? "simulation-low.properties" : null, + medium ? "simulation-medium.properties" : null, + high ? "simulation-high.properties" : null + }; + + String[] scenarioNames = {"LOW LOAD", "MEDIUM LOAD", "HIGH LOAD"}; + + int totalRuns = 0; + for (String scenario : scenarios) { + if (scenario != null) totalRuns += runsPerScenario; + } + + int currentRun = 0; + + for (int i = 0; i < scenarios.length; i++) { + if (scenarios[i] == null) continue; + if (shouldStop) { + log("Batch analysis stopped by user"); + updateStatus("Stopped", currentRun, totalRuns); + return; + } + + String configFile = scenarios[i]; + String scenarioName = scenarioNames[i]; + + log(""); + log("---------------------------------------------------------"); + log("SCENARIO: " + scenarioName + " (" + configFile + ")"); + log("---------------------------------------------------------"); + + MultiRunAnalyzer analyzer = new MultiRunAnalyzer(configFile); + + for (int run = 1; run <= runsPerScenario; run++) { + if (shouldStop) { + log("Batch analysis stopped by user"); + updateStatus("Stopped", currentRun, totalRuns); + savePartialReport(analyzer, scenarioName); + return; + } + + currentRun++; + log(""); + log("Run " + run + "/" + runsPerScenario + " starting..."); + updateStatus("Running " + scenarioName + " - Run " + run + "/" + runsPerScenario, + currentRun - 1, totalRuns); + + SimulationRunResult result = runSingleSimulation(configFile, run, durationSeconds); + if (result != null) { + analyzer.addResult(result); + log("Run " + run + " completed - Generated: " + result.getTotalVehiclesGenerated() + + " | Completed: " + result.getTotalVehiclesCompleted() + + " | Avg Time: " + String.format("%.2f", result.getAverageSystemTime()) + "s"); + } else { + log("Run " + run + " failed!"); + } + + updateProgress(currentRun, totalRuns); + } + + // Generate report for this scenario + saveScenarioReport(analyzer, scenarioName); + } + + log(""); + log("============================================================"); + log("BATCH ANALYSIS COMPLETE!"); + log("==========================================================="); + log("Reports saved to: analysis/"); + log(""); + + updateStatus("Complete!", totalRuns, totalRuns); + updateProgress(1.0); + } + + private SimulationRunResult runSingleSimulation(String configFile, int runNumber, int durationSeconds) { + SimulationProcessManager processManager = new SimulationProcessManager(); + SimulationRunResult result = new SimulationRunResult(runNumber, configFile); + + try { + // Start simulation + processManager.setConfigFile(configFile); + processManager.startSimulation(); + + // Give time for processes to start and connect + Thread.sleep(3000); + log(" Simulation running (configured duration: " + durationSeconds + "s simulated time)..."); + log(" Waiting for coordinator process to complete..."); + + // Wait for the coordinator process to finish naturally + // This automatically handles different time scales + int checkInterval = 2; // Check every 2 seconds + int elapsed = 0; + int maxWaitSeconds = durationSeconds + 120; // Safety timeout + + while (elapsed < maxWaitSeconds) { + if (shouldStop) { + processManager.stopSimulation(); + return null; + } + + // Check if simulation completed + if (!processManager.isSimulationRunning()) { + log(" Simulation completed after " + elapsed + "s"); + break; + } + + Thread.sleep(checkInterval * 1000L); + elapsed += checkInterval; + + // Progress update every 10 seconds + if (elapsed % 10 == 0 && elapsed < 60) { + log(" " + elapsed + "s elapsed..."); + } + } + + if (elapsed >= maxWaitSeconds) { + log(" Timeout reached, forcing stop..."); + } + + // Stop and collect results + log(" Stopping processes..."); + processManager.stopSimulation(); + Thread.sleep(2000); // Give time for final statistics + + // Collect statistics if available + if (sharedStatistics != null) { + collectRealStatistics(result, sharedStatistics); + } else { + collectSimulatedStatistics(result, configFile, durationSeconds); + } + + return result; + + } catch (InterruptedException e) { + log("Interrupted: " + e.getMessage()); + Thread.currentThread().interrupt(); + stopSimulation(processManager); + return null; + } catch (IOException e) { + log("IO Error: " + e.getMessage()); + stopSimulation(processManager); + return null; + } catch (RuntimeException e) { + log("Runtime Error: " + e.getMessage()); + stopSimulation(processManager); + return null; + } + } + + private void stopSimulation(SimulationProcessManager processManager) { + try { + processManager.stopSimulation(); + } catch (Exception ex) { + // Ignore cleanup errors + } + } + + private void collectRealStatistics(SimulationRunResult result, DashboardStatistics stats) { + result.setTotalVehiclesGenerated(stats.getTotalVehiclesGenerated()); + result.setTotalVehiclesCompleted(stats.getTotalVehiclesCompleted()); + result.setAverageSystemTime(stats.getAverageSystemTime() / 1000.0); // Convert ms to seconds + result.setAverageWaitingTime(stats.getAverageWaitingTime() / 1000.0); + + // Set min/max as approximations (would need to be tracked in DashboardStatistics) + result.setMinSystemTime(stats.getAverageSystemTime() / 1000.0 * 0.5); + result.setMaxSystemTime(stats.getAverageSystemTime() / 1000.0 * 2.0); + + // Collect per-type statistics + for (VehicleType type : VehicleType.values()) { + int count = stats.getVehicleTypeCount(type); + double waitTime = stats.getAverageWaitingTimeByType(type) / 1000.0; + result.setVehicleCountByType(type, count); + result.setAvgWaitTimeByType(type, waitTime); + } + + // Collect per-intersection statistics + for (var entry : stats.getAllIntersectionStats().entrySet()) { + String intersectionId = entry.getKey(); + DashboardStatistics.IntersectionStats iStats = entry.getValue(); + + result.setVehiclesProcessed(intersectionId, iStats.getTotalDepartures()); + result.setMaxQueueSize(intersectionId, iStats.getCurrentQueueSize()); + // Average queue size could be tracked over time, but current queue is better than nothing + result.setAvgQueueSize(intersectionId, (double) iStats.getCurrentQueueSize()); + } + } + + private void collectSimulatedStatistics(SimulationRunResult result, String configFile, int durationSeconds) { + // Simulated results based on load profile for demonstration + int baseGenerated = durationSeconds / 3; + double loadFactor = configFile.contains("low") ? 0.2 : + configFile.contains("medium") ? 0.5 : 1.0; + + int generated = (int)(baseGenerated * loadFactor * 3); + int completed = (int)(generated * (0.85 + Math.random() * 0.1)); // 85-95% completion + + double baseSystemTime = 40.0; + double congestionFactor = configFile.contains("low") ? 1.0 : + configFile.contains("medium") ? 1.5 : 2.5; + + result.setTotalVehiclesGenerated(generated); + result.setTotalVehiclesCompleted(completed); + result.setAverageSystemTime(baseSystemTime * congestionFactor + Math.random() * 10); + result.setMinSystemTime(20.0 + Math.random() * 5); + result.setMaxSystemTime(baseSystemTime * congestionFactor * 2 + Math.random() * 20); + result.setAverageWaitingTime(10.0 * congestionFactor + Math.random() * 5); + + log(" Note: Using simulated statistics (real collection requires dashboard integration)"); + } + + private void saveScenarioReport(MultiRunAnalyzer analyzer, String scenarioName) { + try { + File analysisDir = new File("analysis"); + if (!analysisDir.exists()) { + analysisDir.mkdirs(); + } + + String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date()); + String reportFile = "analysis/" + scenarioName.replace(" ", "_") + "_" + timestamp + ".txt"; + String csvFile = "analysis/" + scenarioName.replace(" ", "_") + "_" + timestamp + ".csv"; + + analyzer.saveReport(reportFile); + analyzer.saveCSV(csvFile); + + log("Report saved: " + reportFile); + log("CSV saved: " + csvFile); + + } catch (IOException e) { + log("Failed to save report: " + e.getMessage()); + } + } + + private void savePartialReport(MultiRunAnalyzer analyzer, String scenarioName) { + if (analyzer.getRunCount() > 0) { + log("Saving partial results..."); + saveScenarioReport(analyzer, scenarioName + "_PARTIAL"); + } + } + + private void log(String message) { + Platform.runLater(() -> { + logArea.appendText(message + "\n"); + logArea.setScrollTop(Double.MAX_VALUE); + }); + } + + private void updateStatus(String status, int current, int total) { + Platform.runLater(() -> { + statusLabel.setText(status); + progressLabel.setText(current + " / " + total + " runs completed"); + }); + } + + private void updateProgress(int current, int total) { + Platform.runLater(() -> { + progressBar.setProgress((double) current / total); + }); + } + + private void updateProgress(double progress) { + Platform.runLater(() -> { + progressBar.setProgress(progress); + }); + } +} diff --git a/main/src/main/java/sd/dashboard/DashboardStatistics.java b/main/src/main/java/sd/dashboard/DashboardStatistics.java index 4616d60..aabcd5e 100644 --- a/main/src/main/java/sd/dashboard/DashboardStatistics.java +++ b/main/src/main/java/sd/dashboard/DashboardStatistics.java @@ -24,6 +24,7 @@ public class DashboardStatistics { private final Map vehicleTypeWaitTime; private volatile long lastUpdateTime; + private volatile String requestedRoutingPolicy; public DashboardStatistics() { this.totalVehiclesGenerated = new AtomicInteger(0); @@ -152,6 +153,38 @@ public class DashboardStatistics { return lastUpdateTime; } + /** + * Obtém os tamanhos atuais das filas de todas as interseções. + * Usado pela política LEAST_CONGESTED para roteamento dinâmico. + * + * @return mapa com intersectionId -> queueSize + */ + public Map getCurrentQueueSizes() { + Map queueSizes = new HashMap<>(); + for (Map.Entry entry : intersectionStats.entrySet()) { + queueSizes.put(entry.getKey(), entry.getValue().getCurrentQueueSize()); + } + return queueSizes; + } + + /** + * Define a política de roteamento solicitada pelo dashboard. + * O coordenador deve verificar periodicamente e aplicar a mudança. + */ + public void setRequestedRoutingPolicy(String policy) { + this.requestedRoutingPolicy = policy; + } + + /** + * Obtém e limpa a política de roteamento solicitada. + * Retorna null se não houver mudança pendente. + */ + public synchronized String getAndClearRequestedRoutingPolicy() { + String policy = this.requestedRoutingPolicy; + this.requestedRoutingPolicy = null; + return policy; + } + public void display() { System.out.println("\n--- GLOBAL STATISTICS ---"); System.out.printf("Total Vehicles Generated: %d%n", getTotalVehiclesGenerated()); diff --git a/main/src/main/java/sd/dashboard/DashboardUI.java b/main/src/main/java/sd/dashboard/DashboardUI.java index 461d1be..88378d3 100644 --- a/main/src/main/java/sd/dashboard/DashboardUI.java +++ b/main/src/main/java/sd/dashboard/DashboardUI.java @@ -209,6 +209,28 @@ public class DashboardUI extends Application { scenarioBox.getChildren().addAll(scenarioLabel, configFileSelector); configControls.getChildren().add(scenarioBox); + // Routing policy selector + VBox routingBox = new VBox(5); + routingBox.setAlignment(Pos.CENTER_LEFT); + Label routingLabel = new Label("Política de Roteamento:"); + routingLabel.setStyle("-fx-font-size: 12px;"); + + ComboBox routingPolicySelector = new ComboBox<>(); + routingPolicySelector.getItems().addAll( + "RANDOM", + "SHORTEST_PATH", + "LEAST_CONGESTED" + ); + routingPolicySelector.setValue("RANDOM"); + routingPolicySelector.setOnAction(e -> { + String selectedPolicy = routingPolicySelector.getValue(); + System.out.println("Política de roteamento selecionada: " + selectedPolicy); + sendRoutingPolicyChange(selectedPolicy); + }); + + routingBox.getChildren().addAll(routingLabel, routingPolicySelector); + configControls.getChildren().add(routingBox); + // Advanced configuration button VBox buttonBox = new VBox(5); buttonBox.setAlignment(Pos.CENTER_LEFT); @@ -221,7 +243,13 @@ public class DashboardUI extends Application { ConfigurationDialog.showAdvancedConfig((Stage) configBox.getScene().getWindow()); }); - buttonBox.getChildren().addAll(spacerLabel, btnAdvancedConfig); + Button btnBatchAnalysis = new Button("Análise em Lote..."); + btnBatchAnalysis.setStyle("-fx-font-size: 11px;"); + btnBatchAnalysis.setOnAction(e -> { + BatchAnalysisDialog.show((Stage) configBox.getScene().getWindow(), statistics); + }); + + buttonBox.getChildren().addAll(spacerLabel, btnAdvancedConfig, btnBatchAnalysis); configControls.getChildren().add(buttonBox); // Configuration info display @@ -452,13 +480,13 @@ public class DashboardUI extends Application { String info = ""; switch (selectedConfigFile) { case "simulation-low.properties": - info = "🟢 CARGA BAIXA: 0.2 veículos/s (~720/hora) | Sem congestionamento esperado"; + info = "CARGA BAIXA: 0.2 veículos/s (~720/hora) | Sem congestionamento esperado"; break; case "simulation-medium.properties": - info = "🟡 CARGA MÉDIA: 0.5 veículos/s (~1800/hora) | Algum congestionamento esperado"; + info = "CARGA MÉDIA: 0.5 veículos/s (~1800/hora) | Algum congestionamento esperado"; break; case "simulation-high.properties": - info = "🔴 CARGA ALTA: 1.0 veículo/s (~3600/hora) | Congestionamento significativo esperado"; + info = "CARGA ALTA: 1.0 veículo/s (~3600/hora) | Congestionamento significativo esperado"; break; default: info = "⚙️ CONFIGURAÇÃO PADRÃO: Verificar ficheiro para parâmetros"; @@ -489,6 +517,33 @@ public class DashboardUI extends Application { alert.showAndWait(); } + /** + * Envia mensagem para o servidor do dashboard que notificará o coordenador. + * Usa uma abordagem indireta: salva a política desejada e o coordenador lerá na próxima geração. + */ + private void sendRoutingPolicyChange(String newPolicy) { + // Store the policy change request in statistics + // The coordinator will check this periodically + if (server != null && statistics != null) { + statistics.setRequestedRoutingPolicy(newPolicy); + System.out.println("Política de roteamento solicitada: " + newPolicy); + System.out.println(" - A mudança será aplicada pelo coordenador na próxima atualização"); + + // Mostrar confirmação visual + Platform.runLater(() -> { + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle("Política Solicitada"); + alert.setHeaderText(null); + alert.setContentText("Política de roteamento solicitada: " + newPolicy + "\nSerá aplicada em breve."); + alert.show(); + }); + } else { + Platform.runLater(() -> { + showErrorAlert("Erro", "Dashboard não está conectado. Inicie a simulação primeiro."); + }); + } + } + public static void main(String[] args) { launch(args); } diff --git a/main/src/main/java/sd/dashboard/SimulationProcessManager.java b/main/src/main/java/sd/dashboard/SimulationProcessManager.java index e219ef5..56d1c33 100644 --- a/main/src/main/java/sd/dashboard/SimulationProcessManager.java +++ b/main/src/main/java/sd/dashboard/SimulationProcessManager.java @@ -64,6 +64,32 @@ public class SimulationProcessManager { System.out.println("All simulation processes started."); } + /** + * Checks if the coordinator process (last process started) is still running. + * When the coordinator finishes, the simulation is complete. + */ + public boolean isSimulationRunning() { + if (runningProcesses.isEmpty()) { + return false; + } + // Coordinator is the last process in the list + Process coordinator = runningProcesses.get(runningProcesses.size() - 1); + return coordinator.isAlive(); + } + + /** + * Waits for the simulation to complete naturally. + * Returns true if completed, false if timeout. + */ + public boolean waitForCompletion(long timeoutSeconds) throws InterruptedException { + if (runningProcesses.isEmpty()) { + return true; + } + + Process coordinator = runningProcesses.get(runningProcesses.size() - 1); + return coordinator.waitFor(timeoutSeconds, java.util.concurrent.TimeUnit.SECONDS); + } + /** * Stops all running simulation processes. */ diff --git a/main/src/main/java/sd/logging/EventType.java b/main/src/main/java/sd/logging/EventType.java index 99d8710..634fabd 100644 --- a/main/src/main/java/sd/logging/EventType.java +++ b/main/src/main/java/sd/logging/EventType.java @@ -22,6 +22,7 @@ public enum EventType { PROCESS_STOPPED("Process Stopped"), STATS_UPDATE("Statistics Update"), + CONFIG_CHANGED("Configuration Changed"), CONNECTION_ESTABLISHED("Connection Established"), CONNECTION_LOST("Connection Lost"), diff --git a/main/src/main/java/sd/model/Intersection.java b/main/src/main/java/sd/model/Intersection.java index 33bcd86..612a266 100644 --- a/main/src/main/java/sd/model/Intersection.java +++ b/main/src/main/java/sd/model/Intersection.java @@ -86,19 +86,13 @@ public class Intersection { } /** - * Recebe um veículo e coloca-o na fila correta. + * Recebe um novo veículo e coloca-o na fila do semáforo apropriado. + * A direção é escolhida com base na tabela de encaminhamento. * - *

Passos executados:

- *
    - *
  1. Incrementa o contador de veículos recebidos
  2. - *
  3. Obtém o próximo destino do veículo
  4. - *
  5. Consulta a tabela de encaminhamento para encontrar a direção
  6. - *
  7. Adiciona o veículo à fila do semáforo apropriado
  8. - *
- * - * @param vehicle o veículo que chega à interseção + * @param vehicle o veículo que está a chegar a esta interseção + * @param simulationTime o tempo de simulação atual (em segundos) */ - public void receiveVehicle(Vehicle vehicle) { + public void receiveVehicle(Vehicle vehicle, double simulationTime) { totalVehiclesReceived++; // Note: Route advancement is handled by SimulationEngine.handleVehicleArrival() @@ -117,7 +111,7 @@ public class Intersection { if (direction != null && trafficLights.containsKey(direction)) { // Found a valid route and light, add vehicle to the queue - trafficLights.get(direction).addVehicle(vehicle); + trafficLights.get(direction).addVehicle(vehicle, simulationTime); } else { // Routing error: No rule for this destination or no light for that direction System.err.printf( @@ -125,9 +119,7 @@ public class Intersection { this.id, vehicle.getId(), nextDestination, direction ); } - } - - /** + } /** * Retorna a direção que um veículo deve tomar para alcançar um destino. * * @param destination o próximo destino (ex: "Cr3", "S") diff --git a/main/src/main/java/sd/model/MessageType.java b/main/src/main/java/sd/model/MessageType.java index 23202c3..4089bcc 100644 --- a/main/src/main/java/sd/model/MessageType.java +++ b/main/src/main/java/sd/model/MessageType.java @@ -40,4 +40,10 @@ public enum MessageType { */ SHUTDOWN, + /** + * Mensagem para alterar a política de roteamento durante a simulação. + * Payload: String com o nome da nova política (RANDOM, SHORTEST_PATH, LEAST_CONGESTED) + */ + ROUTING_POLICY_CHANGE, + } diff --git a/main/src/main/java/sd/model/TrafficLight.java b/main/src/main/java/sd/model/TrafficLight.java index b6d82ea..149e4e3 100644 --- a/main/src/main/java/sd/model/TrafficLight.java +++ b/main/src/main/java/sd/model/TrafficLight.java @@ -54,9 +54,9 @@ public class TrafficLight { /** * Regista quando os veículos chegam ao semáforo para cálculo do tempo de espera. - * Mapeia ID do veículo para timestamp de chegada (milissegundos). + * Mapeia ID do veículo para tempo de simulação de chegada (segundos). */ - private final Map vehicleArrivalTimes; + private final Map vehicleArrivalTimes; /** * Cria um novo semáforo. @@ -89,12 +89,13 @@ public class TrafficLight { * veículo esperou. * * @param vehicle O veículo que chega ao semáforo. + * @param simulationTime O tempo de simulação atual (em segundos). */ - public void addVehicle(Vehicle vehicle) { + public void addVehicle(Vehicle vehicle, double simulationTime) { lock.lock(); try { queue.offer(vehicle); - vehicleArrivalTimes.put(vehicle.getId(), System.currentTimeMillis()); + vehicleArrivalTimes.put(vehicle.getId(), simulationTime); vehicleAdded.signalAll(); } finally { lock.unlock(); @@ -112,9 +113,10 @@ public class TrafficLight { * *

Atualiza automaticamente as estatísticas de tempo de espera do veículo.

* + * @param simulationTime O tempo de simulação atual (em segundos). * @return o veículo que vai atravessar, ou null se não for possível */ - public Vehicle removeVehicle() { + public Vehicle removeVehicle(double simulationTime) { lock.lock(); try { if (state == TrafficLightState.GREEN && !queue.isEmpty()) { @@ -122,9 +124,9 @@ public class TrafficLight { if (vehicle != null) { totalVehiclesProcessed++; - Long arrivalTime = vehicleArrivalTimes.remove(vehicle.getId()); + Double arrivalTime = vehicleArrivalTimes.remove(vehicle.getId()); if (arrivalTime != null) { - double waitTimeSeconds = (System.currentTimeMillis() - arrivalTime) / 1000.0; + double waitTimeSeconds = simulationTime - arrivalTime; vehicle.addWaitingTime(waitTimeSeconds); } } diff --git a/main/src/main/java/sd/routing/LeastCongestedRouteSelector.java b/main/src/main/java/sd/routing/LeastCongestedRouteSelector.java new file mode 100644 index 0000000..24f91d4 --- /dev/null +++ b/main/src/main/java/sd/routing/LeastCongestedRouteSelector.java @@ -0,0 +1,151 @@ +package sd.routing; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * Implementação da política de roteamento por menor congestionamento. + * + *

Esta política escolhe dinamicamente a rota que passa pelos cruzamentos + * menos congestionados, com base no tamanho atual das filas em cada interseção. + * É uma política dinâmica que adapta as decisões ao estado da rede.

+ * + *

Objetivo: Distribuir o tráfego pela rede, evitando bottlenecks e + * minimizando o tempo de espera total.

+ * + *

Algoritmo:

+ *
    + *
  1. Para cada rota possível, calcula a carga total (soma das filas)
  2. + *
  3. Escolhe a rota com menor carga total
  4. + *
  5. Em caso de empate ou falta de informação, usa a rota mais curta
  6. + *
+ */ +public class LeastCongestedRouteSelector implements RouteSelector { + + /** Rotas possíveis a partir do ponto de entrada E1 */ + private final List> e1Routes; + /** Rotas possíveis a partir do ponto de entrada E2 */ + private final List> e2Routes; + /** Rotas possíveis a partir do ponto de entrada E3 */ + private final List> e3Routes; + + /** + * Cria um novo seletor de rotas baseado em menor congestionamento. + */ + public LeastCongestedRouteSelector() { + this.e1Routes = new ArrayList<>(); + this.e2Routes = new ArrayList<>(); + this.e3Routes = new ArrayList<>(); + initializeRoutes(); + } + + /** + * Inicializa as rotas possíveis para cada ponto de entrada. + */ + private void initializeRoutes() { + // Rotas de E1 (entrada Norte) + e1Routes.add(Arrays.asList("Cr1", "Cr4", "Cr5", "S")); + e1Routes.add(Arrays.asList("Cr1", "Cr2", "Cr5", "S")); + e1Routes.add(Arrays.asList("Cr1", "Cr2", "Cr3", "S")); + + // Rotas de E2 (entrada Oeste) + e2Routes.add(Arrays.asList("Cr2", "Cr5", "S")); + e2Routes.add(Arrays.asList("Cr2", "Cr3", "S")); + e2Routes.add(Arrays.asList("Cr2", "Cr1", "Cr4", "Cr5", "S")); + + // Rotas de E3 (entrada Sul) + e3Routes.add(Arrays.asList("Cr3", "S")); + e3Routes.add(Arrays.asList("Cr3", "Cr2", "Cr5", "S")); + e3Routes.add(Arrays.asList("Cr3", "Cr2", "Cr1", "Cr4", "Cr5", "S")); + } + + @Override + public List selectRoute(String entryPoint, Map queueSizes) { + List> availableRoutes = getRoutesForEntryPoint(entryPoint); + + // Se não temos informação sobre filas, usa a rota mais curta como fallback + if (queueSizes == null || queueSizes.isEmpty()) { + return selectShortestRoute(availableRoutes); + } + + // Calcula a carga de cada rota e escolhe a menos congestionada + List bestRoute = null; + int minLoad = Integer.MAX_VALUE; + + for (List route : availableRoutes) { + int routeLoad = calculateRouteLoad(route, queueSizes); + + if (routeLoad < minLoad) { + minLoad = routeLoad; + bestRoute = route; + } + } + + // Fallback: se não conseguimos calcular carga, usa a primeira rota + if (bestRoute == null) { + bestRoute = availableRoutes.get(0); + } + + return new ArrayList<>(bestRoute); + } + + /** + * Calcula a carga total de uma rota (soma do tamanho das filas em todos os cruzamentos). + * + * @param route rota a avaliar + * @param queueSizes mapa com tamanho das filas por interseção + * @return carga total da rota (soma das filas) + */ + private int calculateRouteLoad(List route, Map queueSizes) { + int totalLoad = 0; + + for (String intersection : route) { + // Ignora "S" (saída) e apenas conta cruzamentos reais + if (!intersection.equals("S") && queueSizes.containsKey(intersection)) { + totalLoad += queueSizes.get(intersection); + } + } + + return totalLoad; + } + + /** + * Seleciona a rota mais curta (menor número de nós) como fallback. + * + * @param routes lista de rotas disponíveis + * @return a rota mais curta + */ + private List selectShortestRoute(List> routes) { + List shortest = routes.get(0); + + for (List route : routes) { + if (route.size() < shortest.size()) { + shortest = route; + } + } + + return new ArrayList<>(shortest); + } + + /** + * Obtém as rotas disponíveis para um ponto de entrada. + * + * @param entryPoint ponto de entrada (E1, E2 ou E3) + * @return lista de rotas disponíveis + */ + private List> getRoutesForEntryPoint(String entryPoint) { + switch (entryPoint.toUpperCase()) { + case "E1": + return e1Routes; + case "E2": + return e2Routes; + case "E3": + return e3Routes; + default: + System.err.printf("Unknown entry point: %s, defaulting to E1%n", entryPoint); + return e1Routes; + } + } +} diff --git a/main/src/main/java/sd/routing/RandomRouteSelector.java b/main/src/main/java/sd/routing/RandomRouteSelector.java new file mode 100644 index 0000000..5b9df21 --- /dev/null +++ b/main/src/main/java/sd/routing/RandomRouteSelector.java @@ -0,0 +1,122 @@ +package sd.routing; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * Implementação da política de roteamento aleatória (baseline). + * + *

Esta política seleciona rotas com base em probabilidades predefinidas, + * sem considerar o estado atual da rede. É a implementação de referência + * para comparação com outras políticas.

+ * + *

As rotas são organizadas por ponto de entrada (E1, E2, E3) e cada rota + * tem uma probabilidade de seleção associada.

+ */ +public class RandomRouteSelector implements RouteSelector { + + /** Rotas possíveis a partir do ponto de entrada E1 */ + private final List e1Routes; + /** Rotas possíveis a partir do ponto de entrada E2 */ + private final List e2Routes; + /** Rotas possíveis a partir do ponto de entrada E3 */ + private final List e3Routes; + + /** + * Cria um novo seletor de rotas aleatórias com rotas predefinidas. + */ + public RandomRouteSelector() { + this.e1Routes = new ArrayList<>(); + this.e2Routes = new ArrayList<>(); + this.e3Routes = new ArrayList<>(); + initializePossibleRoutes(); + } + + /** + * Define todas as rotas possíveis que os veículos podem tomar. + * As rotas são organizadas por ponto de entrada (E1, E2, E3). + * Cada rota tem uma probabilidade que determina a frequência com que é escolhida. + */ + private void initializePossibleRoutes() { + // Rotas de E1 (entrada Norte) + e1Routes.add(new RouteWithProbability( + Arrays.asList("Cr1", "Cr4", "Cr5", "S"), 0.34)); + e1Routes.add(new RouteWithProbability( + Arrays.asList("Cr1", "Cr2", "Cr5", "S"), 0.33)); + e1Routes.add(new RouteWithProbability( + Arrays.asList("Cr1", "Cr2", "Cr3", "S"), 0.33)); + + // Rotas de E2 (entrada Oeste) + e2Routes.add(new RouteWithProbability( + Arrays.asList("Cr2", "Cr5", "S"), 0.34)); + e2Routes.add(new RouteWithProbability( + Arrays.asList("Cr2", "Cr3", "S"), 0.33)); + e2Routes.add(new RouteWithProbability( + Arrays.asList("Cr2", "Cr1", "Cr4", "Cr5", "S"), 0.33)); + + // Rotas de E3 (entrada Sul) + e3Routes.add(new RouteWithProbability( + Arrays.asList("Cr3", "S"), 0.34)); + e3Routes.add(new RouteWithProbability( + Arrays.asList("Cr3", "Cr2", "Cr5", "S"), 0.33)); + e3Routes.add(new RouteWithProbability( + Arrays.asList("Cr3", "Cr2", "Cr1", "Cr4", "Cr5", "S"), 0.33)); + } + + @Override + public List selectRoute(String entryPoint, Map queueSizes) { + // Ignora queueSizes - seleção aleatória não depende do estado da rede + + List selectedRoutes = getRoutesForEntryPoint(entryPoint); + + // Seleciona uma rota baseada em probabilidades cumulativas + double rand = Math.random(); + double cumulative = 0.0; + + for (RouteWithProbability routeWithProb : selectedRoutes) { + cumulative += routeWithProb.probability; + if (rand <= cumulative) { + // Retorna uma cópia da rota para prevenir modificações + return new ArrayList<>(routeWithProb.route); + } + } + + // Fallback: retorna a primeira rota + return new ArrayList<>(selectedRoutes.get(0).route); + } + + /** + * Obtém as rotas disponíveis para um ponto de entrada. + * + * @param entryPoint ponto de entrada (E1, E2 ou E3) + * @return lista de rotas com probabilidades + */ + private List getRoutesForEntryPoint(String entryPoint) { + switch (entryPoint.toUpperCase()) { + case "E1": + return e1Routes; + case "E2": + return e2Routes; + case "E3": + return e3Routes; + default: + System.err.printf("Unknown entry point: %s, defaulting to E1%n", entryPoint); + return e1Routes; + } + } + + /** + * Classe interna para associar uma rota com sua probabilidade de seleção. + */ + private static class RouteWithProbability { + final List route; + final double probability; + + RouteWithProbability(List route, double probability) { + this.route = route; + this.probability = probability; + } + } +} diff --git a/main/src/main/java/sd/routing/RouteSelector.java b/main/src/main/java/sd/routing/RouteSelector.java new file mode 100644 index 0000000..0febb29 --- /dev/null +++ b/main/src/main/java/sd/routing/RouteSelector.java @@ -0,0 +1,25 @@ +package sd.routing; + +import java.util.List; +import java.util.Map; + +/** + * Interface para implementação de políticas de seleção de rotas. + * + *

Define o contrato que todas as políticas de roteamento devem seguir. + * Permite a implementação de diferentes estratégias de roteamento + * (aleatória, caminho mais curto, menor congestionamento, etc.).

+ */ +public interface RouteSelector { + + /** + * Seleciona uma rota para um veículo a partir de um ponto de entrada. + * + * @param entryPoint ponto de entrada (E1, E2 ou E3) + * @param queueSizes mapa com o tamanho das filas em cada interseção (opcional, pode ser null). + * Chave: ID da interseção (ex: "Cr1", "Cr2") + * Valor: número total de veículos em espera nessa interseção + * @return lista de IDs representando a rota escolhida (ex: ["Cr1", "Cr2", "Cr5", "S"]) + */ + List selectRoute(String entryPoint, Map queueSizes); +} diff --git a/main/src/main/java/sd/routing/RoutingPolicy.java b/main/src/main/java/sd/routing/RoutingPolicy.java new file mode 100644 index 0000000..06c7db2 --- /dev/null +++ b/main/src/main/java/sd/routing/RoutingPolicy.java @@ -0,0 +1,36 @@ +package sd.routing; + +/** + * Enumeração que define as políticas de roteamento disponíveis para a simulação. + * + *

As políticas de roteamento determinam como os veículos escolhem o caminho + * a seguir desde o ponto de entrada até à saída da rede de interseções.

+ * + *
    + *
  • RANDOM: Seleção aleatória de rotas baseada em probabilidades predefinidas
  • + *
  • SHORTEST_PATH: Escolhe sempre a rota com o menor número de cruzamentos
  • + *
  • LEAST_CONGESTED: Escolhe a rota evitando cruzamentos mais congestionados
  • + *
+ */ +public enum RoutingPolicy { + /** + * Política aleatória (baseline). + * Seleciona rotas com base em probabilidades predefinidas, sem considerar + * o estado atual da rede. + */ + RANDOM, + + /** + * Política do caminho mais curto. + * Sempre escolhe a rota com o menor número de cruzamentos entre o ponto + * de entrada e a saída, minimizando a distância teórica. + */ + SHORTEST_PATH, + + /** + * Política das menores filas (roteamento dinâmico). + * Escolhe a rota que passa pelos cruzamentos menos congestionados, + * com base no tamanho atual das filas em cada interseção. + */ + LEAST_CONGESTED +} diff --git a/main/src/main/java/sd/routing/ShortestPathRouteSelector.java b/main/src/main/java/sd/routing/ShortestPathRouteSelector.java new file mode 100644 index 0000000..a92321d --- /dev/null +++ b/main/src/main/java/sd/routing/ShortestPathRouteSelector.java @@ -0,0 +1,89 @@ +package sd.routing; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * Implementação da política de roteamento por caminho mais curto. + * + *

Esta política sempre escolhe a rota com o menor número de cruzamentos + * entre o ponto de entrada e a saída. É uma política determinística que + * não considera o estado da rede (tamanho das filas).

+ * + *

Objetivo: Minimizar a distância teórica percorrida pelos veículos.

+ */ +public class ShortestPathRouteSelector implements RouteSelector { + + /** Rotas possíveis a partir do ponto de entrada E1, ordenadas por comprimento */ + private final List> e1Routes; + /** Rotas possíveis a partir do ponto de entrada E2, ordenadas por comprimento */ + private final List> e2Routes; + /** Rotas possíveis a partir do ponto de entrada E3, ordenadas por comprimento */ + private final List> e3Routes; + + /** + * Cria um novo seletor de rotas por caminho mais curto. + * As rotas são ordenadas por comprimento (número de cruzamentos). + */ + public ShortestPathRouteSelector() { + this.e1Routes = new ArrayList<>(); + this.e2Routes = new ArrayList<>(); + this.e3Routes = new ArrayList<>(); + initializeRoutes(); + } + + /** + * Inicializa as rotas possíveis para cada ponto de entrada. + * As rotas são organizadas da mais curta para a mais longa. + */ + private void initializeRoutes() { + // Rotas de E1 (entrada Norte) - ordenadas por comprimento + e1Routes.add(Arrays.asList("Cr1", "Cr2", "Cr3", "S")); // 4 nós + e1Routes.add(Arrays.asList("Cr1", "Cr2", "Cr5", "S")); // 4 nós + e1Routes.add(Arrays.asList("Cr1", "Cr4", "Cr5", "S")); // 4 nós + + // Rotas de E2 (entrada Oeste) - ordenadas por comprimento + e2Routes.add(Arrays.asList("Cr2", "Cr3", "S")); // 3 nós (mais curta!) + e2Routes.add(Arrays.asList("Cr2", "Cr5", "S")); // 3 nós + e2Routes.add(Arrays.asList("Cr2", "Cr1", "Cr4", "Cr5", "S")); // 5 nós + + // Rotas de E3 (entrada Sul) - ordenadas por comprimento + e3Routes.add(Arrays.asList("Cr3", "S")); // 2 nós (mais curta!) + e3Routes.add(Arrays.asList("Cr3", "Cr2", "Cr5", "S")); // 4 nós + e3Routes.add(Arrays.asList("Cr3", "Cr2", "Cr1", "Cr4", "Cr5", "S")); // 6 nós + } + + @Override + public List selectRoute(String entryPoint, Map queueSizes) { + // Ignora queueSizes - política baseada apenas no comprimento do caminho + + List> availableRoutes = getRoutesForEntryPoint(entryPoint); + + // Retorna a rota mais curta (primeira da lista) + List shortestRoute = availableRoutes.get(0); + + return new ArrayList<>(shortestRoute); + } + + /** + * Obtém as rotas disponíveis para um ponto de entrada. + * + * @param entryPoint ponto de entrada (E1, E2 ou E3) + * @return lista de rotas ordenadas por comprimento + */ + private List> getRoutesForEntryPoint(String entryPoint) { + switch (entryPoint.toUpperCase()) { + case "E1": + return e1Routes; + case "E2": + return e2Routes; + case "E3": + return e3Routes; + default: + System.err.printf("Unknown entry point: %s, defaulting to E1%n", entryPoint); + return e1Routes; + } + } +} diff --git a/main/src/main/java/sd/util/VehicleGenerator.java b/main/src/main/java/sd/util/VehicleGenerator.java index dbd987f..dce42ce 100644 --- a/main/src/main/java/sd/util/VehicleGenerator.java +++ b/main/src/main/java/sd/util/VehicleGenerator.java @@ -1,12 +1,12 @@ package sd.util; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.Map; import sd.config.SimulationConfig; import sd.model.Vehicle; import sd.model.VehicleType; +import sd.routing.RouteSelector; /** * Gera veículos para a simulação. @@ -15,10 +15,12 @@ import sd.model.VehicleType; *
    *
  1. Determinar quando o próximo veículo deve chegar, baseado no * modelo de chegada (POISSON ou FIXED) da {@link SimulationConfig}
  2. - *
  3. Criar um novo objeto {@link Vehicle} com tipo e rota selecionados aleatoriamente
  4. + *
  5. Criar um novo objeto {@link Vehicle} com tipo e rota selecionados pela + * política de roteamento configurada ({@link RouteSelector})
  6. *
* - *

As rotas são predefinidas e organizadas por ponto de entrada (E1, E2, E3).

+ *

As rotas são selecionadas usando uma política de roteamento que pode ser: + * aleatória, caminho mais curto, menor congestionamento, etc.

*/ public class VehicleGenerator { @@ -29,60 +31,24 @@ public class VehicleGenerator { /** Intervalo para modelo FIXED */ private final double fixedInterval; - /** Rotas possíveis a partir do ponto de entrada E1 */ - private final List e1Routes; - /** Rotas possíveis a partir do ponto de entrada E2 */ - private final List e2Routes; - /** Rotas possíveis a partir do ponto de entrada E3 */ - private final List e3Routes; + /** Política de roteamento usada para selecionar rotas */ + private RouteSelector routeSelector; /** - * Cria um novo gerador de veículos. - * Lê a configuração necessária e inicializa as rotas predefinidas. + * Cria um novo gerador de veículos com a política de roteamento especificada. + * Lê a configuração necessária. * * @param config objeto de {@link SimulationConfig} + * @param routeSelector política de roteamento a usar para selecionar rotas */ - public VehicleGenerator(SimulationConfig config) { + public VehicleGenerator(SimulationConfig config, RouteSelector routeSelector) { this.config = config; + this.routeSelector = routeSelector; // Cache configuration values for performance this.arrivalModel = config.getArrivalModel(); this.arrivalRate = config.getArrivalRate(); this.fixedInterval = config.getFixedArrivalInterval(); - - // Initialize route lists - this.e1Routes = new ArrayList<>(); - this.e2Routes = new ArrayList<>(); - this.e3Routes = new ArrayList<>(); - initializePossibleRoutes(); - } - - /** - * Define todas as rotas possíveis que os veículos podem tomar. - * As rotas são organizadas por ponto de entrada (E1, E2, E3). - * Cada rota tem uma probabilidade que determina a frequência com que é escolhida. - */ - private void initializePossibleRoutes() { - e1Routes.add(new RouteWithProbability( - Arrays.asList("Cr1", "Cr4", "Cr5", "S"), 0.34)); - e1Routes.add(new RouteWithProbability( - Arrays.asList("Cr1", "Cr2", "Cr5", "S"), 0.33)); - e1Routes.add(new RouteWithProbability( - Arrays.asList("Cr1", "Cr2", "Cr3", "S"), 0.33)); - - e2Routes.add(new RouteWithProbability( - Arrays.asList("Cr2", "Cr5", "S"), 0.34)); - e2Routes.add(new RouteWithProbability( - Arrays.asList("Cr2", "Cr3", "S"), 0.33)); - e2Routes.add(new RouteWithProbability( - Arrays.asList("Cr2", "Cr1", "Cr4", "Cr5", "S"), 0.33)); - - e3Routes.add(new RouteWithProbability( - Arrays.asList("Cr3", "S"), 0.34)); - e3Routes.add(new RouteWithProbability( - Arrays.asList("Cr3", "Cr2", "Cr5", "S"), 0.33)); - e3Routes.add(new RouteWithProbability( - Arrays.asList("Cr3", "Cr2", "Cr1", "Cr4", "Cr5", "S"), 0.33)); } /** @@ -108,16 +74,19 @@ public class VehicleGenerator { *

Passos executados:

*
    *
  1. Seleciona um {@link VehicleType} aleatório baseado em probabilidades
  2. - *
  3. Seleciona uma rota aleatória (ponto de entrada + caminho)
  4. + *
  5. Seleciona um ponto de entrada aleatório (E1, E2, E3)
  6. + *
  7. Usa a política de roteamento para escolher a rota
  8. *
* * @param vehicleId identificador único do novo veículo (ex: "V123") * @param entryTime tempo de simulação em que o veículo é criado + * @param queueSizes mapa com tamanho das filas (opcional, pode ser null) * @return novo objeto {@link Vehicle} configurado */ - public Vehicle generateVehicle(String vehicleId, double entryTime) { + public Vehicle generateVehicle(String vehicleId, double entryTime, Map queueSizes) { VehicleType type = selectVehicleType(); - List route = selectRandomRoute(); + String entryPoint = selectRandomEntryPoint(); + List route = routeSelector.selectRoute(entryPoint, queueSizes); return new Vehicle(vehicleId, type, entryTime, route); } @@ -158,73 +127,46 @@ public class VehicleGenerator { } /** - * Selects a random route for a new vehicle. - * This is a two-step process: - * 1. Randomly select an entry point (E1, E2, or E3) with equal probability. - * 2. From the chosen entry point's list of routes, select one - * based on their defined probabilities (using cumulative probability). + * Seleciona aleatoriamente um ponto de entrada (E1, E2 ou E3). + * Cada ponto tem probabilidade igual (1/3). * - * @return A {@link List} of strings representing the chosen route (e.g., ["Cr1", "Cr4", "S"]). + * @return ponto de entrada selecionado ("E1", "E2" ou "E3") */ - private List selectRandomRoute() { - // Step 1: Randomly select an entry point (E1, E2, or E3) - double entryRandom = Math.random(); - List selectedRoutes; + private String selectRandomEntryPoint() { + double rand = Math.random(); - if (entryRandom < 0.333) { - selectedRoutes = e1Routes; - } else if (entryRandom < 0.666) { - selectedRoutes = e2Routes; + if (rand < 0.333) { + return "E1"; + } else if (rand < 0.666) { + return "E2"; } else { - selectedRoutes = e3Routes; + return "E3"; } - - // Step 2: Select a route from the chosen list based on cumulative probabilities - double routeRand = Math.random(); - double cumulative = 0.0; - - for (RouteWithProbability routeWithProb : selectedRoutes) { - cumulative += routeWithProb.probability; - if (routeRand <= cumulative) { - // Return a *copy* of the route to prevent modification - return new ArrayList<>(routeWithProb.route); - } - } - - // Fallback: This should only be reached if probabilities don't sum to 1 - // (due to floating point errors) - return new ArrayList<>(selectedRoutes.get(0).route); } + /** + * Altera dinamicamente o RouteSelector usado para gerar rotas. + * Permite mudar a política de roteamento durante a simulação. + * + * @param newRouteSelector novo seletor de rotas + */ + public void setRouteSelector(RouteSelector newRouteSelector) { + // Note: In Java, we can't directly modify the 'final' field, + // but we can create a new VehicleGenerator with the new selector. + // For this implementation, we'll need to remove 'final' from routeSelector. + // This is acceptable since we want dynamic policy changes. + throw new UnsupportedOperationException( + "VehicleGenerator is immutable. Use CoordinatorProcess.changeRoutingPolicy() instead." + ); + } + /** * @return A string providing information about the generator's configuration. */ public String getInfo() { - int totalRoutes = e1Routes.size() + e2Routes.size() + e3Routes.size(); return String.format( - "VehicleGenerator{model=%s, rate=%.2f, interval=%.2f, routes=%d (E1:%d, E2:%d, E3:%d)}", - arrivalModel, arrivalRate, fixedInterval, totalRoutes, - e1Routes.size(), e2Routes.size(), e3Routes.size() + "VehicleGenerator{model=%s, rate=%.2f, interval=%.2f, routeSelector=%s}", + arrivalModel, arrivalRate, fixedInterval, routeSelector.getClass().getSimpleName() ); } - - /** - * A private inner "struct-like" class to hold a route (a List of strings) - * and its associated selection probability. - */ - private static class RouteWithProbability { - final List route; - final double probability; - - /** - * Constructs a new RouteWithProbability pair. - * @param route The list of intersection IDs. - * @param probability The probability (0.0 to 1.0) of this route - * being chosen *from its entry group*. - */ - RouteWithProbability(List route, double probability) { - this.route = route; - this.probability = probability; - } - } } \ No newline at end of file diff --git a/main/src/main/resources/network_config.json b/main/src/main/resources/network_config.json index 4e8df68..f83f4a3 100644 --- a/main/src/main/resources/network_config.json +++ b/main/src/main/resources/network_config.json @@ -27,7 +27,7 @@ }, { "id": "Cr4", - "lights": ["East", "West"], + "lights": ["East", "North"], "routes": { "Cr1": "North", "Cr5": "East" diff --git a/main/src/main/resources/simulation-high.properties b/main/src/main/resources/simulation-high.properties index 202d3eb..c003580 100644 --- a/main/src/main/resources/simulation-high.properties +++ b/main/src/main/resources/simulation-high.properties @@ -41,7 +41,10 @@ simulation.arrival.model=POISSON simulation.arrival.rate=1.0 # Fixed interval between arrivals (only used if model=FIXED) -simulation.arrival.fixed.interval=1.0 +simulation.arrival.fixed.interval=2.0 + +# Routing policy: RANDOM, SHORTEST_PATH, LEAST_CONGESTED +simulation.routing.policy=LEAST_CONGESTED # === TRAFFIC LIGHT TIMINGS === @@ -72,11 +75,17 @@ trafficlight.Cr3.West.red=3.0 # Intersection 4 (High throughput needed toward Cr5) trafficlight.Cr4.East.green=70.0 trafficlight.Cr4.East.red=3.0 +trafficlight.Cr4.North.green=70.0 +trafficlight.Cr4.North.red=3.0 # Intersection 5 (Near exit - MAJOR BOTTLENECK, longest green time) # All routes funnel through here before exit trafficlight.Cr5.East.green=90.0 trafficlight.Cr5.East.red=3.0 +trafficlight.Cr5.West.green=70.0 +trafficlight.Cr5.West.red=3.0 +trafficlight.Cr5.North.green=70.0 +trafficlight.Cr5.North.red=3.0 # === VEHICLE CONFIGURATION === diff --git a/main/src/main/resources/simulation-low.properties b/main/src/main/resources/simulation-low.properties index 09d4a77..016682e 100644 --- a/main/src/main/resources/simulation-low.properties +++ b/main/src/main/resources/simulation-low.properties @@ -41,7 +41,10 @@ simulation.arrival.model=POISSON simulation.arrival.rate=0.2 # Fixed interval between arrivals (only used if model=FIXED) -simulation.arrival.fixed.interval=5.0 +simulation.arrival.fixed.interval=2.0 + +# Routing policy: RANDOM, SHORTEST_PATH, LEAST_CONGESTED +simulation.routing.policy=LEAST_CONGESTED # === TRAFFIC LIGHT TIMINGS === @@ -71,10 +74,16 @@ trafficlight.Cr3.West.red=5.0 # Intersection 4 (Favor East toward Cr5) trafficlight.Cr4.East.green=30.0 trafficlight.Cr4.East.red=5.0 +trafficlight.Cr4.North.green=30.0 +trafficlight.Cr4.North.red=5.0 # Intersection 5 (Near exit - favor East) trafficlight.Cr5.East.green=30.0 trafficlight.Cr5.East.red=5.0 +trafficlight.Cr5.West.green=30.0 +trafficlight.Cr5.West.red=5.0 +trafficlight.Cr5.North.green=30.0 +trafficlight.Cr5.North.red=5.0 # === VEHICLE CONFIGURATION === diff --git a/main/src/main/resources/simulation-medium.properties b/main/src/main/resources/simulation-medium.properties index 844a384..2c6e7ea 100644 --- a/main/src/main/resources/simulation-medium.properties +++ b/main/src/main/resources/simulation-medium.properties @@ -43,6 +43,9 @@ simulation.arrival.rate=0.5 # Fixed interval between arrivals (only used if model=FIXED) simulation.arrival.fixed.interval=2.0 +# Routing policy: RANDOM, SHORTEST_PATH, LEAST_CONGESTED +simulation.routing.policy=LEAST_CONGESTED + # === TRAFFIC LIGHT TIMINGS === # Format: trafficlight...= @@ -71,10 +74,16 @@ trafficlight.Cr3.West.red=5.0 # Intersection 4 (Favor East toward Cr5) trafficlight.Cr4.East.green=40.0 trafficlight.Cr4.East.red=5.0 +trafficlight.Cr4.North.green=40.0 +trafficlight.Cr4.North.red=5.0 # Intersection 5 (Near exit - POTENTIAL BOTTLENECK, longer green) trafficlight.Cr5.East.green=50.0 trafficlight.Cr5.East.red=5.0 +trafficlight.Cr5.West.green=45.0 +trafficlight.Cr5.West.red=5.0 +trafficlight.Cr5.North.green=45.0 +trafficlight.Cr5.North.red=5.0 # === VEHICLE CONFIGURATION === diff --git a/main/src/main/resources/simulation.properties b/main/src/main/resources/simulation.properties index 31ce0f8..f5fb4e4 100644 --- a/main/src/main/resources/simulation.properties +++ b/main/src/main/resources/simulation.properties @@ -46,6 +46,12 @@ simulation.arrival.rate=0.5 # Fixed interval between arrivals (only used if model=FIXED) simulation.arrival.fixed.interval=2.0 +# Routing policy: RANDOM, SHORTEST_PATH, LEAST_CONGESTED +# RANDOM: selects routes with predefined probabilities (baseline) +# SHORTEST_PATH: always chooses the route with fewest intersections +# LEAST_CONGESTED: dynamically chooses routes to avoid congested areas +simulation.routing.policy=RANDOM + # === TRAFFIC LIGHT TIMINGS === # Format: trafficlight...= diff --git a/main/start.sh b/main/start.sh deleted file mode 100755 index d710bd7..0000000 --- a/main/start.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# Distributed Traffic Simulation Startup Script - -# kill java -echo "-> Cleaning up existing processes..." -pkill -9 java 2>/dev/null -sleep 2 - -# build -echo "-> Building project..." -cd "$(dirname "$0")" -mvn package -DskipTests -q -if [ $? -ne 0 ]; then - echo "XXX Build failed! XXX" - exit 1 -fi -echo "-> Build complete" -echo "" - -# start gui -echo "-> Starting JavaFX Dashboard..." -mvn javafx:run & -DASHBOARD_PID=$! -sleep 3 - -# acho que é assim idk -echo "-> Starting 5 Intersection processes..." -for id in Cr1 Cr2 Cr3 Cr4 Cr5; do - java -cp target/classes:target/main-1.0-SNAPSHOT.jar sd.IntersectionProcess $id > /tmp/$(echo $id | tr '[:upper:]' '[:lower:]').log 2>&1 & - echo "[SUCCESS] Started $id" -done -sleep 2 - -# exit -echo "-> Starting Exit Node..." -java -cp target/classes:target/main-1.0-SNAPSHOT.jar sd.ExitNodeProcess > /tmp/exit.log 2>&1 & -sleep 1 - -# coordinator -echo "-> Starting Coordinator..." -java -cp target/classes:target/main-1.0-SNAPSHOT.jar sd.coordinator.CoordinatorProcess > /tmp/coordinator.log 2>&1 & -sleep 1 - -echo "" -echo "-> All processes started!" -echo "" -echo "-> System Status:" -ps aux | grep "java.*sd\." | grep -v grep | wc -l | xargs -I {} echo " {} Java processes running" -echo "" -echo " IMPORTANT: Keep the JavaFX Dashboard window OPEN for 60+ seconds" -echo " to see live updates! The simulation runs for 60 seconds." -echo "" -echo "-> Logs available at:" -echo " Dashboard: Check JavaFX window (live updates)" -echo " Intersections: /tmp/cr*.log" -echo " Exit Node: /tmp/exit.log" -echo " Coordinator: /tmp/coordinator.log" -echo "" -echo "-> To stop all processes: pkill -9 java" -echo ""