This commit is contained in:
2025-12-10 18:55:34 +00:00
parent 343d31ad68
commit 107daf437f
18 changed files with 556 additions and 685 deletions

View File

@@ -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
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 1836 348 18.95 75.91 72.28 37.96 151.82
3 2 1728 663 38.37 52.10 49.52 26.05 104.21
4 3 1747 539 30.85 116.39 112.54 58.19 232.78
5 4 1769 149 8.42 89.64 85.89 44.82 179.29
6 5 1827 1097 60.04 90.49 86.93 45.25 180.98

View File

@@ -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
================================================================================

View File

@@ -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
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 1826 916 50.16 75.54 72.08 37.77 151.08
3 2 1829 878 48.00 72.94 69.66 36.47 145.88
4 3 1827 1142 62.51 91.24 87.56 45.62 182.48
5 4 1899 1118 58.87 82.59 78.98 41.30 165.19
6 5 1807 897 49.64 71.29 67.94 35.65 142.59
7 6 1779 917 51.55 85.43 81.86 42.71 170.86
8 7 1738 1242 71.46 96.85 92.86 48.43 193.70
9 8 1806 968 53.60 108.15 104.83 54.08 216.31
10 9 1863 1003 53.84 103.36 99.80 51.68 206.72
11 10 1864 1210 64.91 80.43 76.84 40.22 160.86

View File

@@ -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
================================================================================

View File

@@ -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
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 368 329 89.40 78.34 74.19 39.17 156.67
3 2 368 218 59.24 60.44 56.64 30.22 120.89
4 3 349 235 67.34 53.51 49.44 26.76 107.03
5 4 332 243 73.19 69.63 65.50 34.82 139.27
6 5 322 221 68.63 47.52 43.77 23.76 95.05

View File

@@ -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
================================================================================

View File

@@ -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
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 891 202 22.67 69.75 66.09 34.87 139.50
3 2 871 340 39.04 68.73 64.73 34.37 137.46
4 3 953 541 56.77 68.64 65.24 34.32 137.28
5 4 888 501 56.42 60.85 57.48 30.42 121.69
6 5 869 387 44.53 58.29 55.37 29.15 116.58

View File

@@ -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
================================================================================

217
main/graphing_single.py Normal file
View File

@@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

View File

