You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
MetaGeneticSharp: le banc ne peut pas discriminer les strategies -- codage 64 bits a neutralite massive (best final = best initial) #17997
Constat mesure (MGS-02-Composition, review #17924)
Le banc MetaGeneticSharp de MGS-02 ne peut pas distinguer les strategies : a seed egal, Default / SizeBased (p_c 0.95 vs 0.3) / Composee (Gen+Stage+Match) produisent des valeurs identiques run par run — les parametres de metaheuristic n'ont aucun effet observable.
Chaine de preuves (probes isoles, seed fixe)
Override de probabilite no-op : DefaultMetaHeuristic avec ProbabilityConfig.MutationOverwriteProbability + StaticProbability=1.0 (muter chaque offspring) vs defaut 0.2 → trajectoires identiques au 1e-4 pres.
Match no-op : MatchMetaHeuristic Current+Neighbor vs Current+Best → identiques.
Le GA vit : seed 7 vs 42 → valeurs differentes (12,32 vs 22,00) — seul le tirage initial compte.
Best final = best INITIAL : apres 50 generations sur Sphere, le best reste 21,999665 (celui de la population initiale) — l'evolution n'ameliore jamais.
Autopsie d'une generation : crossover manuel sur les parents selectionnes → 8/22 enfants phenotypiquement identiques a un parent, meilleur enfant a 234,9 vs best initial 22,0 (10x pire).
Cause racine candidate
Codage FloatingPointChromosome 64 bits/gene pour ~18 bits utiles ([-10,10] a 1e-4) : la redondance rend ~73% des mutations et la majorite des points de crossover phenotypiquement silencieux ; les rares coupes dans les bits hauts teleportent l'enfant loin de ses parents. Un codage serre (20 bits) est refuse par GeneticSharp : BinaryStringRepresentation.ToRepresentation leve ArgumentException (« needs 64 total bits ») sur l'aller-retour interne ToFloatingPoints/ToRepresentation — l'operateur exige la pleine largeur.
encodage compact compatible avec l'aller-retour interne, ou
crossover/mutation conscients de la longueur utile (masque des bits utiles), ou
validation/erreur explicite au constructeur quand totalBits >> bits utiles (detecter la neutralite au lieu de la subir).
Reproduction
Notebook sonde : probes A-D dans le transcript session po-2023 2026-09-27 (scratchpad). MGS-02-Composition.ipynb cellules 6/16/21 sur la branche feature/17863-mgs02-seed portent maintenant l'instrumentation (trace par generation, detail par run).
[CLAIMED] lane myia-po-2023:CoursIA-2 — #17997 : rendre le banc MGS-02 discriminant — operateur conscient de la largeur utile du gene (codage 64 bits a neutralite massive), puis re-mesure des trois strategies Default / SizeBased / Composee
Correctif livré — PR #18108. Le diagnostic de l'énoncé est confirmé en partie, et complété par une mesure
Statut mesuré des pistes de l'énoncé
Piste avancée ici
Statut
Mesure
Redondance du codage (≈18 bits utiles sur 64)
réelle, mais pas la cause opérante
à codage inchangé (64 bits/gène), changer les seuls opérateurs fait passer le meilleur de la population de 22,0 à 0,0000
(c) validation / erreur explicite quand totalBits >> bits utiles
déjà satisfait, dans l'autre sens
FloatingPointChromosomerefuse un codage serré : ArgumentException: The value … needs 64 total bits to be represented. (Parameter 'value'), mesuré à totalBits = 32 et 20, avec fractionDigits 4/4/2. Le constructeur est déjà strict — on ne peut pas coder plus serré, seulement plus large
Cause de l'inertie du banc
trouvée ailleurs
les deux opérateurs par défaut sont dégénérés (ci-dessous)
Cause opérante : deux opérateurs dégénérés
new OnePointCrossover() vaut OnePointCrossover(0) : la coupe tombe toujours après le bit 0, donc un enfant ne diffère d'un parent que d'un seul bit sur 256. Mesuré sur 200 croisements (enfant 0 : 246 gènes différents de parent1, 1 de parent2).
new UniformMutation() vaut UniformMutation(false) : l'index mutable est tiré une fois puis mis en cache (m_mutableGenesIndexes) pour toute la durée de vie de l'opérateur. Mesuré : 1 index distinct touché (index 5, graine 42) sur 200 appels à probabilité 1.0 — contre 137 index distincts pour FlipBitMutation(), qui retire un bit au hasard à chaque appel.
Ces deux défauts expliquent exactement le symptôme décrit dans l'issue : des enfants clonés ou téléportés, et un meilleur final figé au meilleur de la population initiale.
Effet du correctif (banc MGS-02)
Banc
Avant
Après
Match (3 règles)
27,0000 pour les trois, vecteur x identique
les trois atteignent 0,0000, traces divergentes dès la génération 10
Stratégie composée
amélioration 0,0 %
+87,2 % (5,4777 → 0,6991), quasi-optimal sur 3 runs sur 5
Rastrigin 4D
5,200 / 5,200 / 5,200, écarts +0,000
15,479 < 15,576 < 17,218, Composée rang 1/3
Un second défaut, qui ne venait pas de cet énoncé
fractionDigits = 0 sur le chromosome Rastrigin plaçait les gènes sur un réseau entier : là, cos(2·π·x) = 1 partout, donc f_Rastrigin(x) = Σxᵢ²exactement — le banc annoncé « multimodal » était unimodal. Corrigé en 4 décimales (même PR).
Reste ouvert
MGS-01-Introduction.ipynb porte le même lattice : fractionDigits = 0 sur les chromosomes Rastrigin des cellules de code 6, 9, 12 et 15 (vérifié first-hand sur main). Il n'est pas traité par #18108. Je ne le prends pas ici — un PR, un sujet.
Après #18108, la réserve « aucune comparaison sur ce banc n'est interprétable » tombe pour MGS-02 : les trois bancs de la section 2 (match), 4 (composition) et 5 (Rastrigin) rendent des valeurs qui bougent avec la stratégie. La redondance du codage subsiste, mais elle n'empêche plus la mesure.
Fermeture — urne delivered, chaque critere du body confronte a origin/main par ai-01 (05/10)
#18108, mergee le 29/09, remplace les operateurs degeneres de MGS-02 (UniformCrossover et FlipBitMutation) et corrige le reseau Rastrigin. Le banc discrimine maintenant les strategies : la re-mesure avant/apres est dans le body, avec un controle positif (« le banc evolue »). Sur main, le carnet a 11 cellules de code, sans execution_count nul ni erreur.
Activity
fix(mgs,#17863): complete le point 1 de la review #17924 -- seed par …
feat(mgs,#17863): seed MGS-02 (helpers RunWithMetaHeuristic + RunRast…
jsboige commentedon Sep 27, 2026
[CLAIMED] lane myia-po-2023:CoursIA-2 — #17997 : rendre le banc MGS-02 discriminant — operateur conscient de la largeur utile du gene (codage 64 bits a neutralite massive), puis re-mesure des trois strategies Default / SizeBased / Composee
paths: MyIA.AI.Notebooks/Search/Part4-Metaheuristics/MGS-02-Composition.ipynb, MyIA.AI.Notebooks/Search/MetaGeneticSharp/**
jsboige commentedon Sep 27, 2026
Correctif livré — PR #18108. Le diagnostic de l'énoncé est confirmé en partie, et complété par une mesure
Statut mesuré des pistes de l'énoncé
totalBits >> bits utilesFloatingPointChromosomerefuse un codage serré :ArgumentException: The value … needs 64 total bits to be represented.(Parameter 'value'), mesuré àtotalBits= 32 et 20, avecfractionDigits4/4/2. Le constructeur est déjà strict — on ne peut pas coder plus serré, seulement plus largeCause opérante : deux opérateurs dégénérés
new OnePointCrossover()vautOnePointCrossover(0): la coupe tombe toujours après le bit 0, donc un enfant ne diffère d'un parent que d'un seul bit sur 256. Mesuré sur 200 croisements (enfant 0 : 246 gènes différents de parent1, 1 de parent2).new UniformMutation()vautUniformMutation(false): l'index mutable est tiré une fois puis mis en cache (m_mutableGenesIndexes) pour toute la durée de vie de l'opérateur. Mesuré : 1 index distinct touché (index 5, graine 42) sur 200 appels à probabilité 1.0 — contre 137 index distincts pourFlipBitMutation(), qui retire un bit au hasard à chaque appel.Ces deux défauts expliquent exactement le symptôme décrit dans l'issue : des enfants clonés ou téléportés, et un meilleur final figé au meilleur de la population initiale.
Effet du correctif (banc MGS-02)
Un second défaut, qui ne venait pas de cet énoncé
fractionDigits = 0sur le chromosome Rastrigin plaçait les gènes sur un réseau entier : là,cos(2·π·x) = 1partout, doncf_Rastrigin(x) = Σxᵢ²exactement — le banc annoncé « multimodal » était unimodal. Corrigé en 4 décimales (même PR).Reste ouvert
MGS-01-Introduction.ipynbporte le même lattice :fractionDigits = 0sur les chromosomes Rastrigin des cellules de code 6, 9, 12 et 15 (vérifié first-hand surmain). Il n'est pas traité par #18108. Je ne le prends pas ici — un PR, un sujet.Après #18108, la réserve « aucune comparaison sur ce banc n'est interprétable » tombe pour
MGS-02: les trois bancs de la section 2 (match), 4 (composition) et 5 (Rastrigin) rendent des valeurs qui bougent avec la stratégie. La redondance du codage subsiste, mais elle n'empêche plus la mesure.See #18108
fix(notebook-dotnet,#17997): restore French accents in MGS-02 markdown
fix(notebook-dotnet,#17997): correct three counters in the composed-s…
fix(notebook-dotnet,#18108): banc 9/11/13 N=5 runs seed=42+run, moyen…
fix(mgs,#17997): MGS-02 rend le banc de mesure discriminant (#18108)
myia-ai-01 commentedon Oct 5, 2026
Fermeture — urne
delivered, chaque critere du body confronte aorigin/mainpar ai-01 (05/10)#18108, mergee le 29/09, remplace les operateurs degeneres de MGS-02 (UniformCrossover et FlipBitMutation) et corrige le reseau Rastrigin. Le banc discrimine maintenant les strategies : la re-mesure avant/apres est dans le body, avec un controle positif (« le banc evolue »). Sur main, le carnet a 11 cellules de code, sans
execution_countnul ni erreur.