13 Commits

Author SHA1 Message Date
09e23f8f6a yup 2025-12-11 03:26:08 +00:00
87f797987b feat: add multiple graphing functionality and multiple comparison charts 2025-12-11 03:18:33 +00:00
daaad57c08 testing fix 2025-12-11 02:26:03 +00:00
1d748e0204 fix: add micro-throttle for Linux performance parity
Linux runs too fast compared to Windows/Wine, causing vehicle queue
backup (~44% completion vs 95% on Windows). Adding microsecond delays
via LockSupport.parkNanos() achieves 92% completion.

- 50μs delay in SocketConnection send/receive
- 100μs delay in CoordinatorProcess vehicle generation
2025-12-11 02:01:36 +00:00
343d31ad68 Add files via upload 2025-12-08 17:35:23 +00:00
92bd738266 Delete Diagrama de arquitetura - SD.jpg 2025-12-08 17:34:41 +00:00
9fa0586bc5 Delete .$Diagrama de arquitetura - SD.drawio.bkp 2025-12-08 17:32:57 +00:00
a68862b98e Delete Diagrama de arquitetura - SD.drawio 2025-12-08 17:32:45 +00:00
David Alves
a4b64e1d95 Atualiza diagrama de arquitetura 2025-12-08 17:04:44 +00:00
David Alves
e171804ac6 Update pom.xml 2025-12-08 15:42:13 +00:00
6376e94c84 Update academic year in README 2025-12-08 14:53:48 +00:00
a591dcfc52 chore: update README with build instructions and troubleshooting guide; remove outdated analysis files 2025-12-08 14:52:41 +00:00
903022719e docs: remove final report and ignore LaTeX files. 2025-12-08 08:51:11 +00:00
48 changed files with 1786 additions and 1860 deletions

View File

@@ -1,110 +0,0 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.0.3 Chrome/140.0.7339.249 Electron/38.7.0 Safari/537.36" version="29.0.3">
<diagram name="Arquitetura SD" id="QKeTeUWuUs8JeLsq44d-">
<mxGraphModel dx="1426" dy="841" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="0K4eb2koB2xQ8duQ1-_a-1" value="&lt;b&gt;CoordinatorProcess&lt;/b&gt;&lt;br&gt;(Cliente Socket)&lt;hr&gt;• VehicleGenerator&lt;br&gt;• Modelo Poisson (λ=0.5)&lt;br&gt;• Liga a Cr1-Cr5" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="40" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-2" value="&lt;b&gt;Cr1&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8001&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8001)&lt;br&gt;• Thread Semáforo Sul&lt;br&gt;• Thread Semáforo Este&lt;br&gt;• Thread Semáforo Oeste&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="280" y="200" width="180" height="160" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-3" value="&lt;b&gt;Cr2&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8002&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8002)&lt;br&gt;• Thread Semáforo Sul&lt;br&gt;• Thread Semáforo Este&lt;br&gt;• Thread Semáforo Oeste&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="590" y="190" width="180" height="160" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-5" value="&lt;b&gt;Cr4&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8004&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8004)&lt;br&gt;• Thread Semáforo Sul&lt;br&gt;• Thread Semáforo Este&lt;br&gt;• Thread Semáforo Oeste&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="530" width="180" height="160" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-6" value="&lt;b&gt;Cr5&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8005&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8005)&lt;br&gt;• Thread Semáforo Sul&lt;br&gt;• Thread Semáforo Este&lt;br&gt;• Thread Semáforo Oeste&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="910" y="430" width="180" height="160" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-7" value="&lt;b&gt;ExitNode (S)&lt;/b&gt;&lt;br&gt;Porta: 9001&lt;br&gt;Servidor Socket&lt;hr&gt;• Recebe veículos finais&lt;br&gt;• Calcula estatísticas:&lt;br&gt; - Tempo no sistema&lt;br&gt; - Tempo de espera&lt;br&gt; - Métricas por tipo&lt;br&gt;• Envia para Dashboard" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="727" y="810" width="200" height="170" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-8" value="&lt;b&gt;DashboardServer&lt;/b&gt;&lt;br&gt;Porta: 9000&lt;br&gt;Servidor Socket&lt;hr&gt;• Thread Pool (10 threads)&lt;br&gt;• ConcurrentHashMap&lt;br&gt;• Agrega estatísticas&lt;br&gt;• Display a cada 5s:&lt;br&gt; - Throughput&lt;br&gt; - Tempos médios&lt;br&gt; - Tamanhos de filas" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1210" y="585" width="200" height="160" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-9" value="VEHICLE_SPAWN&lt;br&gt;(Vehicle)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-1" target="0K4eb2koB2xQ8duQ1-_a-2" edge="1">
<mxGeometry x="-0.2105" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-10" value="VEHICLE_SPAWN&lt;br&gt;(Vehicle)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-1" target="0K4eb2koB2xQ8duQ1-_a-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-11" value="VEHICLE_SPAWN&lt;br&gt;(Vehicle)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-1" target="0K4eb2koB2xQ8duQ1-_a-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-12" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-2" target="0K4eb2koB2xQ8duQ1-_a-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-13" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-3" target="0K4eb2koB2xQ8duQ1-_a-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-14" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-2" target="0K4eb2koB2xQ8duQ1-_a-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-15" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-3" target="0K4eb2koB2xQ8duQ1-_a-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-16" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-5" target="0K4eb2koB2xQ8duQ1-_a-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-17" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=none;startFill=0;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-4" target="0K4eb2koB2xQ8duQ1-_a-6" edge="1">
<mxGeometry x="0.3659" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-18" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FF6600;strokeWidth=2;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-5" target="0K4eb2koB2xQ8duQ1-_a-7" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-19" value="VEHICLE_TRANSFER" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FF6600;strokeWidth=2;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-6" target="0K4eb2koB2xQ8duQ1-_a-7" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-20" value="STATS_UPDATE&lt;br&gt;(periódico 5s)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-2" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-21" value="STATS_UPDATE&lt;br&gt;(periódico 5s)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-4" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-22" value="STATS_UPDATE&lt;br&gt;(periódico 5s)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-4" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-23" value="STATS_UPDATE&lt;br&gt;(periódico 5s)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-5" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-24" value="STATS_UPDATE&lt;br&gt;(periódico 5s)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-6" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-25" value="STATS_UPDATE&lt;br&gt;(periódico 5s)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-26" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-27" value="&lt;b&gt;MessageProtocol&lt;/b&gt;&lt;hr&gt;interface:&lt;br&gt;• getType()&lt;br&gt;• getPayload()&lt;br&gt;• getSourceNode()&lt;br&gt;• getDestinationNode()" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="30" y="30" width="180" height="120" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-28" value="&lt;b&gt;Tipos de Mensagens&lt;/b&gt;&lt;hr&gt;• VEHICLE_TRANSFER&lt;br&gt;• VEHICLE_SPAWN&lt;br&gt;• STATS_UPDATE&lt;br&gt;• TRAFFIC_LIGHT_SYNC&lt;br&gt;• HEARTBEAT" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="20" y="170" width="200" height="120" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-29" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-3" target="0K4eb2koB2xQ8duQ1-_a-4" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="480" y="280" as="sourcePoint" />
<mxPoint x="990" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-4" value="&lt;b&gt;Cr3&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8003&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8003)&lt;br&gt;• Thread Semáforo Sul&lt;br&gt;• Thread Semáforo Este&lt;br&gt;• Thread Semáforo Oeste&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="910" y="200" width="180" height="160" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-30" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="1" source="0K4eb2koB2xQ8duQ1-_a-7" target="0K4eb2koB2xQ8duQ1-_a-26" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="500" y="710" as="sourcePoint" />
<mxPoint x="1090" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-26" value="&lt;b&gt;LEGENDA&lt;/b&gt;&lt;hr&gt;━━━► Comunicação síncrona&lt;br&gt;╌╌╌► Comunicação periódica&lt;br&gt;&lt;br&gt;&lt;b&gt;Cores:&lt;/b&gt;&lt;br&gt;🔵 Azul = Geração&lt;br&gt;🟢 Verde = Transferência&lt;br&gt;🟠 Laranja = Finalização&lt;br&gt;🟣 Roxo = Monitorização&lt;br&gt;&lt;br&gt;&lt;b&gt;Serialização:&lt;/b&gt; JSON (Gson)&lt;br&gt;&lt;b&gt;Protocolo:&lt;/b&gt; TCP/IP" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;spacing=10;" parent="1" vertex="1">
<mxGeometry x="1210" y="825" width="200" height="220" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

10
.gitignore vendored
View File

@@ -6,6 +6,11 @@
*.trace
logs
*.md
*.tex
!README.md
report.aux
report.synctex.gz
!report.tex
# BlueJ files
*.ctxt
@@ -51,9 +56,14 @@ build/
# Other
*.swp
*.pdf
!Desempenho_Linux.pdf
# JAR built pom file
dependency-reduced-pom.xml
# Python env
venv/
.$Diagrama de arquitetura - SD.drawio.bkp
#others
*.out

BIN
Desempenho_Linux.pdf Normal file

Binary file not shown.

View File

@@ -1,171 +0,0 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.0.3 Chrome/140.0.7339.249 Electron/38.7.0 Safari/537.36" version="29.0.3">
<diagram name="Arquitetura SD" id="QKeTeUWuUs8JeLsq44d-">
<mxGraphModel dx="1426" dy="841" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="0K4eb2koB2xQ8duQ1-_a-27" value="&lt;b&gt;MessageProtocol&lt;/b&gt;&lt;hr&gt;interface:&lt;br&gt;• getType()&lt;br&gt;• getPayload()&lt;br&gt;• getSourceNode()&lt;br&gt;• getDestinationNode()" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="30" y="30" width="180" height="120" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-28" value="&lt;b&gt;Tipos de Mensagens&lt;/b&gt;&lt;hr&gt;• VEHICLE_TRANSFER&lt;br&gt;• VEHICLE_SPAWN&lt;br&gt;• STATS_UPDATE&lt;br&gt;• TRAFFIC_LIGHT_SYNC&lt;br&gt;• HEARTBEAT" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;spacing=10;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="20" y="170" width="200" height="120" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-26" value="&lt;b&gt;LEGENDA&lt;/b&gt;&lt;hr&gt;━━━► Comunicação síncrona&lt;br&gt;╌╌╌► Comunicação periódica&lt;br&gt;&lt;br&gt;&lt;b&gt;Cores:&lt;/b&gt;&lt;br&gt;🔵 Azul =&amp;nbsp;&lt;span style=&quot;background-color: transparent;&quot;&gt;Criação do veículo&lt;/span&gt;&lt;div&gt;🟢 Verde = Transferência do veículo&lt;br&gt;🟠 Laranja = Chegada ao destino&lt;br&gt;🟣 Roxo =&amp;nbsp;&lt;span style=&quot;background-color: transparent;&quot;&gt;Envio das estatísticas&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;b&gt;Serialização:&lt;/b&gt; JSON (Gson)&lt;br&gt;&lt;b&gt;Protocolo:&lt;/b&gt; TCP/IP&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;spacing=10;" parent="1" vertex="1">
<mxGeometry x="10" y="320" width="220" height="220" as="geometry" />
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-13" value="" style="group" parent="1" vertex="1" connectable="0">
<mxGeometry x="280" y="40" width="850" height="730" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-20" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;exitX=0.616;exitY=-0.011;exitDx=0;exitDy=0;entryX=0.661;entryY=-0.002;entryDx=0;entryDy=0;entryPerimeter=0;exitPerimeter=0;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-2" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="794" y="530" as="targetPoint" />
<Array as="points">
<mxPoint x="99" y="122" />
<mxPoint x="793" y="122" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-1" value="&lt;b&gt;CoordinatorProcess&lt;/b&gt;&lt;br&gt;(Cliente Socket)&lt;hr&gt;• VehicleGenerator&lt;br&gt;• Modelo Poisson&lt;br&gt;• Liga a Cr1-Cr5" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry x="205.6637168141593" width="176.28318584070794" height="101.38888888888889" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-2" value="&lt;b&gt;Cr1&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8001&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8001)&lt;br&gt;• Thread Semáforo - Sul&lt;br&gt;• Thread Semáforo - Este&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry y="162.22" width="160" height="162.22" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-3" value="&lt;b&gt;Cr2&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8002&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8002)&lt;br&gt;• Thread Semáforo - Sul&lt;br&gt;• Thread Semáforo - Este&lt;br&gt;• Thread Semáforo - Oeste&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry x="227.7" y="162.22" width="162.3" height="162.22" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-5" value="&lt;b&gt;Cr4&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8004&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8004)&lt;br&gt;• Thread Semáforo - Este&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry y="486.67" width="160" height="133.33" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-6" value="&lt;b&gt;Cr5&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8005&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8005)&lt;br&gt;• Thread Semáforo - Este&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry x="220.35" y="486.67" width="169.65" height="162.22" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-7" value="&lt;b&gt;ExitNode (S)&lt;/b&gt;&lt;br&gt;Porta: 9001&lt;br&gt;Servidor Socket&lt;hr&gt;• Recebe veículos finais&lt;br&gt;• Calcula estatísticas:&lt;br&gt; - Tempo no sistema&lt;br&gt; - Tempo de espera&lt;br&gt; - Métricas por tipo&lt;br&gt;• Envia para o Dashboard" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry x="464.07" y="476.53" width="154.6" height="172.36" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-8" value="&lt;b&gt;DashboardServer&lt;/b&gt;&lt;br&gt;Porta: 9000&lt;br&gt;Servidor Socket&lt;hr&gt;• Thread Pool (10 threads)&lt;br&gt;• ConcurrentHashMap&lt;br&gt;• Agrega estatísticas&lt;br&gt;• Display a cada 5s:&lt;br&gt; - Throughput&lt;br&gt; - Tempos médios&lt;br&gt; - Tamanhos de filas" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry x="683.1" y="540" width="166.9" height="180" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-1" target="0K4eb2koB2xQ8duQ1-_a-2" edge="1">
<mxGeometry x="-0.2105" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-1" target="0K4eb2koB2xQ8duQ1-_a-3" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="309" y="120" />
<mxPoint x="309" y="120" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-1" target="0K4eb2koB2xQ8duQ1-_a-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-2" target="0K4eb2koB2xQ8duQ1-_a-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-3" target="0K4eb2koB2xQ8duQ1-_a-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-14" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=none;startFill=0;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-2" target="0K4eb2koB2xQ8duQ1-_a-5" edge="1">
<mxGeometry x="0.125" y="100" relative="1" as="geometry">
<Array as="points">
<mxPoint x="66.10619469026548" y="446.11111111111114" />
<mxPoint x="66.10619469026548" y="446.11111111111114" />
</Array>
<mxPoint y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-16" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=none;startFill=0;exitX=1.005;exitY=0.63;exitDx=0;exitDy=0;exitPerimeter=0;align=center;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-5" edge="1">
<mxGeometry x="-0.0178" y="-49" relative="1" as="geometry">
<mxPoint x="139.55752212389382" y="588.0555555555555" as="sourcePoint" />
<mxPoint x="220" y="571" as="targetPoint" />
<Array as="points">
<mxPoint x="220" y="571" />
</Array>
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-19" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#b46504;strokeWidth=2;fillColor=#fad7ac;" parent="L62mICw2ZrYi1D68OOFe-13" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="390" y="580" as="sourcePoint" />
<mxPoint x="462.74" y="580.22" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-22" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;exitX=0.981;exitY=0.08;exitDx=0;exitDy=0;exitPerimeter=0;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-4" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry x="0.1427" y="-60" relative="1" as="geometry">
<Array as="points">
<mxPoint x="593" y="175" />
<mxPoint x="593" y="140" />
<mxPoint x="764" y="140" />
</Array>
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-4" value="&lt;b&gt;Cr3&lt;/b&gt; (IntersectionProcess)&lt;br&gt;Porta: 8003&lt;br&gt;Servidor + Cliente&lt;hr&gt;• ServerSocket (8003)&lt;br&gt;• Thread Semáforo - Sul&lt;br&gt;• Thread Semáforo - Oeste&lt;br&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" parent="L62mICw2ZrYi1D68OOFe-13" vertex="1">
<mxGeometry x="462.74" y="162.22" width="167.26" height="162.22" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-30" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;entryX=0.186;entryY=0.998;entryDx=0;entryDy=0;entryPerimeter=0;" parent="L62mICw2ZrYi1D68OOFe-13" target="0K4eb2koB2xQ8duQ1-_a-8" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="103" y="620" as="sourcePoint" />
<mxPoint x="710" y="730" as="targetPoint" />
<Array as="points">
<mxPoint x="103" y="730" />
<mxPoint x="714" y="730" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=none;startArrow=classic;startFill=1;endFill=0;" parent="L62mICw2ZrYi1D68OOFe-13" edge="1">
<mxGeometry x="-0.2214" y="26" relative="1" as="geometry">
<mxPoint x="293.8053097345133" y="486.6666666666666" as="sourcePoint" />
<mxPoint x="293.8053097345133" y="324.44444444444446" as="targetPoint" />
<Array as="points" />
<mxPoint x="-17" y="6" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#b46504;strokeWidth=2;endArrow=classic;startArrow=none;startFill=0;fillColor=#fad7ac;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="L62mICw2ZrYi1D68OOFe-13" target="0K4eb2koB2xQ8duQ1-_a-7" edge="1">
<mxGeometry x="0.3659" relative="1" as="geometry">
<mxPoint as="offset" />
<mxPoint x="541" y="324" as="sourcePoint" />
<mxPoint x="528.8495575221239" y="435.9722222222221" as="targetPoint" />
<Array as="points">
<mxPoint x="541" y="360" />
<mxPoint x="541" y="360" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;exitX=0.621;exitY=-0.003;exitDx=0;exitDy=0;exitPerimeter=0;" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-3" edge="1">
<mxGeometry x="0.1427" y="-60" relative="1" as="geometry">
<mxPoint x="330.53097345132744" y="141.94444444444443" as="sourcePoint" />
<mxPoint x="780" y="540" as="targetPoint" />
<Array as="points">
<mxPoint x="329" y="130" />
<mxPoint x="780" y="130" />
</Array>
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="L62mICw2ZrYi1D68OOFe-13" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="326" y="654" as="sourcePoint" />
<mxPoint x="683.1" y="700" as="targetPoint" />
<Array as="points">
<mxPoint x="326.1" y="700" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" parent="L62mICw2ZrYi1D68OOFe-13" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="556" y="650" as="sourcePoint" />
<mxPoint x="683.0973451327434" y="663.0833333333331" as="targetPoint" />
<Array as="points">
<mxPoint x="556" y="663" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

