Skip to content
Merged
Show file tree
Hide file tree
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 @@ -1559,93 +1559,24 @@
"tags": []
},
"source": [
"### Lecture de la table AC-3\n",
"### Lecture du résultat — la cohérence d'arc fait s'effondrer l'espace avant toute recherche\n",
"\n",
"La cellule AC-3 affiche un tableau tres instructif sur les 24 slots. Voici comment le lire :\n",
"La cellule AC-3 affiche, pour les 24 slots (36 intersections, toutes de longueur 3 — le dictionnaire français simplifié de cette expérience n'a que des mots de 3 lettres), un tableau à lire ainsi :\n",
"\n",
"| Colonne | Signification |\n",
"|---------|---------------|\n",
"| `slot` | Identifiant du slot (0 a 23) |\n",
"| `slot` | Identifiant du slot (0 à 23) |\n",
"| `longueur` | Nombre de lettres du slot |\n",
"| `avant` | Taille du domaine avant AC-3 (presque toujours 20) |\n",
"| `apres` | Taille du domaine apres AC-3 (1 ou 2 dans la majorite des cas) |\n",
"| `coupe` | Nombre de mots elimines (`avant - apres`) |\n",
"| `avant` | Taille du domaine avant AC-3 (20 pour chacun des 24 slots) |\n",
"| `après` | Taille du domaine après AC-3 (1 ou 2) |\n",
"| `coupé` | Nombre de mots éliminés (`avant - après`) |\n",
"\n",
"### Observations\n",
"**L'effondrement mesuré.** Les 24 domaines passent de 20 mots à 1 ou 2 candidats — 16 slots à 1 seul, 8 slots à 2 — et l'espace combinatoire s'écroule de 1.68×10³¹ à 2.56×10² combinaisons (soit exactement 2⁸ × 1¹⁶ = 256), un facteur de réduction de 6.55×10²⁸ (~10²⁹), **avant** d'avoir posé la moindre assignation. C'est précisément la marge que le backtracking pur (section 4) ne pouvait pas exploiter et qui le faisait s'essouffler : lui abordait chaque slot avec 20 candidats, quand AC-3 n'en laisse qu'un ou deux. Pour donner un ordre de grandeur : réduire l'espace de recherche de 10²⁹, c'est passer d'une recherche dans tout l'univers observable (10⁸⁰ atomes) à une recherche dans une salle de classe (10³ atomes) — et AC-3 fait cela **gratuitement**, avant même que la recherche commence.\n",
"\n",
"- **Tous les slots de longueur 3** : le dictionnaire francais simplifie n'a que des mots de 3 lettres dans cette experience\n",
"- **Domaines tres reduits** : 23 slots sur 24 passent de 20 a 1 ou 2 mots\n",
"- **AC-3 quasi-parfait** : sur cette grille bien concue, AC-3 laisse tres peu d'ambiguite\n",
"**Pourquoi un rendement si élevé ici.** Les contraintes d'intersection sont extrêmement discriminantes : un mot de 3 lettres posé dans un slot élimine presque tous les mots des slots qui le croisent sans partager ses lettres aux positions d'intersection. C'est le signe d'un réseau bien connecté, avec un dictionnaire adapté à la taille des slots. La réciproque est instructive : si la grille était mal conçue (slots isolés, peu d'intersections), AC-3 éliminerait beaucoup moins de mots et la recherche qui suivrait serait plus difficile. Les grilles de mots croisés classiques ont une **symétrie de rotation 180°** qui garantit un équilibre entre mots longs et courts ; notre grille générée aléatoirement n'a pas cette symétrie, ce qui peut produire des zones sur-contraintes et des zones sous-contraintes — elle s'en tire bien ici, mais c'est une chance de la géométrie, pas une garantie.\n",
"\n",
"### Resume statistique\n",
"\n",
"- **Espace combinatoire avant AC-3** : 1.68×10³¹ combinaisons\n",
"- **Espace combinatoire apres AC-3** : 2.56×10² combinaisons\n",
"- **Facteur de reduction** : 6.55×10²⁸ (soit ~10²⁹)\n",
"\n",
"### Pourquoi AC-3 est si efficace ici\n",
"\n",
"Les contraintes d'intersection sont **extremement discriminantes** : un mot de 3 lettres dans un slot elimine presque tous les autres mots qui pourraient se croiser. C'est le signe d'un reseau bien connecte avec un dictionnaire adapte a la taille des slots.\n",
"\n",
"### Le role de la symetrie\n",
"\n",
"Les grilles de mots croises classiques ont une **symetrie de rotation 180°** qui garantit un equilibre entre mots longs et courts. Notre grille generee aleatoirement n'a pas cette symetrie, ce qui peut produire des zones sur-contraintes et des zones sous-contraintes.\n"
]
},
{
"cell_type": "markdown",
"id": "0cc3a8d4",
"metadata": {
"papermill": {
"duration": 0.00417,
"end_time": "2026-09-06T02:58:34.474260+00:00",
"exception": false,
"start_time": "2026-09-06T02:58:34.470090+00:00",
"status": "completed"
},
"tags": []
},
"source": [
"**Lecture du résultat.** AC-3 réduit chaque domaine de 20 mots à 1 ou 2\n",
"candidats : la cohérence d'arc **à elle seule** fait s'effondrer l'espace des\n",
"combinaisons de ~1,7×10³¹ à 256 — une réduction d'un facteur ~10²⁹, **avant**\n",
"d'avoir posé la moindre assignation. C'est précisément la marge que le\n",
"backtracking pur (section 4) ne pouvait pas exploiter et qui le faisait\n",
"s'essouffler : lui abordait chaque slot avec 20 candidats, quand AC-3 n'en\n",
"laisse qu'un ou deux.\n",
"\n",
"**Le pont avec le forward checking.** FC est une propagation *locale et\n",
"paresseuse* : elle ne touche qu'au voisinage d'une assignation, au moment où\n",
"l'on assigne. AC-3 est une propagation *globale et préventive* : il établit\n",
"d'emblée la cohérence de tout le réseau. Un solveur qui combine les deux —\n",
"AC-3 en prétraitement, puis FC pendant la recherche — cumule les deux\n",
"régimes : un espace de départ déjà épuré, et une coupe locale à chaque nœud.\n",
"C'est d'ailleurs ce que fait OR-Tools en interne (section 3) : le solveur\n",
"CP-SAT applique ses propres techniques de propagation bien plus puissantes\n",
"qu'AC-3, ce qui explique qu'il résolve le problème quasi instantanément là où\n",
"notre backtracking pur peinait.\n",
"\n",
"**Observation pedagogique du tableau.** Pour la majorite des slots, AC-3 elimine **19 mots sur 20** (passe de 20 a 1). C'est le signe d'un reseau bien connecte : les contraintes d'intersection sont suffisamment discriminantes pour laisser peu d'ambiguite. Si la grille etait mal concue (slots isoles, peu d'intersections), AC-3 eliminerait beaucoup moins de mots et la recherche qui suivrait serait plus difficile.\n",
"\n",
"**Limite honnête.** AC-3 ne réduit les domaines que sur les contraintes\n",
"*binaires* (deux slots qui se croisent). Il ne détecte pas les contraintes\n",
"implicites plus subtiles (par exemple, trois slots forcés à des mots\n",
"distincts) : c'est le rôle des propagateurs de plus haut niveau (consistance\n",
"de bornes, de chemin…) qu'utilisent les solveurs industriels.\n",
"\n",
"### Le facteur 10²⁹ en contexte\n",
"\n",
"Une reduction de l'espace de recherche de 10²⁹ est l'equivalent de passer d'une recherche dans tout l'univers observable (10⁸⁰ atomes) a une recherche dans une salle de classe (10³ atomes). AC-3 fait cela **gratuitement**, avant meme que la recherche commence.\n",
"\n",
"### Vers k-consistance\n",
"\n",
"Pour aller plus loin, les solveurs industriels utilisent des consistances plus fortes :\n",
"- **Arc-consistance (AC-3)** : binaire, O(E × d³)\n",
"- **Path-consistance (PC-2)** : ternaire, plus puissant mais O(d⁵)\n",
"- **Bound-consistency** : sur les domaines numeriques continus\n",
"- **Generalized Arc Consistency (GAC)** : pour les contraintes n-aires\n",
"\n",
"CP-SAT combine ces techniques avec des techniques SAT (CDCL, no-good learning) pour former un solveur hybride extremement performant.\n"
"**Le pont avec le forward checking.** FC est une propagation *locale et paresseuse* : elle ne touche qu'au voisinage d'une assignation, au moment où l'on assigne. AC-3 est une propagation *globale et préventive* : il établit d'emblée la cohérence de tout le réseau. Un solveur qui combine les deux — AC-3 en prétraitement, puis FC pendant la recherche — cumule les deux régimes : un espace de départ déjà épuré, et une coupe locale à chaque nœud. C'est d'ailleurs ce que fait OR-Tools en interne (section 3) : le solveur CP-SAT applique ses propres techniques de propagation bien plus puissantes qu'AC-3, ce qui explique qu'il résolve le problème quasi instantanément là où notre backtracking pur peinait.\n",
"\n"
]
},
{
Expand Down Expand Up @@ -2352,4 +2283,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-09-20'
by: myia-po-2023:CoursIA
python_sha: dd78b5a7411aaf9cbd67793058cb8bcb5d9ead1b
csharp_sha: 90779e7a0699d30f7107364803d2a7bd2dc96327
content_python_sha: 973bb4fb7cfc28ca13625fc561d49484883a945c7ffe8fa8289c715557485f2c
content_csharp_sha: b23c83c5af98d568cfaf4290f8c2ed439454a6ca4bcb1b92398593284c96ce89
Loading