Skip to content
Closed
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 @@ -333,6 +333,18 @@
"Show(\"Tournée [0,1,2,3,4,5] longueur = \" + FI(small.TourLength(t)));\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : La matrice de distances affiche les distances euclidiennes entre 6 villes, avec une tournée initiale [0,1,2,3,4,5] de longueur 309.75."
]
},
{
"cell_type": "markdown",
"id": "d6a170c7-dcd5-402d-961a-f54f4524caa3",
Expand Down Expand Up @@ -434,6 +446,18 @@
"Show(\"Croissance : (N-1)! -> N=10 = 362880, N=12 = 4e7, N=15 = 8.7e10 (inatteignable).\");\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : La force brute énumère les 5,040 = 7! permutations (ville 0 fixée) et trouve l'optimum exact de 293.19 en 1.0 ms — tournée [0,5,4,7,1,6,2,3]. La croissance (N-1)! devient vite rédhibitoire : N=10 = 362880, N=12 = 4e7, N=15 = 8.7e10 permutations."
]
},
{
"cell_type": "markdown",
"id": "56e04982-f0d6-4f1f-869e-b8edd28c22ce",
Expand Down Expand Up @@ -511,6 +535,18 @@
"Show(\"Tournée NN : \" + TourStr(nnTour));\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : Le plus proche voisin construit en O(N²) la tournée [0,5,2,3,4,7,1,6] de longueur 344.77, soit un écart de 17.6% par rapport à optimum 293.19 — rapide mais systématiquement sous-optimal."
]
},
{
"cell_type": "markdown",
"id": "fb07ce8a-bfbd-4795-9bc8-f676801decc4",
Expand Down Expand Up @@ -600,6 +636,18 @@
"Show(\"2-opt rapproche fortement de l'optimum en O(N^2) par passage.\");\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : Parti de la tournée NN, le 2-opt converge en 4 inversions vers 293.19 — exactement l'optimum de la force brute (gap 0.00%) — chaque passage coûtant O(N²)."
]
},
{
"cell_type": "markdown",
"id": "1e409b28-9f9b-432c-a1a1-8ff9db1dc39a",
Expand Down Expand Up @@ -678,6 +726,18 @@
"Show(\"Recuit simulé N=8 (depuis NN, 20000 iters) : longueur = \" + FI(saLen) + \" (\" + saAcc + \" moves acceptes). Gap vs optimum = \" + FI(100*(saLen-bl)/bl, \"F2\") + \"%.\");\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : Le recuit simulé, lancé depuis la même tournée NN avec 20000 itérations, atteint lui aussi 293.19 en acceptant 2056 moves malgré le refroidissement (gap -0.00%) : l’acceptation de Metropolis tolère des dégradations temporaires pour échapper aux optimaux locaux."
]
},
{
"cell_type": "markdown",
"id": "833095d7-ec99-43b5-b3e3-67282e2ddd2b",
Expand Down Expand Up @@ -873,6 +933,18 @@
"Show(\"la force brute est infaisable (OR-Tools dans le twin Python donne la reference industrielle).\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : Le benchmark quantifie les écarts : à N=6/8/10, NN rend 328.09/344.77/365.98 (gap 16-18%) tandis que 2-opt et SA rejoignent l’optimum exact (278.24/293.19/314.41, gap 0.0%). Dès N=30 la force brute est infaisable et SA bat 2-opt : 461.97 vs 475.12 (N=30), 792.55 vs 803.45 (N=100), un gain de 1-4% — la valeur ajoutée de la métaheuristique à grande échelle."
]
},
{
"cell_type": "markdown",
"id": "ccfdb229-0fe2-4894-9b20-74350424a5f4",
Expand Down Expand Up @@ -934,6 +1006,18 @@
"Show(\"Synthese affichee ci-dessus (tableau markdown).\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : La synthèse confirme que chaque approche a son domaine : force brute pour l'exactitude (N≤10), NN pour la rapidité, 2-opt et SA pour l'équilibre qualité/temps."
]
},
{
"cell_type": "markdown",
"execution_count": null,
Expand Down Expand Up @@ -1215,6 +1299,18 @@
"Show(\"dedie cote utilisateur : toute la logique vit dans le moteur Google, comme en Python.\");\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"lecture-ancree",
"pedagogie-density"
]
},
"source": [
"**Lecture ancrée** : Le routing solver OR-Tools confirme la parité avec la force brute sur les petites instances (278.24/293.19/314.41, OK en ~1 s) et domine à grande échelle : 750.22 vs 792.55 pour SA à N=100 (+5.3%). Prudence : RoutingModel est une métaheuristique GLS, pas un solveur exact — aucune garantie d’optimalité, contrairement à CP-SAT."
]
},
{
"cell_type": "markdown",
"execution_count": null,
Expand Down Expand Up @@ -1479,4 +1575,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Loading
Loading