View File

@@ -0,0 +1,177 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0" version="29.2.6">
<diagram name="Arquitetura SD" id="QKeTeUWuUs8JeLsq44d-">
<mxGraphModel dx="891" dy="484" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="0K4eb2koB2xQ8duQ1-_a-27" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;spacing=10;fontColor=#000000;" value="&lt;b&gt;MessageProtocol&lt;/b&gt;&lt;hr&gt;interface:&lt;br&gt;• getType()&lt;br&gt;• getPayload()&lt;br&gt;• getSourceNode()&lt;br&gt;• getDestinationNode()" vertex="1">
<mxGeometry height="120" width="180" x="30" y="30" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-28" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#fff2cc;strokeColor=#d6b656;spacing=10;fontColor=#000000;" value="&lt;font style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;b style=&quot;background-color: transparent;&quot;&gt;Tipos de Mensagens&lt;/b&gt;&lt;br&gt;&lt;/font&gt;&lt;hr style=&quot;background-color: transparent;&quot;&gt;&lt;font style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;• VEHICLE_TRANSFER&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;• VEHICLE_SPAWN&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;• STATS_UPDATE&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;•&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;SIMULATION_START&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;•&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;SHUTDOWN&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;•&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;ROUTING_POLICY_CHANGE&lt;/span&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="130" width="200" x="20" y="170" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-26" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;spacing=10;" value="&lt;b&gt;LEGENDA&lt;/b&gt;&lt;hr&gt;━━━► Comunicação síncrona&lt;br&gt;╌╌╌► Comunicação periódica&lt;br&gt;&lt;br&gt;&lt;b&gt;Cores:&lt;/b&gt;&lt;br&gt;🔵 Azul =&amp;nbsp;&lt;span style=&quot;background-color: transparent;&quot;&gt;Criação do veículo&lt;/span&gt;&lt;div&gt;🟢 Verde = Transferência do veículo&lt;br&gt;🟠 Laranja = Chegada ao destino&lt;br&gt;🟣 Roxo =&amp;nbsp;&lt;span style=&quot;background-color: transparent;&quot;&gt;Envio das estatísticas&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;b&gt;Serialização:&lt;/b&gt; JSON (Gson)&lt;br&gt;&lt;b&gt;Protocolo:&lt;/b&gt; TCP/IP&lt;/div&gt;" vertex="1">
<mxGeometry height="220" width="220" x="10" y="320" as="geometry" />
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-13" connectable="0" parent="1" style="group;strokeColor=light-dark(transparent,#CC6600);" value="" vertex="1">
<mxGeometry height="730" width="850" x="280" y="40" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-20" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;exitX=0.616;exitY=-0.011;exitDx=0;exitDy=0;entryX=0.661;entryY=-0.002;entryDx=0;entryDy=0;entryPerimeter=0;exitPerimeter=0;" target="0K4eb2koB2xQ8duQ1-_a-8" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="99" y="122" />
<mxPoint x="793" y="122" />
</Array>
<mxPoint x="794" y="530" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-1" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;CoordinatorProcess&lt;/b&gt;&lt;br&gt;(Cliente Socket)&lt;hr&gt;• VehicleGenerator&lt;br&gt;• Modelo Poisson&lt;br&gt;• Liga a Cr1-Cr5" vertex="1">
<mxGeometry height="101.38888888888889" width="176.28318584070794" x="205.6637168141593" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-2" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;Cr1&lt;/b&gt; (IntersectionProcess)&lt;br&gt;&lt;hr&gt;&lt;div&gt;• ServerSocket (8001)&lt;/div&gt;&lt;div&gt;• Eventos DES:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Este&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Sul&lt;/div&gt;&lt;div&gt;• Fila Eventos (DES)&lt;/div&gt;&lt;div&gt;• ReentrantLock&lt;/div&gt;&lt;div&gt;&lt;div&gt;• Objetos TrafficLight&lt;/div&gt;&lt;div&gt;• Pool Threads (I/O rede)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="162.22" width="160" y="162.22" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-3" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;Cr2&lt;/b&gt; (IntersectionProcess)&lt;br&gt;&lt;hr&gt;• ServerSocket (8002)&lt;br&gt;&lt;div&gt;• Eventos DES:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Oeste&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Este&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Sul&lt;/div&gt;&lt;div&gt;• Fila Eventos (DES)&lt;/div&gt;&lt;div&gt;• ReentrantLock&lt;/div&gt;&lt;div&gt;&lt;div&gt;• Objetos TrafficLight&lt;/div&gt;&lt;/div&gt;&lt;div&gt;• Pool Threads (I/O rede)&lt;/div&gt;" vertex="1">
<mxGeometry height="177.78" width="162.3" x="227.7" y="162.22" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-5" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;Cr4&lt;/b&gt; (IntersectionProcess)&lt;br&gt;&lt;hr&gt;&lt;div&gt;• ServerSocket (8004)&lt;/div&gt;&lt;div&gt;&lt;div&gt;• Eventos DES:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Este&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Norte&lt;/div&gt;&lt;div&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;• Objetos TrafficLight&lt;/div&gt;&lt;div&gt;• Pool Threads (I/O rede)&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="163.33" width="160" y="486.67" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-6" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;Cr5&lt;/b&gt; (IntersectionProcess)&lt;br&gt;&lt;hr&gt;• ServerSocket (8005)&lt;br&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;• Eventos DES:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Norte&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Este&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Sul&lt;/div&gt;• Fila Eventos (DES)&lt;br&gt;• ReentrantLock&lt;/div&gt;&lt;div&gt;&lt;div&gt;• Objetos TrafficLight&lt;/div&gt;&lt;div&gt;• Pool Threads (I/O rede)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="173.33" width="169.65" x="220.35" y="486.67" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-7" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;ExitNode (S)&lt;/b&gt;&lt;div&gt;&lt;hr&gt;&lt;div&gt;• Server Socket (9001)&lt;br&gt;• Recebe veículos finais&lt;br&gt;• Calcula estatísticas:&lt;br&gt; - Tempo no sistema&lt;br&gt; - Tempo de espera&lt;br&gt; - Métricas por tipo&lt;br&gt;• Envia para o Dashboard&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="172.36" width="154.6" x="464.07" y="476.53" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-8" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;DashboardServer&lt;/b&gt;&lt;hr&gt;• Server Socket (9000)&lt;br&gt;&lt;div&gt;• Thread Pool (10 threads)&lt;br&gt;• ConcurrentHashMap&lt;br&gt;• Agrega estatísticas&lt;br&gt;• Display a cada segundo:&lt;br&gt; - Throughput&lt;br&gt; - Tempos médios&lt;br&gt; - Tamanhos de filas&lt;/div&gt;" vertex="1">
<mxGeometry height="180" width="166.9" x="683.1" y="540" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-9" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" target="0K4eb2koB2xQ8duQ1-_a-2" value="">
<mxGeometry relative="1" x="-0.2105" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-10" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" target="0K4eb2koB2xQ8duQ1-_a-3" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="309" y="120" />
<mxPoint x="309" y="120" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-11" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0000FF;strokeWidth=2;" target="0K4eb2koB2xQ8duQ1-_a-4" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-12" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;" target="0K4eb2koB2xQ8duQ1-_a-3" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="210" y="243" />
<mxPoint x="210" y="243" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-14" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=none;startFill=0;" target="0K4eb2koB2xQ8duQ1-_a-5" value="">
<mxGeometry relative="1" x="0.125" y="100" as="geometry">
<mxPoint y="-1" as="offset" />
<Array as="points">
<mxPoint x="66.10619469026548" y="446.11111111111114" />
<mxPoint x="66.10619469026548" y="446.11111111111114" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-16" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=none;startFill=0;align=center;" value="">
<mxGeometry relative="1" x="-0.0178" y="-49" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="220" y="571" />
</Array>
<mxPoint x="160" y="570" as="sourcePoint" />
<mxPoint x="220" y="571" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-19" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#b46504;strokeWidth=2;fillColor=#fad7ac;" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="390" y="580" as="sourcePoint" />
<mxPoint x="462.74" y="580.22" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-22" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;exitX=0.981;exitY=0.08;exitDx=0;exitDy=0;exitPerimeter=0;" target="0K4eb2koB2xQ8duQ1-_a-8" value="">
<mxGeometry relative="1" x="0.1427" y="-60" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="593" y="175" />
<mxPoint x="593" y="140" />
<mxPoint x="764" y="140" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-4" parent="L62mICw2ZrYi1D68OOFe-13" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=left;verticalAlign=top;spacing=10;fontColor=#000000;" value="&lt;b&gt;Cr3&lt;/b&gt; (IntersectionProcess)&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;div&gt;• ServerSocket (8003)&lt;br&gt;&lt;div&gt;• Eventos DES:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Oeste&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;- Sul&lt;/div&gt;&lt;div&gt;• Fila Eventos (DES)&lt;/div&gt;• ReentrantLock&lt;/div&gt;&lt;div&gt;&lt;div&gt;• Objetos TrafficLight&lt;/div&gt;&lt;/div&gt;&lt;div&gt;• Pool Threads (I/O rede)&lt;/div&gt;" vertex="1">
<mxGeometry height="157.78" width="167.26" x="462.74" y="162.22" as="geometry" />
</mxCell>
<mxCell id="0K4eb2koB2xQ8duQ1-_a-30" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;entryX=0.186;entryY=0.998;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.638;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;" target="0K4eb2koB2xQ8duQ1-_a-8" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="102" y="730" />
<mxPoint x="714" y="730" />
</Array>
<mxPoint x="103" y="660" as="sourcePoint" />
<mxPoint x="710" y="730" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-2" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=none;startArrow=classic;startFill=1;endFill=0;entryX=0.409;entryY=0.993;entryDx=0;entryDy=0;entryPerimeter=0;" target="0K4eb2koB2xQ8duQ1-_a-3" value="">
<mxGeometry relative="1" x="-0.2214" y="26" as="geometry">
<mxPoint x="-17" y="6" as="offset" />
<Array as="points" />
<mxPoint x="293.8053097345133" y="486.6666666666666" as="sourcePoint" />
<mxPoint x="293.8053097345133" y="324.44444444444446" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-10" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;exitX=0.621;exitY=-0.003;exitDx=0;exitDy=0;exitPerimeter=0;" value="">
<mxGeometry relative="1" x="0.1427" y="-60" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="329" y="130" />
<mxPoint x="780" y="130" />
</Array>
<mxPoint x="330.53097345132744" y="141.94444444444443" as="sourcePoint" />
<mxPoint x="780" y="540" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-11" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;exitX=0.627;exitY=1.014;exitDx=0;exitDy=0;exitPerimeter=0;" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="327" y="700" />
</Array>
<mxPoint x="326" y="654" as="sourcePoint" />
<mxPoint x="683.1" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="L62mICw2ZrYi1D68OOFe-12" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9933FF;strokeWidth=2;dashed=1;" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="556" y="663" />
</Array>
<mxPoint x="556" y="650" as="sourcePoint" />
<mxPoint x="683.0973451327434" y="663.0833333333331" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="J0awZyeCmWOCt0z9hVlQ-7" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=light-dark(#00AA00,#C98531);strokeWidth=2;endArrow=none;startArrow=classic;startFill=1;endFill=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" value="">
<mxGeometry relative="1" x="-0.2214" y="26" as="geometry">
<mxPoint x="-17" y="6" as="offset" />
<Array as="points" />
<mxPoint x="541" y="470" as="sourcePoint" />
<mxPoint x="541.17" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="J0awZyeCmWOCt0z9hVlQ-33" edge="1" parent="L62mICw2ZrYi1D68OOFe-13" source="0K4eb2koB2xQ8duQ1-_a-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#00AA00;strokeWidth=2;endArrow=classic;startArrow=classic;entryX=-0.001;entryY=0.513;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.454;exitDx=0;exitDy=0;exitPerimeter=0;" target="0K4eb2koB2xQ8duQ1-_a-4" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="391" y="243.13" as="sourcePoint" />
<mxPoint x="460" y="243" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
Diagrama de arquitetura.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

54
README.md Normal file
View File

@@ -0,0 +1,54 @@
# DTSS - Distributed Traffic Simulation System
**Sistemas Distribuídos 2025/2026**
**Autores:** David Alves, Leandro Afonso, Gabriel Moreira
Simulador de tráfego distribuído (Malha 3x3) com comunicação TCP/IP e modelo de eventos discretos.
### 📋 Pré-requisitos
* **Java 17+**
* **Maven 3.6+**
-----
### Build
Compilar e gerar o JAR executável:
```bash
cd main
mvn clean package
```
-----
### Execução
Inicia todos os processos (Dashboard, Coordenador, Nós, Saída) numa única instância.
```bash
cd main
mvn javafx:run
```
-----
### Cenários de Carga
**Arquivos disponíveis em `src/main/resources/`:**
* `simulation-low.properties` ($\lambda=0.2$)
* `simulation-medium.properties` ($\lambda=0.5$)
* `simulation-high.properties` ($\lambda=1.0$)
-----
### Troubleshooting Rápido
**Port already in use / Limpeza de Processos:**
Se a simulação falhar ou portas ficarem presas, matar todos os processos Java associados:
```bash
pkill -f "sd.IntersectionProcess|sd.dashboard.DashboardServer|sd.coordinator.CoordinatorProcess"
```

View File

@@ -1,712 +0,0 @@
\documentclass[12pt,a4paper]{article}
% Pacotes essenciais
\usepackage[utf8]{inputenc}
\usepackage[portuguese]{babel}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{amsmath}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{float}
\usepackage{caption}
\usepackage{subcaption}
% Configuração da página
\geometry{
left=2.5cm,
right=2.5cm,
top=2.5cm,
bottom=2.5cm
}
% Configuração de hyperlinks
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=cyan,
pdftitle={Trabalho Prático - Sistemas Distribuídos},
pdfauthor={David Alves, Leandro Afonso, Gabriel Moreira},
}
% Configuração de código
\lstset{
basicstyle=\ttfamily\footnotesize,
breaklines=true,
frame=single,
numbers=left,
numberstyle=\tiny,
keywordstyle=\color{blue},
commentstyle=\color{green!60!black},
stringstyle=\color{red}
}
% Cabeçalho e rodapé
\pagestyle{fancy}
\fancyhf{}
\rhead{Sistemas Distribuídos}
\lhead{Trabalho Prático}
\rfoot{Página \thepage}
\begin{document}
% ============================================================
% PÁGINA DE TÍTULO
% ============================================================
\begin{titlepage}
\centering
\vspace*{2cm}
{\LARGE\bfseries Licenciatura em Segurança Informática\\e Redes de Computadores\par}
\vspace{1.5cm}
{\Large Unidade Curricular ``Sistemas Distribuídos''\par}
\vspace{0.5cm}
{\large Ano letivo 2024/2025\par}
\vspace{2cm}
{\huge\bfseries Trabalho Prático\par}
\vspace{0.5cm}
{\Large Simulação de Tráfego Urbano Distribuído\par}
\vspace{2cm}
{\large\bfseries Realizado por:\par}
\vspace{0.5cm}
{\large
David Alves, número de aluno 8240231\\
Leandro Afonso, número de aluno [A COMPLETAR]\\
Gabriel Moreira, número de aluno [A COMPLETAR]
\par}
\vspace{1.5cm}
{\large\bfseries Docente da UC:\par}
\vspace{0.3cm}
{\large Ronaldo Moreira Salles\par}
\vfill
{\large 8 de dezembro de 2024\par}
\end{titlepage}
% ============================================================
% ÍNDICE
% ============================================================
\tableofcontents
\newpage
% ============================================================
% INTRODUÇÃO
% ============================================================
\section{Introdução}
O presente trabalho tem como objetivo dotar os alunos com a capacidade de desenvolver uma aplicação distribuída em linguagem Java, simulando um sistema de tráfego urbano. O projeto é desenvolvido de modo a permitir avaliar e gerir as regras de controlo dos semáforos, tendo em conta diferentes cargas de tráfego.
A simulação implementa uma arquitetura de processos distribuídos que comunicam através de sockets TCP/IP, onde cada componente opera de forma autónoma enquanto contribui para o comportamento global do sistema. Este paradigma permite avaliar propriedades como escalabilidade, tolerância a falhas e sincronização distribuída em ambientes concorrentes.
% ============================================================
% O MODELO DE SIMULAÇÃO
% ============================================================
\section{O Modelo de Simulação}
O sistema retrata uma malha três por três, tendo três pontos de entrada (E1, E2 e E3), cinco cruzamentos (de Cr1 a Cr5) e um ponto de saída (S). As arestas representam as ruas e podem ser de sentido único ou duplo. Cada cruzamento é um processo separado, responsável pela gestão local do tráfego através de semáforos independentes que controlam três direções (Sul, Este e Oeste). O ponto de saída recolhe as estatísticas finais dos veículos que terminam o seu percurso.
\subsection{Geração de Veículos}
O processo coordenador (\texttt{CoordinatorProcess}) atua como o gerador de veículos, colocando-os no percurso através dos pontos de entrada seguindo o modelo de \textbf{Poisson} ($\lambda$ configurável). A simulação modela assim a chegada de veículos de forma realista, semelhante ao tráfego real. Esta abordagem significa que o número total de veículos gerados varia entre execuções. Como alternativa, o sistema permite também configurar um modelo de chegadas fixas, onde os veículos chegam em intervalos constantes e previsíveis.
\subsection{Características dos Veículos}
Cada veículo criado tem a probabilidade de ser:
\begin{itemize}
\item \textbf{Mota} (20\%): Tempo de travessia = $0.5 \times$ tempo base
\item \textbf{Carro} (60\%): Tempo de travessia = $1.0 \times$ tempo base
\item \textbf{Camião} (20\%): Tempo de travessia = $2.0 \times$ tempo base
\end{itemize}
Cada veículo possui um identificador único e uma rota predefinida que determina o seu percurso completo até ao nó de saída. As rotas são atribuídas segundo a política de encaminhamento configurada:
\begin{itemize}
\item \textbf{Random}: Escolha aleatória entre todas as rotas possíveis
\item \textbf{Shortest Path}: Seleção da rota com menor número de saltos
\item \textbf{Least Congested}: Escolha da rota com menor congestionamento atual
\end{itemize}
\subsection{Modelo de Eventos Discretos (DES)}
A simulação baseia-se num modelo de eventos discretos, onde cada cruzamento mantém uma fila de prioridade de eventos ordenados cronologicamente por timestamp. Os eventos incluem:
\begin{itemize}
\item Chegadas e partidas de veículos
\item Mudanças de estado dos semáforos
\item Atualizações de estatísticas
\end{itemize}
Cada semáforo opera como uma thread independente, alternando entre os estados \textbf{GREEN} (verde) e \textbf{RED} (vermelho), gerindo uma fila FIFO de veículos que aguardam passagem. Quando um veículo atravessa um cruzamento, é enviado para o processo do próximo cruzamento indicado na sua rota, onde é adicionado à fila do semáforo correspondente à direção necessária.
\subsection{Comunicação Distribuída}
A arquitetura distribuída permite que cada componente seja executado de forma independente. As comunicações são baseadas em sockets TCP/IP, com serialização das mensagens em JSON através da biblioteca \textbf{Gson}. Esta abordagem garante interoperabilidade e facilita a depuração do sistema.
% ============================================================
% ARQUITETURA DO SISTEMA E COMPONENTES
% ============================================================
\section{Arquitetura do Sistema e Componentes}
Foi desenvolvido um diagrama que retrata a arquitetura do projeto, ilustrando a topologia da rede viária e as conexões entre os diversos processos.
\subsection{Componentes Principais}
\subsubsection{Coordenador (\texttt{CoordinatorProcess})}
\begin{itemize}
\item \textbf{Porta}: Coordenação central sem socket servidor próprio (atua como cliente)
\item \textbf{Função}: Geração de veículos, gestão do relógio global de simulação, injeção de carga nos pontos de entrada
\item \textbf{Responsabilidades}:
\begin{itemize}
\item Implementação do modelo de Poisson para chegadas estocásticas
\item Seleção de rotas baseada na política configurada
\item Sincronização temporal da simulação
\end{itemize}
\end{itemize}
\subsubsection{Processos de Cruzamento (\texttt{IntersectionProcess})}
Cada cruzamento mantém um \texttt{ServerSocket} dedicado que aceita ligações de múltiplos clientes simultaneamente, criando uma thread para cada ligação estabelecida:
\begin{itemize}
\item \textbf{Cr1}: Porta 8001
\item \textbf{Cr2}: Porta 8002
\item \textbf{Cr3}: Porta 8003
\item \textbf{Cr4}: Porta 8004
\item \textbf{Cr5}: Porta 8005
\end{itemize}
\textbf{Responsabilidades}:
\begin{itemize}
\item Gestão local de semáforos (3 direções: Sul, Este, Oeste)
\item Processamento de eventos DES locais
\item Encaminhamento de veículos para o próximo destino
\item Reporte periódico de estatísticas ao Dashboard
\end{itemize}
\subsubsection{Nó de Saída (\texttt{ExitNodeProcess})}
\begin{itemize}
\item \textbf{Porta}: 9001
\item \textbf{Função}: Agregação final de métricas
\item \textbf{Responsabilidades}:
\begin{itemize}
\item Cálculo do tempo total de permanência no sistema
\item Throughput global
\item Estatísticas agregadas por tipo de veículo
\end{itemize}
\end{itemize}
\subsubsection{Servidor de Dashboard (\texttt{DashboardServer})}
\begin{itemize}
\item \textbf{Porta}: 9000
\item \textbf{Função}: Monitorização centralizada e visualização em tempo real
\item \textbf{Responsabilidades}:
\begin{itemize}
\item Agregação de estatísticas de todos os processos
\item Deteção de falhas através de heartbeats
\item Renderização da interface gráfica (JavaFX) ou CLI
\end{itemize}
\end{itemize}
\subsection{Sincronização e Concorrência}
O \texttt{DashboardServer} implementa um sistema de agregação com \textbf{10 threads concorrentes} (thread pool) que processam atualizações de estatísticas vindas dos cinco cruzamentos. Utiliza um \texttt{ConcurrentHashMap} para armazenar métricas por cruzamento, permitindo leituras simultâneas enquanto recebe atualizações. O frontend é atualizado a cada \textbf{5 segundos}.
A sincronização entre os processos ocorre através de \textbf{comunicação assíncrona}, onde cada processo continua a sua execução local enquanto envia e recebe mensagens. Os semáforos dentro de cada cruzamento operam de forma autónoma com ciclos independentes. O dashboard identifica a ausência de heartbeats para detetar falhas de processos.
% ============================================================
% CLASSES E MÉTODOS
% ============================================================
\section{Classes e Métodos}
O programa está organizado em diversos packages que contêm classes com responsabilidades distintas. Neste relatório são mencionadas as principais que sustentam o projeto, estando o resto da documentação apoiado em JavaDoc.
\subsection{Package \texttt{sd.model}}
\subsubsection{Classe \texttt{Vehicle}}
Representa cada veículo na simulação com os seguintes atributos:
\begin{itemize}
\item \texttt{vehicleId}: Identificador único
\item \texttt{vehicleType}: Tipo (MOTORCYCLE, CAR, TRUCK)
\item \texttt{entryTime}: Timestamp de entrada no sistema
\item \texttt{route}: Lista de nós que compõem o percurso completo
\end{itemize}
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{advanceRoute()}: Avança para o próximo nó na rota
\item \texttt{getCurrentDestination()}: Obtém o próximo cruzamento
\item \texttt{addWaitingTime(double time)}: Acumula tempo de espera em filas
\item \texttt{addCrossingTime(double time)}: Acumula tempo de travessia
\end{itemize}
\subsubsection{Classe \texttt{Intersection}}
Gere os cruzamentos, mantendo:
\begin{itemize}
\item Um mapa de semáforos por direção (\texttt{Map<Direction, TrafficLight>})
\item Uma tabela de encaminhamento que mapeia destinos para direções específicas
\end{itemize}
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{configureRoute(String destination, Direction direction)}: Define a tabela de routing
\item \texttt{receiveVehicle(Vehicle vehicle)}: Recebe veículos e coloca-os na fila do semáforo correspondente
\item \texttt{getTrafficLight(Direction direction)}: Obtém o semáforo de uma direção específica
\end{itemize}
\subsubsection{Classe \texttt{TrafficLight}}
Controla cada semáforo individualmente, utilizando locks (\texttt{ReentrantLock}) para garantir thread-safety.
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{addVehicle(Vehicle vehicle)}: Adiciona veículo à fila (FIFO)
\item \texttt{removeVehicle()}: Remove veículo da fila (apenas quando verde)
\item \texttt{changeState(TrafficLightState newState)}: Alterna entre GREEN e RED
\item \texttt{getQueueSize()}: Retorna o tamanho atual da fila
\end{itemize}
\subsubsection{Classe \texttt{Event} (no package \texttt{sd.des})}
Representa eventos discretos na simulação. Implementa \texttt{Comparable<Event>} para ordenação automática cronológica na fila de prioridade.
\textbf{Atributos:}
\begin{itemize}
\item \texttt{timestamp}: Momento em que o evento deve ocorrer
\item \texttt{eventType}: Tipo do evento (VEHICLE\_ARRIVAL, TRAFFIC\_LIGHT\_CHANGE, etc.)
\item \texttt{associatedData}: Payload específico do evento
\end{itemize}
\subsubsection{Classe \texttt{Message}}
Define a estrutura das mensagens trocadas entre processos.
\textbf{Atributos:}
\begin{itemize}
\item \texttt{messageId}: Identificador único da mensagem
\item \texttt{messageType}: Tipo da mensagem (VEHICLE\_TRANSFER, STATS\_UPDATE, etc.)
\item \texttt{sourceNode}: Nó de origem
\item \texttt{destinationNode}: Nó de destino
\item \texttt{payload}: Conteúdo serializado em JSON
\end{itemize}
\subsection{Package \texttt{sd.coordinator}}
\subsubsection{Classe \texttt{CoordinatorProcess}}
Conduz a simulação através do paradigma de eventos discretos distribuído.
\textbf{Responsabilidades:}
\begin{itemize}
\item Inicialização da topologia da rede
\item Geração de veículos segundo distribuição de Poisson
\item Injeção de carga nos pontos de entrada (E1, E2, E3)
\item Seleção de rotas com base na política configurada
\end{itemize}
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{initialize()}: Prepara o sistema, estabelece conexões com interseções
\item \texttt{run()}: Loop principal de geração de veículos
\item \texttt{generateAndInjectVehicle()}: Cria um novo veículo e injeta-o num ponto de entrada
\item \texttt{selectRouteForVehicle()}: Determina a rota com base na política ativa
\end{itemize}
\subsubsection{Classe \texttt{SocketClient}}
Facilita a comunicação de rede do lado do cliente.
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{connect(String host, int port)}: Estabelece ligação TCP
\item \texttt{send(Message message)}: Serializa e transmite mensagem
\item \texttt{close()}: Encerra ligação e liberta recursos
\end{itemize}
\subsection{Package \texttt{sd}}
\subsubsection{Classe \texttt{IntersectionProcess}}
Representa um nó de processamento autónomo (Worker Node) na malha distribuída.
\textbf{Arquitetura híbrida:}
\begin{itemize}
\item \textbf{Reativa (Network I/O)}: Threads dedicadas aceitam conexões TCP e injetam veículos nas filas
\item \textbf{Proativa (DES Engine)}: Thread de processamento de eventos gere a lógica temporal
\end{itemize}
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{initialize()}: Carrega configurações, cria semáforos e rotas
\item \texttt{startTrafficLightThreads()}: Inicia threads de controlo dos semáforos
\item \texttt{startServerSocket()}: Aceita conexões de veículos de outros processos
\item \texttt{sendVehicleToNextDestination(Vehicle vehicle)}: Encaminha veículos pela rede
\item \texttt{reportStatistics()}: Envia métricas ao Dashboard periodicamente
\item \texttt{shutdown()}: Encerra serviços e liberta recursos
\end{itemize}
\subsection{Package \texttt{sd.util}}
\subsubsection{Classe \texttt{VehicleGenerator}}
Responsável pela criação de veículos segundo o modelo de Poisson.
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{generateVehicle()}: Cria veículo com tipo e rota selecionados aleatoriamente
\item \texttt{getNextArrivalTime(double lambda)}: Calcula o momento da próxima chegada usando distribuição exponencial
\end{itemize}
\subsubsection{Classe \texttt{StatisticsCollector}}
Agrega métricas do sistema, rastreando veículos em trânsito e mantendo contadores globais.
\textbf{Métodos principais:}
\begin{itemize}
\item \texttt{recordVehicleGeneration(Vehicle vehicle)}: Regista criação de veículo
\item \texttt{recordVehicleArrival(Vehicle vehicle, String intersection)}: Regista chegada a cruzamento
\item \texttt{recordVehicleDeparture(Vehicle vehicle, String intersection)}: Regista partida de cruzamento
\item \texttt{recordVehicleCompletion(Vehicle vehicle)}: Regista conclusão do percurso
\item \texttt{getStatistics()}: Retorna snapshot das métricas atuais
\item \texttt{printStatistics()}: Gera relatórios com throughput, tempos médios, etc.
\end{itemize}
\subsection{Package \texttt{sd.config}}
\subsubsection{Classe \texttt{SimulationConfig}}
Carrega parâmetros do ficheiro \texttt{simulation.properties} (ou variantes \texttt{simulation-low.properties}, \texttt{simulation-medium.properties}, \texttt{simulation-high.properties}).
\textbf{Parâmetros configuráveis:}
\begin{itemize}
\item Duração da simulação
\item Taxa de chegada $\lambda$ (lambda)
\item Probabilidades de tipos de veículos
\item Tempos de travessia base
\item Tempos de ciclo dos semáforos
\item Política de encaminhamento
\end{itemize}
\subsection{Package \texttt{sd.routing}}
\subsubsection{Políticas de Encaminhamento}
O sistema suporta três estratégias de seleção de rotas:
\begin{itemize}
\item \texttt{RandomRouteSelector}: Escolha equiprovável entre todas as rotas disponíveis.
\item \texttt{ShortestPathRouteSelector}: Seleção da rota com menor número de saltos (hops).
\item \texttt{LeastCongestedRouteSelector}: Escolha da rota com menor congestionamento atual, baseada em feedback dos cruzamentos sobre tamanhos de filas.
\end{itemize}
% ============================================================
% AVALIAÇÃO DO DESEMPENHO DO SISTEMA
% ============================================================
\section{Avaliação do Desempenho do Sistema}
A avaliação do sistema baseia-se em métricas recolhidas pela classe \texttt{DashboardStatistics}, que monitoriza:
\begin{itemize}
\item Número de veículos gerados
\item Número de veículos que completaram o percurso
\item Taxa de conclusão (\%)
\item Tempo médio no sistema (segundos)
\item Tempo médio de espera acumulado em filas (segundos)
\item Throughput (veículos/segundo)
\end{itemize}
\subsection{Cenários de Carga}
Foram configurados três cenários de carga de tráfego, cada um executado 5 vezes para obter estatísticas fiáveis.
\subsubsection{Tráfego Leve (LOW LOAD)}
\textbf{Configuração:} \texttt{simulation-low.properties} - $\lambda = 0.2$ veículos/segundo
\begin{table}[H]
\centering
\caption{Métricas de Desempenho - Tráfego Leve}
\begin{tabular}{lrrrrr}
\toprule
\textbf{Métrica} & \textbf{Média} & \textbf{Desvio Padrão} & \textbf{IC 95\%} & \textbf{Mín} & \textbf{Máx} \\
\midrule
Veículos Gerados & 364.60 & 9.34 & [351.30, 377.90] & 350 & 373 \\
Veículos Completados & 219.60 & 31.19 & [175.22, 263.98] & 187 & 263 \\
Taxa de Conclusão (\%) & \textbf{60.38} & 9.71 & [46.57, 74.20] & 50.40 & 72.85 \\
Tempo Médio no Sistema (s) & \textbf{33.04} & 7.41 & [22.50, 43.58] & 23.36 & 42.28 \\
Tempo Médio de Espera (s) & 13.78 & 3.43 & [8.82, 18.73] & 9.72 & 17.53 \\
\bottomrule
\end{tabular}
\end{table}
\textbf{Análise:} Com carga leve, a rede opera abaixo da capacidade sem congestionamento significativo. A taxa de conclusão superior a 60\% e o tempo médio no sistema de apenas 33 segundos demonstram que o sistema consegue processar eficientemente o tráfego quando a chegada de veículos é esparsa.
\subsubsection{Tráfego Moderado (MEDIUM LOAD)}
\textbf{Configuração:} \texttt{simulation-medium.properties} - $\lambda = 0.5$ veículos/segundo
\begin{table}[H]
\centering
\caption{Métricas de Desempenho - Tráfego Moderado}
\begin{tabular}{lrrrrr}
\toprule
\textbf{Métrica} & \textbf{Média} & \textbf{Desvio Padrão} & \textbf{IC 95\%} & \textbf{Mín} & \textbf{Máx} \\
\midrule
Veículos Gerados & 927.20 & 32.48 & [880.97, 973.43] & 886 & 954 \\
Veículos Completados & 419.40 & 90.64 & [290.42, 548.38] & 312 & 535 \\
Taxa de Conclusão (\%) & \textbf{45.23} & 9.64 & [31.50, 58.95] & 34.74 & 56.08 \\
Tempo Médio no Sistema (s) & \textbf{44.48} & 6.81 & [34.79, 54.18] & 35.08 & 52.56 \\
Tempo Médio de Espera (s) & 21.05 & 4.73 & [13.55, 28.56] & 14.60 & 25.60 \\
\bottomrule
\end{tabular}
\end{table}
\textbf{Análise:} Com tráfego moderado, observa-se o início de congestionamento. A taxa de conclusão cai para 45\% e o tempo médio no sistema aumenta 34\% relativamente ao cenário leve. As filas começam a formar-se nos cruzamentos principais (Cr2 e Cr5).
\subsubsection{Tráfego Intenso (HIGH LOAD)}
\textbf{Configuração:} \texttt{simulation-high.properties} - $\lambda = 1.0$ veículos/segundo
\begin{table}[H]
\centering
\caption{Métricas de Desempenho - Tráfego Intenso}
\begin{tabular}{lrrrrr}
\toprule
\textbf{Métrica} & \textbf{Média} & \textbf{Desvio Padrão} & \textbf{IC 95\%} & \textbf{Mín} & \textbf{Máx} \\
\midrule
Veículos Gerados & 1813.80 & 41.93 & [1754.13, 1873.47] & 1782 & 1872 \\
Veículos Completados & 651.00 & 354.20 & [146.96, 1155.04] & 179 & 953 \\
Taxa de Conclusão (\%) & \textbf{35.92} & 19.44 & [8.25, 63.58] & 9.70 & 50.91 \\
Tempo Médio no Sistema (s) & \textbf{60.15} & 6.17 & [51.38, 68.93] & 53.09 & 65.41 \\
Tempo Médio de Espera (s) & 37.82 & 5.59 & [29.67, 45.96] & 31.51 & 44.58 \\
\bottomrule
\end{tabular}
\end{table}
\textbf{Análise:} Com tráfego intenso, a rede aproxima-se da saturação. A taxa de conclusão cai para apenas 36\% com elevada variabilidade ($\sigma = 19.44\%$), indicando comportamento instável. O tempo médio no sistema atinge 60 segundos, mas o aspecto mais crítico é o tempo médio de espera de 37.82 segundos, representando 63\% do tempo total no sistema. A alta variabilidade sugere que o sistema está perto do colapso, com algumas execuções a atingir apenas 9.7\% de taxa de conclusão.
\subsection{Análise Comparativa}
\begin{table}[H]
\centering
\caption{Comparação entre Cenários de Carga}
\begin{tabular}{lrrrr}
\toprule
\textbf{Cenário} & \textbf{$\lambda$ (v/s)} & \textbf{Taxa Conclusão (\%)} & \textbf{Tempo Sistema (s)} & \textbf{Tempo Espera (s)} \\
\midrule
Leve & 0.2 & 60.38 & 33.04 & 13.78 \\
Moderado & 0.5 & 45.23 & 44.48 & 21.05 \\
Intenso & 1.0 & 35.92 & 60.15 & 37.82 \\
\bottomrule
\end{tabular}
\end{table}
\textbf{Observações:}
\begin{enumerate}
\item \textbf{Relação não-linear}: Dobrar a taxa de chegada ($0.2 \rightarrow 0.5$) reduz a taxa de conclusão em 25\%, mas quadruplicar ($0.2 \rightarrow 1.0$) reduz apenas 40\%, sugerindo efeitos de saturação.
\item \textbf{Gargalos identificados}: Os cruzamentos Cr2 e Cr5 funcionam como pontos de convergência, acumulando os maiores tamanhos de fila.
\item \textbf{Tempo de espera dominante}: Em carga intensa, 63\% do tempo no sistema é gasto em filas.
\end{enumerate}
\subsection{Otimizações Testadas}
\subsubsection{Configuração de Ciclos de Semáforos}
Foram testadas diferentes configurações de temporização:
\textbf{Ciclos Longos} (verde 60s, vermelho 5s):
\begin{itemize}
\item Maior vazão (throughput) por ciclo
\item Aumento significativo da espera para direções em vermelho
\item Adequado para tráfego unidirecional dominante
\end{itemize}
\textbf{Ciclos Curtos} (verde 8-10s, vermelho 5s):
\begin{itemize}
\item Distribuição mais equitativa da capacidade
\item Redução da espera máxima
\item Perda de eficiência devido ao overhead de mudanças de estado
\end{itemize}
\textbf{Ciclos Otimizados} (diferenciados por cruzamento):
\begin{itemize}
\item Cr2 e Cr5: verde 30-40s (pontos de convergência)
\item Cr1, Cr3, Cr4: verde 15-20s (tráfego distribuído)
\item Melhor compromisso entre throughput e equidade
\end{itemize}
\subsubsection{Políticas de Encaminhamento}
\textbf{Random}: Baseline - distribuição uniforme da carga mas sem otimização.
\textbf{Shortest Path}: Minimiza latência individual mas pode criar hotspots nos caminhos mais curtos.
\textbf{Least Congested}: Balanceamento dinâmico da carga, requer feedback em tempo real dos cruzamentos. Reduz congestionamento mas pode aumentar latência individual ao escolher caminhos mais longos.
% ============================================================
% DASHBOARD
% ============================================================
\section{Dashboard}
O sistema de monitorização foi implementado utilizando \textbf{JavaFX} para a interface gráfica, fornecendo visualização em tempo real do estado da simulação.
\subsection{Características Principais}
\subsubsection{Interface Gráfica}
\textbf{Estatísticas Globais}: Painel superior com métricas agregadas do sistema
\begin{itemize}
\item Veículos gerados vs. completados
\item Taxa de conclusão em tempo real
\item Throughput atual
\item Tempo médio no sistema
\end{itemize}
\textbf{Tabelas Dinâmicas}:
\begin{itemize}
\item Estatísticas por tipo de veículo (Mota, Carro, Camião)
\item Métricas por interseção (Cr1-Cr5)
\item Tamanhos de fila por direção
\item Estados dos semáforos (cores indicativas)
\end{itemize}
\textbf{Controlos de Simulação}:
\begin{itemize}
\item Botão \textbf{Start}: Inicia todos os processos distribuídos
\item Botão \textbf{Stop}: Termina a simulação graciosamente
\item Indicador de estado do sistema
\item Heartbeat visual para cada processo
\end{itemize}
\subsubsection{Arquitetura de Concorrência}
O \texttt{DashboardServer} utiliza:
\begin{itemize}
\item \textbf{Thread Pool} com 10 threads concorrentes para processar atualizações
\item \texttt{ConcurrentHashMap} para armazenamento thread-safe de métricas
\item \texttt{ScheduledExecutorService} para atualizações periódicas da UI (intervalo de 5 segundos)
\item \texttt{Platform.runLater()} para marshalling seguro de atualizações para a UI thread do JavaFX
\end{itemize}
\subsubsection{Deteção de Falhas}
O sistema implementa monitorização de saúde através de:
\begin{itemize}
\item \textbf{Heartbeats}: Cada processo envia sinais periódicos (intervalo configurável)
\item \textbf{Timeout de conexão}: Identifica processos não-responsivos
\item \textbf{Indicadores visuais}: Marcação a vermelho de nós com falhas
\item \textbf{Logs de eventos}: Registo de todas as anomalias detetadas
\end{itemize}
\subsection{Análise em Batch}
O sistema inclui uma ferramenta de análise estatística (\texttt{MultiRunAnalyzer}) que:
\begin{itemize}
\item Executa múltiplas simulações automaticamente
\item Calcula médias, medianas, desvios padrão e intervalos de confiança (95\%)
\item Gera relatórios em formato texto e CSV
\item Permite comparação entre diferentes configurações
\end{itemize}
% ============================================================
% CONCLUSÃO
% ============================================================
\section{Conclusão}
O trabalho desenvolvido demonstra a implementação bem-sucedida de um sistema distribuído para simulação de tráfego urbano, cumprindo os objetivos pedagógicos da unidade curricular.
\subsection{Principais Conquistas}
\begin{enumerate}
\item \textbf{Arquitetura Distribuída Robusta}: Implementação de comunicação assíncrona entre processos autónomos através de sockets TCP/IP, com serialização JSON garantindo interoperabilidade.
\item \textbf{Modelo de Simulação Realista}: Utilização do modelo de eventos discretos (DES) com distribuição de Poisson para chegadas de veículos, aproximando-se de padrões de tráfego reais.
\item \textbf{Escalabilidade Demonstrada}: O sistema mantém-se funcional desde tráfego leve ($\lambda=0.2$) até tráfego intenso ($\lambda=1.0$), embora com degradação expectável de desempenho em saturação.
\item \textbf{Monitorização Abrangente}: Dashboard com visualização em tempo real e capacidade de análise estatística multi-execução, permitindo avaliação rigorosa do desempenho.
\item \textbf{Políticas de Encaminhamento Adaptativas}: Implementação de três estratégias distintas (Random, Shortest Path, Least Congested) demonstrando flexibilidade arquitetural.
\end{enumerate}
\subsection{Aprendizagens}
\begin{itemize}
\item \textbf{Sincronização Distribuída}: Gestão da complexidade inerente à coordenação de múltiplos processos autónomos sem relógio global centralizado.
\item \textbf{Concorrência e Thread-Safety}: Utilização apropriada de locks, estruturas de dados concorrentes e thread pools para garantir correção em ambiente multi-threaded.
\item \textbf{Trade-offs de Desempenho}: Compreensão das relações não-lineares entre carga de entrada, throughput e latência, especialmente em aproximação à saturação.
\item \textbf{Análise Quantitativa}: Aplicação de métodos estatísticos (intervalos de confiança, análise de variância) para avaliação rigorosa de sistemas estocásticos.
\end{itemize}
\subsection{Limitações e Trabalho Futuro}
\textbf{Limitações identificadas:}
\begin{itemize}
\item Rotas estáticas: Veículos não podem desviar-se em resposta a congestionamento dinâmico
\item Capacidade infinita de filas: Sistema não modela bloqueios físicos por falta de espaço
\item Ausência de prioridades: Todos os veículos são tratados igualmente (sem veículos de emergência)
\item Modelo de semáforos simplificado: Não considera fases de amarelo ou coordenação entre cruzamentos adjacentes
\end{itemize}
\textbf{Melhorias propostas:}
\begin{enumerate}
\item Implementação de encaminhamento adaptativo baseado em aprendizagem por reforço
\item Modelação de capacidades finitas com backpressure entre cruzamentos
\item Coordenação de semáforos através de ``ondas verdes'' para corredores prioritários
\item Integração de eventos externos (acidentes, obras, eventos especiais)
\item Visualização 3D da malha viária com animação de veículos em movimento
\end{enumerate}
\subsection{Conclusão Final}
O projeto cumpre integralmente os requisitos da unidade curricular, demonstrando competências na conceção, implementação e avaliação de sistemas distribuídos. Os resultados quantitativos obtidos através das análises multi-execução fornecem insights valiosos sobre o comportamento do sistema sob diferentes condições de carga, validando a abordagem arquitetural adotada.
A experiência adquirida na resolução de desafios de sincronização, gestão de concorrência e análise de desempenho constitui uma base sólida para o desenvolvimento de sistemas distribuídos de maior complexidade em contextos profissionais futuros.
% ============================================================
% BIBLIOGRAFIA
% ============================================================
\begin{thebibliography}{9}
\bibitem{tanenbaum2017}
Tanenbaum, A. S., \& Van Steen, M. (2017).
\textit{Distributed Systems: Principles and Paradigms} (3rd ed.).
Pearson.
\bibitem{coulouris2011}
Coulouris, G., Dollimore, J., Kindberg, T., \& Blair, G. (2011).
\textit{Distributed Systems: Concepts and Design} (5th ed.).
Addison-Wesley.
\bibitem{banks2009}
Banks, J., Carson, J. S., Nelson, B. L., \& Nicol, D. M. (2009).
\textit{Discrete-Event System Simulation} (5th ed.).
Pearson.
\bibitem{oracle2024java}
Oracle. (2024).
\textit{Java Platform, Standard Edition Documentation} (Version 17).
\url{https://docs.oracle.com/en/java/javase/17/}
\bibitem{goetz2006}
Goetz, B., Peierls, T., Bloch, J., Bowbeer, J., Holmes, D., \& Lea, D. (2006).
\textit{Java Concurrency in Practice}.
Addison-Wesley.
\bibitem{oracle2024javafx}
Oracle. (2024).
\textit{JavaFX Documentation} (Version 17).
\url{https://openjfx.io/javadoc/17/}
\bibitem{google2024gson}
Google. (2024).
\textit{Gson User Guide}.
\url{https://github.com/google/gson/blob/master/UserGuide.md}
\bibitem{law2000}
Law, A. M., \& Kelton, W. D. (2000).
\textit{Simulation Modeling and Analysis} (3rd ed.).
McGraw-Hill.
\end{thebibliography}
\vspace{1cm}
\noindent\textbf{Nota:} Este relatório foi elaborado com base na análise do código-fonte do projeto e nos resultados experimentais obtidos através de múltiplas execuções da simulação. Todos os valores estatísticos apresentados foram extraídos dos ficheiros de análise gerados pelo sistema (\texttt{analysis/LOW\_LOAD\_*.txt}, \texttt{analysis/MEDIUM\_LOAD\_*.txt}, \texttt{analysis/HIGH\_LOAD\_*.txt}).
\end{document}

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,1801,1711,95.00,140.07,135.67,70.03,280.14
2,1796,1721,95.82,143.35,139.00,71.68,286.70
3,1834,1773,96.67,149.98,145.57,74.99,299.95
4,1799,1527,84.88,140.39,136.20,70.19,280.77
5,1830,1670,91.26,150.89,146.66,75.45,301.78
6,1833,1690,92.20,139.40,135.24,69.70,278.80
7,1822,1769,97.09,148.40,144.03,74.20,296.80
8,1756,1487,84.68,135.16,131.01,67.58,270.32
9,1829,1640,89.67,144.65,140.25,72.32,289.30
10,1784,1745,97.81,151.09,146.69,75.54,302.17
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 1801 1711 95.00 140.07 135.67 70.03 280.14
3 2 1796 1721 95.82 143.35 139.00 71.68 286.70
4 3 1834 1773 96.67 149.98 145.57 74.99 299.95
5 4 1799 1527 84.88 140.39 136.20 70.19 280.77
6 5 1830 1670 91.26 150.89 146.66 75.45 301.78
7 6 1833 1690 92.20 139.40 135.24 69.70 278.80
8 7 1822 1769 97.09 148.40 144.03 74.20 296.80
9 8 1756 1487 84.68 135.16 131.01 67.58 270.32
10 9 1829 1640 89.67 144.65 140.25 72.32 289.30
11 10 1784 1745 97.81 151.09 146.69 75.54 302.17

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-11 02:16:18
--------------------------------------------------------------------------------
MÉTRICAS GLOBAIS
--------------------------------------------------------------------------------
Veículos Gerados:
Média: 1808.40 Desvio Padrão: 25.76
Mediana: 1811.50 IC 95%: [1787.45, 1829.35]
Mín: 1756.00 Máx: 1834.00
Veículos Completados:
Média: 1673.30 Desvio Padrão: 97.44
Mediana: 1700.50 IC 95%: [1594.08, 1752.52]
Mín: 1487.00 Máx: 1773.00
Taxa de Conclusão (%):
Média: 92.51 Desvio Padrão: 4.86
Mediana: 93.60 IC 95%: [88.55, 96.46]
Mín: 84.68 Máx: 97.81
Tempo Médio no Sistema (segundos):
Média: 144.34 Desvio Padrão: 5.58
Mediana: 144.00 IC 95%: [139.80, 148.87]
Mín: 135.16 Máx: 151.09
Tempo Médio de Espera (segundos):
Média: 140.03 Desvio Padrão: 5.52
Mediana: 139.62 IC 95%: [135.55, 144.52]
Mín: 131.01 Máx: 146.69
--------------------------------------------------------------------------------
ANÁLISE POR TIPO DE VEÍCULO
--------------------------------------------------------------------------------
--- BIKE ---
Contagem de Veículos:
Média: 338.60 Desvio Padrão: 31.26
Mediana: 342.00 IC 95%: [313.19, 364.01]
Mín: 279.00 Máx: 377.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 140.36 Desvio Padrão: 11.64
Mediana: 138.38 IC 95%: [130.90, 149.82]
Mín: 121.77 Máx: 165.19
--- LIGHT ---
Contagem de Veículos:
Média: 991.30 Desvio Padrão: 49.19
Mediana: 1011.00 IC 95%: [951.31, 1031.29]
Mín: 893.00 Máx: 1035.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 141.44 Desvio Padrão: 7.85
Mediana: 143.16 IC 95%: [135.06, 147.83]
Mín: 130.22 Máx: 151.65
--- HEAVY ---
Contagem de Veículos:
Média: 343.40 Desvio Padrão: 29.42
Mediana: 343.00 IC 95%: [319.48, 367.32]
Mín: 288.00 Máx: 385.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 135.81 Desvio Padrão: 9.45
Mediana: 134.25 IC 95%: [128.13, 143.49]
Mín: 118.95 Máx: 149.71
--------------------------------------------------------------------------------
ANÁLISE POR INTERSEÇÃO
--------------------------------------------------------------------------------
--- Cr1 ---
Tamanho Máximo da Fila:
Média: 0.70 Desvio Padrão: 1.25
Mediana: 0.00 IC 95%: [-0.32, 1.72]
Mín: 0.00 Máx: 3.00
Tamanho Médio da Fila:
Média: 0.70 Desvio Padrão: 1.25
Mediana: 0.00 IC 95%: [-0.32, 1.72]
Mín: 0.00 Máx: 3.00
Veículos Processados:
Média: 578.20 Desvio Padrão: 50.05
Mediana: 604.00 IC 95%: [537.51, 618.89]
Mín: 493.00 Máx: 626.00
--- Cr2 ---
Tamanho Máximo da Fila:
Média: 1.40 Desvio Padrão: 2.37
Mediana: 0.00 IC 95%: [-0.52, 3.32]
Mín: 0.00 Máx: 6.00
Tamanho Médio da Fila:
Média: 1.40 Desvio Padrão: 2.37
Mediana: 0.00 IC 95%: [-0.52, 3.32]
Mín: 0.00 Máx: 6.00
Veículos Processados:
Média: 550.30 Desvio Padrão: 50.21
Mediana: 540.00 IC 95%: [509.48, 591.12]
Mín: 459.00 Máx: 616.00
--- Cr3 ---
Tamanho Máximo da Fila:
Média: 0.40 Desvio Padrão: 1.26
Mediana: 0.00 IC 95%: [-0.63, 1.43]
Mín: 0.00 Máx: 4.00
Tamanho Médio da Fila:
Média: 0.40 Desvio Padrão: 1.26
Mediana: 0.00 IC 95%: [-0.63, 1.43]
Mín: 0.00 Máx: 4.00
Veículos Processados:
Média: 589.10 Desvio Padrão: 42.91
Mediana: 595.00 IC 95%: [554.21, 623.99]
Mín: 502.00 Máx: 671.00
--- Cr4 ---
Tamanho Máximo da Fila:
Média: 1.50 Desvio Padrão: 1.58
Mediana: 1.00 IC 95%: [0.21, 2.79]
Mín: 0.00 Máx: 5.00
Tamanho Médio da Fila:
Média: 1.50 Desvio Padrão: 1.58
Mediana: 1.00 IC 95%: [0.21, 2.79]
Mín: 0.00 Máx: 5.00
Veículos Processados:
Média: 540.10 Desvio Padrão: 52.20
Mediana: 549.50 IC 95%: [497.66, 582.54]
Mín: 442.00 Máx: 603.00
--- Cr5 ---
Tamanho Máximo da Fila:
Média: 1.50 Desvio Padrão: 1.51
Mediana: 1.00 IC 95%: [0.27, 2.73]
Mín: 0.00 Máx: 4.00
Tamanho Médio da Fila:
Média: 1.50 Desvio Padrão: 1.51
Mediana: 1.00 IC 95%: [0.27, 2.73]
Mín: 0.00 Máx: 4.00
Veículos Processados:
Média: 1075.10 Desvio Padrão: 78.71
Mediana: 1064.00 IC 95%: [1011.11, 1139.09]
Mín: 920.00 Máx: 1176.00
--- ExitNode ---
Tamanho Máximo da Fila: Sem dados
Tamanho Médio da Fila: Sem dados
Veículos Processados:
Média: 1673.30 Desvio Padrão: 97.44
Mediana: 1700.50 IC 95%: [1594.08, 1752.52]
Mín: 1487.00 Máx: 1773.00
--------------------------------------------------------------------------------
RESUMOS INDIVIDUAIS DAS EXECUÇÕES
--------------------------------------------------------------------------------
Execução #1 [simulation-high.properties]:
Gerados: 1801, Completados: 1711 (95.0%)
Tempo Médio no Sistema: 140.07s
Tempo Médio de Espera: 135.67s
Execução #2 [simulation-high.properties]:
Gerados: 1796, Completados: 1721 (95.8%)
Tempo Médio no Sistema: 143.35s
Tempo Médio de Espera: 139.00s
Execução #3 [simulation-high.properties]:
Gerados: 1834, Completados: 1773 (96.7%)
Tempo Médio no Sistema: 149.98s
Tempo Médio de Espera: 145.57s
Execução #4 [simulation-high.properties]:
Gerados: 1799, Completados: 1527 (84.9%)
Tempo Médio no Sistema: 140.39s
Tempo Médio de Espera: 136.20s
Execução #5 [simulation-high.properties]:
Gerados: 1830, Completados: 1670 (91.3%)
Tempo Médio no Sistema: 150.89s
Tempo Médio de Espera: 146.66s
Execução #6 [simulation-high.properties]:
Gerados: 1833, Completados: 1690 (92.2%)
Tempo Médio no Sistema: 139.40s
Tempo Médio de Espera: 135.24s
Execução #7 [simulation-high.properties]:
Gerados: 1822, Completados: 1769 (97.1%)
Tempo Médio no Sistema: 148.40s
Tempo Médio de Espera: 144.03s
Execução #8 [simulation-high.properties]:
Gerados: 1756, Completados: 1487 (84.7%)
Tempo Médio no Sistema: 135.16s
Tempo Médio de Espera: 131.01s
Execução #9 [simulation-high.properties]:
Gerados: 1829, Completados: 1640 (89.7%)
Tempo Médio no Sistema: 144.65s
Tempo Médio de Espera: 140.25s
Execução #10 [simulation-high.properties]:
Gerados: 1784, Completados: 1745 (97.8%)
Tempo Médio no Sistema: 151.09s
Tempo Médio de Espera: 146.69s
================================================================================
FIM DO RELATÓRIO
================================================================================

View File

@@ -1,5 +0,0 @@
Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema
1,354,228,64.41,40.36,36.75,20.18,80.72
2,373,261,69.97,40.61,36.87,20.30,81.21
3,353,235,66.57,32.63,29.04,16.32,65.27
4,350,269,76.86,37.39,33.42,18.70,74.78
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 354 228 64.41 40.36 36.75 20.18 80.72
3 2 373 261 69.97 40.61 36.87 20.30 81.21
4 3 353 235 66.57 32.63 29.04 16.32 65.27
5 4 350 269 76.86 37.39 33.42 18.70 74.78

View File

@@ -1,204 +0,0 @@
================================================================================
ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO
================================================================================
Configuração: simulation-low.properties
Número de Execuções: 4
Data da Análise: 2025-12-08 08:13:57
--------------------------------------------------------------------------------
MÉTRICAS GLOBAIS
--------------------------------------------------------------------------------
Veículos Gerados:
Média: 357.50 Desvio Padrão: 10.47
Mediana: 353.50 IC 95%: [340.84, 374.16]
Mín: 350.00 Máx: 373.00
Veículos Completados:
Média: 248.25 Desvio Padrão: 19.82
Mediana: 248.00 IC 95%: [216.71, 279.79]
Mín: 228.00 Máx: 269.00
Taxa de Conclusão (%):
Média: 69.45 Desvio Padrão: 5.44
Mediana: 68.27 IC 95%: [60.79, 78.11]
Mín: 64.41 Máx: 76.86
Tempo Médio no Sistema (segundos):
Média: 37.75 Desvio Padrão: 3.71
Mediana: 38.87 IC 95%: [31.85, 43.65]
Mín: 32.63 Máx: 40.61
Tempo Médio de Espera (segundos):
Média: 34.02 Desvio Padrão: 3.68
Mediana: 35.08 IC 95%: [28.16, 39.88]
Mín: 29.04 Máx: 36.87
--------------------------------------------------------------------------------
ANÁLISE POR TIPO DE VEÍCULO
--------------------------------------------------------------------------------
--- BIKE ---
Contagem de Veículos:
Média: 52.25 Desvio Padrão: 8.58
Mediana: 54.50 IC 95%: [38.60, 65.90]
Mín: 40.00 Máx: 60.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 43.39 Desvio Padrão: 19.65
Mediana: 39.45 IC 95%: [12.12, 74.65]
Mín: 25.04 Máx: 69.63
--- LIGHT ---
Contagem de Veículos:
Média: 151.25 Desvio Padrão: 8.34
Mediana: 152.50 IC 95%: [137.98, 164.52]
Mín: 141.00 Máx: 159.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 28.92 Desvio Padrão: 5.34
Mediana: 28.76 IC 95%: [20.43, 37.42]
Mín: 23.35 Máx: 34.82
--- HEAVY ---
Contagem de Veículos:
Média: 44.75 Desvio Padrão: 6.29
Mediana: 44.00 IC 95%: [34.74, 54.76]
Mín: 39.00 Máx: 52.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 43.02 Desvio Padrão: 13.73
Mediana: 47.91 IC 95%: [21.18, 64.86]
Mín: 22.83 Máx: 53.43
--------------------------------------------------------------------------------
ANÁLISE POR INTERSEÇÃO
--------------------------------------------------------------------------------
--- Cr1 ---
Tamanho Máximo da Fila:
Média: 0.25 Desvio Padrão: 0.50
Mediana: 0.00 IC 95%: [-0.55, 1.05]
Mín: 0.00 Máx: 1.00
Tamanho Médio da Fila:
Média: 0.25 Desvio Padrão: 0.50
Mediana: 0.00 IC 95%: [-0.55, 1.05]
Mín: 0.00 Máx: 1.00
Veículos Processados:
Média: 105.50 Desvio Padrão: 10.66
Mediana: 103.50 IC 95%: [88.54, 122.46]
Mín: 95.00 Máx: 120.00
--- Cr2 ---
Tamanho Máximo da Fila:
Média: 1.75 Desvio Padrão: 2.87
Mediana: 0.50 IC 95%: [-2.82, 6.32]
Mín: 0.00 Máx: 6.00
Tamanho Médio da Fila:
Média: 1.75 Desvio Padrão: 2.87
Mediana: 0.50 IC 95%: [-2.82, 6.32]
Mín: 0.00 Máx: 6.00
Veículos Processados:
Média: 119.00 Desvio Padrão: 11.17
Mediana: 122.50 IC 95%: [101.24, 136.76]
Mín: 103.00 Máx: 128.00
--- Cr3 ---
Tamanho Máximo da Fila: Sem dados
Tamanho Médio da Fila: Sem dados
Veículos Processados:
Média: 114.75 Desvio Padrão: 15.88
Mediana: 119.00 IC 95%: [89.48, 140.02]
Mín: 93.00 Máx: 128.00
--- Cr4 ---
Tamanho Máximo da Fila:
Média: 1.25 Desvio Padrão: 0.50
Mediana: 1.00 IC 95%: [0.45, 2.05]
Mín: 1.00 Máx: 2.00
Tamanho Médio da Fila:
Média: 1.25 Desvio Padrão: 0.50
Mediana: 1.00 IC 95%: [0.45, 2.05]
Mín: 1.00 Máx: 2.00
Veículos Processados:
Média: 63.00 Desvio Padrão: 11.75
Mediana: 62.00 IC 95%: [44.31, 81.69]
Mín: 50.00 Máx: 78.00
--- Cr5 ---
Tamanho Máximo da Fila:
Média: 4.50 Desvio Padrão: 2.89
Mediana: 4.50 IC 95%: [-0.09, 9.09]
Mín: 1.00 Máx: 8.00
Tamanho Médio da Fila:
Média: 4.50 Desvio Padrão: 2.89
Mediana: 4.50 IC 95%: [-0.09, 9.09]
Mín: 1.00 Máx: 8.00
Veículos Processados:
Média: 123.00 Desvio Padrão: 24.18
Mediana: 116.50 IC 95%: [84.53, 161.47]
Mín: 103.00 Máx: 156.00
--- ExitNode ---
Tamanho Máximo da Fila: Sem dados
Tamanho Médio da Fila: Sem dados
Veículos Processados:
Média: 248.25 Desvio Padrão: 19.82
Mediana: 248.00 IC 95%: [216.71, 279.79]
Mín: 228.00 Máx: 269.00
--------------------------------------------------------------------------------
RESUMOS INDIVIDUAIS DAS EXECUÇÕES
--------------------------------------------------------------------------------
Execução #1 [simulation-low.properties]:
Gerados: 354, Completados: 228 (64.4%)
Tempo Médio no Sistema: 40.36s
Tempo Médio de Espera: 36.75s
Execução #2 [simulation-low.properties]:
Gerados: 373, Completados: 261 (70.0%)
Tempo Médio no Sistema: 40.61s
Tempo Médio de Espera: 36.87s
Execução #3 [simulation-low.properties]:
Gerados: 353, Completados: 235 (66.6%)
Tempo Médio no Sistema: 32.63s
Tempo Médio de Espera: 29.04s
Execução #4 [simulation-low.properties]:
Gerados: 350, Completados: 269 (76.9%)
Tempo Médio no Sistema: 37.39s
Tempo Médio de Espera: 33.42s
================================================================================
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

@@ -0,0 +1,11 @@
Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema
1,353,334,94.62,78.12,73.90,39.06,156.25
2,366,359,98.09,90.80,86.56,45.40,181.60
3,352,340,96.59,78.90,74.45,39.45,157.79
4,362,347,95.86,69.35,64.88,34.68,138.71
5,338,324,95.86,71.04,66.72,35.52,142.08
6,371,366,98.65,79.54,75.17,39.77,159.09
7,355,345,97.18,69.18,64.63,34.59,138.35
8,364,361,99.18,79.69,75.35,39.84,159.37
9,363,309,85.12,71.72,67.62,35.86,143.44
10,386,376,97.41,78.78,74.30,39.39,157.56
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 353 334 94.62 78.12 73.90 39.06 156.25
3 2 366 359 98.09 90.80 86.56 45.40 181.60
4 3 352 340 96.59 78.90 74.45 39.45 157.79
5 4 362 347 95.86 69.35 64.88 34.68 138.71
6 5 338 324 95.86 71.04 66.72 35.52 142.08
7 6 371 366 98.65 79.54 75.17 39.77 159.09
8 7 355 345 97.18 69.18 64.63 34.59 138.35
9 8 364 361 99.18 79.69 75.35 39.84 159.37
10 9 363 309 85.12 71.72 67.62 35.86 143.44
11 10 386 376 97.41 78.78 74.30 39.39 157.56

View File

@@ -0,0 +1,240 @@
================================================================================
ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO
================================================================================
Configuração: simulation-low.properties
Número de Execuções: 10
Data da Análise: 2025-12-11 02:12:49
--------------------------------------------------------------------------------
MÉTRICAS GLOBAIS
--------------------------------------------------------------------------------
Veículos Gerados:
Média: 361.00 Desvio Padrão: 12.80
Mediana: 362.50 IC 95%: [350.60, 371.40]
Mín: 338.00 Máx: 386.00
Veículos Completados:
Média: 346.10 Desvio Padrão: 20.35
Mediana: 346.00 IC 95%: [329.55, 362.65]
Mín: 309.00 Máx: 376.00
Taxa de Conclusão (%):
Média: 95.86 Desvio Padrão: 4.02
Mediana: 96.89 IC 95%: [92.59, 99.12]
Mín: 85.12 Máx: 99.18
Tempo Médio no Sistema (segundos):
Média: 76.71 Desvio Padrão: 6.62
Mediana: 78.45 IC 95%: [71.33, 82.09]
Mín: 69.18 Máx: 90.80
Tempo Médio de Espera (segundos):
Média: 72.36 Desvio Padrão: 6.66
Mediana: 74.10 IC 95%: [66.95, 77.77]
Mín: 64.63 Máx: 86.56
--------------------------------------------------------------------------------
ANÁLISE POR TIPO DE VEÍCULO
--------------------------------------------------------------------------------
--- BIKE ---
Contagem de Veículos:
Média: 69.60 Desvio Padrão: 6.69
Mediana: 71.00 IC 95%: [64.16, 75.04]
Mín: 58.00 Máx: 78.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 68.27 Desvio Padrão: 18.90
Mediana: 61.61 IC 95%: [52.90, 83.64]
Mín: 55.09 Máx: 119.43
--- LIGHT ---
Contagem de Veículos:
Média: 204.80 Desvio Padrão: 13.91
Mediana: 202.00 IC 95%: [193.49, 216.11]
Mín: 185.00 Máx: 231.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 72.78 Desvio Padrão: 7.41
Mediana: 72.59 IC 95%: [66.76, 78.80]
Mín: 63.84 Máx: 83.07
--- HEAVY ---
Contagem de Veículos:
Média: 71.70 Desvio Padrão: 8.33
Mediana: 70.00 IC 95%: [64.93, 78.47]
Mín: 60.00 Máx: 83.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 75.65 Desvio Padrão: 17.00
Mediana: 69.72 IC 95%: [61.83, 89.47]
Mín: 61.05 Máx: 116.12
--------------------------------------------------------------------------------
ANÁLISE POR INTERSEÇÃO
--------------------------------------------------------------------------------
--- Cr1 ---
Tamanho Máximo da Fila:
Média: 1.50 Desvio Padrão: 2.68
Mediana: 0.00 IC 95%: [-0.68, 3.68]
Mín: 0.00 Máx: 7.00
Tamanho Médio da Fila:
Média: 1.50 Desvio Padrão: 2.68
Mediana: 0.00 IC 95%: [-0.68, 3.68]
Mín: 0.00 Máx: 7.00
Veículos Processados:
Média: 118.90 Desvio Padrão: 6.37
Mediana: 119.50 IC 95%: [113.72, 124.08]
Mín: 109.00 Máx: 127.00
--- Cr2 ---
Tamanho Máximo da Fila:
Média: 0.80 Desvio Padrão: 1.32
Mediana: 0.00 IC 95%: [-0.27, 1.87]
Mín: 0.00 Máx: 4.00
Tamanho Médio da Fila:
Média: 0.80 Desvio Padrão: 1.32
Mediana: 0.00 IC 95%: [-0.27, 1.87]
Mín: 0.00 Máx: 4.00
Veículos Processados:
Média: 118.30 Desvio Padrão: 8.82
Mediana: 121.00 IC 95%: [111.13, 125.47]
Mín: 104.00 Máx: 128.00
--- Cr3 ---
Tamanho Máximo da Fila:
Média: 0.30 Desvio Padrão: 0.48
Mediana: 0.00 IC 95%: [-0.09, 0.69]
Mín: 0.00 Máx: 1.00
Tamanho Médio da Fila:
Média: 0.30 Desvio Padrão: 0.48
Mediana: 0.00 IC 95%: [-0.09, 0.69]
Mín: 0.00 Máx: 1.00
Veículos Processados:
Média: 120.70 Desvio Padrão: 10.27
Mediana: 121.50 IC 95%: [112.35, 129.05]
Mín: 108.00 Máx: 132.00
--- Cr4 ---
Tamanho Máximo da Fila:
Média: 1.20 Desvio Padrão: 1.48
Mediana: 0.50 IC 95%: [0.00, 2.40]
Mín: 0.00 Máx: 4.00
Tamanho Médio da Fila:
Média: 1.20 Desvio Padrão: 1.48
Mediana: 0.50 IC 95%: [0.00, 2.40]
Mín: 0.00 Máx: 4.00
Veículos Processados:
Média: 111.50 Desvio Padrão: 13.71
Mediana: 115.00 IC 95%: [100.35, 122.65]
Mín: 79.00 Máx: 127.00
--- Cr5 ---
Tamanho Máximo da Fila:
Média: 1.60 Desvio Padrão: 1.35
Mediana: 1.00 IC 95%: [0.50, 2.70]
Mín: 0.00 Máx: 4.00
Tamanho Médio da Fila:
Média: 1.60 Desvio Padrão: 1.35
Mediana: 1.00 IC 95%: [0.50, 2.70]
Mín: 0.00 Máx: 4.00
Veículos Processados:
Média: 225.40 Desvio Padrão: 21.42
Mediana: 232.50 IC 95%: [207.99, 242.81]
Mín: 178.00 Máx: 251.00
--- ExitNode ---
Tamanho Máximo da Fila: Sem dados
Tamanho Médio da Fila: Sem dados
Veículos Processados:
Média: 346.10 Desvio Padrão: 20.35
Mediana: 346.00 IC 95%: [329.55, 362.65]
Mín: 309.00 Máx: 376.00
--------------------------------------------------------------------------------
RESUMOS INDIVIDUAIS DAS EXECUÇÕES
--------------------------------------------------------------------------------
Execução #1 [simulation-low.properties]:
Gerados: 353, Completados: 334 (94.6%)
Tempo Médio no Sistema: 78.12s
Tempo Médio de Espera: 73.90s
Execução #2 [simulation-low.properties]:
Gerados: 366, Completados: 359 (98.1%)
Tempo Médio no Sistema: 90.80s
Tempo Médio de Espera: 86.56s
Execução #3 [simulation-low.properties]:
Gerados: 352, Completados: 340 (96.6%)
Tempo Médio no Sistema: 78.90s
Tempo Médio de Espera: 74.45s
Execução #4 [simulation-low.properties]:
Gerados: 362, Completados: 347 (95.9%)
Tempo Médio no Sistema: 69.35s
Tempo Médio de Espera: 64.88s
Execução #5 [simulation-low.properties]:
Gerados: 338, Completados: 324 (95.9%)
Tempo Médio no Sistema: 71.04s
Tempo Médio de Espera: 66.72s
Execução #6 [simulation-low.properties]:
Gerados: 371, Completados: 366 (98.7%)
Tempo Médio no Sistema: 79.54s
Tempo Médio de Espera: 75.17s
Execução #7 [simulation-low.properties]:
Gerados: 355, Completados: 345 (97.2%)
Tempo Médio no Sistema: 69.18s
Tempo Médio de Espera: 64.63s
Execução #8 [simulation-low.properties]:
Gerados: 364, Completados: 361 (99.2%)
Tempo Médio no Sistema: 79.69s
Tempo Médio de Espera: 75.35s
Execução #9 [simulation-low.properties]:
Gerados: 363, Completados: 309 (85.1%)
Tempo Médio no Sistema: 71.72s
Tempo Médio de Espera: 67.62s
Execução #10 [simulation-low.properties]:
Gerados: 386, Completados: 376 (97.4%)
Tempo Médio no Sistema: 78.78s
Tempo Médio de Espera: 74.30s
================================================================================
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
================================================================================

View File

@@ -0,0 +1,11 @@
Execução,VeículosGerados,VeículosCompletados,TaxaConclusão,TempoMédioSistema,TempoMédioEspera,TempoMínimoSistema,TempoMáximoSistema
1,923,887,96.10,100.39,96.03,50.19,200.77
2,858,577,67.25,98.33,94.50,49.16,196.66
3,873,832,95.30,101.24,96.81,50.62,202.47
4,898,844,93.99,95.70,91.31,47.85,191.40
5,862,697,80.86,91.12,87.17,45.56,182.24
6,881,785,89.10,120.88,116.38,60.44,241.76
7,948,901,95.04,99.22,94.72,49.61,198.43
8,873,621,71.13,97.97,93.93,48.99,195.94
9,848,807,95.17,94.44,90.15,47.22,188.88
10,927,880,94.93,103.89,99.48,51.95,207.78
1 Execução VeículosGerados VeículosCompletados TaxaConclusão TempoMédioSistema TempoMédioEspera TempoMínimoSistema TempoMáximoSistema
2 1 923 887 96.10 100.39 96.03 50.19 200.77
3 2 858 577 67.25 98.33 94.50 49.16 196.66
4 3 873 832 95.30 101.24 96.81 50.62 202.47
5 4 898 844 93.99 95.70 91.31 47.85 191.40
6 5 862 697 80.86 91.12 87.17 45.56 182.24
7 6 881 785 89.10 120.88 116.38 60.44 241.76
8 7 948 901 95.04 99.22 94.72 49.61 198.43
9 8 873 621 71.13 97.97 93.93 48.99 195.94
10 9 848 807 95.17 94.44 90.15 47.22 188.88
11 10 927 880 94.93 103.89 99.48 51.95 207.78

View File

@@ -0,0 +1,240 @@
================================================================================
ANÁLISE ESTATÍSTICA MULTI-EXECUÇÃO
================================================================================
Configuração: simulation-medium.properties
Número de Execuções: 10
Data da Análise: 2025-12-11 02:14:29
--------------------------------------------------------------------------------
MÉTRICAS GLOBAIS
--------------------------------------------------------------------------------
Veículos Gerados:
Média: 889.10 Desvio Padrão: 33.51
Mediana: 877.00 IC 95%: [861.85, 916.35]
Mín: 848.00 Máx: 948.00
Veículos Completados:
Média: 783.10 Desvio Padrão: 113.98
Mediana: 819.50 IC 95%: [690.43, 875.77]
Mín: 577.00 Máx: 901.00
Taxa de Conclusão (%):
Média: 87.89 Desvio Padrão: 10.91
Mediana: 94.46 IC 95%: [79.02, 96.76]
Mín: 67.25 Máx: 96.10
Tempo Médio no Sistema (segundos):
Média: 100.32 Desvio Padrão: 8.08
Mediana: 98.77 IC 95%: [93.75, 106.89]
Mín: 91.12 Máx: 120.88
Tempo Médio de Espera (segundos):
Média: 96.05 Desvio Padrão: 7.96
Mediana: 94.61 IC 95%: [89.58, 102.52]
Mín: 87.17 Máx: 116.38
--------------------------------------------------------------------------------
ANÁLISE POR TIPO DE VEÍCULO
--------------------------------------------------------------------------------
--- BIKE ---
Contagem de Veículos:
Média: 157.20 Desvio Padrão: 23.74
Mediana: 163.50 IC 95%: [137.90, 176.50]
Mín: 113.00 Máx: 183.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 98.61 Desvio Padrão: 15.54
Mediana: 97.14 IC 95%: [85.98, 111.24]
Mín: 81.15 Máx: 135.92
--- LIGHT ---
Contagem de Veículos:
Média: 469.20 Desvio Padrão: 67.33
Mediana: 491.00 IC 95%: [414.46, 523.94]
Mín: 336.00 Máx: 539.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 94.53 Desvio Padrão: 11.74
Mediana: 93.58 IC 95%: [84.98, 104.08]
Mín: 78.21 Máx: 120.14
--- HEAVY ---
Contagem de Veículos:
Média: 156.70 Desvio Padrão: 27.98
Mediana: 167.50 IC 95%: [133.95, 179.45]
Mín: 117.00 Máx: 192.00
Tempo Médio no Sistema (segundos): Sem dados
Tempo Médio de Espera (segundos):
Média: 98.43 Desvio Padrão: 8.24
Mediana: 98.39 IC 95%: [91.73, 105.13]
Mín: 84.28 Máx: 111.64
--------------------------------------------------------------------------------
ANÁLISE POR INTERSEÇÃO
--------------------------------------------------------------------------------
--- Cr1 ---
Tamanho Máximo da Fila:
Média: 0.50 Desvio Padrão: 1.08
Mediana: 0.00 IC 95%: [-0.38, 1.38]
Mín: 0.00 Máx: 3.00
Tamanho Médio da Fila:
Média: 0.50 Desvio Padrão: 1.08
Mediana: 0.00 IC 95%: [-0.38, 1.38]
Mín: 0.00 Máx: 3.00
Veículos Processados:
Média: 290.40 Desvio Padrão: 33.98
Mediana: 300.50 IC 95%: [262.77, 318.03]
Mín: 224.00 Máx: 337.00
--- Cr2 ---
Tamanho Máximo da Fila:
Média: 2.80 Desvio Padrão: 5.47
Mediana: 0.00 IC 95%: [-1.65, 7.25]
Mín: 0.00 Máx: 15.00
Tamanho Médio da Fila:
Média: 2.80 Desvio Padrão: 5.47
Mediana: 0.00 IC 95%: [-1.65, 7.25]
Mín: 0.00 Máx: 15.00
Veículos Processados:
Média: 281.70 Desvio Padrão: 23.73
Mediana: 284.50 IC 95%: [262.41, 300.99]
Mín: 245.00 Máx: 323.00
--- Cr3 ---
Tamanho Máximo da Fila:
Média: 0.30 Desvio Padrão: 0.48
Mediana: 0.00 IC 95%: [-0.09, 0.69]
Mín: 0.00 Máx: 1.00
Tamanho Médio da Fila:
Média: 0.30 Desvio Padrão: 0.48
Mediana: 0.00 IC 95%: [-0.09, 0.69]
Mín: 0.00 Máx: 1.00
Veículos Processados:
Média: 277.30 Desvio Padrão: 27.14
Mediana: 280.50 IC 95%: [255.24, 299.36]
Mín: 220.00 Máx: 314.00
--- Cr4 ---
Tamanho Máximo da Fila:
Média: 1.60 Desvio Padrão: 1.07
Mediana: 2.00 IC 95%: [0.73, 2.47]
Mín: 0.00 Máx: 3.00
Tamanho Médio da Fila:
Média: 1.60 Desvio Padrão: 1.07
Mediana: 2.00 IC 95%: [0.73, 2.47]
Mín: 0.00 Máx: 3.00
Veículos Processados:
Média: 272.80 Desvio Padrão: 31.86
Mediana: 274.50 IC 95%: [246.90, 298.70]
Mín: 204.00 Máx: 324.00
--- Cr5 ---
Tamanho Máximo da Fila:
Média: 2.70 Desvio Padrão: 2.45
Mediana: 2.00 IC 95%: [0.71, 4.69]
Mín: 0.00 Máx: 8.00
Tamanho Médio da Fila:
Média: 2.70 Desvio Padrão: 2.45
Mediana: 2.00 IC 95%: [0.71, 4.69]
Mín: 0.00 Máx: 8.00
Veículos Processados:
Média: 532.80 Desvio Padrão: 56.13
Mediana: 538.00 IC 95%: [487.17, 578.43]
Mín: 407.00 Máx: 615.00
--- ExitNode ---
Tamanho Máximo da Fila: Sem dados
Tamanho Médio da Fila: Sem dados
Veículos Processados:
Média: 783.10 Desvio Padrão: 113.98
Mediana: 819.50 IC 95%: [690.43, 875.77]
Mín: 577.00 Máx: 901.00
--------------------------------------------------------------------------------
RESUMOS INDIVIDUAIS DAS EXECUÇÕES
--------------------------------------------------------------------------------
Execução #1 [simulation-medium.properties]:
Gerados: 923, Completados: 887 (96.1%)
Tempo Médio no Sistema: 100.39s
Tempo Médio de Espera: 96.03s
Execução #2 [simulation-medium.properties]:
Gerados: 858, Completados: 577 (67.2%)
Tempo Médio no Sistema: 98.33s
Tempo Médio de Espera: 94.50s
Execução #3 [simulation-medium.properties]:
Gerados: 873, Completados: 832 (95.3%)
Tempo Médio no Sistema: 101.24s
Tempo Médio de Espera: 96.81s
Execução #4 [simulation-medium.properties]:
Gerados: 898, Completados: 844 (94.0%)
Tempo Médio no Sistema: 95.70s
Tempo Médio de Espera: 91.31s
Execução #5 [simulation-medium.properties]:
Gerados: 862, Completados: 697 (80.9%)
Tempo Médio no Sistema: 91.12s
Tempo Médio de Espera: 87.17s
Execução #6 [simulation-medium.properties]:
Gerados: 881, Completados: 785 (89.1%)
Tempo Médio no Sistema: 120.88s
Tempo Médio de Espera: 116.38s
Execução #7 [simulation-medium.properties]:
Gerados: 948, Completados: 901 (95.0%)
Tempo Médio no Sistema: 99.22s
Tempo Médio de Espera: 94.72s
Execução #8 [simulation-medium.properties]:
Gerados: 873, Completados: 621 (71.1%)
Tempo Médio no Sistema: 97.97s
Tempo Médio de Espera: 93.93s
Execução #9 [simulation-medium.properties]:
Gerados: 848, Completados: 807 (95.2%)
Tempo Médio no Sistema: 94.44s
Tempo Médio de Espera: 90.15s
Execução #10 [simulation-medium.properties]:
Gerados: 927, Completados: 880 (94.9%)
Tempo Médio no Sistema: 103.89s
Tempo Médio de Espera: 99.48s
================================================================================
FIM DO RELATÓRIO
================================================================================

365
main/graphing_all.py Normal file
View File

@@ -0,0 +1,365 @@
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"Aviso: Nenhum ficheiro encontrado com o padrão '{pattern}'")
return None
# Sort by modification time, get the latest
latest_file = max(files, key=os.path.getmtime)
print(f"A carregar: {latest_file}")
return pd.read_csv(latest_file)
print("="*60)
print("ANÁLISE COMPLETA DE SIMULAÇÃO")
print("="*60)
# Carregar todos os dados
print("\nA procurar ficheiros de análise...")
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("\nErro: Ficheiros de análise em falta!")
print("Por favor execute a análise batch primeiro.")
exit(1)
# 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 low.columns else 'Execução'
print(f"\nColunas disponíveis: {low.columns.tolist()}")
# ==============================================================================
# GRÁFICOS COMPARATIVOS (entre cargas)
# ==============================================================================
print("\n" + "="*60)
print("A GERAR GRÁFICOS COMPARATIVOS")
print("="*60)
# 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(['Baixa', 'Média', 'Alta'], dwelling_times, color=['green', 'orange', 'red'])
plt.ylabel('Tempo Médio no Sistema (s)')
plt.title('Desempenho do Sistema vs Carga')
plt.xlabel('Cenário de Carga')
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("Gráfico guardado: 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(['Baixa', 'Média', 'Alta'], completion_rates, color=['green', 'orange', 'red'])
plt.ylabel('Taxa de Conclusão (%)')
plt.title('Taxa de Conclusão de Veículos vs Carga')
plt.xlabel('Cenário de Carga')
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("Gráfico guardado: 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(['Baixa', 'Média', 'Alta'], waiting_times, color=['green', 'orange', 'red'])
plt.ylabel('Tempo Médio de Espera (s)')
plt.title('Tempo Médio de Espera vs Carga')
plt.xlabel('Cenário de Carga')
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("Gráfico guardado: graphs/waiting_time_comparison.png")
plt.close()
# 4. Gráfico: Summary Statistics (comparativo)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(14, 10))
loads = ['Baixa', 'Média', 'Alta']
# Vehicles generated
ax1.bar(loads, [low['VeículosGerados'].mean(), medium['VeículosGerados'].mean(), high['VeículosGerados'].mean()], color=['green', 'orange', 'red'])
ax1.set_title('Veículos Gerados')
ax1.set_ylabel('Quantidade')
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('Veículos Concluídos')
ax2.set_ylabel('Quantidade')
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='Mín', 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='Máx', color='darkblue')
ax3.set_title('Tempo no Sistema Mín/Máx')
ax3.set_ylabel('Tempo (s)')
ax3.set_xticks(x)
ax3.set_xticklabels(loads)
ax3.legend()
ax3.grid(axis='y', alpha=0.3)
# Performance summary
metrics = ['Tempo no\nSistema', 'Tempo de\nEspera', 'Taxa de\nConclusão']
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='Baixa', color='green')
ax4.bar(x, med_vals, width, label='Média', color='orange')
ax4.bar([i + width for i in x], high_vals, width, label='Alta', color='red')
ax4.set_title('Resumo de Desempenho')
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("Gráfico guardado: graphs/summary_statistics.png")
plt.close()
# ==============================================================================
# GRÁFICOS INDIVIDUAIS POR CARGA
# ==============================================================================
def generate_individual_graphs(data, load_type, load_name, color):
"""Generate detailed graphs for a specific load type"""
print(f"\n{'='*60}")
print(f"A GERAR GRÁFICOS - CARGA {load_name.upper()}")
print("="*60)
# 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('Número da Execução')
plt.title(f'Tempo no Sistema por Execução - Carga {load_name}')
plt.grid(alpha=0.3)
plt.legend(['Média', 'Intervalo Min-Max'])
plt.savefig(f'graphs/{load_type.lower()}_dwelling_time_runs.png', dpi=300, bbox_inches='tight')
print(f"Gráfico guardado: 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('Número da Execução')
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"Gráfico guardado: 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('Número da Execução')
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"Gráfico guardado: 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('Número da Execução')
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"Gráfico guardado: 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()
]
# Create bars individually with different alpha values
alphas = [0.5, 0.7, 0.9]
for i, (metric, value, alpha_val) in enumerate(zip(summary_metrics, summary_values, alphas)):
ax4.bar(i, value, color=color, alpha=alpha_val)
ax4.set_xticks(range(len(summary_metrics)))
ax4.set_xticklabels(summary_metrics)
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"Gráfico guardado: graphs/{load_type.lower()}_summary_statistics.png")
plt.close()
# Print detailed summary statistics
print(f"\n{'='*60}")
print(f"CARGA {load_name.upper()} - ESTATÍSTICAS DETALHADAS")
print("="*60)
print(f"\nTEMPO NO SISTEMA:")
print(f" Média: {data['TempoMédioSistema'].mean():.2f}s")
print(f" Desvio Padrão: {data['TempoMédioSistema'].std():.2f}s")
print(f" Mínimo: {data['TempoMínimoSistema'].min():.2f}s")
print(f" Máximo: {data['TempoMáximoSistema'].max():.2f}s")
print(f" Mediana: {data['TempoMédioSistema'].median():.2f}s")
print(f"\nTEMPO DE ESPERA:")
print(f" Média: {data['TempoMédioEspera'].mean():.2f}s")
print(f" Desvio Padrão: {data['TempoMédioEspera'].std():.2f}s")
print(f" Mínimo: {data['TempoMédioEspera'].min():.2f}s")
print(f" Máximo: {data['TempoMédioEspera'].max():.2f}s")
print(f" Mediana: {data['TempoMédioEspera'].median():.2f}s")
print(f"\nTAXA DE CONCLUSÃO:")
print(f" Média: {data['TaxaConclusão'].mean():.2f}%")
print(f" Desvio Padrão: {data['TaxaConclusão'].std():.2f}%")
print(f" Mínimo: {data['TaxaConclusão'].min():.2f}%")
print(f" Máximo: {data['TaxaConclusão'].max():.2f}%")
print(f" Mediana: {data['TaxaConclusão'].median():.2f}%")
print(f"\nCONTAGEM DE VEÍCULOS:")
print(f" Média Gerados: {data['VeículosGerados'].mean():.0f}")
print(f" Média Concluídos: {data['VeículosCompletados'].mean():.0f}")
print(f" Média Perdidos: {data['VeículosGerados'].mean() - data['VeículosCompletados'].mean():.0f}")
print(f"\nEXECUÇÕES ANALISADAS: {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"FICHEIRO DE CONFIGURAÇÃO: {data[config_col].iloc[0]}")
# Generate individual graphs for each load
generate_individual_graphs(low, 'LOW', 'Baixa', 'green')
generate_individual_graphs(medium, 'MEDIUM', 'Média', 'orange')
generate_individual_graphs(high, 'HIGH', 'Alta', 'red')
# ==============================================================================
# SUMÁRIO FINAL
# ==============================================================================
print("\n" + "="*60)
print("SUMÁRIO COMPARATIVO FINAL")
print("="*60)
print(f"\nCARGA BAIXA:")
print(f" Tempo Médio no Sistema: {low['TempoMédioSistema'].mean():.2f}s")
print(f" Tempo Médio de Espera: {low['TempoMédioEspera'].mean():.2f}s")
print(f" Taxa de Conclusão: {low['TaxaConclusão'].mean():.1f}%")
print(f" Veículos Gerados: {low['VeículosGerados'].mean():.0f}")
print(f" Veículos Concluídos: {low['VeículosCompletados'].mean():.0f}")
print(f"\nCARGA MÉDIA:")
print(f" Tempo Médio no Sistema: {medium['TempoMédioSistema'].mean():.2f}s")
print(f" Tempo Médio de Espera: {medium['TempoMédioEspera'].mean():.2f}s")
print(f" Taxa de Conclusão: {medium['TaxaConclusão'].mean():.1f}%")
print(f" Veículos Gerados: {medium['VeículosGerados'].mean():.0f}")
print(f" Veículos Concluídos: {medium['VeículosCompletados'].mean():.0f}")
print(f"\nCARGA ALTA:")
print(f" Tempo Médio no Sistema: {high['TempoMédioSistema'].mean():.2f}s")
print(f" Tempo Médio de Espera: {high['TempoMédioEspera'].mean():.2f}s")
print(f" Taxa de Conclusão: {high['TaxaConclusão'].mean():.1f}%")
print(f" Veículos Gerados: {high['VeículosGerados'].mean():.0f}")
print(f" Veículos Concluídos: {high['VeículosCompletados'].mean():.0f}")
print("\n" + "="*60)
print("ANÁLISE COMPLETA!")
print(f"Total de gráficos gerados: 19")
print("Todos os gráficos foram guardados no diretório 'graphs/'")
print("="*60)

222
main/graphing_single.py Normal file
View File

@@ -0,0 +1,222 @@
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()
]
# Create bars individually with different alpha values
alphas = [0.5, 0.7, 0.9]
for i, (metric, value, alpha_val) in enumerate(zip(summary_metrics, summary_values, alphas)):
ax4.bar(i, value, color=color, alpha=alpha_val)
ax4.set_xticks(range(len(summary_metrics)))
ax4.set_xticklabels(summary_metrics)
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.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View File

@@ -83,6 +83,19 @@
</execution>
</executions>
</plugin>
<!-- Maven Javadoc Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.12.0</version>
<configuration>
<source>17</source>
<encoding>UTF-8</encoding>
<doclint>none</doclint>
<failOnError>false</failOnError>
<failOnWarnings>false</failOnWarnings>
</configuration>
</plugin>
</plugins>
</build>

View File

@@ -3,6 +3,7 @@ package sd.coordinator;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.LockSupport;
import sd.config.SimulationConfig;
import sd.dashboard.DashboardStatistics;
@@ -375,6 +376,7 @@ public class CoordinatorProcess {
String entryIntersection = vehicle.getRoute().get(0);
sendVehicleToIntersection(vehicle, entryIntersection);
LockSupport.parkNanos(100000); // 100us
}
/**

View File

@@ -11,6 +11,7 @@ import java.net.Socket;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
import sd.serialization.MessageSerializer;
import sd.serialization.SerializationException;
@@ -167,7 +168,8 @@ public class SocketConnection implements Closeable {
DataOutputStream dataOut = new DataOutputStream(outputStream);
dataOut.writeInt(data.length);
dataOut.write(data);
dataOut.flush(); // Force transmission immediately
dataOut.flush();
LockSupport.parkNanos(50000); // 50us
} catch (SerializationException e) {
throw new IOException("Failed to serialize message", e);
@@ -202,6 +204,7 @@ public class SocketConnection implements Closeable {
// Ler dados exatos da mensagem
byte[] data = new byte[length];
dataIn.readFully(data);
LockSupport.parkNanos(50000); // 50us
// Deserialize do JSON - força o tipo concreto Message
return serializer.deserialize(data, sd.model.Message.class);

186
report.tex Normal file
View File

@@ -0,0 +1,186 @@
\documentclass[a4paper,11pt]{article}
% codificação
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
% layout
\usepackage[top=2.5cm, bottom=2.5cm, left=2.5cm, right=2.5cm]{geometry}
\usepackage{parskip} % Espaçamento entre parágrafos sem indentação
\usepackage{titlesec} % Personalização de títulos
% cor/estilo
\usepackage{xcolor}
\definecolor{navyblue}{RGB}{0, 40, 85}
\definecolor{codegray}{rgb}{0.95,0.95,0.95}
\definecolor{accent}{RGB}{0, 100, 180}
\usepackage{hyperref}
\hypersetup{
pdftitle={Relatório de Correção de Regressão de Desempenho em Linux},
pdfauthor={Leandro Afonso},
pdfsubject={Análise Técnica},
pdfkeywords={Linux, Java, Latency, Syscall, Optimization},
pdfcreator={pdfLaTeX}
}
% data
\renewcommand{\today}{%
\number\day\ de %
\ifcase\month\or
Janeiro\or Fevereiro\or Março\or Abril\or Maio\or Junho\or
Julho\or Agosto\or Setembro\or Outubro\or Novembro\or Dezembro%
\fi
\ de \number\year%
}
% tabelas
\usepackage{booktabs}
\usepackage{array}
% conf
\usepackage{listings}
\lstset{
backgroundcolor=\color{codegray},
basicstyle=\ttfamily\small,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
commentstyle=\color{green!50!black},
keywordstyle=\color{blue},
stringstyle=\color{red},
frame=single,
rulecolor=\color{black!20},
numbers=left,
numberstyle=\tiny\color{gray},
stepnumber=1,
tabsize=4,
showstringspaces=false
extendedchars=true,
literate={á}{{\'a}}1 {ã}{{\~a}}1 {é}{{\'e}}1 {ç}{{\c{c}}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {õ}{{\~o}}1 {ú}{{\'u}}1 {µ}{{\ensuremath{\mu}}}1 {}{{\euro}}1,
}
% seccões
\titleformat{\section}
{\color{navyblue}\normalfont\Large\bfseries}
{\thesection}{1em}{}
\titleformat{\subsection}
{\color{navyblue}\normalfont\large\bfseries}
{\thesubsection}{1em}{}
% metadados
\title{\textbf{\color{navyblue}Relatório de Correção de Regressão de Desempenho em Linux}}
\author{Leandro Afonso}
\date{\today}
\begin{document}
\maketitle
\section{Resumo do Problema}
A simulação distribuída de tráfego demonstrou uma regressão significativa de desempenho em ambiente Linux nativo quando comparada com a execução em Windows/Wine.
A tabela abaixo ilustra a discrepância nas taxas de conclusão de veículos dentro da janela de simulação fixa:
\begin{table}[h]
\centering
\begin{tabular}{@{}lc@{}}
\toprule
\textbf{Ambiente} & \textbf{Taxa de Conclusão} \\
\midrule
Windows / Wine & $\sim 95-100\%$ \\
Linux (OpenJDK Nativo) & $\sim 44\%$ \\
Linux (com \texttt{strace}) & $\sim 91\%$ \\
\bottomrule
\end{tabular}
\caption{Comparação de desempenho por ambiente.}
\end{table}
O \textit{insight} crucial surgiu ao descobrir que a execução sob \texttt{strace} recuperava a taxa de conclusão para 91\%. O \texttt{strace} introduz \textit{overhead} em cada \textit{syscall}, o que, paradoxalmente, estabilizou o sistema ao forçar um abrandamento natural (\textit{throttling}).
\section{Causa Raiz}
\textbf{O Linux executa demasiado rápido.}
O Coordenador gera veículos a uma velocidade superior à capacidade de processamento das interseções distribuídas e da pilha de rede. Em Windows/Wine, o \textit{overhead} inerente à emulação e ao agendador do SO limita naturalmente a taxa de transferência do sistema.
Em Linux nativo, a execução mais célere provoca uma condição de corrida sistémica:
\begin{itemize}
\item A geração de veículos excede a capacidade de processamento imediato dos nós.
\item As filas de eventos congestionam (\textit{back up}) rapidamente nas interseções.
\item Veículos gerados tardiamente não dispõem de tempo de CPU suficiente para concluir o percurso antes do fim da simulação.
\end{itemize}
\section{Solução Implementada}
A correção consistiu na introdução de micro-atrasos (\textit{micro-throttles}) utilizando \texttt{LockSupport.parkNanos()}. Esta abordagem simula o \textit{overhead} natural presente no ambiente Windows, permitindo o escoamento das filas de E/S.
\subsection{Alterações no Código}
\textbf{1. Ficheiro: \texttt{SocketConnection.java}} \\
Adicionado um atraso de 50$\mu$s após operações de E/S para permitir o processamento da pilha TCP.
\begin{lstlisting}[language=Java, title={SocketConnection.java (Excerto)}]
// Em sendMessage() após o flush:
dataOut.flush();
LockSupport.parkNanos(50000); // 50 us delay
// Em receiveMessage() após readFully:
dataIn.readFully(data);
LockSupport.parkNanos(50000); // 50 us delay
\end{lstlisting}
\textbf{2. Ficheiro: \texttt{CoordinatorProcess.java}} \\
Adicionado um atraso de 100$\mu$s na geração de veículos para limitar a taxa de produção.
\begin{lstlisting}[language=Java, title={CoordinatorProcess.java (Excerto)}]
// Em generateAndSendVehicle():
sendVehicleToIntersection(vehicle, entryIntersection);
LockSupport.parkNanos(100000); // 100 us delay
\end{lstlisting}
\textbf{Nota: \textnormal{Em ambos os ficheiros deve ser importado java.util.concurrent.locks.LockSupport.}}
\section{Resultados e Validação}
A aplicação dos atrasos sintéticos restaurou a paridade de desempenho entre os sistemas operativos.
\begin{table}[h]
\centering
\begin{tabular}{@{}lcc@{}}
\toprule
\textbf{Ambiente} & \textbf{Antes da Correção} & \textbf{Após Correção} \\
\midrule
Linux Nativo & $\sim 44\%$ & $\mathbf{\sim 92\%}$ \\
\bottomrule
\end{tabular}
\end{table}
\subsection{Por que funciona?}
\begin{itemize}
\item \textbf{Precisão:} \texttt{LockSupport.parkNanos()} oferece um atraso preciso e não bloqueante, com impacto mínimo no agendador do SO, ao contrário de \texttt{Thread.sleep()}.
\item \textbf{Ritmo de E/S (50$\mu$s):} Abranda a comunicação via \textit{socket} o suficiente para evitar a saturação dos \textit{buffers} de receção das interseções.
\item \textbf{Controlo de Fluxo (100$\mu$s):} Limita a produção do Coordenador, garantindo que o sistema a jusante consegue processar os eventos em tempo útil.
\end{itemize}
\subsection{Verificação}
Para validar a correção no ambiente de desenvolvimento:
\begin{lstlisting}[language=bash]
mvn clean compile
mvn javafx:run
\end{lstlisting}
\textbf{Resultado Esperado:} Taxa de conclusão superior a 90\%.
\section{Abordagens Alternativas (Falhadas)}
As seguintes tentativas foram realizadas antes da solução final, sem sucesso:
\begin{itemize}
\item \textbf{Thread.sleep(1):} Demasiado impreciso (granularidade mínima de $\sim$1ms em Linux), causando atrasos excessivos.
\item \textbf{Thread.yield():} Sem efeito prático no agendador CFS do Linux neste contexto.
\item \textbf{Garbage Collectors:} A alteração entre G1, Parallel e Shenandoah não surtiu efeito.
\item \textbf{Versão Java:} Testes com Java 17 e 25 mostraram o mesmo comportamento.
\item \textbf{Prioridade de Threads:} Ajustes de prioridade na JVM foram ignorados pelo SO.
\end{itemize}
\end{document}