La pregunta que lo inició todo
En algún punto del tercer semestre de Filosofía me enfrenté a una pregunta que no cabe bien en ninguna disciplina: ¿puede la complejidad surgir de la nada? No en sentido teológico ni metafórico, sino en sentido estrictamente sistemático. ¿Hay un conjunto de reglas suficientemente simples desde las cuales emerge, sin intervención externa, algo que reconocemos como orden, patrón, inteligencia?
Esa es la pregunta del emergentismo. Y decidí que no bastaba con discutirla en papel: quería simularla.
Lo que el código intenta hacer
El proyecto consiste en dos capas que se comunican. La primera es un universo simulado: una matriz de cargas y energías que evoluciona paso a paso según reglas físicas fijas. Cada celda interactúa con sus vecinas, las distancias influyen, el estado global avanza. No hay un agente externo que lo guíe. El universo simplemente corre.
La segunda capa es un entrenador. Un sistema que observa ese universo y trata de encontrar las constantes físicas —los parámetros de las reglas— que maximizan una función de recompensa. Para eso usa algoritmos genéticos combinados con redes neuronales: una población de modelos compite, los mejores sobreviven, los peores se descartan, y los ganadores se cruzan y mutan para producir la siguiente generación.
El método big_bang() lo dice todo con una sola palabra. No es solo un nombre creativo: es la afirmación de que cada iteración del entrenamiento es, en cierto sentido, un universo que nace, corre durante un tiempo, y es juzgado por lo que produce.
Por qué Python y Keras (y por qué la GPU importa)
La elección tecnológica no fue arbitraria. NumPy para el cálculo matricial base; Keras para las redes neuronales del entrenador; y CuPy para acelerar la simulación del universo en GPU. Ese último detalle es significativo: simular física celular sobre matrices grandes es computacionalmente costoso, y sin aceleración por hardware el experimento se vuelve impracticable en tiempos razonables.
Hay algo casi irónico en eso. Para estudiar si la complejidad puede surgir espontáneamente, necesitas máquinas lo suficientemente rápidas para que la simulación llegue a producir algo interesante antes de que te aburras. La filosofía, al bajar al código, encuentra sus propios límites materiales.
El problema profundo: ¿qué es una función de recompensa para un universo?
Aquí está la tensión filosófica que más me interesa y que el proyecto no resuelve —ni pretende resolver—. Para que el entrenador busque "mejores" universos, necesita saber qué significa mejor. Y eso requiere definir una función de recompensa.
Pero esa función es externa al universo. Yo la defino. Y en cuanto la defino, rompo la premisa: ya no hay emergencia pura, hay un criterio impuesto desde afuera. El sistema aprende a producir lo que yo le dije que era bueno.
Eso no invalida el experimento. Lo hace más honesto. Porque revela algo que la filosofía emergentista a veces esconde bajo alfombra: toda simulación de un universo que "aprende" lleva consigo una teleología oculta. Alguien decidió qué vale la pena que emerja. En la naturaleza, esa función es la supervivencia diferencial. En este código, la escribí yo.
La pregunta que queda abierta es si hay alguna diferencia real entre ambos casos.
Lo que aprendí sobre sistemas
Trabajar en esto me enseñó algo que ningún texto de filosofía me había dicho de forma tan directa: los sistemas complejos son más fáciles de construir que de entender. Puedo escribir veinte líneas que crean una dinámica que no anticipo. El universo simulado hace cosas que no diseñé explícitamente; las matrices de carga producen patrones que no programé. Y eso es, precisamente, emergencia.
Pero la comprensión va en sentido contrario. Para entender qué está pasando, tengo que descomponer, aislar, medir. Y en ese proceso destruyo lo que intentaba observar.
Esa tensión —entre construir sistemas complejos y entenderlos— es, creo, la tensión central de la informática moderna. Los modelos de lenguaje son el caso más visible hoy: nadie entiende del todo por qué funcionan. Solo sabemos que, bajo ciertas condiciones de escala y datos, emerge algo que parece comprensión.
La doble identidad que este proyecto revela
Este proyecto es el primero en el que no pude fingir que la filosofía y la ingeniería eran dos cosas separadas. Necesitaba la pregunta filosófica para saber qué construir. Necesitaba el código para ver si la pregunta tenía algún sentido empírico.
En la universidad me pedían tesis escritas. Yo entregué simulaciones. No como rebelión, sino porque me resultaba imposible separar el argumento de su implementación. Una tesis sobre emergentismo que no emerge de ningún sistema concreto me parecía incompleta.
No sé si ese gesto fue correcto académicamente. Sé que fue honesto.
Lo que sigue sin resolverse
El proyecto terminó en septiembre de 2023. La tesis avanzó. Las preguntas no cerraron.
Si la complejidad puede surgir de reglas simples, ¿qué tan simples deben ser esas reglas? ¿Hay un umbral mínimo de riqueza por debajo del cual no emerge nada interesante? ¿O cualquier conjunto de reglas con suficiente tiempo produce algo que un observador externo llamaría patrón?
No lo sé. Y parte de lo que aprendí es que no saberlo es la condición correcta para seguir pensando.