SPADE-Natural-Selection-Simulator GitHub Details, Stars and Alternatives | OpenRepoFinder
LiamQuinoNeff / repository
SPADE-Natural-Selection-Simulator
Simulación basada en agentes para estudiar selección natural y comportamiento emergente. Implementado en Python con agentes SPADE que se comunican por XMPP, genera datos de generación en CSV y proporciona una interfaz web interactiva 3D (Three.js) para visualización en tiempo real.
A transparent discovery signal based on current public GitHub metadata.
Recent activity35% weight
72
Community adoption25% weight
12
Maintenance state20% weight
100
License clarity10% weight
0
Project information10% weight
75
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
README preview
Simulación SPADE: Selección Natural con Comportamientos Emergentes
Introducción
Este proyecto implementa una simulación de selección natural y comportamientos emergentes utilizando agentes autónomos construidos con SPADE (Smart Python Agent Development Environment).
El sistema recrea un ecosistema donde múltiples criaturas operan de manera independiente con comportamientos complejos que incluyen:
Satisfacción basada en objetivos: Las criaturas buscan alimento hasta alcanzar un objetivo de comida consumida
Modo supervivencia: Cuando la energía cae por debajo del 35%, las criaturas reducen su objetivo de 2 a 1 alimento
Retorno al hogar: Una vez satisfechas, las criaturas regresan a su punto de spawn sin gastar energía
Movimiento sincronizado: Todas las criaturas inician su movimiento simultáneamente después de spawnearse
Distribución equidistante: Las criaturas nacen distribuidas uniformemente en el perímetro del mundo
La ejecución completa incluye:
Creación de agentes y del entorno
Ciclo de vida de cada generación con métricas de supervivencia
Visualización 3D en tiempo real mediante interfaz web con Three.js
Control de velocidad de simulación (0.25x - 2.0x)
Registro detallado de eventos y resultados en CSV
La arquitectura se basa en comunicación asincrónica entre agentes utilizando XMPP y mensajes periódicos de estado, donde HostAgent actúa como punto de observación y sincronización para la UI.
Conceptos teóricos aplicados
1. Sistemas Multi-Agente (MAS)
El proyecto implementa un Sistema Multi-Agente donde cada entidad (criatura, generación, host) opera como un agente autónomo con:
Autonomía: Cada agente toma decisiones independientes sin control centralizado
Comunicación asincrónica: Intercambio de mensajes mediante protocolo XMPP
Proactividad: Los agentes persiguen objetivos (buscar comida, sobrevivir, reproducirse)
Reactividad: Responden a cambios en el entorno (energía baja, comida cercana)
2. Comportamiento Emergente
El sistema exhibe comportamientos emergentes que surgen de reglas simples:
Modo supervivencia: Las criaturas adaptan su estrategia cuando la energía es crítica
Optimización de recursos: Las criaturas satisfechas retornan al hogar sin gastar energía
Convergencia espacial: La distribución perimetral crea patrones de movimiento radiales
3. Selección Natural Simulada
Implementa principios evolutivos básicos:
Fitness variable: Las criaturas con mejor gestión energética sobreviven más tiempo
Reproducción selectiva: Solo las criaturas que alcanzan satisfacción (2 alimentos) se reproducen
Presión ambiental: La escasez de recursos fuerza decisiones estratégicas
Supervivencia diferencial: El modo supervivencia permite adaptación bajo estrés
4. Arquitectura Basada en Mensajes
Patrón de comunicación asincrónica:
Publisher-Subscriber: Las criaturas publican estados, el host los consume
Event-Driven: La lógica reacciona a eventos (comida consumida, energía crítica, satisfacción)
Temporal consistency: Sistema de timestamps previene inconsistencias por mensajes tardíos
ReportBehav (PeriodicBehaviour): Gestiona movimiento, energía y lógica de estados
RecvBehav (CyclicBehaviour): Recibe señales de inicio y terminación
La criatura opera con información local (percepción limitada), sin conocimiento global del mapa.
Arquitectura del proyecto
El proyecto se organiza en los siguientes archivos principales:
hostAgent.py
Servidor HTTP y agente intermediario entre la simulación y la interfaz visual. Maneja la recepción de estados y el envío del estado completo a la UI.
generationAgent.py
Motor principal de la simulación. Controla las generaciones, depredación, métricas y creación de criaturas.
creatureAgent.py
Implementación del comportamiento individual de las criaturas: movimiento, energía, comida y comunicación.
world.py
Define WorldConfig con parámetros como dimensiones, energía inicial, cantidad de comida, duración de generación, velocidad de reporte, tasas de depredación, etc.
utils.py
Funciones auxiliares:
dist(): Cálculo de distancia euclidiana
random_pos(): Generación de posiciones aleatorias válidas
generate_pellets(): Creación de pellets de comida
spawn_positions_on_perimeter(): Distribución equidistante en perímetro rectangular
Calcula perímetro total: 2 * (width + height)
Divide en segmentos iguales según cantidad de criaturas
Recorre bordes: top → right → bottom → left
Garantiza fairness espacial en condiciones iniciales
logger_setup.py
Configuración del logger unificado. Guarda los logs en report/run.log con rotación (hasta 3 archivos de respaldo).
report/
Contiene los resultados generados automáticamente:
generation_summary.csv (métricas agregadas por generación)
generation_details.csv (detalle por criatura)
predation_events.csv (lista de eventos de depredación)
run.log (log principal)
static/
Archivos de la interfaz web con visualización 3D:
index.html: Interfaz principal con Three.js (r149), incluye:
Botones de control de velocidad (0.25x, 0.5x, 1.0x, 1.5x, 2.0x)
Display de número de generación
Canvas para renderizado 3D
app.js: Lógica de visualización:
Polling a /fishes cada 250ms
Control de velocidad mediante POST a /set_speed
style.css: Estilos para UI y botones de control
Funcionamiento interno de la interfaz web
La interfaz funciona mediante polling al endpoint /fishes cada 250ms.
Ciclo de actualización (app.js):
Solicita el estado global al servidor HostAgent
Recibe datos JSON con:
generation: Número de generación actual
creatures: Array de criaturas activas con posición, energía, comida, atributos
foods: Array de posiciones de comida disponible
removals: Array de criaturas eliminadas recientemente
space_size: Dimensiones del mundo
Renderizado 3D con Three.js:
Criaturas: Geometría orgánica tipo blob con:
Colores dinámicos basados en velocidad (marrón = lento → blanco = rápido)
Animaciones de respiración y flotación natural
Escala proporcional al tamaño (size)
Intensidad emisiva según nivel de energía
Comida: Esferas verdes luminosas con suave emisión
Fondo espacial: Múltiples capas de estrellas animadas con galaxias giratorias