Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -179,12 +179,12 @@
{
"output_type": "stream",
"name": "stdout",
"text": "MGS ScatterSearch complet (graine 7, témoin) : 54 conflits, 8000 évaluations, 1112 ms, checkpoints 25/50/75/100 % = 54/54/54/54.\r\n"
"text": "MGS ScatterSearch complet (graine 7, témoin) : 54 conflits, 8000 évaluations, 3136 ms, checkpoints 25/50/75/100 % = 54/54/54/54.\r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS ScatterSearch ablaté (graine 7, témoin) : 50 conflits, 8000 évaluations, 174 ms, checkpoints 25/50/75/100 % = 50/50/50/50.\r\n"
"text": "MGS ScatterSearch ablaté (graine 7, témoin) : 50 conflits, 8000 évaluations, 414 ms, checkpoints 25/50/75/100 % = 50/50/50/50.\r\n"
}
],
"source": [
Expand Down Expand Up @@ -339,7 +339,7 @@
{
"output_type": "stream",
"name": "stdout",
"text": "Pont PythonNet actif : mealpy 3.0.2 sur Python 3.13.12\r\n"
"text": "Pont PythonNet actif : mealpy 3.0.2 sur Python 3.13.15\r\n"
},
{
"output_type": "stream",
Expand Down Expand Up @@ -716,7 +716,7 @@
{
"output_type": "stream",
"name": "stdout",
"text": "mealpy ScatterSearch-jumeau (graine 7, témoin) : 53 conflits, 8050 évaluations, 976 ms.\r\n"
"text": "mealpy ScatterSearch-jumeau (graine 7, témoin) : 53 conflits, 8050 évaluations, 1905 ms.\r\n"
},
{
"output_type": "stream",
Expand Down Expand Up @@ -770,62 +770,62 @@
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-complet 0 54 7998 804 0,101 54/54/54/54 \r\n"
"text": "MGS-complet 0 54 7998 1670 0,209 54/54/54/54 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-complet 1 56 8000 763 0,095 56/56/56/56 \r\n"
"text": "MGS-complet 1 56 8000 1823 0,228 56/56/56/56 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-complet 7 54 8000 781 0,098 54/54/54/54 \r\n"
"text": "MGS-complet 7 54 8000 2158 0,270 54/54/54/54 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-complet 42 43 7998 810 0,101 43/43/43/43 \r\n"
"text": "MGS-complet 42 43 7998 2068 0,259 43/43/43/43 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-ablate 0 54 8000 164 0,021 54/54/54/54 \r\n"
"text": "MGS-ablate 0 54 8000 374 0,047 54/54/54/54 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-ablate 1 56 8000 161 0,020 56/56/56/56 \r\n"
"text": "MGS-ablate 1 56 8000 431 0,054 56/56/56/56 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-ablate 7 50 8000 159 0,020 50/50/50/50 \r\n"
"text": "MGS-ablate 7 50 8000 484 0,060 50/50/50/50 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-ablate 42 45 8000 163 0,020 45/45/45/45 \r\n"
"text": "MGS-ablate 42 45 8000 510 0,064 45/45/45/45 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "mealpy-jumeau 0 53 8050 957 0,119 53/53/53/53 \r\n"
"text": "mealpy-jumeau 0 53 8050 2449 0,304 53/53/53/53 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "mealpy-jumeau 1 48 8050 963 0,120 50/50/48/48 \r\n"
"text": "mealpy-jumeau 1 48 8050 2378 0,295 50/50/48/48 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "mealpy-jumeau 7 53 8050 951 0,118 53/53/53/53 \r\n"
"text": "mealpy-jumeau 7 53 8050 1974 0,245 53/53/53/53 \r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "mealpy-jumeau 42 50 8050 947 0,118 50/50/50/50 \r\n"
"text": "mealpy-jumeau 42 50 8050 2562 0,318 50/50/50/50 \r\n"
},
{
"output_type": "stream",
Expand All @@ -835,17 +835,17 @@
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-complet : médiane conflits 54,0 (min 43, max 56), ms/éval moyen 0,099\r\n"
"text": "MGS-complet : médiane conflits 54,0 (min 43, max 56), ms/éval moyen 0,241\r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "MGS-ablate : médiane conflits 52,0 (min 45, max 56), ms/éval moyen 0,020\r\n"
"text": "MGS-ablate : médiane conflits 52,0 (min 45, max 56), ms/éval moyen 0,056\r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": "mealpy-jumeau : médiane conflits 51,5 (min 48, max 53), ms/éval moyen 0,119\r\n"
"text": "mealpy-jumeau : médiane conflits 51,5 (min 48, max 53), ms/éval moyen 0,291\r\n"
},
{
"output_type": "stream",
Expand Down Expand Up @@ -1039,17 +1039,17 @@
{
"output_type": "stream",
"name": "stdout",
"text": " C# : 3,1 ms total -> 0,006 ms/éval\r\n"
"text": " C# : 7,0 ms total -> 0,014 ms/éval\r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": " Python : 19,9 ms total -> 0,040 ms/éval\r\n"
"text": " Python : 29,1 ms total -> 0,058 ms/éval\r\n"
},
{
"output_type": "stream",
"name": "stdout",
"text": " rapport Python/C# : 6,44x\r\n"
"text": " rapport Python/C# : 4,17x\r\n"
}
],
"source": [
Expand Down Expand Up @@ -1109,9 +1109,9 @@
"2. **Le noyau** (complet vs jumeau mealpy, formules pinnées) — *attendu* : à formules égales,\n",
" l'écart restant mesure l'engine. *Mesuré* : médianes **54,0 contre 51,5 — le jumeau mealpy\n",
" devant** sur 3 graines sur 4 (écarts persistants de 1 à 8 conflits ; seule la graine 42\n",
" inverse, −7 pour MGS). La colonne ms/éval (0,099 contre 0,119, ratio 0,83×) écarte\n",
" l'explication par le coût : la fitness pure est 6,44× **plus rapide** côté C# (0,006 contre\n",
" 0,040 ms/éval) — l'écart de qualité vient de l'ordre des opérations et des tirages propres\n",
" inverse, −7 pour MGS). La colonne ms/éval (0,241 contre 0,291, ratio 0,83×, constant entre les deux exécutions — valeurs absolues selon le siège) écarte\n",
" l'explication par le coût : la fitness pure est 4,17× **plus rapide** côté C# (0,014 contre\n",
" 0,058 ms/éval ; rapport dépendant du siège) — l'écart de qualité vient de l'ordre des opérations et des tirages propres\n",
" à chaque harnais, pas d'un avantage de calcul. À formules déclarées identiques, deux\n",
" moteurs divergent quand même : le pinning fixe les équations, pas la trajectoire.\n",
"3. **Le déterminisme** — *mesuré* : 12/12 bras-graines stables sur 3 répétitions (seeding\n",
Expand All @@ -1120,7 +1120,9 @@
"\n",
"Le classement final — jumeau mealpy (51,5) < ablaté (52,0) < complet (54,0) — est inverse de\n",
"l'intuition « plus de diversité, meilleur scatter search » : c'est précisément ce que le\n",
"troisième bras rendait visible."
"troisième bras rendait visible.\n",
"\n",
"**Non-régression (mesurée le 2026-10-10, sous-module 2b21a6ae)** : conflits, évals et déterminisme bit-identiques aux sorties committées sur les trois bras (MGS-complet 54/56/54/43 à 7998/8000/8000/7998 évals ; MGS-ablate 54/56/50/45 ; mealpy-jumeau 53/48/53/50), médianes 54,0/52,0/51,5 — seuls les temps (métrique machine) varient entre les exécutions."
]
},
{
Expand Down Expand Up @@ -1242,7 +1244,7 @@
"côté C# **et** côté Python. À compléter : `profilRows` rempli, verdict écrit.\n",
"\n",
"\n",
"Le prior à confronter : la cellule coût/éval mesure 6,44× en faveur du C# sur la fitness\n",
"Le prior à confronter : la cellule coût/éval mesure 4,17× en faveur du C# sur la fitness\n",
"complète (decode + coût), mais le rapport ms/éval du banc n'est que de 0,83×. Si le profil\n",
"confirme que decode et coût sont massivement plus rapides côté C#, alors le temps restant du\n",
"bench vit dans le **moteur** (allocation, collections, RNG), pas dans la fonction — et la\n",
Expand Down Expand Up @@ -1286,7 +1288,7 @@
"Trois énoncés sortent du banc, tous mesurés : (1) **la diversité max-min ne paie pas sur ce\n",
"puzzle à ce budget** — l'ablaté (qf = 1,0) égalise ou devance le complet sur 3 graines sur 4,\n",
"médianes 52,0 contre 54,0 ; (2) **à formules pinnées identiques, le jumeau mealpy devance\n",
"l'engine C#** (51,5 contre 54,0) alors que sa fitness pure est 6,44× plus lente — l'écart de\n",
"l'engine C#** (51,5 contre 54,0) alors que sa fitness pure est 4,17× plus lente — l'écart de\n",
"noyau est un écart de trajectoire, pas de coût ; (3) **le déterminisme est intégral**\n",
"(12/12), les deux premiers énoncés portent sur du signal.\n",
"\n",
Expand Down
Loading