@@ -189,9 +189,9 @@ public class ExitNodeProcess {
while (running) { while (running) {
SimulationEvent event = eventQueue.poll(); SimulationEvent event = eventQueue.poll();
if (event == null) { 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 { try {
Thread.sleep(100); Thread.sleep(1);
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
break; break;

View File

@@ -120,7 +120,8 @@ public class IntersectionProcess {
this.statsExecutor = Executors.newSingleThreadScheduledExecutor(); this.statsExecutor = Executors.newSingleThreadScheduledExecutor();
this.departureExecutor = Executors.newScheduledThreadPool(4); this.departureExecutor = Executors.newScheduledThreadPool(4);
this.running = false; 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.currentGreenDirection = null;
this.timeScale = config.getTimeScale(); this.timeScale = config.getTimeScale();
@@ -159,9 +160,9 @@ public class IntersectionProcess {
while (running) { while (running) {
SimulationEvent event = eventQueue.poll(); SimulationEvent event = eventQueue.poll();
if (event == null) { 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 { try {
Thread.sleep(50); Thread.sleep(1);
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
break; break;
@@ -315,21 +316,24 @@ public class IntersectionProcess {
// Algoritmo de esvaziamento de fila baseado em Time Budget // Algoritmo de esvaziamento de fila baseado em Time Budget
while (light.getQueueSize() > 0) { while (light.getQueueSize() > 0) {
// Estimativa inicial (optimista) // Peek at the next vehicle to get accurate crossing time WITHOUT removing it yet
double crossingTime = config.getLightVehicleCrossingTime(); 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) // Verificação de limite de tempo (Hard Deadline do sinal vermelho)
// Now using ACTUAL crossing time, not optimistic estimate
if (timeOffset + crossingTime > greenDuration) { if (timeOffset + crossingTime > greenDuration) {
break; // Veículo não cabe no ciclo atual break; // Veículo não cabe no ciclo atual
} }
// Commit: Remove da fila // Only NOW commit: Remove da fila (we know it fits)
Vehicle vehicle = light.removeVehicle(currentTime + timeOffset); vehicle = light.removeVehicle(currentTime + timeOffset);
if (vehicle == null) if (vehicle == null)
break; break; // Should not happen, but safety check
// Recálculo preciso baseado no tipo real do veículo
crossingTime = getCrossingTimeForVehicle(vehicle);
// Agendamento do evento futuro de término de travessia // Agendamento do evento futuro de término de travessia
double crossingStartTime = currentTime + timeOffset; double crossingStartTime = currentTime + timeOffset;
@@ -434,7 +438,30 @@ public class IntersectionProcess {
*/ */
private void handleSimulationEndEvent(SimulationEvent event) { private void handleSimulationEndEvent(SimulationEvent event) {
eventLogger.log(sd.logging.EventType.SIMULATION_STOPPED, intersectionId, 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; running = false;
} }

View File

@@ -49,6 +49,14 @@ public class SocketClient {
public void connect() throws IOException { public void connect() throws IOException {
try { try {
socket = new Socket(host, port); 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(); outputStream = socket.getOutputStream();
System.out.println("Connected to " + intersectionId + " at " + host + ":" + port); System.out.println("Connected to " + intersectionId + " at " + host + ":" + port);
} catch (IOException e) { } catch (IOException e) {

View File

@@ -26,7 +26,7 @@ public class TrafficLight {
private final String direction; private final String direction;
/** Estado atual do semáforo (VERDE ou VERMELHO) */ /** Estado atual do semáforo (VERDE ou VERMELHO) */
private TrafficLightState state; private volatile TrafficLightState state;
/** Fila de veículos à espera neste semáforo */ /** Fila de veículos à espera neste semáforo */
private final Queue<Vehicle> queue; private final Queue<Vehicle> 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. * Remove um veículo da fila para travessia.
* *
@@ -144,16 +159,16 @@ public class TrafficLight {
* @param newState novo estado (VERDE ou VERMELHO) * @param newState novo estado (VERDE ou VERMELHO)
*/ */
public void changeState(TrafficLightState newState) { public void changeState(TrafficLightState newState) {
this.state = newState; // volatile write, no lock needed
if (newState == TrafficLightState.GREEN) {
lock.lock(); lock.lock();
try { try {
this.state = newState;
if (newState == TrafficLightState.GREEN) {
lightGreen.signalAll(); lightGreen.signalAll();
}
} finally { } finally {
lock.unlock(); lock.unlock();
} }
} }
}
/** /**
* Retorna quantos veículos estão atualmente na fila. * Retorna quantos veículos estão atualmente na fila.
@@ -197,17 +212,12 @@ public class TrafficLight {
/** /**
* Obtém o estado atual do semáforo. * 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) * @return estado atual (VERDE ou VERMELHO)
*/ */
public TrafficLightState getState() { public TrafficLightState getState() {
lock.lock();
try {
return state; return state;
} finally {
lock.unlock();
}
} }
/** @return duração configurada do sinal verde em segundos */ /** @return duração configurada do sinal verde em segundos */

View File

@@ -87,6 +87,13 @@ public class SocketConnection implements Closeable {
// Try to establish the connection (SYN -> SYN-ACK -> ACK) // Try to establish the connection (SYN -> SYN-ACK -> ACK)
tempSocket = new Socket(host, port); 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 // If successful, break out of the retry loop
System.out.printf("[SocketConnection] Connected successfully on attempt %d.%n", attempt); System.out.printf("[SocketConnection] Connected successfully on attempt %d.%n", attempt);
lastException = null; // Clear last error on success lastException = null; // Clear last error on success
@@ -140,6 +147,14 @@ public class SocketConnection implements Closeable {
*/ */
public SocketConnection(Socket acceptedSocket) throws IOException { public SocketConnection(Socket acceptedSocket) throws IOException {
this.socket = acceptedSocket; 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.outputStream = socket.getOutputStream();
this.inputStream = socket.getInputStream(); this.inputStream = socket.getInputStream();
this.serializer = SerializerFactory.createDefault(); this.serializer = SerializerFactory.createDefault();