Asignatura: Grafos y Lenguajes Formales Universidad: Universidad Tecnológica Metropolitana Autor: Naicriz (isalazarjara@gmail.com) Versión: 1.0.0 Fecha: Junio 2025
Este proyecto implementa un autómata celular continuo que simula el comportamiento de organismos tipo slime mold (moho mucilaginoso). El sistema está diseñado con optimizaciones extremas para manejar grillas de hasta 1,000 x 1,000 células con renderizado en tiempo real a 60 FPS.
- Implementar un autómata celular para la asignatura de Grafos y Lenguajes Formales
- Demostrar comportamientos emergentes complejos a partir de reglas simples
- Crear una herramienta interactiva
- Clasificación: Autómata Celular Continuo Bidimensional
- Dimensionalidad: 2D (grilla cuadrada de 1000×1000)
- Topología: Toroidal (bordes conectados - modo "wrap")
- Estados: Valores continuos en el rango [0.0, 1.0]
- Vecindario: Moore de radio 1 (8 vecinos + célula central)
- Temporalidad: Síncrono (actualización simultánea)
El autómata utiliza una función de activación sigmoidea invertida:
f(x) = -1/(0.89 * x² + 1) + 1
Aplicada después de una convolución con kernel:
kernel = [[ 0.8, -0.85, 0.8],
[-0.85, -0.2, -0.85],
[ 0.8, -0.85, 0.8]]- 0.0 - 0.15: Ausencia de organismo (negro/marrón oscuro)
- 0.15 - 0.35: Sustrato nutritivo (marrón anaranjado)
- 0.35 - 0.55: Organismo débil (naranja medio)
- 0.55 - 0.75: Organismo activo (amarillo anaranjado)
- 0.75 - 0.9: Organismo muy activo (amarillo brillante)
- 0.9 - 1.0: Núcleo incandescente (amarillo-blanco)
- Python: 3.13+
- Sistema Operativo: macOS, Linux, Windows
- Memoria RAM: 8GB+ recomendado
- CPU: Multi-core recomendado
pygame>=2.6.1 # Renderizado y interfaz gráfica
numpy>=2.1.0 # Operaciones numéricas
scipy>=1.15.3 # Convolución optimizada
numba>=0.61.2 # Compilación JIT# 1. Clonar el repositorio
git clone [URL_DEL_REPOSITORIO]
cd Cellular-Automata-slimemold
# 2. Instalar Poetry (si no lo tienes)
curl -sSL https://install.python-poetry.org | python3 -
# 3. Instalar dependencias
poetry install
# 4. Ejecutar la simulación
poetry run python app/main.py# 1. Crear entorno virtual
python3.13 -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
# 2. Instalar dependencias
pip install -r requirements.txt
# 3. Ejecutar simulación
python app/main.pySi usas VS Code, puedes ejecutar las tareas predefinidas:
Ctrl+Shift+P→ "Run Task" → "Run Slime Mold Simulation"
| Tecla | Función |
|---|---|
SPACE |
⏸️/ |
| Tecla | Función |
|---|---|
M |
📈 Mejor calidad de renderizado (menos FPS) |
- Speedup: 10-50x en funciones críticas
- Paralelización: Uso automático de múltiples cores
- Cache: Evita recompilación de funciones
- SciPy: Convolución optimizada en C
- NumPy: Operaciones sobre arrays completos
- In-place: Operaciones sin allocación extra de memoria
- Surface Caching: Reutilización inteligente de superficies
- Frame Skipping: Saltar frames para mantener FPS
- Render Scaling: Renderizado adaptativo (1:1 hasta 1:8)
- Double Buffering: Prevención de flickering
- Sin efectos: 60+ FPS estables
- Con brillo: 45-60 FPS
- Con partículas: 30-45 FPS
- Render scale 1:2: 45+ FPS
- Render scale 1:4: 60+ FPS
- Frame skip 2: Mejora significativa
- Expansión desde puntos de alta concentración
- Velocidad: ~1-2 células por generación
- Mecanismo: Función de activación favorece expansión
- Conexión entre múltiples focos de actividad
- Topología similar a grafos planares
- Optimización natural de caminos
- División de ramas principales en secundarias
- Ángulos predominantes: 45° y 90°
- Inestabilidades locales amplifican perturbaciones
- Múltiples organismos compiten por espacio
- Fronteras definidas y territorios estables
- Dinámica similar a diagramas de Voronoi
# Ejemplos de métricas implementables
def analyze_system(grid):
density = np.mean(grid) # Densidad total
activity = np.mean(grid[grid > 0.5]) # Actividad promedio
components = count_connected_components(grid > 0.3) # Componentes
entropy = spatial_entropy(grid) # Entropía espacial
return density, activity, components, entropyCellular-Automata-slimemold/
├── app/
│ ├── __init__.py
│ └── main.py # Código principal del autómata
├── .vscode/
│ └── tasks.json # Tareas de desarrollo
├── pyproject.toml # Configuración Poetry
├── poetry.lock # Lock de dependencias
├── requirements.txt # Dependencias pip
├── README.md # Este archivo
└── .gitignore # Archivos ignorados por Git
- Configura tu información de Git (solo la primera vez):
git config --global user.name "Tu Nombre"
git config --global user.email "tu.email@ejemplo.com"Usamos la siguiente convención para nombrar branches:
# Para nuevas funcionalidades
git checkout -b funcionalidad/nombre-de-la-funcionalidad
# Para corrección de errores
git checkout -b correccion/descripcion-del-error
# Para mejoras
git checkout -b mejora/descripcion-de-la-mejora
# Para documentación
git checkout -b docs/descripcion-de-la-documentacion
# Ejemplos:
git checkout -b funcionalidad/login-sistema
git checkout -b correccion/error-formulario-contacto
git checkout -b mejora/optimizar-rendimiento
git checkout -b docs/actualizar-readme# Asegúrate de estar en la rama correcta
git checkout core
git pull origin core
# Crea tu nueva rama
git checkout -b funcionalidad/mi-nueva-funcionalidad# Agregar archivos específicos
git add archivo1.tsx archivo2.ts
# O agregar todos los cambios
git add .
# Commit con mensaje descriptivo
git commit -m "tipo: descripción clara de los cambios"Usamos la siguiente estructura:
tipo: descripción breve
[descripción más detallada si es necesaria]
Tipos de commit:
nuevo:Nueva funcionalidadcorrige:Corrección de erroresdocs:Cambios en documentaciónestilo:Cambios de formato (espacios, comas, etc.)refactor:Refactorización de códigotest:Agregar o modificar testsconfig:Cambios en build, dependencias, etc.
Ejemplos:
git commit -m "nueva: agregar formulario de login"
git commit -m "corrige: corregir validación de email en registro"
git commit -m "docs: actualizar README con instrucciones"
git commit -m "estilo: formatear código con prettier"
git commit -m "refactor: reorganizar componentes de usuario"
git commit -m "test: agregar pruebas para formulario"
git commit -m "config: actualizar dependencias de desarrollo"# Primera vez que subes la rama
git push -u origin funcionalidad/mi-nueva-funcionalidad
# Siguientes pushes
git push# Actualizar main(core) local
git checkout core
git pull origin core
# Volver a tu rama y rebasear
git checkout funcionalidad/mi-nueva-funcionalidad
git rebase core
# Si hay conflictos, resolverlos y continuar
git add .
git rebase --continue
# Subir cambios actualizados
git push --force-with-lease- Ve al repositorio en GitHub
- Crea un Pull Request desde tu rama hacia
core - Describe los cambios realizados
- Solicita revisión del equipo
- Espera aprobación antes de hacer merge
# Ver estado de archivos
git status
# Ver historial de commits
git log --oneline
# Ver diferencias
git diff
# Cambiar de rama
git checkout nombre-de-rama
# Ver todas las ramas
git branch -a
# Eliminar rama local (después del merge)
git branch -d funcionalidad/mi-funcionalidad
# Eliminar rama remota
git push origin --delete funcionalidad/mi-funcionalidad- Nunca hacer push directo a
core - Siempre crear Pull Request para revisión
- Escribir commits descriptivos
- Mantener las ramas actualizadas con
core - Eliminar ramas después del merge
- Comunicar cambios importantes al equipo
- Usa mensajes de commit claros y descriptivos
- Comenta tu código cuando sea necesario
- Documenta funcionalidades nuevas
- Reporta errores o problemas en GitHub Issues
# Modificar el kernel en app/main.py línea 79-83
# Observar cambios en comportamiento# Implementar análisis de grafos sobre el patrón emergente
def analyze_connectivity(grid, threshold=0.5):
binary_grid = grid > threshold
# Aplicar algoritmos de teoría de grafos# Medir tiempo hasta estabilización
def convergence_analysis(initial_state):
# Calcular métricas de estabilidad temporal- Tamaño de grilla: 100×100, 500×500, 1000×1000
- Kernels alternativos: Diffusion, Edge detection, Custom
- Von Neumann, J. (1966). "Theory of Self-Reproducing Automata"
- Wolfram, S. (2002). "A New Kind of Science"
- Toffoli, T. & Margolus, N. (1987). "Cellular Automata Machines"
- Nakagaki, T. (2000). "Intelligence: Maze-solving by an amoeboid organism"
- Adamatzky, A. (2010). "Physarum Machines: Computers from Slime Mould"
- Tero, A. (2010). "Rules for biologically inspired adaptive network design"
- Murray, J.D. (2003). "Mathematical Biology"
- Cross, M.C. & Hohenberg, P.C. (1993). "Pattern formation outside of equilibrium"
- ✅ Implementación de autómatas celulares avanzados
- ✅ Análisis de sistemas dinámicos discretos
- ✅ Aplicación de teoría de grafos a sistemas emergentes
- ✅ Comprensión de lenguajes formales en contexto biológico
- ✅ Optimización computacional avanzada
- ✅ Programación orientada a objetos
- ✅ Visualización de datos científicos
- ✅ Gestión de proyectos con Git
- ✅ Modelado de sistemas complejos
- ✅ Análisis de emergencia y auto-organización
- ✅ Diseño de algoritmos eficientes
- ✅ Validación experimental de modelos
Este proyecto está bajo la Licencia MIT. Ver archivo MIT para más detalles.
Proyecto desarrollado como parte del curso de Grafos y Lenguajes Formales - Junio 2025