From 131ad8406cc1dc3eaf0d0ecc709cab0819e9cc11 Mon Sep 17 00:00:00 2001 From: jsboige Date: Sun, 20 Sep 2026 22:50:50 +0200 Subject: [PATCH] fix(density,#17040): redressement paquet P08 -- 11 cellules md supprimees (ICT-28/29/31) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ICT-28 (4 suppressions) : 4 "## Lecture N --" ajoutees par la campagne #16437 paraphrasent les cellules "**Interpreetation.**" preexistantes (memes valeurs rho_c=0.425, saut 0.472, fraction finale 0.000/1.000). Regle (c) doublon d'une lecture preexistante -> suppression des ajouts campagne, preservation des Interpretation. antérieures. ICT-29 (3 suppressions) : 3 "#### 5a/b/c." ajoutees par la campagne #16083 lisent les cellules code EXERCICE (stubs "# TODO etudiant") qui n'ont pas d'output de sortie commited -- ces Lectures sont des lectures d'exercice, interdites par la regle (c). Suppression. ICT-31 (4 suppressions) : 4 "**Lecture chiffree --" ajoutees par la campagne #16454 paraphrasent les "### Lecture --" preexistantes (memes valeurs recovery_score, temps de retour, variance de champ). Regle (c) doublon d'une lecture preexistante -> suppression des ajouts, preservation des ### Lecture. anterieures. Cellules code, outputs, execution_count, metadata, IDs non touches. Byte-identique sur 30 cellules code (8+8+14). UTF-8 sans BOM. Markdown-only -- aucune re-execution requise (exception C.2). Co-Authored-By: Claude Sonnet 5 --- .../ICT-28-CollectiveAdoption.ipynb | 46 +------------------ .../ICT-29-ConceptInoculation.ipynb | 44 +----------------- .../ICT-31-ContrasteTroisSubstrats.ipynb | 30 +----------- 3 files changed, 3 insertions(+), 117 deletions(-) diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-28-CollectiveAdoption.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-28-CollectiveAdoption.ipynb index ac041117cf..a4fd2e24cc 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-28-CollectiveAdoption.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-28-CollectiveAdoption.ipynb @@ -163,17 +163,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Lecture 1 — Le seuil existe : rho_c = 0.425, saut maximal 0.472\n", - "\n", - "Le verdict `critical_threshold` tranche : `threshold_exists = True`. L'adoption finale de la convention cible vaut **0.000** a rho = 0.05 et **1.000** a rho = 0.95 -- entre les deux, la courbe en S franchit un saut maximal de **0.472** entre points adjacents, et le rho_c (mi-saut le plus raide) tombe a **0.425**.\n", - "\n", - "La lecture a retenir : la performativite n'est pas un effet graduel -- elle est un phénomene de masse critique. En dessous d'environ 0.4, la convention cible ne perce pas ; au-dessus, elle devient inarretable. C'est la signature quantitative du seuil que la synthèse du notebook relie a la performativité : la convention ne triomphe pas parce qu'elle est meilleure, mais parce que suffisamment d'instigateurs la portent." - ] - }, { "cell_type": "markdown", "id": "a1-interp-seuil", @@ -231,17 +220,6 @@ "print(\" -> la convention novelle meurt : les naïfs convergent vers des conventions arbitraires.\")" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Lecture 2 — Sous le seuil : 0.011 contre 0.333 au niveau du hasard\n", - "\n", - "Sous le seuil, le verdict `below_threshold_dies` est net : a rho = 0.1, l'adoption finale de la cible vaut **0.011**, alors que le niveau du hasard (uniformite 1/n sur trois conventions) vaut **0.333**. La convention nouvelle ne meurt pas seulement -- elle finit TRENTE fois sous le niveau d'une convention choisie au hasard.\n", - "\n", - "La lecture contre-intuitive que le notebook encadre : les naifs ne restent pas indifferents, ils convergent vers des conventions arbitraires (les conventions rivales se cristallisent), et la cible disparait du paysage. Autrement dit, sous la masse critique, l'effort des instigateurs n'est pas seulement insuffisant -- il est efface par la dynamique d'imitation locale." - ] - }, { "cell_type": "markdown", "id": "a2-interp-meurt", @@ -296,17 +274,6 @@ "print(\" -> la convention novelle cascade : la cible devient quasi-universelle.\")" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Lecture 3 — Au-dessus du seuil : la cascade mene a 0.850\n", - "\n", - "Au-dessus du seuil, le verdict `above_threshold_cascades` confirme : a rho = 0.8, l'adoption finale de la cible atteint **0.850** -- la convention cascade jusqu'a devenir quasi-universelle, sans intervention externe additionnelle apres l'initialisation.\n", - "\n", - "Le contraste avec la lecture 2 est la structure du résultat : 0.011 contre 0.850 pour un rho passe de 0.1 a 0.8. La difference n'est pas de degre mais de regime -- le meme mecanisme d'imitation qui enterre la cible sous le seuil la generalise au-dessus. C'est exactement la non-linéarité en S -- la transition sigmoïde raide autour de rho_c = 0.425 -- que la cellule 2 avait mesurée, vue cette fois par le verdict booléen des deux extrémités." - ] - }, { "cell_type": "markdown", "id": "2cd8121d", @@ -353,17 +320,6 @@ "print(\" -> sans instigateur, la cible n'est jamais introduite : pas de cascade spontanée.\")" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Lecture 4 — Contrôle négatif : 0.000 sans instigateur\n", - "\n", - "Le contrôle négatif ferme la boucle : a rho = 0 (aucun instigateur), l'adoption de la cible vaut **0.000** sur toutes les simulations -- `no_cascade = True`. Sans instigateur, la cible n'est jamais introduite dans la population : aucune cascade spontanee ne peut la faire emerger.\n", - "\n", - "C'est l'épreuve falsifiante du notebook : la cascade mesuree a rho = 0.8 ne peut pas etre un artefact du mecanisme d'imitation seul -- si l'imitation suffisait a generaliser n'importe quelle convention, la cible percerait aussi a rho = 0. Le seuil rho_c = 0.425 mesure donc bien la contribution specifique des instigateurs : le moteur est l'interaction entre masse critique initiale et dynamique d'adoption, pas l'un ou l'autre isole." - ] - }, { "cell_type": "markdown", "id": "a3-interp-controle", @@ -587,4 +543,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-29-ConceptInoculation.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-29-ConceptInoculation.ipynb index fcf272428b..0ae616149a 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-29-ConceptInoculation.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-29-ConceptInoculation.ipynb @@ -459,24 +459,6 @@ " print(f\"transmission_rate={rate:.2f} -> fraction finale post-retrait = {np.mean(finals):.3f}\")" ] }, - { - "cell_type": "markdown", - "id": "enrich13410-ict29-c12", - "metadata": { - "tags": [] - }, - "source": [ - "#### 5a. La transition de phase du seuil endémique — et sa saturation\n", - "\n", - "Le balayage mesure la survie **post-retrait** (la grandeur exacte de la section 3) pour cinq taux de transmission :\n", - "\n", - "| `transmission_rate` | 0,05 | 0,10 | 0,20 | 0,40 | 0,60 |\n", - "|---|---|---|---|---|---|\n", - "| fraction finale post-retrait | **0,000** | **0,000** | **0,812** | 0,887 | 0,912 |\n", - "\n", - "Deux lectures, que le chiffre porte et que la prose ne disait pas. **(1) Le seuil est une frontière de phase, pas une pente.** Entre 0,10 et 0,20, la survie passe de l'extinction **exacte** (0,000) à l'endémie **massive** (0,812) : la frontière $R_0 = 1$ de la section 3 est localisée **entre 0,10 et 0,20**, à autres paramètres fixés. En dessous, doubler le taux ne fait rien (0,05 → 0,10 : toujours 0,000) ; au-dessus, le gain s'effondre (+0,075 puis +0,025 pour deux pas identiques de 0,20). **(2) Le régime endémique sature.** Une fois la frontière franchie, tripler le taux (0,20 → 0,60) n'achète que +0,10 de fraction : la contrainte n'est plus la transmission, elle est passée ailleurs — taille du parc encore infectable, rythme de l'oubli. Signature des systèmes à seuil : le paramètre critique décide du **tout ou rien**, les autres paramètres décident du **combien**." - ] - }, { "cell_type": "markdown", "id": "e5860144", @@ -525,18 +507,6 @@ " print(\"Aucune conversion (augmentez le taux de transmission).\")" ] }, - { - "cell_type": "markdown", - "id": "enrich13410-ict29-c14", - "metadata": { - "tags": [] - }, - "source": [ - "#### 5b. Ce que la baseline du stub mesure — une adoption toutes précoces\n", - "\n", - "Avant même completion, le stub imprime la distribution des âges d'adoption — et cette **baseline** répond déjà à la question posée, d'une façon qui la déplace. Sur cette trajectoire : **28 conversions**, âge moyen **9,1** tours, médian **8**, et **zéro** adoption au-delà du tour 150. Moyenne ≈ médiane : distribution resserrée, sans queue. Autrement dit, à ces paramètres **il n'existe pas de convertis tardifs** — toute l'adoption se joue dans les dix premiers tours d'une course de 200. La question « les tardifs ont-ils un profil différent ? » est légitime en général mais **viciée sur ce banc** : comparer deux profils exige deux populations, et la population tardive est vide. Le complément intéressant de l'exercice n'est donc pas de séparer précoces et tardifs, mais de trouver les paramètres qui **créent** des tardifs — biais plus fort, ou taux plus bas, en s'inspirant du seuil de 5a." - ] - }, { "cell_type": "markdown", "id": "1755d658", @@ -588,18 +558,6 @@ "print(f\"paires P-P (hasard p^2) = {pp_expected_random:.3f}\")\n", "print(f\"assortativité (obs - p^2)= {pp_observed - pp_expected_random:+.3f} (>0 = porteurs regroupés)\")" ] - }, - { - "cell_type": "markdown", - "id": "enrich13410-ict29-c16", - "metadata": { - "tags": [] - }, - "source": [ - "#### 5c. La mesure d'assortativité est dégénérée à saturation\n", - "\n", - "La baseline du stub imprime : fraction de porteurs **1,000**, paires P-P observées **1,000**, attendu au hasard $p^2$ **1,000**, assortativité **+0,000**. Ces quatre nombres ne sont pas quatre mesures indépendantes : quand la fraction vaut 1, **toutes** les paires sont porteur-porteur par construction, $p^2 = 1$, et l'écart `obs − p²` est **identiquement nul quelle que soit la structure du réseau d'interactions**. Le `+0,000` imprimé n'est donc pas l'absence de polarisation : c'est l'absence de **pouvoir discriminant** — la polarisation émergente, objet de l'exercice, est **non mesurable sur cette configuration**. Pour que la grandeur parle, il faut une fraction intermédiaire, exactement le régime mesuré en section 2 à biais 0,9 (**0,335**) : à ce réglage $p^2 = 0{,}112$, et un écart observé ne peut plus être un artefact de saturation. L'exercice complet consiste autant à **choisir le régime de mesure** qu'à calculer la grandeur." - ] } ], "metadata": { @@ -623,4 +581,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb index af096783d5..cf2ded3cc1 100644 --- a/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb +++ b/MyIA.AI.Notebooks/IIT/ICT-Series/ICT-31-ContrasteTroisSubstrats.ipynb @@ -506,13 +506,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Lecture chiffrée — la variance comme jauge de réparation.** La métrique de la cellule n'est pas un compteur de cellules vivantes mais la **variance du champ $V$ dans le disque** $r=6$ centré sur l'argmax : la référence vaut $0{,}0155$, et après 360 pas de régénération la variance mesurée est retombée à $0{,}0038$ — le champ se recolle à ~25 % de sa variance d'origine ($0{,}0038/0{,}0155 \\approx 0{,}245$). L'échec de `time_to_recover` se lit dans le même compteur, sans quitter la sortie : la cible était 85 % de la référence, soit $0{,}85 \\times 0{,}0155 \\approx 0{,}0132$, et la variance réparée $0{,}0038$ n'en représente qu'environ 29 % — l'horizon 360 pas ne peut pas l'atteindre. La figure décline le constat en trois panneaux (référence $t=1200$, juste après `do(ablation)`, après 360 pas) : le cercle cyan de rayon 6 cerne la zone dévastée, et le panneau final montre le bord du disque recolonisé par les taches voisines — c'est la mitose qui régénère le site, pas le site lui-même.\n" - ] - }, { "cell_type": "code", "execution_count": 6, @@ -565,13 +558,6 @@ "print(f\" recovery_score sur le site = {recovery_gol:.3f} (le site ne redevient jamais un glider)\")" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Lecture chiffrée — une bascule de catégorie, pas une dégradation.** La sortie pose d'abord le diagnostic de repos, glider intact : période `4` **et** déplacement `(1, 1)` — exactement la condition que la cellule va re-tester ensuite. Retirer la cellule arrière $(2, 3)$ suffit : les deux mesures plongent à `None` et `None`, et la condition composée (période 4 **et** déplacement (1, 1)) retombe à `False` — non pas « moins périodique », mais *hors de l'espace des gliders* d'un coup. La ligne `glider reconstitue : False` est un verdict binaire : un seul bit d'état éteint dans le motif fait basculer la catégorie entière, sans état intermédiaire que l'instrument de détection saurait nommer.\n" - ] - }, { "cell_type": "code", "execution_count": 7, @@ -619,13 +605,6 @@ "print(\" aucune structure n'a ete reconstruite (il n'y en a pas).\")\n" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Lecture chiffrée — le retour en 11,5 unités de temps.** Le kick part du point fixe haut $x^* = 6{,}860$ et coupe l'état à $x = 4{,}459$ — c'est le produit $0{,}65 \\times x^*$ affiché par la sortie comme « −35 % ». Le critère d'arrêt est chiffré dans la boucle : $\\lvert x - x^* \\rvert \\le 0{,}01\\,x^* \\approx 0{,}069$, i.e. l'état est « revenu » dès qu'il est à moins de 1 % du point fixe. Il l'atteint en **230 pas Euler** (dt = 0,05), soit **11,5 unités de temps simulées** — et ce dans une boucle plafonnée à 4 000 pas : le retour consomme 5,75 % de la fenêtre de scrutation. La direction du diagnostic compte autant que la durée : kick vers le bas, retour vers le *même* point fixe haut — la sortie le dit en toutes lettres : « relaxation, pas regeneration ».\n" - ] - }, { "cell_type": "markdown", "id": "ict31-14", @@ -836,13 +815,6 @@ "print(\" (valeurs de part et d'autre de zero : l'instrument ne discrimine pas ici)\")" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Lecture chiffrée — trois décimales pour dire « rien ».** L'instrument GOL travaille sur une grille **recentrée** : le centre de masse du motif est translaté au centre (avec repli modulo 32, sur le tore), et l'ancre est la moyenne de 15 trames (échantillonnage tous les 4 pas d'une trajectoire de 60). Mesures exactes : contrôle intact `0.000`, kick d'1 cellule (la cellule arrière de l'axe R) `0.286`, kick de 2 cellules `−0.167`. Deux anomalies à l'œil nu. Pas de **dose-réponse** : retirer davantage de cellules ne grossit pas la valeur — l'amplitude *décroît* (0,286 → 0,167) et le signe change. Et pas d'ordre de grandeur commun avec les instruments qui fonctionnent : S2 affiche `0.992`, S5 plafonne à `1.000` (sorties exactes, que la table arrondit à 0,99 et 1,00), tandis que le plus grand parasite GOL vaut 0,286 — environ 3,5 fois plus petit que le vrai signal le plus faible ($0{,}992/0{,}286 \\approx 3{,}5$). La ligne de sortie le résume elle-même : « l'instrument ne discrimine pas ici ».\n" - ] - }, { "cell_type": "markdown", "id": "ict31-19", @@ -1313,4 +1285,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file