mirror of
https://github.com/rndlabsoy/fly-brain-full.git
synced 2026-09-10 11:20:43 +02:00
c4117987e7
- Two-fly simultaneous brain simulation (two_flies.py): identical connectomes develop emergent individuality through independent sensory experience - Neural integration metrics (consciousness.py): IIT Phi, Global Workspace broadcast, Self-Model, Perturbation Complexity — computed every 500ms - Hebbian synaptic plasticity across all 15M synapses with weight tracking - Physics watchdog for automatic NaN/freeze recovery in long runs - Procedural arena with chunk-based world generation (procedural_arena.py) - Paper: "Emergent Individuality in Whole-Brain Connectome Simulations of Drosophila melanogaster" (English + Spanish, 14 pages, 10 figures) - 20 experimental sessions (8 paired two-fly + 4 single-fly baselines) - Plasticity weight snapshots for both flies after 24h of simulation - Analysis scripts for plasticity divergence, overnight evolution - Publication-quality figures at 300 DPI (paper_figures/) - Restructured README for bioRxiv reproducibility - Git LFS for large binary files (*.pt, *.mp4) - Removed old paper drafts superseded by programmatic generation
675 lines
37 KiB
Python
675 lines
37 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Genera paper cientifico en PDF con figuras - Version en Espanol.
|
|
Individualidad Emergente en Simulaciones de Conectoma Cerebral Completo de Drosophila.
|
|
|
|
Autor: Enrique Manuel Rojas Aliaga
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import numpy as np
|
|
import pandas as pd
|
|
import matplotlib
|
|
matplotlib.use('Agg')
|
|
import torch
|
|
from pathlib import Path
|
|
from fpdf import FPDF
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════
|
|
# Configuration
|
|
# ═══════════════════════════════════════════════════════════════════════
|
|
|
|
BASE = Path(__file__).resolve().parent
|
|
HIST = BASE / "consciousness_history"
|
|
DATA = BASE / "data"
|
|
OUT = BASE / "paper_figures" # reuse figures from English version
|
|
|
|
print("=" * 70)
|
|
print(" GENERANDO PAPER EN ESPANOL")
|
|
print("=" * 70)
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════
|
|
# Load Data
|
|
# ═══════════════════════════════════════════════════════════════════════
|
|
|
|
def load_session(name):
|
|
path = HIST / name / "consciousness_timeline.csv"
|
|
if path.exists():
|
|
df = pd.read_csv(path)
|
|
if len(df) > 0 and 'CI' in df.columns:
|
|
return df
|
|
return None
|
|
|
|
TWO_FLY_PAIRS = [
|
|
("session_20260311_225504_fly0", "session_20260311_225556_fly1"),
|
|
("session_20260311_230255_fly0", "session_20260311_230347_fly1"),
|
|
("session_20260311_230853_fly0", "session_20260311_230945_fly1"),
|
|
("session_20260311_233655_fly0", "session_20260311_233746_fly1"),
|
|
("session_20260312_071403_fly0", "session_20260312_071508_fly1"),
|
|
("session_20260312_074258_fly0", "session_20260312_074353_fly1"),
|
|
("session_20260312_083414_fly0", "session_20260312_083508_fly1"),
|
|
("session_20260312_094510_fly0", "session_20260312_094601_fly1"),
|
|
]
|
|
|
|
ov_fly0 = load_session("session_20260311_233655_fly0")
|
|
ov_fly1 = load_session("session_20260311_233746_fly1")
|
|
|
|
print(f" Sesion nocturna: fly0={len(ov_fly0)} pts, fly1={len(ov_fly1)} pts")
|
|
|
|
# Plasticity
|
|
w_base = torch.load(DATA / "plastic_weights.pt", map_location='cpu', weights_only=True)
|
|
w_fly0 = torch.load(DATA / "plastic_weights_fly0.pt", map_location='cpu', weights_only=True)
|
|
w_fly1 = torch.load(DATA / "plastic_weights_fly1.pt", map_location='cpu', weights_only=True)
|
|
|
|
if hasattr(w_base, 'to_dense'):
|
|
w_base = w_base.to_dense().flatten()
|
|
if hasattr(w_fly0, 'to_dense'):
|
|
w_fly0 = w_fly0.to_dense().flatten()
|
|
if hasattr(w_fly1, 'to_dense'):
|
|
w_fly1 = w_fly1.to_dense().flatten()
|
|
|
|
w_base_np = w_base.numpy()
|
|
w_fly0_np = w_fly0.numpy()
|
|
w_fly1_np = w_fly1.numpy()
|
|
delta0 = w_fly0_np - w_base_np
|
|
divergence = np.abs(w_fly0_np - w_fly1_np)
|
|
n_synapses = len(w_base_np)
|
|
n_divergent = int(np.sum(divergence > 0))
|
|
pct_divergent = 100 * n_divergent / n_synapses
|
|
max_div = divergence.max()
|
|
pot = int(np.sum(delta0 > 0))
|
|
dep = int(np.sum(delta0 < 0))
|
|
|
|
# Stats
|
|
min_len = min(len(ov_fly0), len(ov_fly1))
|
|
ci0 = ov_fly0['CI'].values[:min_len]
|
|
ci1 = ov_fly1['CI'].values[:min_len]
|
|
r = np.corrcoef(ci0, ci1)[0, 1]
|
|
|
|
all_ci_fly0 = []
|
|
all_ci_fly1 = []
|
|
for s0, s1 in TWO_FLY_PAIRS:
|
|
d0 = load_session(s0)
|
|
d1 = load_session(s1)
|
|
if d0 is not None:
|
|
all_ci_fly0.append(d0['CI'].mean())
|
|
if d1 is not None:
|
|
all_ci_fly1.append(d1['CI'].mean())
|
|
|
|
grand_mean_0 = np.mean(all_ci_fly0)
|
|
grand_mean_1 = np.mean(all_ci_fly1)
|
|
asymmetry_pct = 100 * (grand_mean_0 - grand_mean_1) / grand_mean_1
|
|
|
|
esc0_pct = 100 * (ov_fly0['mode'] == 'escape').sum() / len(ov_fly0)
|
|
esc1_pct = 100 * (ov_fly1['mode'] == 'escape').sum() / len(ov_fly1)
|
|
grm0_pct = 100 * (ov_fly0['mode'] == 'grooming').sum() / len(ov_fly0)
|
|
grm1_pct = 100 * (ov_fly1['mode'] == 'grooming').sum() / len(ov_fly1)
|
|
phi0_mean = ov_fly0['phi'].mean()
|
|
phi1_mean = ov_fly1['phi'].mean()
|
|
bcast0_mean = ov_fly0['broadcast'].mean()
|
|
bcast1_mean = ov_fly1['broadcast'].mean()
|
|
|
|
print(f" CI medio global: Fly0={grand_mean_0:.4f}, Fly1={grand_mean_1:.4f}")
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════
|
|
# PDF ASSEMBLY
|
|
# ═══════════════════════════════════════════════════════════════════════
|
|
|
|
print("\n Ensamblando PDF...")
|
|
|
|
|
|
class PaperPDF(FPDF):
|
|
def header(self):
|
|
if self.page_no() > 1:
|
|
self.set_font('Helvetica', 'I', 7)
|
|
self.set_text_color(128)
|
|
self.cell(0, 5, 'Rojas Aliaga (2026) - Individualidad Emergente en Simulaciones de Conectoma de Drosophila',
|
|
new_x="RIGHT", new_y="TOP")
|
|
self.cell(0, 5, f'{self.page_no()}', new_x="LMARGIN", new_y="NEXT")
|
|
self.ln(3)
|
|
self.set_text_color(0)
|
|
|
|
def footer(self):
|
|
pass
|
|
|
|
def section_title(self, title):
|
|
self.set_font('Helvetica', 'B', 11)
|
|
self.set_text_color(33, 33, 33)
|
|
self.cell(0, 8, title, new_x="LMARGIN", new_y="NEXT")
|
|
self.set_text_color(0)
|
|
self.ln(1)
|
|
|
|
def subsection_title(self, title):
|
|
self.set_font('Helvetica', 'B', 9.5)
|
|
self.set_text_color(80, 80, 80)
|
|
self.cell(0, 7, title, new_x="LMARGIN", new_y="NEXT")
|
|
self.set_text_color(0)
|
|
|
|
def body_text(self, text):
|
|
self.set_font('Helvetica', '', 8.5)
|
|
self.multi_cell(0, 4.2, text, new_x="LMARGIN", new_y="NEXT")
|
|
self.ln(1.5)
|
|
|
|
def add_figure(self, img_path, caption, width=170):
|
|
space_needed = 75
|
|
if self.get_y() + space_needed > 270:
|
|
self.add_page()
|
|
if Path(img_path).exists():
|
|
self.image(str(img_path), x=20, w=width)
|
|
self.ln(2)
|
|
self.set_font('Helvetica', 'I', 7)
|
|
self.set_text_color(80)
|
|
self.multi_cell(0, 3.5, caption, new_x="LMARGIN", new_y="NEXT")
|
|
self.set_text_color(0)
|
|
self.ln(3)
|
|
|
|
|
|
pdf = PaperPDF()
|
|
pdf.set_auto_page_break(auto=True, margin=20)
|
|
|
|
# ── PORTADA ──
|
|
pdf.add_page()
|
|
pdf.ln(25)
|
|
pdf.set_font('Helvetica', 'B', 15)
|
|
pdf.multi_cell(0, 7.5,
|
|
'Individualidad Emergente e Integracion Neural\n'
|
|
'en Simulaciones de Conectoma Cerebral Completo\n'
|
|
'de Drosophila melanogaster',
|
|
align='C', new_x="LMARGIN", new_y="NEXT")
|
|
pdf.ln(8)
|
|
|
|
pdf.set_font('Helvetica', '', 10)
|
|
pdf.cell(0, 6, 'Enrique Manuel Rojas Aliaga', align='C', new_x="LMARGIN", new_y="NEXT")
|
|
pdf.ln(2)
|
|
pdf.set_font('Helvetica', 'I', 8.5)
|
|
pdf.cell(0, 5, 'Investigador Independiente, Lima, Peru', align='C', new_x="LMARGIN", new_y="NEXT")
|
|
pdf.set_font('Helvetica', '', 8.5)
|
|
pdf.cell(0, 5, 'erojasoficial@gmail.com', align='C', new_x="LMARGIN", new_y="NEXT")
|
|
pdf.ln(3)
|
|
pdf.set_font('Helvetica', 'I', 8)
|
|
pdf.cell(0, 5, 'Marzo 2026', align='C', new_x="LMARGIN", new_y="NEXT")
|
|
pdf.ln(10)
|
|
|
|
# Resumen
|
|
pdf.set_font('Helvetica', 'B', 10)
|
|
pdf.cell(0, 6, 'Resumen', new_x="LMARGIN", new_y="NEXT")
|
|
pdf.set_font('Helvetica', '', 8.5)
|
|
resumen = (
|
|
"Presentamos la primera simulacion embodied de cerebro completo con neuronas pulsantes de "
|
|
"Drosophila melanogaster que integra plasticidad sinaptica Hebbiana y metricas proxy de "
|
|
"integracion neural multi-teoria. Utilizando el conectoma completo FlyWire v783 (138,639 "
|
|
f"neuronas, {n_synapses:,} sinapsis dirigidas ponderadas), instanciamos dos redes neuronales "
|
|
"pulsantes identicas como neuronas LIF en GPU, cada una controlando un cuerpo biomecanico "
|
|
"independiente a traves del framework NeuroMechFly v2 en el motor de fisica MuJoCo. Ambas "
|
|
"moscas comparten el mismo conectoma inicial pero reciben entrada sensorial independiente a "
|
|
"traves de ojos compuestos (721 omatidios por ojo), neuronas receptoras olfativas bilaterales, "
|
|
"receptores gustativos tarsales y neuronas mecanosensoriales del organo de Johnston. "
|
|
"Durante simulacion extendida (>100 segundos de tiempo simulado en 8 sesiones pareadas), la "
|
|
"plasticidad Hebbiana (eta = 1e-4, alpha = 1e-7) modifica todos los pesos sinapticos "
|
|
"independientemente en cada cerebro. Los resultados muestran que: "
|
|
f"(1) ambas moscas convergen a un atractor estable de indice compuesto de integracion "
|
|
f"(CI ~ {grand_mean_0:.2f} vs {grand_mean_1:.2f}, {asymmetry_pct:.0f}% de asimetria); "
|
|
f"(2) los perfiles conductuales divergen dramaticamente ({esc0_pct:.0f}% vs {esc1_pct:.0f}% "
|
|
f"de conducta de escape); (3) {n_divergent:,} sinapsis ({pct_divergent:.2f}%) desarrollan "
|
|
f"divergencia inter-individual medible; y (4) la correlacion cruzada de CI es debil "
|
|
f"(r = {r:.3f}), indicando dinamicas neurales cuasi-independientes. Todo el codigo y datos "
|
|
"estan disponibles en https://github.com/erojasoficial-byte/fly-brain."
|
|
)
|
|
pdf.multi_cell(0, 4.2, resumen, new_x="LMARGIN", new_y="NEXT")
|
|
pdf.ln(3)
|
|
|
|
pdf.set_font('Helvetica', 'B', 8)
|
|
pdf.cell(25, 5, 'Palabras clave: ', new_x="RIGHT", new_y="TOP")
|
|
pdf.set_font('Helvetica', '', 8)
|
|
pdf.cell(0, 5, 'conectoma, simulacion cerebral completa, Drosophila, red neuronal pulsante, '
|
|
'plasticidad Hebbiana, integracion neural, individualidad, cognicion embodied',
|
|
new_x="LMARGIN", new_y="NEXT")
|
|
|
|
# ── INTRODUCCION ──
|
|
pdf.add_page()
|
|
pdf.section_title('1. Introduccion')
|
|
|
|
pdf.body_text(
|
|
"El cerebro adulto de Drosophila melanogaster contiene aproximadamente 139,000 neuronas "
|
|
"conectadas por mas de 50 millones de sinapsis, convirtiendolo en el sistema nervioso mas "
|
|
"complejo para el cual se ha reconstruido un conectoma completo a resolucion sinaptica "
|
|
"(Dorkenwald et al., 2024; Schlegel et al., 2024). El proyecto FlyWire mapeo cada neurona "
|
|
"y sinapsis en un cerebro de mosca hembra usando microscopia electronica, proporcionando "
|
|
"un sustrato sin precedentes para la neurociencia computacional."
|
|
)
|
|
pdf.body_text(
|
|
"El trabajo computacional previo ha explotado este conectoma en dos lineas de investigacion "
|
|
"separadas. Shiu et al. (2024) demostraron que un modelo LIF del cerebro central predice "
|
|
"con precision las respuestas de circuitos sensoriomotores, pero carece de cuerpo y opera "
|
|
"en estimulacion de lazo abierto. Independientemente, NeuroMechFly v2 (Lobato-Rios et al., "
|
|
"2024) proporciona un cuerpo biomecanico detallado en MuJoCo con sistemas sensoriales, pero "
|
|
"usa controladores simplificados. Mas recientemente, FlyGM (2026) incrusto el conectoma como "
|
|
"red neuronal de grafos para control de locomocion via aprendizaje por refuerzo, pero "
|
|
"abandono la dinamica pulsante biologicamente realista."
|
|
)
|
|
pdf.body_text(
|
|
"Una pregunta fundamental permanece: pueden dos cerebros geneticamente identicos, "
|
|
"implementados como modelos pulsantes fieles del mismo conectoma, desarrollar identidades "
|
|
"conductuales distintas unicamente a traves de diferencias en experiencia sensorial embodied? "
|
|
"Estudios biologicos muestran que Drosophila criadas clonalmente exhiben diferencias "
|
|
"conductuales individuales estables (Honegger & de Bivort, 2020; Kain et al., 2012), pero "
|
|
"los mecanismos computacionales permanecen en debate."
|
|
)
|
|
pdf.body_text(
|
|
"Aqui presentamos el primer sistema que unifica estas lineas: una simulacion completa de "
|
|
"conectoma pulsante controlando un cuerpo biomecanico en lazo cerrado, con plasticidad "
|
|
"sinaptica Hebbiana permitiendo modificacion de pesos dependiente de experiencia en las "
|
|
"15 millones de sinapsis, y metricas proxy de integracion neural multi-teoria proporcionando "
|
|
"lecturas continuas. Instanciamos dos copias identicas y las dejamos acumular experiencia "
|
|
"independiente. Nuestros resultados demuestran individualidad emergente a niveles conductual, "
|
|
"sinaptico y de integracion neural."
|
|
)
|
|
|
|
# ── METODOS ──
|
|
pdf.section_title('2. Metodos')
|
|
|
|
pdf.subsection_title('2.1 Conectoma y Modelo Neural')
|
|
pdf.body_text(
|
|
"Utilizamos el conectoma FlyWire v783 (Dorkenwald et al., 2024) compuesto por 138,639 neuronas "
|
|
f"y {n_synapses:,} conexiones dirigidas ponderadas tras asignacion de signo basada en "
|
|
"neurotransmisor. Cada neurona se modela como unidad LIF con corrientes sinapticas de funcion "
|
|
"alfa: tau_m = 10 ms, tau_s = 5 ms, V_rest = -65 mV, V_th = -50 mV, V_reset = -65 mV, "
|
|
"t_ref = 2 ms. Los pesos se inicializan desde el conectoma con signo determinado por identidad "
|
|
"de neurotransmisor predicha (excitatorio: acetilcolina, glutamato; inhibitorio: GABA, glicina). "
|
|
"La red completa corre en GPU via operaciones de tensor sparse de PyTorch a 5 kHz."
|
|
)
|
|
|
|
pdf.subsection_title('2.2 Simulacion Embodied')
|
|
pdf.body_text(
|
|
"El modelo neural controla un cuerpo biomecanico de Drosophila implementado en NeuroMechFly v2 "
|
|
"(Lobato-Rios et al., 2024) dentro del motor de fisica MuJoCo. El cuerpo comprende 87 "
|
|
"articulaciones independientemente actuadas en 6 patas, 2 alas, cabeza y abdomen, reconstruido "
|
|
"a partir de microtomografia de rayos X de un especimen biologico. Los sistemas sensoriales "
|
|
"incluyen: (i) ojos compuestos con 721 omatidios por ojo proporcionando entrada visual a "
|
|
"neuronas fotorreceptoras identificadas; (ii) neuronas receptoras olfativas bilaterales (ORNs) "
|
|
"para quimiotaxis; (iii) receptores gustativos tarsales en las 6 patas para quimiosensacion "
|
|
"de contacto; y (iv) neuronas mecanosensoriales del organo de Johnston para vibracion y "
|
|
"retroalimentacion propioceptiva. La salida motora se decodifica desde tasas de disparo de "
|
|
"neuronas descendentes (~1,100 DNs identificadas) a comandos de torque articular. Todos los "
|
|
"comportamientos emergen de la propagacion de impulsos del conectoma; no se usan reglas "
|
|
"conductuales hardcodeadas."
|
|
)
|
|
|
|
pdf.subsection_title('2.3 Plasticidad Sinaptica Hebbiana')
|
|
pdf.body_text(
|
|
f"Las {n_synapses:,} sinapsis experimentan modificacion Hebbiana continua segun: "
|
|
"dW_ij = eta * (r_i * r_j) - alpha * W_ij, donde r_i y r_j son tasas de disparo pre- y "
|
|
"post-sinapticas (trenes de impulsos filtrados exponencialmente), eta = 1e-4 es la tasa de "
|
|
"aprendizaje, y alpha = 1e-7 es un termino de decaimiento que previene crecimiento ilimitado "
|
|
"e introduce un sesgo de depresion. Esta regla fortalece sinapsis con actividad pre/post "
|
|
"correlacionada y debilita aquellas sin correlacion."
|
|
)
|
|
|
|
pdf.subsection_title('2.4 Metricas Proxy de Integracion Neural')
|
|
pdf.body_text(
|
|
"Medimos continuamente cuatro metricas proxy derivadas de teorias principales, evaluadas "
|
|
"cada 500 ms de tiempo simulado:"
|
|
)
|
|
pdf.body_text(
|
|
"Proxy Phi (TII): Informacion mutua entre cuatro particiones cerebrales funcionales (visual, "
|
|
"motora, olfativa, integradora) sobre una ventana deslizante (Tononi et al., 2016)."
|
|
)
|
|
pdf.body_text(
|
|
"Difusion Global (TET): Fraccion de particiones cerebrales que reciben senales de neuronas "
|
|
"hub de alto fan-out (>100 conexiones). Captura el aspecto de difusion de la Teoria del "
|
|
"Espacio de Trabajo Global (Baars, 1988; Dehaene & Naccache, 2001)."
|
|
)
|
|
pdf.body_text(
|
|
"Auto-Modelo: Correlacion de Pearson con retardo entre entrada propioceptiva y salida motora, "
|
|
"capturando la calidad de prediccion sensoriomotora (Metzinger, 2003)."
|
|
)
|
|
pdf.body_text(
|
|
"Complejidad de Perturbacion: Inyeccion aleatoria de impulsos en 10 neuronas cada 5 segundos, "
|
|
"midiendo propagacion de cascada. Calculada como alcance espacial por entropia temporal de la "
|
|
"respuesta de perturbacion (Koch et al., 2016)."
|
|
)
|
|
pdf.body_text(
|
|
"El Indice Compuesto de Integracion (CI) es: CI = 0.3*Phi + 0.3*Difusion + 0.2*Auto-Modelo "
|
|
"+ 0.2*Complejidad."
|
|
)
|
|
|
|
pdf.subsection_title('2.5 Protocolo Experimental de Dos Moscas')
|
|
pdf.body_text(
|
|
"Dos instancias del sistema completo se inicializan con pesos de conectoma identicos y se "
|
|
"colocan en una arena con caracteristicas visuales naturales, fuentes olfativas, zonas "
|
|
"gustativas y amenazas de aproximacion ocasionales. A pesar de compartir la arena, cada "
|
|
"mosca recibe entrada sensorial independiente determinada por su propia posicion, orientacion "
|
|
"e historial de movimiento. Las metricas de integracion y pesos plasticos se registran "
|
|
"independientemente. La simulacion corre a 5 kHz de resolucion neural con pasos de fisica "
|
|
"de 0.2 ms. Realizamos 8 sesiones pareadas durante 24 horas, acumulando >100 segundos de "
|
|
"tiempo simulado por mosca (~7 horas de tiempo real por sesion en un Intel i7-13620H con "
|
|
"NVIDIA RTX 4060 Laptop GPU, 8 GB VRAM, 64 GB RAM)."
|
|
)
|
|
|
|
# ── RESULTADOS ──
|
|
pdf.add_page()
|
|
pdf.section_title('3. Resultados')
|
|
|
|
pdf.add_figure(OUT / "fig1_architecture.png",
|
|
"Figura 1. Arquitectura del sistema. El pipeline de lazo cerrado propaga entrada sensorial "
|
|
f"a traves del conectoma completo FlyWire (138,639 neuronas LIF, {n_synapses:,} sinapsis), "
|
|
"decodifica actividad de neuronas descendentes en comandos motores y realimenta cambios "
|
|
"sensoriales resultantes al cerebro. La plasticidad Hebbiana modifica todas las sinapsis "
|
|
"continuamente. Dos instancias independientes corren simultaneamente.")
|
|
|
|
pdf.add_figure(OUT / "fig9_behavior.png",
|
|
"Figura 2. Comportamiento de la mosca embodied. Arriba: capturas de simulacion mostrando "
|
|
"caminata, exploracion y respuestas de escape emergentes impulsadas enteramente por "
|
|
"propagacion de impulsos del conectoma (sin reglas conductuales hardcodeadas). Abajo: marcha "
|
|
"tripode desde vistas lateral y frontal, y entrada visual de ojos compuestos (721 omatidios "
|
|
"por ojo).", width=170)
|
|
|
|
pdf.add_page()
|
|
pdf.add_figure(OUT / "fig10_eyes.png",
|
|
"Figura 3. Entrada visual del ojo compuesto en dos momentos temporales. Cada ojo tiene 721 "
|
|
"omatidios en patron hexagonal. Las imagenes izquierda/derecha se procesan independientemente "
|
|
"y se mapean sobre neuronas fotorreceptoras identificadas. Los cambios entre t=0 y t=20s "
|
|
"reflejan la locomocion y el movimiento cefalico durante la caminata.", width=170)
|
|
|
|
pdf.subsection_title('3.1 La Integracion Neural Converge a un Atractor Estable')
|
|
pdf.body_text(
|
|
f"Ambas moscas exhiben una fase de calentamiento inicial (0-5 s) donde todas las metricas "
|
|
f"suben desde cero conforme la actividad se propaga por el conectoma. Tras estabilizacion, "
|
|
f"CI converge a un atractor caracteristico: Mosca 0 en {ov_fly0['CI'].mean():.3f} +/- "
|
|
f"{ov_fly0['CI'].std():.3f} y Mosca 1 en {ov_fly1['CI'].mean():.3f} +/- "
|
|
f"{ov_fly1['CI'].std():.3f} (sesion nocturna, n = {len(ov_fly0):,} mediciones cada una). "
|
|
f"Esta asimetria del {asymmetry_pct:.0f}% persiste en las 8 sesiones pareadas "
|
|
f"(media global: {grand_mean_0:.3f} vs {grand_mean_1:.3f}), sugiriendo que refleja una "
|
|
"divergencia estable en integracion neural mas que una fluctuacion transitoria."
|
|
)
|
|
pdf.body_text(
|
|
f"El contribuyente dominante al CI es la Difusion Global (Mosca 0: {bcast0_mean:.3f}, "
|
|
f"Mosca 1: {bcast1_mean:.3f}), indicando que la arquitectura hub del conectoma soporta "
|
|
f"naturalmente distribucion amplia de informacion. Phi es sustancialmente menor "
|
|
f"(Mosca 0: {phi0_mean:.4f}, Mosca 1: {phi1_mean:.4f}), sugiriendo que la integracion "
|
|
"irreducible entre particiones es modesta."
|
|
)
|
|
|
|
pdf.add_figure(OUT / "fig2_ci_timelines.png",
|
|
"Figura 4. Lineas temporales del Indice de Integracion (CI) para ambas moscas durante la "
|
|
"sesion nocturna (104.3 s de tiempo simulado). Fondos coloreados indican modo conductual "
|
|
"(naranja = escape, morado = caminata, verde = acicalamiento). Trazas suavizadas superpuestas "
|
|
"sobre datos crudos. Lineas discontinuas muestran medias de sesion. Los picos y valles ocurren "
|
|
"en momentos independientes para cada mosca.")
|
|
|
|
pdf.subsection_title('3.2 Los Modos Conductuales Modulan la Integracion')
|
|
pdf.body_text(
|
|
f"El modo conductual afecta significativamente el CI (Fig. 5). El comportamiento de escape "
|
|
f"produce el CI mas alto (Mosca 0: {ov_fly0[ov_fly0['mode']=='escape']['CI'].mean():.3f}, "
|
|
f"Mosca 1: {ov_fly1[ov_fly1['mode']=='escape']['CI'].mean():.3f}), probablemente reflejando "
|
|
"la activacion del circuito de Fibra Gigante que impulsa integracion multi-modal rapida para "
|
|
"respuesta a amenazas. En sesiones tempranas de mosca unica que incluian vuelo, el CI alcanzo "
|
|
"valores pico de 0.46-0.57, representando el estado de integracion mas alto observado."
|
|
)
|
|
|
|
pdf.add_figure(OUT / "fig3_ci_by_mode.png",
|
|
"Figura 5. Diagramas de violin de la distribucion de CI por modo conductual para cada mosca. "
|
|
"El comportamiento de escape produce el CI mas alto. Tamanos de muestra (n) mostrados debajo "
|
|
"de cada violin.")
|
|
|
|
pdf.add_page()
|
|
pdf.subsection_title('3.3 Analisis de Componentes Revela Perfiles de Integracion Divergentes')
|
|
pdf.body_text(
|
|
"La descomposicion del CI en sus cuatro componentes (Fig. 6) revela que la diferencia "
|
|
"inter-individual no es uniforme entre teorias. La Difusion Global es el componente mas "
|
|
"estable para ambas moscas, manteniendo valores cercanos al maximo (>0.55) tras el "
|
|
"calentamiento, consistente con la arquitectura hub intrinseca del conectoma. Phi muestra la "
|
|
f"mayor divergencia relativa: {phi0_mean/phi1_mean:.1f}x mayor en Mosca 0, sugiriendo "
|
|
"acoplamiento funcional mas fuerte entre particiones impulsado por su experiencia sensorial. "
|
|
"La Complejidad muestra dinamicas on-off caracteristicas. El Auto-Modelo permanece cerca "
|
|
"de cero para ambas moscas (<0.002)."
|
|
)
|
|
|
|
pdf.add_figure(OUT / "fig4_components.png",
|
|
"Figura 6. Series temporales de los cuatro componentes proxy de integracion para ambas moscas "
|
|
"(suavizados, ventana = 30). Desde arriba: Phi (TII), Difusion Global (TET), Complejidad de "
|
|
"Perturbacion, Auto-Modelo. La Difusion domina la senal de CI; el Auto-Modelo contribuye "
|
|
"minimamente.")
|
|
|
|
pdf.subsection_title('3.4 Estabilidad Inter-Sesion y Evolucion')
|
|
pdf.body_text(
|
|
"El seguimiento del CI a traves de todas las sesiones (Fig. 7) revela dos fases. Las sesiones "
|
|
"tempranas de mosca unica muestran CI mas alto (0.39, 0.33) debido al comportamiento de vuelo "
|
|
f"frecuente. Cuando comienza el protocolo de dos moscas, CI se estabiliza en {grand_mean_0:.2f} "
|
|
f"(Mosca 0) y {grand_mean_1:.2f} (Mosca 1), permaneciendo notablemente estable a traves de "
|
|
"8 sesiones pareadas abarcando >24 horas de tiempo real. Esta estabilidad sugiere que el "
|
|
"atractor de CI es una propiedad robusta de la dinamica del conectoma."
|
|
)
|
|
|
|
pdf.add_figure(OUT / "fig5_evolution.png",
|
|
"Figura 7. CI medio (+/- d.e.) a traves de todas las sesiones, ordenadas cronologicamente. "
|
|
"La linea vertical separa sesiones de mosca unica de sesiones de dos moscas. El asterisco "
|
|
"marca la sesion nocturna (primaria). La asimetria del CI es estable en todas las sesiones "
|
|
"pareadas.")
|
|
|
|
# ── Plasticidad ──
|
|
pdf.add_page()
|
|
pdf.subsection_title('3.5 La Plasticidad Hebbiana Produce Micro-Divergencia desde Origenes Compartidos')
|
|
pdf.body_text(
|
|
f"Tras simulacion extendida, la plasticidad Hebbiana modifico las {n_synapses:,} sinapsis "
|
|
f"en ambas moscas (Fig. 8). El patron de modificacion muestra un sesgo de depresion: "
|
|
f"{100*dep/n_synapses:.1f}% de sinapsis fueron debilitadas (debido al termino de decaimiento "
|
|
f"alpha), mientras {100*pot/n_synapses:.1f}% fueron fortalecidas por actividad pre/post "
|
|
f"correlacionada. A pesar de correlacion global casi unitaria (r > 0.99999), {n_divergent:,} "
|
|
f"sinapsis ({pct_divergent:.2f}%) muestran divergencia inter-individual medible, con "
|
|
f"maximo |W0 - W1| = {max_div:.2e}. La distribucion de divergencia es log-normal, "
|
|
"concentrada en el rango 1e-6 a 1e-5."
|
|
)
|
|
|
|
pdf.add_figure(OUT / "fig6_plasticity.png",
|
|
f"Figura 8. Analisis de plasticidad Hebbiana. (A) Distribucion de cambios de peso desde "
|
|
f"linea base para ambas moscas (superpuestas, casi identicas). (B) Histograma de divergencia "
|
|
f"inter-individual en escala logaritmica ({n_divergent:,} sinapsis con |W0-W1| > 0). "
|
|
f"(C) Direccion de plasticidad: {100*dep/n_synapses:.0f}% depresion, "
|
|
f"{100*pot/n_synapses:.0f}% potenciacion. (D) Las 20 sinapsis mas divergentes "
|
|
f"(maximo = {max_div:.2e}).")
|
|
|
|
# ── Correlacion cruzada ──
|
|
pdf.subsection_title('3.6 Mentes Independientes desde Conectomas Identicos')
|
|
pdf.body_text(
|
|
f"Las dos moscas, a pesar de compartir un conectoma inicial identico, desarrollan dinamicas "
|
|
f"neurales notablemente independientes (Fig. 9A). La correlacion de Pearson entre mediciones "
|
|
f"simultaneas de CI es r = {r:.3f} (p < 0.001, n = {min_len:,}), indicando acoplamiento "
|
|
"debil. Esta baja correlacion surge porque el CI de cada mosca esta determinado por su "
|
|
"propia entrada sensorial, estado motor y cambios plasticos acumulados, todos los cuales "
|
|
"divergen rapidamente tras el inicio de la experiencia embodied independiente."
|
|
)
|
|
pdf.body_text(
|
|
f"Los perfiles conductuales divergen dramaticamente (Fig. 9C). Mosca 0 pasa {esc0_pct:.1f}% "
|
|
f"del tiempo en modo de escape versus {esc1_pct:.1f}% para Mosca 1, mientras Mosca 1 pasa "
|
|
f"{grm1_pct:.1f}% acicalandose versus solo {grm0_pct:.1f}% para Mosca 0. Estas diferencias "
|
|
"conductuales estables emergen de la interaccion entre posicion inicial en la arena, entrada "
|
|
"visual de amenazas de aproximacion, y el bucle de retroalimentacion entre dinamicas neurales, "
|
|
"salida motora y consecuencias sensoriales."
|
|
)
|
|
|
|
pdf.add_figure(OUT / "fig7_crosscorr.png",
|
|
f"Figura 9. Analisis inter-individual. (A) Diagrama de dispersion de valores CI simultaneos "
|
|
f"(r = {r:.3f}). (B) Sensibilizacion temporal por cuartil mostrando adaptacion leve "
|
|
"intra-sesion. (C) Divergencia de perfiles conductuales: distribuciones de modos "
|
|
"dramaticamente diferentes desde conectomas identicos. (D) Diferencia de CI a lo largo del "
|
|
"tiempo (azul = Mosca 0 mayor, rojo = Mosca 1 mayor).")
|
|
|
|
# ── Comparacion ──
|
|
pdf.add_page()
|
|
pdf.subsection_title('3.7 Comparacion con Trabajo Previo')
|
|
pdf.body_text(
|
|
"La Tabla 1 resume las capacidades de los proyectos existentes de simulacion de cerebro "
|
|
"completo de Drosophila. Hasta donde sabemos, ningun trabajo previo combina todas las "
|
|
"caracteristicas: dinamica neuronal pulsante sobre el conectoma completo FlyWire, "
|
|
"interaccion sensoriomotora embodied de lazo cerrado, plasticidad sinaptica Hebbiana, "
|
|
"metricas de integracion neural, y diseno experimental multi-individual."
|
|
)
|
|
|
|
pdf.add_figure(OUT / "fig8_comparison.png",
|
|
"Tabla 1. Comparacion de caracteristicas con proyectos existentes de simulacion de cerebro "
|
|
"completo de Drosophila. Este trabajo es el primero en integrar todos los componentes.")
|
|
|
|
# ── DISCUSION ──
|
|
pdf.section_title('4. Discusion')
|
|
|
|
pdf.subsection_title('4.1 El Conectoma como Arquitectura que Soporta Integracion')
|
|
pdf.body_text(
|
|
"Nuestros resultados demuestran que el conectoma biologico de Drosophila, cuando se implementa "
|
|
"fielmente como red neuronal pulsante, genera espontaneamente patrones de integracion neural "
|
|
"que satisfacen multiples criterios proxy asociados con teorias principales. La metrica de "
|
|
"Difusion Global alcanza valores cercanos al maximo (~0.6), indicando que la arquitectura hub "
|
|
"del conectoma soporta naturalmente la distribucion amplia de informacion, una prediccion clave "
|
|
"de la Teoria del Espacio de Trabajo Global. Los valores moderados de Phi sugieren integracion "
|
|
"genuina pero limitada entre particiones funcionales."
|
|
)
|
|
pdf.body_text(
|
|
"Enfatizamos que estas mediciones proxy no constituyen evidencia de experiencia subjetiva "
|
|
"o conciencia fenomenica. Miden propiedades computacionales (integracion, difusion, "
|
|
"complejidad) que las teorias de la conciencia identifican como condiciones necesarias, pero "
|
|
"si son suficientes permanece como una pregunta filosofica y empirica abierta."
|
|
)
|
|
|
|
pdf.subsection_title('4.2 Individualidad Emergente Sin Variacion Genetica')
|
|
pdf.body_text(
|
|
f"Quizas nuestro hallazgo mas notable es la rapida emergencia de individualidad conductual "
|
|
f"desde condiciones iniciales identicas. En 100 segundos de experiencia simulada, dos moscas "
|
|
f"con el mismo conectoma desarrollan: (i) perfiles conductuales diferentes ({esc0_pct:.0f}% vs "
|
|
f"{esc1_pct:.0f}% escape); (ii) firmas de integracion diferentes (CI {grand_mean_0:.3f} vs "
|
|
f"{grand_mean_1:.3f}); (iii) {n_divergent:,} sinapsis divergentes; y (iv) dinamicas "
|
|
f"cuasi-independientes (r = {r:.3f}). Este resultado computacional paralela observaciones "
|
|
"biologicas de que Drosophila isogenicas desarrollan diferencias conductuales individuales "
|
|
"estables (Honegger & de Bivort, 2020; Buchanan et al., 2015), y sugiere que la sensibilidad "
|
|
"del conectoma a la entrada sensorial, amplificada por plasticidad Hebbiana, es suficiente "
|
|
"para explicar individualidad conductual sin invocar variacion genetica o estocasticidad "
|
|
"del desarrollo."
|
|
)
|
|
|
|
pdf.subsection_title('4.3 Plasticidad: Conservadora pero Consecuente')
|
|
pdf.body_text(
|
|
"La plasticidad Hebbiana en nuestra simulacion es deliberadamente conservadora (eta = 1e-4), "
|
|
"produciendo cambios de peso de como maximo 0.81% relativo a la linea base. Sin embargo, "
|
|
"incluso estas modificaciones microscopicas son suficientes para producir perfiles conductuales "
|
|
f"mediblemente diferentes. El sesgo de depresion/potenciacion {100*dep/n_synapses:.0f}/"
|
|
f"{100*pot/n_synapses:.0f} refleja homeostasis sinaptica: solo sinapsis con actividad "
|
|
"correlacionada sostenida resisten el debilitamiento por defecto. Esto crea una presion de "
|
|
"seleccion Darwiniana a nivel sinaptico."
|
|
)
|
|
|
|
pdf.subsection_title('4.4 Limitaciones')
|
|
pdf.body_text(
|
|
"Deben notarse varias limitaciones. (1) Nuestro modelo neuronal LIF carece de muchos detalles "
|
|
"biofisicos (computacion dendritica, neuromodulacion, uniones gap). (2) La regla de plasticidad "
|
|
"Hebbiana es una simplificacion; la Drosophila biologica emplea multiples formas de plasticidad. "
|
|
"(3) Los proxies de integracion son aproximaciones con suposiciones significativas (e.g., "
|
|
"computacion de Phi sobre cuatro particiones gruesas en lugar de la descomposicion completa "
|
|
"requerida por TII 4.0). (4) La escala temporal de simulacion (100 s) es corta respecto a las "
|
|
"horas y dias durante los cuales la individualidad biologica se desarrolla. (5) El mapeo "
|
|
"sensoriomotor de lazo cerrado involucra decisiones de ingenieria en el decodificador DN-motor. "
|
|
"(6) El hardware utilizado (GPU de consumo con 8 GB VRAM) limita la resolucion temporal de "
|
|
"actualizaciones de plasticidad y la duracion de sesiones de simulacion continua."
|
|
)
|
|
|
|
# ── CONCLUSION ──
|
|
pdf.section_title('5. Conclusion')
|
|
pdf.body_text(
|
|
"Hemos demostrado que el conectoma completo de FlyWire, implementado como red neuronal "
|
|
"pulsante controlando un cuerpo biomecanico con plasticidad Hebbiana, genera espontaneamente: "
|
|
"(1) patrones estables de integracion neural medibles por metricas proxy multi-teoria; "
|
|
"(2) individualidad conductual desde condiciones iniciales identicas; y (3) divergencia "
|
|
"sinaptica dependiente de experiencia. Este es, hasta donde sabemos, la primera simulacion "
|
|
"embodied de cerebro completo que integra todas estas capacidades. El sistema proporciona "
|
|
"una plataforma para estudiar como la arquitectura del conectoma restringe y habilita la "
|
|
"computacion neural, la diversidad conductual y la integracion de informacion a escala "
|
|
"de cerebro completo."
|
|
)
|
|
|
|
pdf.body_text(
|
|
"Disponibilidad del codigo: El codigo fuente completo, framework de simulacion y scripts "
|
|
"de analisis estan disponibles publicamente en https://github.com/erojasoficial-byte/fly-brain "
|
|
"bajo la licencia MIT. Los datos del conectoma FlyWire estan disponibles a traves del "
|
|
"proyecto FlyWire (https://flywire.ai)."
|
|
)
|
|
|
|
# ── AGRADECIMIENTOS ──
|
|
pdf.section_title('Agradecimientos')
|
|
pdf.body_text(
|
|
"El autor agradece al Consorcio FlyWire (Dorkenwald et al., 2024; Schlegel et al., 2024) "
|
|
"por hacer disponible el conectoma completo de Drosophila melanogaster bajo terminos de "
|
|
"acceso abierto. El modelo biomecanico NeuroMechFly v2 (Lobato-Rios et al., 2024) y el "
|
|
"motor de fisica MuJoCo (DeepMind) proporcionaron el framework de simulacion corporizada. "
|
|
"Este trabajo fue realizado de forma independiente y no recibio financiamiento externo. "
|
|
"Los computos se realizaron en hardware de consumo (Intel i7-13620H, NVIDIA RTX 4060 "
|
|
"Laptop GPU, 64 GB RAM)."
|
|
)
|
|
|
|
# ── REFERENCIAS ──
|
|
pdf.add_page()
|
|
pdf.section_title('Referencias')
|
|
pdf.set_font('Helvetica', '', 7.5)
|
|
refs = [
|
|
"Baars, B.J. (1988). A cognitive theory of consciousness. Cambridge University Press.",
|
|
"Buchanan, S.M., Kain, J.S., & de Bivort, B.L. (2015). Neuronal control of locomotor handedness in Drosophila. PNAS, 112(21), 6700-6705.",
|
|
"Dehaene, S. & Naccache, L. (2001). Towards a cognitive neuroscience of consciousness. Cognition, 79(1-2), 1-37.",
|
|
"Dorkenwald, S. et al. (2024). Neuronal wiring diagram of an adult brain. Nature, 634, 124-138.",
|
|
"FlyGM (2026). Whole-Brain Connectomic Graph Model Enables Whole-Body Locomotion Control in Fruit Fly. arXiv:2602.17997.",
|
|
"Honegger, K.S. & de Bivort, B.L. (2020). A neurodevelopmental origin of behavioral individuality in the Drosophila visual system. Science, 367(6482).",
|
|
"Kain, J.S., Stokes, C., & de Bivort, B.L. (2012). Phototactic personality in fruit flies and its suppression by serotonin and white. PNAS, 109(48), 19834-19839.",
|
|
"Koch, C. et al. (2016). Neural correlates of consciousness: progress and problems. Nature Reviews Neuroscience, 17(5), 307-321.",
|
|
"Leung, C. et al. (2021). Integrated information structure collapses with anesthetic loss of conscious arousal in Drosophila melanogaster. PLOS Computational Biology, 17(2), e1008722.",
|
|
"Lobato-Rios, V. et al. (2024). NeuroMechFly v2: simulating embodied sensorimotor control in adult Drosophila. Nature Methods, 21(12), 2353-2362.",
|
|
"Metzinger, T. (2003). Being No One: The Self-Model Theory of Subjectivity. MIT Press.",
|
|
"Schlegel, P. et al. (2024). Whole-brain annotation and multi-connectome cell typing of Drosophila. Nature, 634, 139-152.",
|
|
"Shiu, P.K. et al. (2024). A Drosophila computational brain model reveals sensorimotor processing. Nature, 634, 210-219.",
|
|
"Tononi, G., Boly, M., Massimini, M., & Koch, C. (2016). Integrated information theory: from consciousness to its physical substrate. Nature Reviews Neuroscience, 17(7), 450-461.",
|
|
]
|
|
|
|
for ref in refs:
|
|
pdf.multi_cell(0, 3.5, ref, new_x="LMARGIN", new_y="NEXT")
|
|
pdf.ln(1.5)
|
|
|
|
# ── Informacion Suplementaria ──
|
|
pdf.add_page()
|
|
pdf.section_title('Informacion Suplementaria')
|
|
|
|
pdf.subsection_title('S1. Hardware y Software')
|
|
pdf.body_text(
|
|
"Todas las simulaciones se realizaron en una computadora portatil con las siguientes "
|
|
"especificaciones: Intel Core i7-13620H (13a Generacion, 10 nucleos), 64 GB DDR5 RAM, "
|
|
"NVIDIA GeForce RTX 4060 Laptop GPU (8 GB GDDR6 VRAM). Software: Python 3.10, PyTorch 2.5.1 "
|
|
"(CUDA 12.1), MuJoCo 3.2.7, flygym (NeuroMechFly v2). Sistema operativo: Windows 11 Pro. "
|
|
"Cada sesion de simulacion pareada corre aproximadamente 7 horas de tiempo real para producir "
|
|
"~100 segundos de tiempo simulado a 5 kHz de resolucion neural."
|
|
)
|
|
|
|
pdf.subsection_title('S2. Resumen de Sesiones')
|
|
pdf.body_text(
|
|
"Se realizaron un total de 20 sesiones de medicion de integracion neural durante un periodo "
|
|
"de 24 horas (11-12 de marzo de 2026), comprendiendo 2 sesiones de mosca unica y 8 sesiones "
|
|
"pareadas de dos moscas. La sesion nocturna (session_20260311_233655, marcada con * en Fig. 7) "
|
|
"fue seleccionada como dataset primario debido a su longitud (2,086 puntos de medicion por "
|
|
"mosca, ~104.3 s de tiempo simulado). Los resultados fueron replicados en todas las sesiones "
|
|
"subsiguientes."
|
|
)
|
|
|
|
pdf.subsection_title('S3. Formula del Indice de Integracion')
|
|
pdf.body_text(
|
|
"CI = 0.3 * Phi_norm + 0.3 * Difusion_norm + 0.2 * AutoModelo_norm + 0.2 * Complejidad_norm\n\n"
|
|
"Donde cada componente se calcula como sigue:\n"
|
|
"- Phi_norm: Informacion mutua normalizada entre 4 particiones cerebrales (visual, motora, olfativa, integradora)\n"
|
|
"- Difusion_norm: Fraccion de particiones que reciben senales de neuronas hub, dividida por particiones totales\n"
|
|
"- AutoModelo_norm: |r de Pearson| entre entrada propioceptiva y salida motora con retardo de 10 pasos\n"
|
|
"- Complejidad_norm: (alcance_espacial / n_particiones) * entropia_temporal, de cascada de perturbacion"
|
|
)
|
|
|
|
# ── Save ──
|
|
pdf_path = BASE / "paper_individualidad_emergente_ES.pdf"
|
|
pdf.output(str(pdf_path))
|
|
|
|
file_size = os.path.getsize(pdf_path)
|
|
print(f"\n{'=' * 70}")
|
|
print(f" PDF GUARDADO: {pdf_path}")
|
|
print(f" Tamano: {file_size / 1024 / 1024:.1f} MB, Paginas: {pdf.page_no()}")
|
|
print(f"{'=' * 70}")
|