Hace años un proyecto me pidió algo que sonaba imposible: un mundo simulado donde entidades con inteligencia artificial reaccionaban en tiempo real a cambios. No "tiempo real" en el sentido de los tweets: tiempo real en el sentido de la biología. Cincuenta veces por segundo.
La mayoría de los sistemas que construimos no necesitan de eso. Un dashboard actualiza cada minuto. Una API responde en milisegundos pero espera la siguiente llamada. Hasta una aplicación de chat puede tolerar latencias de cientos de milisegundos sin que nadie lo note. Pero cuando empiezas a construir algo que simula vida —organismos, sociedades, ecosistemas— el tiempo real deja de ser una característica técnica y se convierte en una confesión: aquello que estás modelando no puede detenerse a esperar.
El tiempo de los sistemas vivos no es negociable
Cuando elegí 50Hz, no fue porque quisiera presumir de velocidad. Fue porque cualquier cosa menor convertía la simulación en una películapause-and-play. Los agentes decidían, actuaban, chocaban unos contra otros, pero había un hiato entre decisión y consecuencia. En ese hiato, la ilusión se rompía. El sistema dejaba de ser y se convertía en una representación.
Ahí está la decisión real: ¿qué estás construyendo? ¿Un modelo estadístico que puedes actualizar por lotes? ¿O un sistema que aspira a capturar el flujo de la vida?
La arquitectura que elegimos fue un ECS: Entity Component System. Cada agente es un conjunto de componentes —posición, velocidad, intención, emoción—, no un objeto monolítico. Eso permite paralelismo. Eso permite que docenas de agentes reaccionen simultáneamente sin que uno tenga que esperar al siguiente. Es elegante porque es honesto: la realidad no procesa entidades de una en una.
Voronoi, geometría y la ficción de los límites
Cuando necesitaba entender quién es vecino de quién, quién comparte territorio con quién, descubrí que los límites rectos —un grid— eran mentiras. Las regiones naturales son límites donde la cercanía cambia de manera discontinua. La geometría de Voronoi lo captura: cada región "pertenece" al punto más cercano. Es un modelo perfecto para territorios, para comunidades, para cualquier cosa que tenga un sentido de "proximidad".
Pero construir Voronoi en tiempo real tiene un costo. Cada cambio en el espacio requiere recalcular regiones. Eso no es un detalle de implementación: es una decisión sobre qué realidades son calculables a una velocidad determinada. Los territorios que dibujamos en 50Hz son precisos pero computacionalmente intensivos. Más Hz sería más fiel; menos Hz sería más barato. Treinta veces por segundo, el mundo se vuelve reactivo pero impreciso. A 100Hz, es preciso pero requiere GPU.
Eligimos GPU: TensorFlow.js en el cliente, paralelismo masivo en el servidor. Porque si vas a fingir que algo es vivo, tenía que sentirse vivo. No parpadeante.
La inteligencia emerge cuando el tiempo real es restricción
Aquí viene lo raro. Los sistemas lentos permiten trucos. Puedes hacer búsquedas exhaustivas, evaluaciones complejas, retroingeniería; tienes el lujo de la reflexión. Pero cuando solo tienes 20 milisegundos para que una entidad decida si atacar, huir o colaborar, esa entidad no puede pensar como un humano. Tiene que intuir. Y la intuición, bajo presión de tiempo, es lo más parecido a la inteligencia que existe en la naturaleza.
Los agentes que construimos usaban arquitecturas muy simples de toma de decisión: registraban el estado del mundo, evaluaban un puñado de opciones contra un conjunto de objetivos —supervivencia, reproducción, vínculos sociales—, y actuaban. Sin tiempo para optimizar. Sin tiempo para arrepentirse. Eso obligó a que aprendieran a través de consecuencias, no de reflexión. Exactamente como un ser vivo.
Y aquí está lo más raro: la mayoría de los comportamientos "naturales" emergían no de algoritmos sofisticados sino de restricciones de tiempo. Un agente que no puede pensar demasiado genera el tipo de respuestas que interpretamos como "instinto", como "personalidad".
RAG sobre corpus real: la memoria que no olvida
El sistema también absorbía corpus de comunicación —conversaciones, decisiones, conflictos— sintetizados y anonimizados, y lo usaba para alimentar la "cultura" de los agentes. No era IA generativa en el sentido moderno; era recuperación + análisis sobre datos curados. Pero una recuperación que ocurría en tiempo real, durante la simulación, hacía que el pasado no fuera un archivo sino una influencia viva.
Pensé mucho en eso. Los sistemas tradicionales separan el entrenamiento de la ejecución: entrenas un modelo, luego lo despliegas fijo. Pero si el mundo es un sistema que aprende mientras ocurre —como la historia, como la biología—, entonces la memoria tiene que estar viva también. Y eso significaba que cualquier dato con el que alimentáramos ese aprendizaje tenía que tratarse con cuidado: síntesis de patrones reales, nunca exposición de identidades.
Eso cambió cómo pensaba sobre la persistencia. No era un detalle de infraestructura: era una confesión sobre si creías que los sistemas podían aprender de su propio pasado, y sobre qué responsabilidad tenías con los datos que les dabas de comer.
El precio de elegir 50Hz
Hay un costo obvio: computación. Hay un costo menos obvio: complejidad operacional. Cada frame, cada actualización, es una transacción que debe ser consistente, que debe poder reproducirse, que debe poder auditarse si algo sale mal. A baja frecuencia, puedes registrar el estado completo del mundo cada segundo. A 50Hz, tienes 20 milisegundos. Los logs crecen 50 veces más rápido.
Pero el costo más profundo es de comprensión. Una vez que decidiste que tu sistema es de tiempo real, ya no puedes pensar en él como un batch job, como algo que ocurre en etapas. Tienes que pensarlo como un flujo. Y los flujos tienen propiedades que los batches no tienen: inestabilidad, feedback positivo, emergencia.
Por qué esto importa filosofía
Aquí es donde termina la ingeniería y empieza algo más. Cada decisión de diseño es una teoría sobre el mundo.
Elegir 50Hz es decir: "lo que estoy modelando está gobernado por la temporalidad de la vida". Elegir ECS es decir: "los sistemas complejos son combinaciones de propiedades simples interactuando". Usar Voronoi es decir: "los límites de las cosas no son arbitrarios sino emergentes de proximidad". Absorber corpus real es decir: "el pasado determina el presente".
Ninguna de esas decisiones era técnicamente necesaria. Cada una era una lectura sobre cómo funcionan los sistemas. Y todas ellas, juntas, construyeron un mundo que se comportaba menos como un simulador y más como un patrón de vida.
El tiempo real no es un detalle. Es el punto en el que la ingeniería se vuelve cartesiana: una declaración sobre qué tipo de realidad crees que estás construyendo. Si crees que es vida, el tiempo no es negociable. Si crees que es solo datos, puedes comprimir todo en un batch job y seguir adelante.
Yo elegí 50Hz porque, en algún momento, dejé de construir sistemas y empecé a construir mundos. Y los mundos no esperan.
— Steven Vallejo, Medellín