Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 09e23f8f6a | |||
| 87f797987b | |||
| daaad57c08 | |||
| 1d748e0204 | |||
| 343d31ad68 | |||
| 92bd738266 | |||
| 9fa0586bc5 | |||
| a68862b98e | |||
|
|
a4b64e1d95 | ||
|
|
e171804ac6 | ||
| 6376e94c84 | |||
| a591dcfc52 | |||
| 903022719e |
@@ -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="<b>CoordinatorProcess</b><br>(Cliente Socket)<hr>• VehicleGenerator<br>• Modelo Poisson (λ=0.5)<br>• 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="<b>Cr1</b> (IntersectionProcess)<br>Porta: 8001<br>Servidor + Cliente<hr>• ServerSocket (8001)<br>• Thread Semáforo Sul<br>• Thread Semáforo Este<br>• Thread Semáforo Oeste<br>• Fila Eventos (DES)<br>• 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="<b>Cr2</b> (IntersectionProcess)<br>Porta: 8002<br>Servidor + Cliente<hr>• ServerSocket (8002)<br>• Thread Semáforo Sul<br>• Thread Semáforo Este<br>• Thread Semáforo Oeste<br>• Fila Eventos (DES)<br>• 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="<b>Cr4</b> (IntersectionProcess)<br>Porta: 8004<br>Servidor + Cliente<hr>• ServerSocket (8004)<br>• Thread Semáforo Sul<br>• Thread Semáforo Este<br>• Thread Semáforo Oeste<br>• Fila Eventos (DES)<br>• 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="<b>Cr5</b> (IntersectionProcess)<br>Porta: 8005<br>Servidor + Cliente<hr>• ServerSocket (8005)<br>• Thread Semáforo Sul<br>• Thread Semáforo Este<br>• Thread Semáforo Oeste<br>• Fila Eventos (DES)<br>• 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="<b>ExitNode (S)</b><br>Porta: 9001<br>Servidor Socket<hr>• Recebe veículos finais<br>• Calcula estatísticas:<br> - Tempo no sistema<br> - Tempo de espera<br> - Métricas por tipo<br>• 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="<b>DashboardServer</b><br>Porta: 9000<br>Servidor Socket<hr>• Thread Pool (10 threads)<br>• ConcurrentHashMap<br>• Agrega estatísticas<br>• Display a cada 5s:<br> - Throughput<br> - Tempos médios<br> - 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<br>(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<br>(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<br>(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<br>(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<br>(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<br>(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<br>(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<br>(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<br>(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="<b>MessageProtocol</b><hr>interface:<br>• getType()<br>• getPayload()<br>• getSourceNode()<br>• 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="<b>Tipos de Mensagens</b><hr>• VEHICLE_TRANSFER<br>• VEHICLE_SPAWN<br>• STATS_UPDATE<br>• TRAFFIC_LIGHT_SYNC<br>• 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="<b>Cr3</b> (IntersectionProcess)<br>Porta: 8003<br>Servidor + Cliente<hr>• ServerSocket (8003)<br>• Thread Semáforo Sul<br>• Thread Semáforo Este<br>• Thread Semáforo Oeste<br>• Fila Eventos (DES)<br>• 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="<b>LEGENDA</b><hr>━━━► Comunicação síncrona<br>╌╌╌► Comunicação periódica<br><br><b>Cores:</b><br>🔵 Azul = Geração<br>🟢 Verde = Transferência<br>🟠 Laranja = Finalização<br>🟣 Roxo = Monitorização<br><br><b>Serialização:</b> JSON (Gson)<br><b>Protocolo:</b> 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
@@ -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
@@ -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="<b>MessageProtocol</b><hr>interface:<br>• getType()<br>• getPayload()<br>• getSourceNode()<br>• 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="<b>Tipos de Mensagens</b><hr>• VEHICLE_TRANSFER<br>• VEHICLE_SPAWN<br>• STATS_UPDATE<br>• TRAFFIC_LIGHT_SYNC<br>• 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="<b>LEGENDA</b><hr>━━━► Comunicação síncrona<br>╌╌╌► Comunicação periódica<br><br><b>Cores:</b><br>🔵 Azul =&nbsp;<span style="background-color: transparent;">Criação do veículo</span><div>🟢 Verde = Transferência do veículo<br>🟠 Laranja = Chegada ao destino<br>🟣 Roxo =&nbsp;<span style="background-color: transparent;">Envio das estatísticas</span></div><div><br><b>Serialização:</b> JSON (Gson)<br><b>Protocolo:</b> TCP/IP</div>" 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="<b>CoordinatorProcess</b><br>(Cliente Socket)<hr>• VehicleGenerator<br>• Modelo Poisson<br>• 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="<b>Cr1</b> (IntersectionProcess)<br>Porta: 8001<br>Servidor + Cliente<hr>• ServerSocket (8001)<br>• Thread Semáforo - Sul<br>• Thread Semáforo - Este<br>• Fila Eventos (DES)<br>• 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="<b>Cr2</b> (IntersectionProcess)<br>Porta: 8002<br>Servidor + Cliente<hr>• ServerSocket (8002)<br>• Thread Semáforo - Sul<br>• Thread Semáforo - Este<br>• Thread Semáforo - Oeste<br>• Fila Eventos (DES)<br>• 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="<b>Cr4</b> (IntersectionProcess)<br>Porta: 8004<br>Servidor + Cliente<hr>• ServerSocket (8004)<br>• Thread Semáforo - Este<br>• Fila Eventos (DES)<br>• 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="<b>Cr5</b> (IntersectionProcess)<br>Porta: 8005<br>Servidor + Cliente<hr>• ServerSocket (8005)<br>• Thread Semáforo - Este<br>• Fila Eventos (DES)<br>• 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="<b>ExitNode (S)</b><br>Porta: 9001<br>Servidor Socket<hr>• Recebe veículos finais<br>• Calcula estatísticas:<br> - Tempo no sistema<br> - Tempo de espera<br> - Métricas por tipo<br>• 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="<b>DashboardServer</b><br>Porta: 9000<br>Servidor Socket<hr>• Thread Pool (10 threads)<br>• ConcurrentHashMap<br>• Agrega estatísticas<br>• Display a cada 5s:<br> - Throughput<br> - Tempos médios<br> - 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="<b>Cr3</b> (IntersectionProcess)<br>Porta: 8003<br>Servidor + Cliente<hr>• ServerSocket (8003)<br>• Thread Semáforo - Sul<br>• Thread Semáforo - Oeste<br>• Fila Eventos (DES)<br>• 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>
|
||||
|
Before Width: | Height: | Size: 161 KiB |
177
Diagrama de arquitetura.drawio
Normal 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="<b>MessageProtocol</b><hr>interface:<br>• getType()<br>• getPayload()<br>• getSourceNode()<br>• 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="<font style="color: rgb(0, 0, 0);"><b style="background-color: transparent;">Tipos de Mensagens</b><br></font><hr style="background-color: transparent;"><font style="color: rgb(0, 0, 0);"><span style="background-color: transparent;">• VEHICLE_TRANSFER</span><br><span style="background-color: transparent;">• VEHICLE_SPAWN</span><br><span style="background-color: transparent;">• STATS_UPDATE</span><br><span style="background-color: transparent;">•</span><span style="background-color: transparent;">&nbsp;</span><span style="background-color: transparent;">SIMULATION_START</span><br><span style="background-color: transparent;">•</span><span style="background-color: transparent;">&nbsp;</span><span style="background-color: transparent;">SHUTDOWN</span><br><span style="background-color: transparent;">•</span><span style="background-color: transparent;">&nbsp;</span><span style="background-color: transparent;">ROUTING_POLICY_CHANGE</span></font>" 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="<b>LEGENDA</b><hr>━━━► Comunicação síncrona<br>╌╌╌► Comunicação periódica<br><br><b>Cores:</b><br>🔵 Azul =&nbsp;<span style="background-color: transparent;">Criação do veículo</span><div>🟢 Verde = Transferência do veículo<br>🟠 Laranja = Chegada ao destino<br>🟣 Roxo =&nbsp;<span style="background-color: transparent;">Envio das estatísticas</span></div><div><br><b>Serialização:</b> JSON (Gson)<br><b>Protocolo:</b> TCP/IP</div>" 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="<b>CoordinatorProcess</b><br>(Cliente Socket)<hr>• VehicleGenerator<br>• Modelo Poisson<br>• 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="<b>Cr1</b> (IntersectionProcess)<br><hr><div>• ServerSocket (8001)</div><div>• Eventos DES:&nbsp;</div><div>&nbsp; &nbsp;- Este</div><div>&nbsp; &nbsp;- Sul</div><div>• Fila Eventos (DES)</div><div>• ReentrantLock</div><div><div>• Objetos TrafficLight</div><div>• Pool Threads (I/O rede)</div></div><div><br></div>" 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="<b>Cr2</b> (IntersectionProcess)<br><hr>• ServerSocket (8002)<br><div>• Eventos DES:&nbsp;</div><div>&nbsp; &nbsp;- Oeste</div><div>&nbsp; &nbsp;- Este</div><div>&nbsp; &nbsp;- Sul</div><div>• Fila Eventos (DES)</div><div>• ReentrantLock</div><div><div>• Objetos TrafficLight</div></div><div>• Pool Threads (I/O rede)</div>" 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="<b>Cr4</b> (IntersectionProcess)<br><hr><div>• ServerSocket (8004)</div><div><div>• Eventos DES:&nbsp;</div><div>&nbsp; &nbsp;- Este</div><div>&nbsp; &nbsp;- Norte</div><div>• Fila Eventos (DES)<br>• ReentrantLock</div></div><div><div>• Objetos TrafficLight</div><div>• Pool Threads (I/O rede)</div></div>" 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="<b>Cr5</b> (IntersectionProcess)<br><hr>• ServerSocket (8005)<br><div><div><div>• Eventos DES:&nbsp;</div><div>&nbsp; &nbsp;- Norte</div><div>&nbsp; &nbsp;- Este</div><div>&nbsp; &nbsp;- Sul</div>• Fila Eventos (DES)<br>• ReentrantLock</div><div><div>• Objetos TrafficLight</div><div>• Pool Threads (I/O rede)</div></div></div>" 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="<b>ExitNode (S)</b><div><hr><div>• Server Socket (9001)<br>• Recebe veículos finais<br>• Calcula estatísticas:<br> - Tempo no sistema<br> - Tempo de espera<br> - Métricas por tipo<br>• Envia para o Dashboard</div></div>" 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="<b>DashboardServer</b><hr>• Server Socket (9000)<br><div>• Thread Pool (10 threads)<br>• ConcurrentHashMap<br>• Agrega estatísticas<br>• Display a cada segundo:<br> - Throughput<br> - Tempos médios<br> - Tamanhos de filas</div>" 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="<b>Cr3</b> (IntersectionProcess)<div><hr></div><div>• ServerSocket (8003)<br><div>• Eventos DES:&nbsp;</div><div>&nbsp; &nbsp;- Oeste</div><div>&nbsp; &nbsp;- Sul</div><div>• Fila Eventos (DES)</div>• ReentrantLock</div><div><div>• Objetos TrafficLight</div></div><div>• Pool Threads (I/O rede)</div>" 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
|
After Width: | Height: | Size: 220 KiB |
54
README.md
Normal 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"
|
||||
```
|
||||
@@ -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}
|
||||
@@ -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,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
|
||||
================================================================================
|
||||
11
main/analysis/HIGH_LOAD_20251211-021618.csv
Normal 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
|
||||
|
240
main/analysis/HIGH_LOAD_20251211-021618.txt
Normal 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
|
||||
================================================================================
|
||||
@@ -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,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
|
||||
================================================================================
|
||||
@@ -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,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
|
||||
================================================================================
|
||||
11
main/analysis/LOW_LOAD_20251211-021249.csv
Normal 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
|
||||
|
240
main/analysis/LOW_LOAD_20251211-021249.txt
Normal 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
|
||||
================================================================================
|
||||
@@ -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,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
|
||||
================================================================================
|
||||
11
main/analysis/MEDIUM_LOAD_20251211-021429.csv
Normal 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
|
||||
|
240
main/analysis/MEDIUM_LOAD_20251211-021429.txt
Normal 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
@@ -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
@@ -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)
|
||||
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 92 KiB |
BIN
main/graphs/high_completion_rate_runs.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
main/graphs/high_dwelling_time_runs.png
Normal file
|
After Width: | Height: | Size: 140 KiB |
BIN
main/graphs/high_summary_statistics.png
Normal file
|
After Width: | Height: | Size: 274 KiB |
BIN
main/graphs/high_vehicles_comparison.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
main/graphs/high_waiting_time_runs.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
main/graphs/low_completion_rate_runs.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
main/graphs/low_dwelling_time_runs.png
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
main/graphs/low_summary_statistics.png
Normal file
|
After Width: | Height: | Size: 265 KiB |
BIN
main/graphs/low_vehicles_comparison.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
main/graphs/low_waiting_time_runs.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
main/graphs/medium_completion_rate_runs.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
main/graphs/medium_dwelling_time_runs.png
Normal file
|
After Width: | Height: | Size: 163 KiB |
BIN
main/graphs/medium_summary_statistics.png
Normal file
|
After Width: | Height: | Size: 254 KiB |
BIN
main/graphs/medium_vehicles_comparison.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
main/graphs/medium_waiting_time_runs.png
Normal file
|
After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 227 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 92 KiB |
13
main/pom.xml
@@ -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>
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
@@ -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}
|
||||