BookinglyTech News
Software

Fly.exe mete el conectome completo de la mosca macho en una sola GPU

El proyecto simula 165.122 neuronas y 25.563.197 sinapsis en bucle cerrado con un cuerpo en MuJoCo, y declara lo que no es: ni gemelo digital ni emulación biológica.

4 min de lecturaShow HN0 vistas

Un proyecto alojado en GitHub, Fly.exe, ejecuta el conectome completo del sistema nervioso central de la mosca de la fruta macho —165.122 neuronas y 25.563.197 aristas— dentro de un cuerpo simulado, en bucle cerrado y sobre una sola GPU. Doce moscas comparten una misma escena de MuJoCo, cada una con su copia del grafo, y avanzan hacia comida colocada al azar.

El autor se cura en salud sobre lo que esto no es: no es una copia recuperada de la mosca que se imageó, ni una emulación biológica completa, ni un gemelo digital. De las 166.700 estructuras que anota el artículo del MaleCNS, el grafo en ejecución es el subgrafo de las marcadas como Traced; ampliarlo a Traced+Assign+Anchor añadiría 2.443 cuerpos (1,48%) y 60.281 aristas (0,24%).

El montaje

MaleCNS v1.0 se distribuye con licencia CC-BY y los datos van bloqueados por checksum. El grafo corre sobre GeNN/CUDA y el cuerpo, sobre MuJoCo con NeuroMechFly: 133 componentes de qpos, 132 grados de libertad y 42 actuados. Cada mosca ejecuta su copia del grafo con un intervalo de acoplamiento de 15 ms. Comparten una única asignación de conectividad, pero el estado de membrana, la adaptación, el contador de spikes y el ruido son independientes por individuo.

Los cuerpos no colisionan entre ellos: los geoms de las moscas llevan contype 0 y el mundo no define pares de contacto mosca-mosca, así que dos cuerpos se atraviesan. Lo que las acopla es la visión, y esa visión es analítica. Al codificador se le pasa la posición y el radio exactos de cada objeto y de ahí salen un rumbo y un tamaño angular. No hay píxeles de cámara, ni ray casting, ni oclusión, ni color, ni textura.

Qué midió

Contra un control con la misma semilla y sin estímulo: 12 de 12 moscas entraron en estado de locomoción frente a 0 de 12, y 12 de 12 terminaron a menos de 1 mm de la superficie de un objeto frente a 0 de 12. Los recuentos de spikes por mosca y por intervalo de acoplamiento fueron 9.337 frente a 164, y el desplazamiento en línea recta, de 5,0 a 25,6 mm frente a 3,0 a 7,3 mm. Once de las doce acabaron contra una esfera de comida y la duodécima contra un pilar. No decidieron parar: el decodificador no tiene transición de salida del estado de locomoción, así que una mosca bloqueada sigue recibiendo la orden de avanzar. Acercarse a la comida no discrimina, avisa el autor: un cuerpo quieto deriva hacia delante y los rumbos están acotados.

El arranque lo decide un temporizador, y el vídeo lo dice en pantalla: cada mosca permanece parada 1,5 s y después necesita el impulso por encima del umbral durante 150 ms, de modo que las doce empiezan a andar a los 1,665 s.

Las pegas vienen declaradas en el propio material. Es una semilla y una arena, la tercera, diseñada después de medir dos que fallaron. No hay matriz multi-semilla ni contrato de aceptación que puntúe nada. El proyecto se coloca en el nivel V0 Structural de su escala V0-V8, y la demostración del enjambre no recibe nivel alguno: el resumen de ejecución marca validation_tier_awarded: null y evidence_grade: false.

Lo que sí está comprobado en tests/test_swarm3d.py: una mosca conducida por SwarmWorld y por Demo01VisualBody con la misma secuencia de comandos coincide en 0,0 en los 133 componentes de qpos, y el codificador multiobjeto reproduce el codificador congelado de un solo estímulo con un error de 1,1e-13 Hz en tasas de 1 a 400 Hz.

Hay mucho declarado inerte, y el inventario forma parte del artefacto. La luz entra una sinapsis por debajo de los fotorreceptores, porque las 66.533 aristas de salida de los fotorreceptores están a cero por la política de signos sin resolver. La marcha es un generador de patrón publicado, no la médula ventral simulada. Y la lectura son dos números.

Para quien despliega simuladores, lo aprovechable no es la mosca: es cómo está empaquetado el resultado —grafo con hash verificado en cada carga, tests que comparan dos rutas de ejecución, registros de decisión que documentan las arenas descartadas— y el empeño en marcar la frontera entre lo que el sistema hace y lo que se le atribuye.