Files
fly-brain-full/generate_paper_es.py
erojasoficial-byte c4117987e7 Add two-fly experiment, neural integration paper, and full experimental data
- 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
2026-03-12 19:10:12 -05:00

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}")