Le problème du voyageur de commerce (Traveling Salesman Problem ou TSP) est un problème d'optimisation combinatoire classique. Il consiste à trouver le plus court chemin possible qui visite chaque ville d'une liste une seule fois et retourne à la ville de départ. Ce problème, bien que simple à énoncer, est notoirement difficile à résoudre lorsque le nombre de villes augmente.
Formellement, le TSP peut être défini comme suit : étant donné une liste de villes et les distances entre chaque paire de villes, quel est le plus court chemin possible qui visite chaque ville exactement une fois et retourne à la ville d'origine ? Le TSP est classé comme un problème NP-difficile, ce qui signifie qu'il n'existe pas d'algorithme connu capable de trouver la solution optimale en un temps polynomial. La complexité du problème augmente de façon exponentielle avec le nombre de villes, rendant la résolution exacte impraticable pour les grandes instances.
Le TSP a de nombreuses applications dans des domaines variés tels que :
Dans chaque cas, le but est de minimiser le coût (temps, distance, etc.) associé à la visite d'un ensemble de points.
En raison de la complexité du TSP, plusieurs approches de résolution ont été développées :
Le problème du sac à dos (Knapsack Problem ou KP) est un autre problème d'optimisation combinatoire classique. Il consiste à choisir un sous-ensemble d'objets, chacun ayant un poids et une valeur, de manière à maximiser la valeur totale des objets sélectionnés, tout en respectant une contrainte de capacité maximale du sac à dos.
Plus précisément, étant donné un ensemble de \(n\) objets, où l'objet \(i\) a une valeur \(v_i\) et un poids \(w_i\), et une capacité maximale du sac à dos \(W\), le problème consiste à trouver un sous-ensemble \(S\) d'objets qui maximise la somme des valeurs \(\sum_{i \in S} v_i\) tout en respectant la contrainte de capacité \(\sum_{i \in S} w_i \leq W\).
Il existe plusieurs variantes du problème du sac à dos :
Le problème du sac à dos a de nombreuses applications pratiques, notamment :
La complexité du problème du sac à dos dépend de la variante considérée. Le problème du sac à dos 0/1 est NP-difficile, tandis que le problème du sac à dos fractionnaire peut être résolu en temps polynomial avec un algorithme glouton. Les approches de résolution courantes incluent :
Le problème d'affectation (Assignment Problem) est un problème d'optimisation combinatoire qui consiste à affecter un ensemble de tâches à un ensemble d'agents de manière à minimiser le coût total de l'affectation. Chaque agent peut réaliser une seule tâche, et chaque tâche doit être réalisée par un seul agent.
Formellement, le problème peut être défini comme suit : étant donné une matrice de coûts \(C\) de taille \(n \times n\), où \(C_{ij}\) représente le coût d'affectation de l'agent \(i\) à la tâche \(j\), le but est de trouver une affectation qui minimise la somme des coûts :
\[ \min \sum_{i=1}^{n} \sum_{j=1}^{n} C_{ij} x_{ij} \]où \(x_{ij}\) est une variable binaire qui vaut 1 si l'agent \(i\) est affecté à la tâche \(j\), et 0 sinon. De plus, chaque agent doit être affecté à une seule tâche, et chaque tâche doit être réalisée par un seul agent.
Le problème d'affectation a de nombreuses applications pratiques, notamment :
Le problème d'affectation peut être résolu en temps polynomial grâce à l'algorithme hongrois, qui est une méthode efficace pour trouver la solution optimale. D'autres approches incluent :
Voici un tableau comparatif résumant les caractéristiques principales de ces trois problèmes :
Problème | Description | Objectif | Complexité | Applications | Méthodes de Résolution |
---|---|---|---|---|---|
Voyageur de Commerce (TSP) | Trouver le plus court chemin qui visite chaque ville une seule fois et retourne au point de départ. | Minimiser la distance totale | NP-difficile | Logistique, fabrication, astronomie | Algorithmes exacts, heuristiques, métaheuristiques |
Sac à Dos (KP) | Choisir un sous-ensemble d'objets pour maximiser la valeur totale sans dépasser la capacité du sac. | Maximiser la valeur totale | NP-difficile (0/1), Polynomial (fractionnaire) | Allocation de ressources, gestion de portefeuille | Programmation dynamique, algorithmes gloutons, heuristiques |
Affectation | Affecter des tâches à des agents pour minimiser le coût total. | Minimiser le coût total | Polynomial | Ordonnancement de tâches, transport, logistique | Algorithme hongrois, programmation linéaire |
Un problème NP-difficile est un problème au moins aussi difficile que les problèmes les plus difficiles de la classe NP (Non-deterministic Polynomial time). Cela signifie qu'il n'existe pas d'algorithme connu capable de trouver la solution optimale en un temps polynomial pour toutes les instances du problème.
Le TSP est difficile à résoudre car le nombre de solutions possibles augmente de façon exponentielle avec le nombre de villes. Pour \(n\) villes, il y a \((n-1)!\) chemins possibles. Par conséquent, même pour un nombre modeste de villes, il devient impraticable de vérifier toutes les solutions possibles.
Les algorithmes heuristiques sont utilisés lorsque la taille du problème est trop grande pour être résolue avec un algorithme exact en un temps raisonnable. Les heuristiques ne garantissent pas la solution optimale, mais elles peuvent trouver des solutions de bonne qualité en un temps acceptable.
Un algorithme glouton prend des décisions localement optimales à chaque étape, sans se soucier de l'impact global de ces décisions. La programmation dynamique, en revanche, résout le problème en le décomposant en sous-problèmes plus petits, en résolvant chaque sous-problème une seule fois et en stockant les résultats pour éviter de les recalculer. La programmation dynamique garantit de trouver la solution optimale, mais elle peut être plus coûteuse en termes de temps et d'espace.
L'algorithme hongrois est une méthode efficace pour résoudre le problème d'affectation en temps polynomial. Il fonctionne en réduisant la matrice de coûts jusqu'à ce qu'il soit possible de trouver une affectation optimale en sélectionnant des éléments nuls dans la matrice réduite.