Aller au contenu

Expérience · Graphes

FlyWire Codex : la propagation dans les graphes du connectome, cartographiée

Cette expérience s’inscrit dans mon étude de la propagation de l’activité dans les réseaux de neurones et dans les graphes, en vue d’une IA embarquée. FlyWire Codex en fournit des cas réels : trois défis de calcul sur les graphes du connectome de la drosophile publié par le consortium FlyWire. Chaque score est recalculé par un calcul déterministe, identique d’une exécution à l’autre, et les données de graphes ont permis d’établir une carte : une visualisation de la propagation par problème, des schémas et des tableaux. Les trois résultats sont postérieurs à la clôture de leur défi et partent de solutions publiées par d’autres participants ; la provenance est donnée avec chacun.

950,3271484375Max Quasi-Cliques : en tête du classement après la clôture du défiaffiché le 31/08/2026, page relevée le 07/10/2026
35 474 664Minimum Feedback Arc Set : en tête du classement après la clôture du défienvoi du 05/10/2026, page relevée le 07/10/2026
1 396 295synapses dans les colonnes (Visual Columns), en tête du classement après la clôture du défi23 247 cellules cartographiées, envoi du 24/09/2026, page relevée le 07/10/2026
3 / 3scores recalculés en arithmétique exacterecalcul du 11/10/2026 sur les fichiers de solution et les graphes des défis

noyau saut 1 saut 2 saut 3 saut 4 saut 5 sauts 6+ jamais atteints

Propagation de Max Quasi-Cliques depuis le noyau de 40 neurones (niveau 0) dans le connectome, vue en rotation lente. Chaque point est un neurone, placé à sa position dans le fichier de coordonnées de la version 783 ; il s’allume au rythme de son saut depuis le noyau, du violet (saut 0) au cyan (sauts 6 et plus). Un neurone sur 120 est tracé, pour la lisibilité ; le noyau de 40 l’est en entier. La rotation est un affichage, pas un calcul. Calcul de diffusion sur le graphe, sans modèle de vision.

1. La question : comment une activité se propage-t-elle dans un graphe ?

Dans un réseau, une activité part d’un nœud et atteint ses voisins saut après saut. Où va-t-elle, quelles zones atteint-elle, par quels chemins revient-elle ? C’est la question que j’étudie pour une IA embarquée, et le connectome en offre un terrain à échelle réelle : des graphes de plus de 130 000 neurones et de millions de connexions. FlyWire Codex y pose des problèmes de calcul chiffrés, jugés par un arbitre extérieur. Le schéma ci-dessous fixe le vocabulaire : un saut est une connexion franchie.

saut 0saut 1saut 2saut 3trait en pointillés : retour en arrière
Schéma de principe : propagation en trois sauts depuis un nœud de départ. Les traits pleins avancent ; le trait en pointillés revient en arrière. Illustration, non tirée des données.

Trois défis de Codex sont traités ici. Chacun pose la question de la propagation sous un angle différent.

Défi Graphe Ce qu’on cherche Score
Max Quasi-Cliques 134 181 neurones, 2 511 789 connexions 12 ensembles de neurones, l’ensemble de niveau i devant contenir au moins une part 1/2i de toutes les connexions possibles entre ses membres somme des tailles ki des plus grands ensembles, pondérées par 1/2i
Minimum Feedback Arc Set 136 648 neurones, 5 657 719 connexions pondérées (poids total 41 912 141) un ordre des neurones où le plus de poids possible va vers l’avant poids des connexions allant d’un rang plus bas vers un rang plus haut
Visual Columns 23 452 cellules de 31 types, 270 856 liaisons, 796 colonnes affecter les cellules aux colonnes, au plus une cellule par type et par colonne synapses entre cellules d’une même colonne, puis nombre de cellules affectées

2. FlyWire et son rôle

FlyWire est un consortium scientifique qui a reconstitué et corrigé collectivement le connectome de la drosophile adulte (S. Dorkenwald et al., Nature 634, 2024), puis annoté les types de cellules (P. Schlegel et al., Nature 634, 2024). Codex est la plateforme qui met ces données à disposition et qui héberge des défis de calcul ; les organisateurs tiennent le classement de chaque défi et attribuent le titre de « Winner » à son échéance officielle.

