Skip to content

Commit 128cb9c

Browse files
committed
Añadido Archivo Readme.md e Imágenes
1 parent c297a2b commit 128cb9c

9 files changed

Lines changed: 149 additions & 1 deletion

File tree

README.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# 🌍 PaperPandemic: Simulador SIRD de Alto Rendimiento
2+
3+
![Python](https://img.shields.io/badge/Python-3.10%2B-blue?style=for-the-badge&logo=python)
4+
![Qt](https://img.shields.io/badge/Qt-PySide6-green?style=for-the-badge&logo=qt)
5+
![Pandas](https://img.shields.io/badge/Data-Pandas%20%7C%20Numpy-orange?style=for-the-badge&logo=pandas)
6+
![Architecture](https://img.shields.io/badge/Architecture-MVC-red?style=for-the-badge)
7+
8+
> **Simulador epidemiológico en tiempo real optimizado para hardware limitado (Intel Atom / Single Core).**
9+
10+
11+
12+
13+
Combina un motor matemático vectorizado con una interfaz gráfica reactiva de alta velocidad **( QT/C++ )**.
14+
15+
<p align="center">
16+
<img src="images/mapa.gif" alt"Demo del proyecto" width="600">
17+
</p>
18+
19+
20+
21+
---
22+
23+
## Sobre el Proyecto
24+
25+
**PaperPandemic** es un motor de simulación **SIRD (Susceptibles, Infectados, Recuperados, Fallecidos)** capaz de procesar la lógica de infección, logística (aeropuertos/puertos) y fronteras de **+200 países simultáneamente** sin congelar la interfaz de usuario.
26+
27+
El reto principal fue lograr opmitizar cientos de cálculos matemáticos complejos en un entorno de bajos recursos hasta alcanzar 60fps.
28+
29+
30+
31+
![Grafica de Pastel](images/pastel.gif)
32+
33+
34+
### Características Clave
35+
36+
37+
* **Motor Matemático Vectorizado:** Lógica SIRD implementada con `Numpy` y `Pandas` para operaciones matriciales ultrarrápidas
38+
39+
* **Arquitectura MVC:** Separación entre Lógica (`backend/`), Control (`controllers/`) y Vista (`ui/QML`).
40+
41+
* **Simulación Logística:** Algoritmos de grafos para simular contagios por rutas aéreas, marítimas y fronteras terrestres.
42+
43+
* **Persistencia de Datos:** Sistema de guardado/carga automático usando **SQLite** y exportación de reportes a **CSV**.
44+
45+
* **Interfaz Reactiva:** Dashboard construido en **Qt Quick (QML)** con renderizado por GPU.
46+
47+
48+
49+
50+
![Grafico de lineas](images/lineas.jpg)
51+
52+
---
53+
54+
55+
## 🔧 Optimización
56+
57+
Para garantizar la fluidez en hardware legacy, se implementaron las siguientes estrategias:
58+
59+
60+
1. **Cálculo Vectorial:** En lugar de iterar país por país, el estado del mundo se calcula como una matriz única.
61+
62+
63+
```python
64+
# Ejemplo del código (backend/sir_model.py)
65+
# Cálculo masivo instantáneo usando operaciones vectorizadas
66+
# df (Dataframe con datos del mundo)
67+
# beta: Probabilidad de que una persona pase de sano a infectado
68+
# df["S"]: Sanos
69+
# df["I"]: Infectados
70+
sano_a_infectado = self.df["beta"] * self.df["S"] * self.df["I"] / (self.df["poblacion"] + 1)
71+
self.df["S"] -= sano_a_infectado
72+
```
73+
74+
2. **Gestión de Memoria QML:** Uso de `Loader` dinámico para destruir componentes gráficos (como el mapa) cuando no están en pantalla, liberando RAM y CPU.
75+
3. **Señales y Slots:** Comunicación asíncrona entre Python y la UI para evitar bloqueos del hilo principal.
76+
77+
78+
---
79+
## 📂 Estructura del Proyecto
80+
81+
```text
82+
PaperPandemic/
83+
├── backend/ # Lógica y Modelos Matemáticos
84+
│ ├── engine.py # Orquestador de la simulación
85+
│ ├── sir_model.py # Algoritmos SIRD vectorizados
86+
│ └── data/ # Archivos SQLite y CSVs
87+
├── controllers/ # Puentes entre Python y QML (Signals/Slots)
88+
├── ui/ # Interfaz Gráfica (QML/C++)
89+
│ ├── components/ # Widgets reutilizables (Mapa, Gráficas)
90+
│ └── themes/ # Gestor de Temas (Dark, Neon, etc.)
91+
└── main.py # Archivo Principal
92+
93+
```
94+
95+
96+
![Temas](images/temas.jpg)
97+
98+
99+
100+
101+
## Instalación y Uso
102+
103+
104+
#### 1.Clonar el repositorio:
105+
106+
```
107+
Bash
108+
git clone [https://github.com/alejandroxyz/PaperPandemic.git](https://github.com/alejandroxyz/PaperPandemic.git)
109+
cd PaperPandemic
110+
```
111+
112+
#### 2. Instalar dependencias: Se recomienda usar un entorno virtual.
113+
114+
115+
```
116+
Bash
117+
pip install -r requirements.txt
118+
```
119+
120+
121+
#### 3. Ejecutar:
122+
123+
```
124+
Bash
125+
python main.py
126+
```
127+
128+
129+
130+
## 👤 Autor
131+
132+
Alejandro Moncada
133+
134+
[LinkedIn](https://www.linkedin.com/in/alejandroxyz/)
135+
136+
[GitHub](https://github.com/alejandroxyz)
137+
138+
[Gmail](mailto:alejandromdekuedit@gmail.com)
139+
140+
141+
---
142+

backend/data/mundo.db

12 KB
Binary file not shown.

controllers/mapa_modelo.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from path import rutas
12
from PySide6.QtCore import QAbstractListModel, Qt, Slot
23
import json
34
import os

images/lineas.jpg

66.2 KB
Loading

images/mapa.gif

862 KB
Loading

images/pastel.jpg

84.5 KB
Loading

images/temas.jpg

241 KB
Loading

requirements.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
numpy==2.4.1
2+
pandas==3.0.0
3+
PySide6==6.10.1
4+
PySide6_Addons==6.10.1
5+
PySide6_Essentials==6.10.1

ui/components/VistaGrafica.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ Item {
314314
color: "#dd1e1e2e"; radius: 5; border.color: "#555"
315315

316316
property int dia: 0
317-
property int s: 0; property int i: 0; property int r: 0; property int m: 0
317+
property real s: 0; property real i: 0; property real r: 0; property real m: 0
318318

319319
// Función auxiliar LOCAL al tooltip
320320
function format(n) { return Number(n).toLocaleString(Qt.locale(), 'f', 0); }

0 commit comments

Comments
 (0)