diff --git a/main/analysis/HIGH_LOAD_20251208-082040.csv b/main/analysis/HIGH_LOAD_20251208-082040.csv deleted file mode 100644 index 34b8d68..0000000 --- a/main/analysis/HIGH_LOAD_20251208-082040.csv +++ /dev/null @@ -1,6 +0,0 @@ -Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema -1,1836,348,18.95,75.91,72.28,37.96,151.82 -2,1728,663,38.37,52.10,49.52,26.05,104.21 -3,1747,539,30.85,116.39,112.54,58.19,232.78 -4,1769,149,8.42,89.64,85.89,44.82,179.29 -5,1827,1097,60.04,90.49,86.93,45.25,180.98 diff --git a/main/analysis/HIGH_LOAD_20251208-082040.txt b/main/analysis/HIGH_LOAD_20251208-082040.txt deleted file mode 100644 index 5a61b0b..0000000 --- a/main/analysis/HIGH_LOAD_20251208-082040.txt +++ /dev/null @@ -1,215 +0,0 @@ -================================================================================ -ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO -================================================================================ -Configuração: simulation-high.properties -Número de Execuções: 5 -Data da Análise: 2025-12-08 08:20:40 - --------------------------------------------------------------------------------- -MÉTRICAS GLOBAIS --------------------------------------------------------------------------------- - -Veículos Gerados: - Média: 1781.40 Desvio Padrão: 48.09 - Mediana: 1769.00 IC 95%: [1712.97, 1849.83] - Mín: 1728.00 Máx: 1836.00 - -Veículos Completados: - Média: 559.20 Desvio Padrão: 358.22 - Mediana: 539.00 IC 95%: [49.44, 1068.96] - Mín: 149.00 Máx: 1097.00 - -Taxa de Conclusão (%): - Média: 31.33 Desvio Padrão: 19.70 - Mediana: 30.85 IC 95%: [3.30, 59.36] - Mín: 8.42 Máx: 60.04 - -Tempo Médio no Sistema (segundos): - Média: 84.91 Desvio Padrão: 23.46 - Mediana: 89.64 IC 95%: [51.52, 118.29] - Mín: 52.10 Máx: 116.39 - -Tempo Médio de Espera (segundos): - Média: 81.43 Desvio Padrão: 23.02 - Mediana: 85.89 IC 95%: [48.68, 114.19] - Mín: 49.52 Máx: 112.54 - - --------------------------------------------------------------------------------- -ANÁLISE POR TIPO DE VEÍCULO --------------------------------------------------------------------------------- - ---- BIKE --- - Contagem de Veículos: - Média: 111.60 Desvio Padrão: 69.43 - Mediana: 105.00 IC 95%: [12.80, 210.40] - Mín: 29.00 Máx: 215.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 78.89 Desvio Padrão: 20.87 - Mediana: 89.97 IC 95%: [49.20, 108.59] - Mín: 49.27 Máx: 98.23 - - ---- LIGHT --- - Contagem de Veículos: - Média: 333.80 Desvio Padrão: 221.25 - Mediana: 332.00 IC 95%: [18.95, 648.65] - Mín: 90.00 Máx: 669.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 83.83 Desvio Padrão: 24.74 - Mediana: 86.14 IC 95%: [48.63, 119.03] - Mín: 51.94 Máx: 120.26 - - ---- HEAVY --- - Contagem de Veículos: - Média: 113.80 Desvio Padrão: 68.36 - Mediana: 102.00 IC 95%: [16.53, 211.07] - Mín: 30.00 Máx: 213.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 76.79 Desvio Padrão: 21.46 - Mediana: 81.20 IC 95%: [46.26, 107.33] - Mín: 43.10 Máx: 102.14 - - --------------------------------------------------------------------------------- -ANÁLISE POR INTERSEÇÃO --------------------------------------------------------------------------------- - ---- Cr1 --- - Tamanho Máximo da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Tamanho Médio da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Veículos Processados: - Média: 221.40 Desvio Padrão: 226.21 - Mediana: 128.00 IC 95%: [-100.50, 543.30] - Mín: 61.00 Máx: 616.00 - - ---- Cr2 --- - Tamanho Máximo da Fila: - Média: 3.60 Desvio Padrão: 5.90 - Mediana: 2.00 IC 95%: [-4.79, 11.99] - Mín: 0.00 Máx: 14.00 - - Tamanho Médio da Fila: - Média: 3.60 Desvio Padrão: 5.90 - Mediana: 2.00 IC 95%: [-4.79, 11.99] - Mín: 0.00 Máx: 14.00 - - Veículos Processados: - Média: 228.60 Desvio Padrão: 211.41 - Mediana: 126.00 IC 95%: [-72.24, 529.44] - Mín: 93.00 Máx: 593.00 - - ---- Cr3 --- - Tamanho Máximo da Fila: - Média: 1.20 Desvio Padrão: 2.68 - Mediana: 0.00 IC 95%: [-2.62, 5.02] - Mín: 0.00 Máx: 6.00 - - Tamanho Médio da Fila: - Média: 1.20 Desvio Padrão: 2.68 - Mediana: 0.00 IC 95%: [-2.62, 5.02] - Mín: 0.00 Máx: 6.00 - - Veículos Processados: - Média: 263.80 Desvio Padrão: 240.18 - Mediana: 128.00 IC 95%: [-77.98, 605.58] - Mín: 57.00 Máx: 604.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: 95.00 Desvio Padrão: 78.43 - Mediana: 62.00 IC 95%: [-16.60, 206.60] - Mín: 43.00 Máx: 231.00 - - ---- Cr5 --- - Tamanho Máximo da Fila: - Média: 2.80 Desvio Padrão: 3.63 - Mediana: 1.00 IC 95%: [-2.37, 7.97] - Mín: 0.00 Máx: 9.00 - - Tamanho Médio da Fila: - Média: 2.80 Desvio Padrão: 3.63 - Mediana: 1.00 IC 95%: [-2.37, 7.97] - Mín: 0.00 Máx: 9.00 - - Veículos Processados: - Média: 207.60 Desvio Padrão: 166.31 - Mediana: 139.00 IC 95%: [-29.06, 444.26] - Mín: 76.00 Máx: 493.00 - - ---- ExitNode --- - Tamanho Máximo da Fila: Sem dados - - Tamanho Médio da Fila: Sem dados - - Veículos Processados: - Média: 559.20 Desvio Padrão: 358.22 - Mediana: 539.00 IC 95%: [49.44, 1068.96] - Mín: 149.00 Máx: 1097.00 - - --------------------------------------------------------------------------------- -RESUMOS INDIVIDUAIS DAS EXECUÇÕES --------------------------------------------------------------------------------- - -Execução #1 [simulation-high.properties]: - Gerados: 1836, Completados: 348 (19.0%) - Tempo Médio no Sistema: 75.91s - Tempo Médio de Espera: 72.28s - -Execução #2 [simulation-high.properties]: - Gerados: 1728, Completados: 663 (38.4%) - Tempo Médio no Sistema: 52.10s - Tempo Médio de Espera: 49.52s - -Execução #3 [simulation-high.properties]: - Gerados: 1747, Completados: 539 (30.9%) - Tempo Médio no Sistema: 116.39s - Tempo Médio de Espera: 112.54s - -Execução #4 [simulation-high.properties]: - Gerados: 1769, Completados: 149 (8.4%) - Tempo Médio no Sistema: 89.64s - Tempo Médio de Espera: 85.89s - -Execução #5 [simulation-high.properties]: - Gerados: 1827, Completados: 1097 (60.0%) - Tempo Médio no Sistema: 90.49s - Tempo Médio de Espera: 86.93s - -================================================================================ -FIM DO RELATÓRIO -================================================================================ diff --git a/main/analysis/HIGH_LOAD_20251210-184757.csv b/main/analysis/HIGH_LOAD_20251210-184757.csv new file mode 100644 index 0000000..8842ee9 --- /dev/null +++ b/main/analysis/HIGH_LOAD_20251210-184757.csv @@ -0,0 +1,11 @@ +Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema +1,1826,916,50.16,75.54,72.08,37.77,151.08 +2,1829,878,48.00,72.94,69.66,36.47,145.88 +3,1827,1142,62.51,91.24,87.56,45.62,182.48 +4,1899,1118,58.87,82.59,78.98,41.30,165.19 +5,1807,897,49.64,71.29,67.94,35.65,142.59 +6,1779,917,51.55,85.43,81.86,42.71,170.86 +7,1738,1242,71.46,96.85,92.86,48.43,193.70 +8,1806,968,53.60,108.15,104.83,54.08,216.31 +9,1863,1003,53.84,103.36,99.80,51.68,206.72 +10,1864,1210,64.91,80.43,76.84,40.22,160.86 diff --git a/main/analysis/HIGH_LOAD_20251210-184757.txt b/main/analysis/HIGH_LOAD_20251210-184757.txt new file mode 100644 index 0000000..a8bf05c --- /dev/null +++ b/main/analysis/HIGH_LOAD_20251210-184757.txt @@ -0,0 +1,240 @@ +================================================================================ +ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO +================================================================================ +Configuração: simulation-high.properties +Número de Execuções: 10 +Data da Análise: 2025-12-10 18:47:57 + +-------------------------------------------------------------------------------- +MÉTRICAS GLOBAIS +-------------------------------------------------------------------------------- + +Veículos Gerados: + Média: 1823.80 Desvio Padrão: 45.73 + Mediana: 1826.50 IC 95%: [1786.62, 1860.98] + Mín: 1738.00 Máx: 1899.00 + +Veículos Completados: + Média: 1029.10 Desvio Padrão: 136.93 + Mediana: 985.50 IC 95%: [917.77, 1140.43] + Mín: 878.00 Máx: 1242.00 + +Taxa de Conclusão (%): + Média: 56.45 Desvio Padrão: 7.72 + Mediana: 53.72 IC 95%: [50.18, 62.73] + Mín: 48.00 Máx: 71.46 + +Tempo Médio no Sistema (segundos): + Média: 86.78 Desvio Padrão: 12.78 + Mediana: 84.01 IC 95%: [76.39, 97.18] + Mín: 71.29 Máx: 108.15 + +Tempo Médio de Espera (segundos): + Média: 83.24 Desvio Padrão: 12.72 + Mediana: 80.42 IC 95%: [72.90, 93.58] + Mín: 67.94 Máx: 104.83 + + +-------------------------------------------------------------------------------- +ANÁLISE POR TIPO DE VEÍCULO +-------------------------------------------------------------------------------- + +--- BIKE --- + Contagem de Veículos: + Média: 195.20 Desvio Padrão: 28.50 + Mediana: 200.50 IC 95%: [172.03, 218.37] + Mín: 155.00 Máx: 233.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 89.54 Desvio Padrão: 21.45 + Mediana: 87.12 IC 95%: [72.10, 106.98] + Mín: 63.40 Máx: 124.41 + + +--- LIGHT --- + Contagem de Veículos: + Média: 620.70 Desvio Padrão: 79.79 + Mediana: 583.50 IC 95%: [555.83, 685.57] + Mín: 521.00 Máx: 750.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 79.59 Desvio Padrão: 9.85 + Mediana: 78.40 IC 95%: [71.58, 87.60] + Mín: 65.73 Máx: 100.20 + + +--- HEAVY --- + Contagem de Veículos: + Média: 213.20 Desvio Padrão: 35.14 + Mediana: 206.00 IC 95%: [184.63, 241.77] + Mín: 174.00 Máx: 280.00 + + Tempo Médio no Sistema (segundos): Sem dados + + Tempo Médio de Espera (segundos): + Média: 87.58 Desvio Padrão: 17.39 + Mediana: 79.82 IC 95%: [73.44, 101.72] + Mín: 68.86 Máx: 118.10 + + +-------------------------------------------------------------------------------- +ANÁLISE POR INTERSEÇÃO +-------------------------------------------------------------------------------- + +--- Cr1 --- + Tamanho Máximo da Fila: + Média: 6.00 Desvio Padrão: 8.47 + Mediana: 2.50 IC 95%: [-0.89, 12.89] + Mín: 0.00 Máx: 24.00 + + Tamanho Médio da Fila: + Média: 6.00 Desvio Padrão: 8.47 + Mediana: 2.50 IC 95%: [-0.89, 12.89] + Mín: 0.00 Máx: 24.00 + + Veículos Processados: + Média: 550.00 Desvio Padrão: 99.71 + Mediana: 580.50 IC 95%: [468.93, 631.07] + Mín: 363.00 Máx: 628.00 + + +--- Cr2 --- + Tamanho Máximo da Fila: + Média: 1.40 Desvio Padrão: 2.27 + Mediana: 0.00 IC 95%: [-0.45, 3.25] + Mín: 0.00 Máx: 7.00 + + Tamanho Médio da Fila: + Média: 1.40 Desvio Padrão: 2.27 + Mediana: 0.00 IC 95%: [-0.45, 3.25] + Mín: 0.00 Máx: 7.00 + + Veículos Processados: + Média: 542.30 Desvio Padrão: 101.15 + Mediana: 586.50 IC 95%: [460.06, 624.54] + Mín: 319.00 Máx: 629.00 + + +--- Cr3 --- + Tamanho Máximo da Fila: + Média: 0.20 Desvio Padrão: 0.42 + Mediana: 0.00 IC 95%: [-0.14, 0.54] + Mín: 0.00 Máx: 1.00 + + Tamanho Médio da Fila: + Média: 0.20 Desvio Padrão: 0.42 + Mediana: 0.00 IC 95%: [-0.14, 0.54] + Mín: 0.00 Máx: 1.00 + + Veículos Processados: + Média: 566.20 Desvio Padrão: 75.22 + Mediana: 589.00 IC 95%: [505.05, 627.35] + Mín: 397.00 Máx: 645.00 + + +--- Cr4 --- + Tamanho Máximo da Fila: + Média: 1.50 Desvio Padrão: 1.27 + Mediana: 1.00 IC 95%: [0.47, 2.53] + Mín: 0.00 Máx: 4.00 + + Tamanho Médio da Fila: + Média: 1.50 Desvio Padrão: 1.27 + Mediana: 1.00 IC 95%: [0.47, 2.53] + Mín: 0.00 Máx: 4.00 + + Veículos Processados: + Média: 246.10 Desvio Padrão: 95.50 + Mediana: 207.00 IC 95%: [168.45, 323.75] + Mín: 154.00 Máx: 402.00 + + +--- Cr5 --- + Tamanho Máximo da Fila: + Média: 6.90 Desvio Padrão: 3.84 + Mediana: 7.00 IC 95%: [3.78, 10.02] + Mín: 1.00 Máx: 13.00 + + Tamanho Médio da Fila: + Média: 6.90 Desvio Padrão: 3.84 + Mediana: 7.00 IC 95%: [3.78, 10.02] + Mín: 1.00 Máx: 13.00 + + Veículos Processados: + Média: 429.00 Desvio Padrão: 126.58 + Mediana: 388.00 IC 95%: [326.09, 531.91] + Mín: 270.00 Máx: 673.00 + + +--- ExitNode --- + Tamanho Máximo da Fila: Sem dados + + Tamanho Médio da Fila: Sem dados + + Veículos Processados: + Média: 1029.10 Desvio Padrão: 136.93 + Mediana: 985.50 IC 95%: [917.77, 1140.43] + Mín: 878.00 Máx: 1242.00 + + +-------------------------------------------------------------------------------- +RESUMOS INDIVIDUAIS DAS EXECUÇÕES +-------------------------------------------------------------------------------- + +Execução #1 [simulation-high.properties]: + Gerados: 1826, Completados: 916 (50.2%) + Tempo Médio no Sistema: 75.54s + Tempo Médio de Espera: 72.08s + +Execução #2 [simulation-high.properties]: + Gerados: 1829, Completados: 878 (48.0%) + Tempo Médio no Sistema: 72.94s + Tempo Médio de Espera: 69.66s + +Execução #3 [simulation-high.properties]: + Gerados: 1827, Completados: 1142 (62.5%) + Tempo Médio no Sistema: 91.24s + Tempo Médio de Espera: 87.56s + +Execução #4 [simulation-high.properties]: + Gerados: 1899, Completados: 1118 (58.9%) + Tempo Médio no Sistema: 82.59s + Tempo Médio de Espera: 78.98s + +Execução #5 [simulation-high.properties]: + Gerados: 1807, Completados: 897 (49.6%) + Tempo Médio no Sistema: 71.29s + Tempo Médio de Espera: 67.94s + +Execução #6 [simulation-high.properties]: + Gerados: 1779, Completados: 917 (51.5%) + Tempo Médio no Sistema: 85.43s + Tempo Médio de Espera: 81.86s + +Execução #7 [simulation-high.properties]: + Gerados: 1738, Completados: 1242 (71.5%) + Tempo Médio no Sistema: 96.85s + Tempo Médio de Espera: 92.86s + +Execução #8 [simulation-high.properties]: + Gerados: 1806, Completados: 968 (53.6%) + Tempo Médio no Sistema: 108.15s + Tempo Médio de Espera: 104.83s + +Execução #9 [simulation-high.properties]: + Gerados: 1863, Completados: 1003 (53.8%) + Tempo Médio no Sistema: 103.36s + Tempo Médio de Espera: 99.80s + +Execução #10 [simulation-high.properties]: + Gerados: 1864, Completados: 1210 (64.9%) + Tempo Médio no Sistema: 80.43s + Tempo Médio de Espera: 76.84s + +================================================================================ +FIM DO RELATÓRIO +================================================================================ diff --git a/main/analysis/LOW_LOAD_20251208-081933.csv b/main/analysis/LOW_LOAD_20251208-081933.csv deleted file mode 100644 index 02a5b75..0000000 --- a/main/analysis/LOW_LOAD_20251208-081933.csv +++ /dev/null @@ -1,6 +0,0 @@ -Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema -1,368,329,89.40,78.34,74.19,39.17,156.67 -2,368,218,59.24,60.44,56.64,30.22,120.89 -3,349,235,67.34,53.51,49.44,26.76,107.03 -4,332,243,73.19,69.63,65.50,34.82,139.27 -5,322,221,68.63,47.52,43.77,23.76,95.05 diff --git a/main/analysis/LOW_LOAD_20251208-081933.txt b/main/analysis/LOW_LOAD_20251208-081933.txt deleted file mode 100644 index 2829057..0000000 --- a/main/analysis/LOW_LOAD_20251208-081933.txt +++ /dev/null @@ -1,215 +0,0 @@ -================================================================================ -ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO -================================================================================ -Configuração: simulation-low.properties -Número de Execuções: 5 -Data da Análise: 2025-12-08 08:19:33 - --------------------------------------------------------------------------------- -MÉTRICAS GLOBAIS --------------------------------------------------------------------------------- - -Veículos Gerados: - Média: 347.80 Desvio Padrão: 20.81 - Mediana: 349.00 IC 95%: [318.18, 377.42] - Mín: 322.00 Máx: 368.00 - -Veículos Completados: - Média: 249.20 Desvio Padrão: 45.76 - Mediana: 235.00 IC 95%: [184.08, 314.32] - Mín: 218.00 Máx: 329.00 - -Taxa de Conclusão (%): - Média: 71.56 Desvio Padrão: 11.17 - Mediana: 68.63 IC 95%: [55.66, 87.46] - Mín: 59.24 Máx: 89.40 - -Tempo Médio no Sistema (segundos): - Média: 61.89 Desvio Padrão: 12.34 - Mediana: 60.44 IC 95%: [44.33, 79.45] - Mín: 47.52 Máx: 78.34 - -Tempo Médio de Espera (segundos): - Média: 57.91 Desvio Padrão: 12.21 - Mediana: 56.64 IC 95%: [40.54, 75.28] - Mín: 43.77 Máx: 74.19 - - --------------------------------------------------------------------------------- -ANÁLISE POR TIPO DE VEÍCULO --------------------------------------------------------------------------------- - ---- BIKE --- - Contagem de Veículos: - Média: 48.20 Desvio Padrão: 12.38 - Mediana: 47.00 IC 95%: [30.59, 65.81] - Mín: 36.00 Máx: 68.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 51.22 Desvio Padrão: 16.62 - Mediana: 46.02 IC 95%: [27.56, 74.87] - Mín: 40.06 Máx: 80.31 - - ---- LIGHT --- - Contagem de Veículos: - Média: 151.00 Desvio Padrão: 22.64 - Mediana: 146.00 IC 95%: [118.78, 183.22] - Mín: 133.00 Máx: 189.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 58.33 Desvio Padrão: 11.58 - Mediana: 53.58 IC 95%: [41.85, 74.80] - Mín: 45.31 Máx: 74.17 - - ---- HEAVY --- - Contagem de Veículos: - Média: 50.00 Desvio Padrão: 13.77 - Mediana: 47.00 IC 95%: [30.41, 69.59] - Mín: 35.00 Máx: 72.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 60.73 Desvio Padrão: 34.92 - Mediana: 44.79 IC 95%: [11.04, 110.42] - Mín: 40.26 Máx: 122.51 - - --------------------------------------------------------------------------------- -ANÁLISE POR INTERSEÇÃO --------------------------------------------------------------------------------- - ---- Cr1 --- - Tamanho Máximo da Fila: - Média: 5.00 Desvio Padrão: 4.47 - Mediana: 4.00 IC 95%: [-1.36, 11.36] - Mín: 0.00 Máx: 12.00 - - Tamanho Médio da Fila: - Média: 5.00 Desvio Padrão: 4.47 - Mediana: 4.00 IC 95%: [-1.36, 11.36] - Mín: 0.00 Máx: 12.00 - - Veículos Processados: - Média: 87.00 Desvio Padrão: 29.01 - Mediana: 93.00 IC 95%: [45.72, 128.28] - Mín: 56.00 Máx: 123.00 - - ---- Cr2 --- - Tamanho Máximo da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Tamanho Médio da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Veículos Processados: - Média: 95.20 Desvio Padrão: 24.86 - Mediana: 100.00 IC 95%: [59.82, 130.58] - Mín: 61.00 Máx: 125.00 - - ---- Cr3 --- - Tamanho Máximo da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Tamanho Médio da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Veículos Processados: - Média: 91.40 Desvio Padrão: 28.68 - Mediana: 103.00 IC 95%: [50.58, 132.22] - Mín: 56.00 Máx: 126.00 - - ---- Cr4 --- - Tamanho Máximo da Fila: - Média: 0.80 Desvio Padrão: 0.84 - Mediana: 1.00 IC 95%: [-0.39, 1.99] - Mín: 0.00 Máx: 2.00 - - Tamanho Médio da Fila: - Média: 0.80 Desvio Padrão: 0.84 - Mediana: 1.00 IC 95%: [-0.39, 1.99] - Mín: 0.00 Máx: 2.00 - - Veículos Processados: - Média: 63.00 Desvio Padrão: 21.11 - Mediana: 62.00 IC 95%: [32.96, 93.04] - Mín: 38.00 Máx: 87.00 - - ---- Cr5 --- - Tamanho Máximo da Fila: - Média: 2.20 Desvio Padrão: 2.59 - Mediana: 1.00 IC 95%: [-1.48, 5.88] - Mín: 0.00 Máx: 5.00 - - Tamanho Médio da Fila: - Média: 2.20 Desvio Padrão: 2.59 - Mediana: 1.00 IC 95%: [-1.48, 5.88] - Mín: 0.00 Máx: 5.00 - - Veículos Processados: - Média: 126.40 Desvio Padrão: 45.39 - Mediana: 111.00 IC 95%: [61.81, 190.99] - Mín: 86.00 Máx: 203.00 - - ---- ExitNode --- - Tamanho Máximo da Fila: Sem dados - - Tamanho Médio da Fila: Sem dados - - Veículos Processados: - Média: 249.20 Desvio Padrão: 45.76 - Mediana: 235.00 IC 95%: [184.08, 314.32] - Mín: 218.00 Máx: 329.00 - - --------------------------------------------------------------------------------- -RESUMOS INDIVIDUAIS DAS EXECUÇÕES --------------------------------------------------------------------------------- - -Execução #1 [simulation-low.properties]: - Gerados: 368, Completados: 329 (89.4%) - Tempo Médio no Sistema: 78.34s - Tempo Médio de Espera: 74.19s - -Execução #2 [simulation-low.properties]: - Gerados: 368, Completados: 218 (59.2%) - Tempo Médio no Sistema: 60.44s - Tempo Médio de Espera: 56.64s - -Execução #3 [simulation-low.properties]: - Gerados: 349, Completados: 235 (67.3%) - Tempo Médio no Sistema: 53.51s - Tempo Médio de Espera: 49.44s - -Execução #4 [simulation-low.properties]: - Gerados: 332, Completados: 243 (73.2%) - Tempo Médio no Sistema: 69.63s - Tempo Médio de Espera: 65.50s - -Execução #5 [simulation-low.properties]: - Gerados: 322, Completados: 221 (68.6%) - Tempo Médio no Sistema: 47.52s - Tempo Médio de Espera: 43.77s - -================================================================================ -FIM DO RELATÓRIO -================================================================================ diff --git a/main/analysis/MEDIUM_LOAD_20251208-082005.csv b/main/analysis/MEDIUM_LOAD_20251208-082005.csv deleted file mode 100644 index fe5d5a3..0000000 --- a/main/analysis/MEDIUM_LOAD_20251208-082005.csv +++ /dev/null @@ -1,6 +0,0 @@ -Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema -1,891,202,22.67,69.75,66.09,34.87,139.50 -2,871,340,39.04,68.73,64.73,34.37,137.46 -3,953,541,56.77,68.64,65.24,34.32,137.28 -4,888,501,56.42,60.85,57.48,30.42,121.69 -5,869,387,44.53,58.29,55.37,29.15,116.58 diff --git a/main/analysis/MEDIUM_LOAD_20251208-082005.txt b/main/analysis/MEDIUM_LOAD_20251208-082005.txt deleted file mode 100644 index f817db4..0000000 --- a/main/analysis/MEDIUM_LOAD_20251208-082005.txt +++ /dev/null @@ -1,209 +0,0 @@ -================================================================================ -ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO -================================================================================ -Configuração: simulation-medium.properties -Número de Execuções: 5 -Data da Análise: 2025-12-08 08:20:05 - --------------------------------------------------------------------------------- -MÉTRICAS GLOBAIS --------------------------------------------------------------------------------- - -Veículos Gerados: - Média: 894.40 Desvio Padrão: 34.20 - Mediana: 888.00 IC 95%: [845.73, 943.07] - Mín: 869.00 Máx: 953.00 - -Veículos Completados: - Média: 394.20 Desvio Padrão: 134.99 - Mediana: 387.00 IC 95%: [202.11, 586.29] - Mín: 202.00 Máx: 541.00 - -Taxa de Conclusão (%): - Média: 43.89 Desvio Padrão: 14.12 - Mediana: 44.53 IC 95%: [23.80, 63.97] - Mín: 22.67 Máx: 56.77 - -Tempo Médio no Sistema (segundos): - Média: 65.25 Desvio Padrão: 5.28 - Mediana: 68.64 IC 95%: [57.73, 72.77] - Mín: 58.29 Máx: 69.75 - -Tempo Médio de Espera (segundos): - Média: 61.78 Desvio Padrão: 4.97 - Mediana: 64.73 IC 95%: [54.71, 68.86] - Mín: 55.37 Máx: 66.09 - - --------------------------------------------------------------------------------- -ANÁLISE POR TIPO DE VEÍCULO --------------------------------------------------------------------------------- - ---- BIKE --- - Contagem de Veículos: - Média: 83.60 Desvio Padrão: 28.80 - Mediana: 88.00 IC 95%: [42.62, 124.58] - Mín: 42.00 Máx: 112.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 64.62 Desvio Padrão: 9.80 - Mediana: 65.07 IC 95%: [50.67, 78.57] - Mín: 53.82 Máx: 77.73 - - ---- LIGHT --- - Contagem de Veículos: - Média: 234.80 Desvio Padrão: 86.82 - Mediana: 221.00 IC 95%: [111.26, 358.34] - Mín: 119.00 Máx: 328.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 60.49 Desvio Padrão: 4.15 - Mediana: 61.41 IC 95%: [54.58, 66.39] - Mín: 53.78 Máx: 65.19 - - ---- HEAVY --- - Contagem de Veículos: - Média: 75.80 Desvio Padrão: 21.70 - Mediana: 78.00 IC 95%: [44.93, 106.67] - Mín: 41.00 Máx: 101.00 - - Tempo Médio no Sistema (segundos): Sem dados - - Tempo Médio de Espera (segundos): - Média: 62.90 Desvio Padrão: 13.27 - Mediana: 63.80 IC 95%: [44.01, 81.79] - Mín: 42.19 Máx: 78.56 - - --------------------------------------------------------------------------------- -ANÁLISE POR INTERSEÇÃO --------------------------------------------------------------------------------- - ---- Cr1 --- - Tamanho Máximo da Fila: - Média: 2.00 Desvio Padrão: 2.55 - Mediana: 1.00 IC 95%: [-1.63, 5.63] - Mín: 0.00 Máx: 6.00 - - Tamanho Médio da Fila: - Média: 2.00 Desvio Padrão: 2.55 - Mediana: 1.00 IC 95%: [-1.63, 5.63] - Mín: 0.00 Máx: 6.00 - - Veículos Processados: - Média: 106.20 Desvio Padrão: 62.26 - Mediana: 72.00 IC 95%: [17.60, 194.80] - Mín: 56.00 Máx: 208.00 - - ---- Cr2 --- - Tamanho Máximo da Fila: - Média: 1.40 Desvio Padrão: 3.13 - Mediana: 0.00 IC 95%: [-3.05, 5.85] - Mín: 0.00 Máx: 7.00 - - Tamanho Médio da Fila: - Média: 1.40 Desvio Padrão: 3.13 - Mediana: 0.00 IC 95%: [-3.05, 5.85] - Mín: 0.00 Máx: 7.00 - - Veículos Processados: - Média: 123.60 Desvio Padrão: 90.00 - Mediana: 102.00 IC 95%: [-4.47, 251.67] - Mín: 49.00 Máx: 275.00 - - ---- Cr3 --- - Tamanho Máximo da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Tamanho Médio da Fila: - Média: 0.20 Desvio Padrão: 0.45 - Mediana: 0.00 IC 95%: [-0.44, 0.84] - Mín: 0.00 Máx: 1.00 - - Veículos Processados: - Média: 102.60 Desvio Padrão: 50.09 - Mediana: 104.00 IC 95%: [31.32, 173.88] - Mín: 55.00 Máx: 181.00 - - ---- Cr4 --- - Tamanho Máximo da Fila: Sem dados - - Tamanho Médio da Fila: Sem dados - - Veículos Processados: - Média: 68.80 Desvio Padrão: 27.10 - Mediana: 60.00 IC 95%: [30.24, 107.36] - Mín: 47.00 Máx: 113.00 - - ---- Cr5 --- - Tamanho Máximo da Fila: - Média: 1.20 Desvio Padrão: 2.17 - Mediana: 0.00 IC 95%: [-1.89, 4.29] - Mín: 0.00 Máx: 5.00 - - Tamanho Médio da Fila: - Média: 1.20 Desvio Padrão: 2.17 - Mediana: 0.00 IC 95%: [-1.89, 4.29] - Mín: 0.00 Máx: 5.00 - - Veículos Processados: - Média: 125.80 Desvio Padrão: 51.69 - Mediana: 96.00 IC 95%: [52.24, 199.36] - Mín: 84.00 Máx: 193.00 - - ---- ExitNode --- - Tamanho Máximo da Fila: Sem dados - - Tamanho Médio da Fila: Sem dados - - Veículos Processados: - Média: 394.20 Desvio Padrão: 134.99 - Mediana: 387.00 IC 95%: [202.11, 586.29] - Mín: 202.00 Máx: 541.00 - - --------------------------------------------------------------------------------- -RESUMOS INDIVIDUAIS DAS EXECUÇÕES --------------------------------------------------------------------------------- - -Execução #1 [simulation-medium.properties]: - Gerados: 891, Completados: 202 (22.7%) - Tempo Médio no Sistema: 69.75s - Tempo Médio de Espera: 66.09s - -Execução #2 [simulation-medium.properties]: - Gerados: 871, Completados: 340 (39.0%) - Tempo Médio no Sistema: 68.73s - Tempo Médio de Espera: 64.73s - -Execução #3 [simulation-medium.properties]: - Gerados: 953, Completados: 541 (56.8%) - Tempo Médio no Sistema: 68.64s - Tempo Médio de Espera: 65.24s - -Execução #4 [simulation-medium.properties]: - Gerados: 888, Completados: 501 (56.4%) - Tempo Médio no Sistema: 60.85s - Tempo Médio de Espera: 57.48s - -Execução #5 [simulation-medium.properties]: - Gerados: 869, Completados: 387 (44.5%) - Tempo Médio no Sistema: 58.29s - Tempo Médio de Espera: 55.37s - -================================================================================ -FIM DO RELATÓRIO -================================================================================ diff --git a/main/graphing_single.py b/main/graphing_single.py new file mode 100644 index 0000000..27760bb --- /dev/null +++ b/main/graphing_single.py @@ -0,0 +1,217 @@ +import pandas as pd +import matplotlib.pyplot as plt +import glob +import os +import sys + +# 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) + +# Determine which load to analyze +if len(sys.argv) > 1: + load_type = sys.argv[1].upper() +else: + print("Usage: python graphing_single.py [LOW|MEDIUM|HIGH]") + print("Defaulting to LOW_LOAD...") + load_type = "LOW" + +# Validate load type +if load_type not in ["LOW", "MEDIUM", "HIGH"]: + print(f"Error: Invalid load type '{load_type}'. Must be LOW, MEDIUM, or HIGH.") + exit(1) + +# Load the specified data +print(f"Looking for {load_type}_LOAD analysis files...") +pattern = f'analysis/{load_type}_LOAD_*.csv' +data = load_latest_csv(pattern) + +if data is None: + print(f"\nError: No {load_type}_LOAD analysis files found!") + print("Please run the batch analysis first.") + exit(1) + +# Print available columns for debugging +print(f"\nAvailable columns in {load_type}_LOAD CSV:") +print(data.columns.tolist()) + +# Create output directory for graphs +os.makedirs('graphs', exist_ok=True) + +# Determine the run column name (could be 'Run' or 'Execução') +run_col = 'Run' if 'Run' in data.columns else 'Execução' + +# Load name for titles +load_name = load_type.capitalize() +colors = {'LOW': 'green', 'MEDIUM': 'orange', 'HIGH': 'red'} +color = colors[load_type] + +# 1. Gráfico: Run-by-Run Dwelling Time +plt.figure(figsize=(12, 6)) +plt.plot(data[run_col], data['TempoMédioSistema'], marker='o', color=color, linewidth=2, markersize=6) +plt.fill_between(data[run_col], data['TempoMínimoSistema'], data['TempoMáximoSistema'], alpha=0.2, color=color) +plt.ylabel('Tempo no Sistema (s)') +plt.xlabel('Run Number') +plt.title(f'Tempo no Sistema por Execução - Carga {load_name}') +plt.grid(alpha=0.3) +plt.legend(['Média', 'Min-Max Range']) +plt.savefig(f'graphs/{load_type.lower()}_dwelling_time_runs.png', dpi=300, bbox_inches='tight') +print(f"\nGraph saved: graphs/{load_type.lower()}_dwelling_time_runs.png") +plt.close() + +# 2. Gráfico: Run-by-Run Completion Rate +plt.figure(figsize=(12, 6)) +plt.plot(data[run_col], data['TaxaConclusão'], marker='o', color=color, linewidth=2, markersize=6) +plt.axhline(y=data['TaxaConclusão'].mean(), color='black', linestyle='--', label=f'Média: {data["TaxaConclusão"].mean():.1f}%') +plt.ylabel('Taxa de Conclusão (%)') +plt.xlabel('Run Number') +plt.title(f'Taxa de Conclusão por Execução - Carga {load_name}') +plt.ylim(0, 105) +plt.grid(alpha=0.3) +plt.legend() +plt.savefig(f'graphs/{load_type.lower()}_completion_rate_runs.png', dpi=300, bbox_inches='tight') +print(f"Graph saved: graphs/{load_type.lower()}_completion_rate_runs.png") +plt.close() + +# 3. Gráfico: Run-by-Run Waiting Time +plt.figure(figsize=(12, 6)) +plt.plot(data[run_col], data['TempoMédioEspera'], marker='o', color=color, linewidth=2, markersize=6) +plt.ylabel('Tempo de Espera (s)') +plt.xlabel('Run Number') +plt.title(f'Tempo Médio de Espera por Execução - Carga {load_name}') +plt.grid(alpha=0.3) +plt.savefig(f'graphs/{load_type.lower()}_waiting_time_runs.png', dpi=300, bbox_inches='tight') +print(f"Graph saved: graphs/{load_type.lower()}_waiting_time_runs.png") +plt.close() + +# 4. Gráfico: Vehicles Generated vs Completed +plt.figure(figsize=(10, 6)) +x = range(len(data)) +width = 0.35 +plt.bar([i - width/2 for i in x], data['VeículosGerados'], width, label='Gerados', color='lightblue', alpha=0.8) +plt.bar([i + width/2 for i in x], data['VeículosCompletados'], width, label='Concluídos', color=color, alpha=0.8) +plt.ylabel('Número de Veículos') +plt.xlabel('Run Number') +plt.title(f'Veículos Gerados vs Concluídos - Carga {load_name}') +plt.xticks(x, data[run_col]) +plt.legend() +plt.grid(axis='y', alpha=0.3) +plt.savefig(f'graphs/{load_type.lower()}_vehicles_comparison.png', dpi=300, bbox_inches='tight') +print(f"Graph saved: graphs/{load_type.lower()}_vehicles_comparison.png") +plt.close() + +# 5. Gráfico: Summary Statistics (4-panel) +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(14, 10)) + +# Panel 1: Dwelling Time Statistics +metrics = ['Média', 'Mínimo', 'Máximo', 'Desvio\nPadrão'] +values = [ + data['TempoMédioSistema'].mean(), + data['TempoMínimoSistema'].min(), + data['TempoMáximoSistema'].max(), + data['TempoMédioSistema'].std() +] +ax1.bar(metrics, values, color=[color, 'lightblue', 'darkblue', 'gray']) +ax1.set_title('Estatísticas de Tempo no Sistema') +ax1.set_ylabel('Tempo (s)') +ax1.grid(axis='y', alpha=0.3) +for i, v in enumerate(values): + ax1.text(i, v + 0.5, f'{v:.2f}s', ha='center', va='bottom') + +# Panel 2: Waiting Time Statistics +values = [ + data['TempoMédioEspera'].mean(), + data['TempoMédioEspera'].min(), + data['TempoMédioEspera'].max(), + data['TempoMédioEspera'].std() +] +ax2.bar(metrics, values, color=[color, 'lightblue', 'darkblue', 'gray']) +ax2.set_title('Estatísticas de Tempo de Espera') +ax2.set_ylabel('Tempo (s)') +ax2.grid(axis='y', alpha=0.3) +for i, v in enumerate(values): + ax2.text(i, v + 0.5, f'{v:.2f}s', ha='center', va='bottom') + +# Panel 3: Completion Rate Distribution +ax3.hist(data['TaxaConclusão'], bins=10, color=color, alpha=0.7, edgecolor='black') +ax3.axvline(data['TaxaConclusão'].mean(), color='red', linestyle='--', linewidth=2, label='Média') +ax3.set_title('Distribuição da Taxa de Conclusão') +ax3.set_xlabel('Taxa de Conclusão (%)') +ax3.set_ylabel('Frequência') +ax3.legend() +ax3.grid(axis='y', alpha=0.3) + +# Panel 4: Key Metrics Summary +summary_metrics = ['Veículos\nGerados', 'Veículos\nConcluídos', 'Taxa de\nConclusão (%)'] +summary_values = [ + data['VeículosGerados'].mean(), + data['VeículosCompletados'].mean(), + data['TaxaConclusão'].mean() +] +bars = ax4.bar(summary_metrics, summary_values, color=[color, color, color], alpha=[0.5, 0.7, 0.9]) +ax4.set_title('Resumo de Métricas-Chave') +ax4.grid(axis='y', alpha=0.3) +for i, v in enumerate(summary_values): + ax4.text(i, v + max(summary_values)*0.02, f'{v:.1f}', ha='center', va='bottom', fontweight='bold') + +plt.tight_layout() +plt.savefig(f'graphs/{load_type.lower()}_summary_statistics.png', dpi=300, bbox_inches='tight') +print(f"Graph saved: graphs/{load_type.lower()}_summary_statistics.png") +plt.close() + +# Print detailed summary statistics +print("\n" + "="*60) +print(f"{load_name.upper()} LOAD - DETAILED STATISTICS") +print("="*60) + +print(f"\nTIME IN SYSTEM:") +print(f" Mean: {data['TempoMédioSistema'].mean():.2f}s") +print(f" Std Dev: {data['TempoMédioSistema'].std():.2f}s") +print(f" Min: {data['TempoMínimoSistema'].min():.2f}s") +print(f" Max: {data['TempoMáximoSistema'].max():.2f}s") +print(f" Median: {data['TempoMédioSistema'].median():.2f}s") + +print(f"\nWAITING TIME:") +print(f" Mean: {data['TempoMédioEspera'].mean():.2f}s") +print(f" Std Dev: {data['TempoMédioEspera'].std():.2f}s") +print(f" Min: {data['TempoMédioEspera'].min():.2f}s") +print(f" Max: {data['TempoMédioEspera'].max():.2f}s") +print(f" Median: {data['TempoMédioEspera'].median():.2f}s") + +print(f"\nCOMPLETION RATE:") +print(f" Mean: {data['TaxaConclusão'].mean():.2f}%") +print(f" Std Dev: {data['TaxaConclusão'].std():.2f}%") +print(f" Min: {data['TaxaConclusão'].min():.2f}%") +print(f" Max: {data['TaxaConclusão'].max():.2f}%") +print(f" Median: {data['TaxaConclusão'].median():.2f}%") + +print(f"\nVEHICLE COUNTS:") +print(f" Mean Generated: {data['VeículosGerados'].mean():.0f}") +print(f" Mean Completed: {data['VeículosCompletados'].mean():.0f}") +print(f" Mean Lost: {data['VeículosGerados'].mean() - data['VeículosCompletados'].mean():.0f}") + +print(f"\nRUNS ANALYZED: {len(data)}") + +# Check for config file column - could be ArquivoConfig or ConfigFile +config_col = None +if 'ArquivoConfig' in data.columns: + config_col = 'ArquivoConfig' +elif 'ConfigFile' in data.columns: + config_col = 'ConfigFile' + +if config_col: + print(f"CONFIGURATION FILE: {data[config_col].iloc[0]}") +else: + print(f"CONFIGURATION FILE: N/A") + +print("\n" + "="*60) +print(f"All graphs saved in 'graphs/' directory with prefix '{load_type.lower()}_'") +print("="*60) diff --git a/main/graphs/high_completion_rate_runs.png b/main/graphs/high_completion_rate_runs.png new file mode 100644 index 0000000..72d123c Binary files /dev/null and b/main/graphs/high_completion_rate_runs.png differ diff --git a/main/graphs/high_dwelling_time_runs.png b/main/graphs/high_dwelling_time_runs.png new file mode 100644 index 0000000..708c1e0 Binary files /dev/null and b/main/graphs/high_dwelling_time_runs.png differ diff --git a/main/graphs/high_vehicles_comparison.png b/main/graphs/high_vehicles_comparison.png new file mode 100644 index 0000000..64ef79e Binary files /dev/null and b/main/graphs/high_vehicles_comparison.png differ diff --git a/main/graphs/high_waiting_time_runs.png b/main/graphs/high_waiting_time_runs.png new file mode 100644 index 0000000..f76e0c1 Binary files /dev/null and b/main/graphs/high_waiting_time_runs.png differ diff --git a/main/src/main/java/sd/ExitNodeProcess.java b/main/src/main/java/sd/ExitNodeProcess.java index a5868e5..963197d 100644 --- a/main/src/main/java/sd/ExitNodeProcess.java +++ b/main/src/main/java/sd/ExitNodeProcess.java @@ -189,9 +189,9 @@ public class ExitNodeProcess { while (running) { SimulationEvent event = eventQueue.poll(); if (event == null) { - // No events currently, wait before checking again + // Minimal sleep to reduce latency (especially important on Linux where Thread.sleep is less precise) try { - Thread.sleep(100); + Thread.sleep(1); } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; diff --git a/main/src/main/java/sd/IntersectionProcess.java b/main/src/main/java/sd/IntersectionProcess.java index 230b9b1..cd0257a 100644 --- a/main/src/main/java/sd/IntersectionProcess.java +++ b/main/src/main/java/sd/IntersectionProcess.java @@ -120,7 +120,8 @@ public class IntersectionProcess { this.statsExecutor = Executors.newSingleThreadScheduledExecutor(); this.departureExecutor = Executors.newScheduledThreadPool(4); this.running = false; - this.trafficCoordinationLock = new ReentrantLock(true); // Fair lock to prevent starvation + // Unfair lock for better performance (fair locks have 10x worse performance on Linux) + this.trafficCoordinationLock = new ReentrantLock(false); this.currentGreenDirection = null; this.timeScale = config.getTimeScale(); @@ -159,9 +160,9 @@ public class IntersectionProcess { while (running) { SimulationEvent event = eventQueue.poll(); if (event == null) { - // Backoff exponencial ou sleep curto para evitar busy-waiting em idle + // Minimal sleep to reduce latency (especially important on Linux where Thread.sleep is less precise) try { - Thread.sleep(50); + Thread.sleep(1); } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; @@ -315,21 +316,24 @@ public class IntersectionProcess { // Algoritmo de esvaziamento de fila baseado em Time Budget while (light.getQueueSize() > 0) { - // Estimativa inicial (optimista) - double crossingTime = config.getLightVehicleCrossingTime(); + // Peek at the next vehicle to get accurate crossing time WITHOUT removing it yet + Vehicle vehicle = light.peekVehicle(); + if (vehicle == null) + break; + + // Calculate ACTUAL crossing time based on vehicle type + double crossingTime = getCrossingTimeForVehicle(vehicle); // Verificação de limite de tempo (Hard Deadline do sinal vermelho) + // Now using ACTUAL crossing time, not optimistic estimate if (timeOffset + crossingTime > greenDuration) { break; // Veículo não cabe no ciclo atual } - // Commit: Remove da fila - Vehicle vehicle = light.removeVehicle(currentTime + timeOffset); + // Only NOW commit: Remove da fila (we know it fits) + vehicle = light.removeVehicle(currentTime + timeOffset); if (vehicle == null) - break; - - // Recálculo preciso baseado no tipo real do veículo - crossingTime = getCrossingTimeForVehicle(vehicle); + break; // Should not happen, but safety check // Agendamento do evento futuro de término de travessia double crossingStartTime = currentTime + timeOffset; @@ -434,7 +438,30 @@ public class IntersectionProcess { */ private void handleSimulationEndEvent(SimulationEvent event) { eventLogger.log(sd.logging.EventType.SIMULATION_STOPPED, intersectionId, - String.format("Simulation ended at time %.2f", event.getTimestamp())); + String.format("Simulation end signal received at time %.2f", event.getTimestamp())); + + // Don't stop immediately - let pending crossing events complete + // Count how many crossing events are still scheduled + int pendingCrossings = 0; + SimulationEvent nextEvent; + while ((nextEvent = eventQueue.peek()) != null) { + if (nextEvent.getType() == DESEventType.VEHICLE_CROSSING_END) { + pendingCrossings++; + // Process this crossing event + SimulationEvent crossingEvent = eventQueue.poll(); + clock.advanceTo(crossingEvent.getTimestamp()); + handleVehicleCrossingEndEvent(crossingEvent); + } else { + // Skip non-crossing events (like light changes) + eventQueue.poll(); + } + } + + System.out.printf("[%s] Drained %d pending crossing events before shutdown%n", + intersectionId, pendingCrossings); + eventLogger.log(sd.logging.EventType.SIMULATION_STOPPED, intersectionId, + String.format("Simulation ended at time %.2f after draining %d vehicles", + clock.getCurrentTime(), pendingCrossings)); running = false; } diff --git a/main/src/main/java/sd/coordinator/SocketClient.java b/main/src/main/java/sd/coordinator/SocketClient.java index 4dafc48..f1f07ef 100644 --- a/main/src/main/java/sd/coordinator/SocketClient.java +++ b/main/src/main/java/sd/coordinator/SocketClient.java @@ -49,6 +49,14 @@ public class SocketClient { public void connect() throws IOException { try { socket = new Socket(host, port); + + // TCP optimizations for low latency (critical for Linux performance) + socket.setTcpNoDelay(true); // Disable Nagle's algorithm + socket.setKeepAlive(true); // Enable TCP keep-alive + socket.setSendBufferSize(65536); // 64KB send buffer + socket.setReceiveBufferSize(65536); // 64KB receive buffer + socket.setPerformancePreferences(0, 2, 1); // latency > bandwidth > connection time + outputStream = socket.getOutputStream(); System.out.println("Connected to " + intersectionId + " at " + host + ":" + port); } catch (IOException e) { diff --git a/main/src/main/java/sd/model/TrafficLight.java b/main/src/main/java/sd/model/TrafficLight.java index 149e4e3..9c73dd3 100644 --- a/main/src/main/java/sd/model/TrafficLight.java +++ b/main/src/main/java/sd/model/TrafficLight.java @@ -26,7 +26,7 @@ public class TrafficLight { private final String direction; /** Estado atual do semáforo (VERDE ou VERMELHO) */ - private TrafficLightState state; + private volatile TrafficLightState state; /** Fila de veículos à espera neste semáforo */ private final Queue queue; @@ -102,6 +102,21 @@ public class TrafficLight { } } + /** + * Peek at the next vehicle in queue without removing it. + * Used to check vehicle type for accurate scheduling before committing to removal. + * + * @return the next vehicle in queue, or null if queue is empty + */ + public Vehicle peekVehicle() { + lock.lock(); + try { + return queue.peek(); + } finally { + lock.unlock(); + } + } + /** * Remove um veículo da fila para travessia. * @@ -144,14 +159,14 @@ public class TrafficLight { * @param newState novo estado (VERDE ou VERMELHO) */ public void changeState(TrafficLightState newState) { - lock.lock(); - try { - this.state = newState; - if (newState == TrafficLightState.GREEN) { + this.state = newState; // volatile write, no lock needed + if (newState == TrafficLightState.GREEN) { + lock.lock(); + try { lightGreen.signalAll(); + } finally { + lock.unlock(); } - } finally { - lock.unlock(); } } @@ -197,17 +212,12 @@ public class TrafficLight { /** * Obtém o estado atual do semáforo. - * Método thread-safe. + * Método thread-safe (lock-free via volatile). * * @return estado atual (VERDE ou VERMELHO) */ public TrafficLightState getState() { - lock.lock(); - try { - return state; - } finally { - lock.unlock(); - } + return state; } /** @return duração configurada do sinal verde em segundos */ diff --git a/main/src/main/java/sd/protocol/SocketConnection.java b/main/src/main/java/sd/protocol/SocketConnection.java index 16dcdd4..a6ad378 100644 --- a/main/src/main/java/sd/protocol/SocketConnection.java +++ b/main/src/main/java/sd/protocol/SocketConnection.java @@ -86,6 +86,13 @@ public class SocketConnection implements Closeable { try { // Try to establish the connection (SYN -> SYN-ACK -> ACK) tempSocket = new Socket(host, port); + + // TCP optimizations for low latency (critical for Linux performance) + tempSocket.setTcpNoDelay(true); // Disable Nagle's algorithm + tempSocket.setKeepAlive(true); // Enable TCP keep-alive + tempSocket.setSendBufferSize(65536); // 64KB send buffer + tempSocket.setReceiveBufferSize(65536); // 64KB receive buffer + tempSocket.setPerformancePreferences(0, 2, 1); // latency > bandwidth > connection time // If successful, break out of the retry loop System.out.printf("[SocketConnection] Connected successfully on attempt %d.%n", attempt); @@ -140,6 +147,14 @@ public class SocketConnection implements Closeable { */ public SocketConnection(Socket acceptedSocket) throws IOException { this.socket = acceptedSocket; + + // TCP optimizations for low latency (critical for Linux performance) + socket.setTcpNoDelay(true); // Disable Nagle's algorithm + socket.setKeepAlive(true); // Enable TCP keep-alive + socket.setSendBufferSize(65536); // 64KB send buffer + socket.setReceiveBufferSize(65536); // 64KB receive buffer + socket.setPerformancePreferences(0, 2, 1); // latency > bandwidth > connection time + this.outputStream = socket.getOutputStream(); this.inputStream = socket.getInputStream(); this.serializer = SerializerFactory.createDefault();