Données et citation d’usage. Les données appartiennent au consortium FlyWire (version 783). S. Dorkenwald et al., « Neuronal wiring diagram of an adult brain », Nature 634, 2024 ; P. Schlegel et al., « Whole-brain annotation and multi-connectome cell typing of Drosophila », Nature 634, 2024. Cette page ne rediffuse aucune donnée brute du connectome (ni liste de neurones, ni liste de connexions) : les figures et les fichiers JSON sont des grandeurs dérivées (comptages, sommes, parts) calculées à partir des graphes des défis, avec les noms des 31 types de cellules annotés par le consortium.

3. Max Quasi-Cliques : les zones denses, saut après saut

ProblèmeMax Quasi-Cliques : 12 ensembles de neurones de densité décroissante (1, 1/2, 1/4, … 1/211)
ArbitreFlyWire Codex, max_clique_challenge
Résultat950,3271484375, en tête du classement après la clôture du défi (31 août 2026), devant 950,326171875 (Pieter Hoogervorst, « Winner » du défi, 2 août 2025), soit un écart d’environ 0,001 point (2−10) ; échéance officielle du défi : 31 août 2025
Provenancece score part de solutions publiées par d’autres participants (Pieter Hoogervorst ; Yehuda Lester et Dean Geckt) ; il a été transmis après la clôture du défi. Chaque ligne du fichier recoupe la ligne correspondante de la solution publiée de P. Hoogervorst à 92,5 %% au moins.
Sourcemax_clique_challenge sur codex.flywire.ai, relevée le 7 octobre 2026 ; score recalculé le 11 octobre 2026 (empreinte du fichier : 4d5f509e21a281cf…)

La règle est publiée sur la page du défi : une ligne de k neurones portant m connexions satisfait le niveau i si m ≥ k(k−1)/2 × 1/2i. Le score additionne ki/2i, où ki est la taille du plus grand ensemble qui satisfait le niveau i. Le résultat vaut exactement 973135/1024. Il ne diffère du score de tête précédent que par un neurone au niveau 10 : 60 431 neurones contre 60 430.

Les 12 lignes du fichier de solution, recalculées dans le graphe du défi (11/10/2026).
Niveau Densité exigée Neurones k Connexions m Densité obtenue
0 1 40 780 1,000000
1 1/2 175 7 646 0,502200
2 1/4 369 16 992 0,250265
3 1/8 723 32 626 0,125002
4 1/16 1 541 74 161 0,062500
5 1/32 3 109 150 986 0,031251
6 1/64 6 207 300 961 0,015626
7 1/128 11 757 539 916 0,007813
8 1/256 20 841 848 345 0,003906
9 1/512 35 828 1 253 544 0,001953
10 1/1024 60 431 1 783 137 0,000977
11 1/2048 97 272 2 310 009 0,000488
101001 00010 000100 0004001751369272331 54143 10956 207611 757720 841835 828960 4311097 27211niveau i (densité exigée 1/2^i)
Taille k de l’ensemble de chaque niveau (échelle logarithmique) : de 40 neurones tous reliés entre eux au niveau 0 à 97 272 neurones au niveau 11.

Visualisation de la propagation

Le niveau 0 est un ensemble de 40 neurones tous reliés deux à deux. En partant d’eux, la propagation atteint 2 271 neurones au saut 1, 11 546 au saut 2, 55 755 au saut 3, 53 083 au saut 4, 9 180 au saut 5, puis 608 aux sauts 6 à 11 ; 1 698 neurones du graphe ne sont jamais atteints (distance la plus courte dans le graphe non orienté). L’ensemble de niveau 11, le plus grand, couvre 74 % des neurones du saut 1, 85 % du saut 3 et s’arrête au saut 5. La figure reprend ces comptages : chaque anneau est un saut.

0123456+
Propagation depuis le noyau de 40 neurones (niveau 0). Chaque anneau est un saut ; l’épaisseur suit le nombre de neurones atteints ; la couleur, du violet au cyan, la part de ces neurones qui appartiennent à l’ensemble de niveau 11.
Neurones atteints à chaque saut depuis le noyau de 40 neurones, et part qui appartient à l’ensemble de niveau 11 (97 272 neurones). Les 1 698 neurones non atteints sont hors du tableau.
Saut Neurones atteints dont dans l’ensemble de niveau 11 Part
0 40 40 100,0 %
1 2 271 1 683 74,1 %
2 11 546 9 496 82,2 %
3 55 755 47 305 84,8 %
4 53 083 38 392 72,3 %
5 9 180 356 3,9 %
6–11 608 0 0,0 %

JSON

4. Minimum Feedback Arc Set : un ordre, et ce qui revient en arrière

ProblèmeMinimum Feedback Arc Set : ordonner les neurones pour que le poids des connexions allant vers l’avant soit maximal (problème réputé difficile, NP-difficile)
ArbitreFlyWire Codex, mfas_challenge
Résultat35 474 664, en tête du classement après la clôture du défi (envoi du 5 octobre 2026), devant 35 470 806 (Gonzalo G. de Polavieja, 26 septembre 2026) ; « Winner » du défi : l’équipe de Justin Ellis-Joyce, Gert-Jan Both et Srinivas Turaga, 35 435 948 ; échéance officielle du défi : 8 octobre 2024 ; avance sur le suivant : 3 858, soit 0,01 %
Provenancece résultat part de solutions déjà publiées par d’autres participants ; il a été transmis après la clôture du défi.
Sourcemfas_challenge sur codex.flywire.ai, relevée le 7 octobre 2026 ; score recalculé le 11 octobre 2026 (empreinte du fichier : c0f925a689d450f3…)

Le score est le poids total des connexions qui vont d’un neurone de rang plus bas vers un neurone de rang plus haut : 35 474 664 sur un poids total de 41 912 141 (84,6 %). Le poids restant, 6 437 477 (15,4 %), revient en arrière : ce sont les arcs de retour.

départ de l’arc (rang plus élevé) arrivée (rang plus bas) arc de retour

Les 100 arcs de retour les plus lourds de l’ordre déposé (Minimum Feedback Arc Set), tracés entre leurs deux neurones dans le connectome, vue en rotation lente. Un arc de retour va d’un neurone de rang plus élevé (violet) vers un neurone de rang plus bas (cyan) : c’est du poids qui ne suit pas l’ordre. Les neurones sont à leur position dans le fichier de coordonnées de la version 783. Les arcs s’allument un à un par poids décroissant, de 1 297 à 253. Ces 100 arcs portent 0,57 % des 6 437 477 de poids de retour : ce sont les plus lourds, pas un échantillon représentatif. La rotation est un affichage, pas un calcul. Calcul sur le graphe, sans modèle de vision.
bloc d’arrivée (rang croissant)bloc de départ1112122424diagonale dorée : un bloc vers lui-même
Carte des flux selon l’ordre déposé. Les 136 648 neurones sont rangés puis découpés en 24 blocs de rangs consécutifs ; chaque case donne le poids des connexions du bloc de départ (ligne) vers le bloc d’arrivée (colonne), en échelle logarithmique. Au-dessus de la diagonale dorée, la propagation suit l’ordre ; en dessous, elle revient en arrière.
0 %50 %100 %16121824bloc de départ (rang croissant)vers l’avantmême blocvers l’arrière
Pour chaque bloc, répartition du poids sortant : vers les blocs suivants (cyan), vers le même bloc (gris), vers les blocs précédents (violet).
Poids des connexions selon l’écart entre les rangs de leurs deux extrémités. À chaque échelle, la majorité du poids va vers l’avant.
Portée (écart de rangs) Poids vers l’avant Poids vers l’arrière Part vers l’avant
1 – 99 1 903 714 391 736 82,9 %
100 – 999 3 804 671 762 511 83,3 %
1 000 – 9 999 13 099 506 2 433 544 84,3 %
10 000 – 99 999 15 341 676 2 669 820 85,2 %
≥ 100 000 1 325 097 179 866 88,0 %

JSON

5. Visual Columns : la propagation dans une colonne

ProblèmeVisual Columns : affecter des cellules du lobe optique à 796 colonnes, au plus une cellule par type et par colonne ; le nombre de synapses entre cellules d’une même colonne prime, puis le nombre de cellules affectées
ArbitreFlyWire Codex, visual_columns_challenge
Résultat1 396 295 synapses dans les colonnes et 23 247 cellules cartographiées, en tête du classement après la clôture du défi (envoi du 24 septembre 2026), devant 1 396 267 synapses et 23 025 cellules (David García-Soriano, « Winner » du défi, 30 avril 2024) ; échéance officielle du défi : 30 avril 2024 ; avance : 28 synapses
Provenancece résultat part de solutions publiées par d’autres participants, dont celle de David García-Soriano ; il a été transmis après la clôture du défi.
Sourcevisual_columns_challenge sur codex.flywire.ai, relevée le 7 octobre 2026 ; score recalculé le 11 octobre 2026 (empreinte du fichier : e2d98d1f53e3705d…)
Les trois valeurs sont publiées sur la page du défi (relevé du 7 octobre 2026) ; la référence et le résultat présenté ont été recalculés le 11 octobre 2026 sur les fichiers.
Point de repère Synapses dans les colonnes Cellules affectées
Référence officielle du défi 1 381 915 22 578
David García-Soriano, « Winner » du défi 1 396 267 23 025
Résultat présenté 1 396 295 23 247

Une colonne rassemble au plus une cellule de chacun des 31 types. Avec l’affectation déposée, 101 587 liaisons entre cellules tombent à l’intérieur d’une colonne : de 1 type à l’autre, 572 liaisons possibles sur 930 (31 × 30) sont présentes. Une colonne retient entre 150 et 2 820 synapses (médiane 1 870).

La propagation se lit sur ces liaisons : à chaque saut, l’activité d’un type se répartit entre ses types voisins au prorata de ses synapses sortantes dans les colonnes. Départ du type L1 : saut 1 : Mi1 34 %, L5 31 %, C3 17 % ; saut 2 : L1 12 %, Mi1 10 %, L2 10 %. Départ du type R7 : saut 1 : R8 53 %, L3 24 %, Tm20 9 % ; saut 2 : Mi9 20 %, Tm20 19 %, Mi1 15 %. Au bout de quatre sauts, l’activité est déjà étalée sur la plupart des types.

départ : L101234L1Mi1L5C3Mi9C2L2Mi4Tm3T2Tm1T3T1T4aTm21T4bTm2T4dT4cTm20T2aT5dT5cT5bT5aTm9Tm4L3L4R8R7départ : R701234R7R8L3Mi9Tm20Mi1Mi4Tm9Tm1T2L1C3Tm2T5cT5dTm21T5bL2T3T5aTm3L5T2aT4cT4aT4bT4dT1Tm4C2L4
Diffusion de l’activité d’un type de départ (saut 0) sur les 31 types de la colonne, de 0 à 4 sauts. Plus la case est lumineuse, plus la part d’activité du type est grande. Calcul de diffusion sur le graphe des types, sans modèle de vision.

JSON

6. Ce qui est vérifié, et par qui

Résultat Contrôle Par qui Date
Max Quasi-Cliques score recalculé en arithmétique rationnelle exacte (973135/1024) ; les deux scores de tête publiés sont retrouvés (950,326171875) deux programmes écrits à partir de la règle publiée, dont un reproduisant le code de référence de la page du défi ; recalcul pour cette page 23/08/2026 et 11/10/2026
Minimum Feedback Arc Set score recalculé (35 474 664) ; 4 scores publiés sur 4 retrouvés ; 7 fichiers volontairement invalides sur 7 rejetés vérificateur indépendant de la recherche, écrit à partir de la seule règle publiée ; recalcul pour cette page 07/10/2026 et 11/10/2026
Visual Columns score recalculé (1 396 295 / 23 247, 0 violation) ; 5 scores publiés sur 5 retrouvés ; 9 fichiers volontairement invalides sur 9 rejetés vérificateur indépendant de la recherche, écrit à partir de la seule règle publiée ; recalcul pour cette page 07/10/2026 et 11/10/2026

Le classement de chaque défi est tenu par FlyWire Codex, qui annonce vérifier les envois. Le juge officiel se trouve côté organisateurs : les programmes ci-dessus reprennent la règle telle qu’elle est publiée sur la page de chaque défi.

Revérifier soi-même

Les graphes sont ceux des défis, à télécharger sur Codex. Ce programme, en bibliothèque standard seule, recalcule les trois scores à partir d’un graphe et d’un fichier de solution ; il lit les nombres comme des entiers ou des rationnels exacts, sans arrondi.

import csv
from fractions import Fraction as F

def lire(chemin, entete=True):
    with open(chemin, newline="") as f:
        r = csv.reader(f)
        if entete:
            next(r)
        return list(r)

# Max Quasi-Cliques : graphe du défi (2 colonnes, sans en-tête) et fichier de 12 lignes de neurones
def score_quasi_cliques(aretes, lignes):
    stats = []
    for l in lignes:
        s = set(l)
        k = len(s)
        m = sum(1 for a, b in aretes if a in s and b in s)
        stats.append((k, m))
    return sum(F(max([k for k, m in stats if m >= F(k * (k - 1), 2) / 2 ** i], default=0), 2 ** i)
               for i in range(12))

# MFAS : graphe pondéré (Source, Cible, Poids) et ordre (Neurone, Rang)
def score_mfas(aretes, rang):
    return sum(int(w) for a, b, w in aretes if int(rang[a]) < int(rang[b]))

# Visual Columns : liaisons (de, vers, synapses) et affectation (cellule, type, colonne)
def score_colonnes(liaisons, colonne):
    return sum(int(w) for a, b, w in liaisons if colonne.get(a) is not None and colonne.get(a) == colonne.get(b))

aretes = lire("graphe_quasi_cliques.csv", entete=False)
print(score_quasi_cliques(aretes, lire("solution_quasi_cliques.csv", entete=False)))
rang = {n: r for n, r in lire("ordre_mfas.csv")}
print(score_mfas(lire("graphe_mfas.csv"), rang))
colonne = {c: (int(k) if k.isdigit() else None) for c, t, k in lire("colonnes.csv")}
print(score_colonnes(lire("liaisons_colonnes.csv"), colonne))

Sorties attendues avec les fichiers présentés : 973135/1024, 35474664 et 1396295. Les fichiers JSON de cette page portent l'empreinte sha256 de chaque fichier lu.

7. La carte

Les données de graphes m'ont permis d'établir des cartes : pour chaque problème, une vue d'ensemble calculée une fois, avec sa date et l'empreinte des fichiers dont elle est tirée, et qui se recalcule à l'identique à partir des données du défi. C'est le même principe que la carte de mes recherches, où chaque résultat certifié et chaque impasse sont inscrits (voir La carte).

Graphedu défiProblèmeun scoreSolutiondéposéeVérificationexacteCarterésultat, date
Du graphe à la carte : chaque étape produit une pièce qui se revérifie.

La carte du câblage dans une colonne montre, type de cellule par type de cellule, où se concentrent les synapses retenues dans les colonnes.

type d'arrivéeL2L2L1L1Mi1Mi1C3C3Tm1Tm1L5L5Tm2Tm2L3L3C2C2Mi4Mi4Mi9Mi9Tm3Tm3Tm9Tm9Tm4Tm4L4L4R8R8Tm20Tm20T3T3T1T1T4aT4aT2aT2aR7R7T2T2T4bT4bT4cT4cT5bT5bT5aT5aT5cT5cTm21Tm21T5dT5dT4dT4dla diagonale est vide : une seule cellule par type et par colonne
Synapses dans les colonnes, de type à type (ligne : départ, colonne : arrivée), échelle logarithmique ; les types sont rangés par force sortante décroissante. Total : 1 396 295 synapses.
Carte Ce qu'elle montre Fichier
Anneaux des sauts où les ensembles denses se situent par rapport au noyau de 40 neurones flywire_quasi_cliques.json
Flux entre blocs la part du poids qui avance dans l'ordre et celle qui revient flywire_mfas.json
Câblage d'une colonne les types de cellules reliés dans les colonnes, et la diffusion de l'activité flywire_visual_columns.json

8. Ce que modélise ce type de question

Les trois problèmes formalisent trois manières d'interroger un réseau où une activité circule : quels groupes de neurones forment une zone dense, selon quel ordre l'activité avance et ce qui revient en arrière, quelles unités se répètent à l'identique. Ce sont des questions de graphes, posées à l'échelle réelle d'un connectome publié ; elles sont aussi celles de l'étude de la propagation pour une IA embarquée, où la même exigence s'applique : un résultat qui se recalcule à l'identique et qui se revérifie.

Mon projet d'IA au service de ma recherche

Ce défi n'est pas un but en soi : c'est un banc d'essai de ma recherche sur une IA embarquée certifiable. Mon projet d'IA, dont le fonctionnement reste confidentiel, me permet d'atteindre la tête des classements des trois défis du Codex après leur clôture, scores recalculés en arithmétique exacte. Le certificat et l'arbitre en font foi : ce n'est pas mon explication qu'il faut croire, c'est le résultat qui se revérifie. Il s'agit du meilleur résultat connu à la date indiquée, pas d'un optimum démontré.

Tous les résultats, avec leurs sources et leurs dates

→ Voir les défis sur FlyWire Codex