Foued Mnasri Weal Rekik Problème de sac à dos Foued Mnasri Weal Rekik
Définition « sac à dos » L’énoncé de ce problème fameux est simple : « Étant donné plusieurs objets possédant chacun un poids et une valeur et étant donné un poids maximum pour le sac, quels objets faut-il mettre dans le sac de manière à maximiser la valeur totale sans dépasser le poids maximal autorisé pour le sac ?
Présentation du problème Le problème du Sac à Dos aussi noté KP(Knapsack Problem en anglais) représente une situation dans laquelle une personne dispose de n objets (d'utilité ui ⋲ N\{0} et d'un poids pi ⋲ N\{0} pour i ⋲ N\{1,…,n} ) et d'un sac (ayant une capacité maximale C ⋲ N). Le problème est de trouver un ensemble d'objets dont la somme des utilités est maximale. Il faut donc trouver un sous-ensemble d'objets X tel que ∑x ⋲ X Px≤ C et qui maximise Ux
Suite… Le problème du Sac à Dos peut donc se résumer comme ceci : Données : 2n entiers { Ui | Ui > 0 i = 1,…..,n }{ Pi | Pi > 0 i = 1,…..,n }et un entier C > 0. Question : Trouver un sous-ensemble X de {1,….,n} tel que ∑x ⋲ x Px≤ C et qui maximise ∑x ⋲ x Ux
On distingue 3 types d’algorithmes Algorithmes exacts Ils trouvent la solution optimale Ils peuvent prendre un nombre exponentiel d’itérations Algorithmes d’approximation Ils produisent une solution sous-optimale. Ils produisent une mesure de qualité de la solution. Ils ne prennent pas un nombre exponentiel d’itérations.
Méthodes de résolution des problèmes Il existe deux grandes catégories de méthodes de résolution de problèmes : les méthodes exactes les méthodes approchées Méthode approchée Une méthode approchée a pour but de trouver une solution avec un bon compromis entre la qualité de la solution et le temps de calcul.
Methode de résolution La programmation dynamique Le principe de la programmation dynamique est de résoudre un problème en combinant les solutions de sous-problèmes. La programmation dynamique est utilisée lorsque les sous-problèmes ne sont pas indépendants. Branch & bound Michel Bierlaire
Suite…. Un algorithme de programmation dynamique résout les sous-problèmes et sauve le résultat dans un tableau, ce qui permet de ne pas le résoudre à chaque fois qu'on le rencontre de nouveau.
Enoncé du problème On considère le problème d’un alpiniste qui doit choisir les produits à prendre dans son sac pour une expédition. Au total il ne peut pas prendre plus que 8 kilos. Il ya trois produits possibles et il doit décider du nombre d’unités à prendre de chacun d’eux. Les poids unitaires (pi) pour chaque produit et leur valeur unitaire (vi) qui traduit leur importance pour l’alpiniste sont comme suit ²
Suite… Produit Poids unitaire Valeur unitaire i Pi Vi 1 2 20 4 55 3 40 On cherche à trouver le nombre d’unités à prendre de chaque produit qui permet d’avoir le maximum de valeur pour l’alpiniste.
Résolution du problème On définit : phases : k =1 décision concernant le produit 1 k =2 décision concernant le produit 2 k =3 décision concernant le produit 3 variable d’état : s=poids qui n’a pas été pourvu pour les phases précédentes et qui reste à allouer 0≤ s ≤ 8
Variable de décision : Xj : prendre j unité de produit. Les politiques possibles sontles suivantes : Phase1 : (produit 1) : 0≤ Xj ≤ 4 Phase2 : (produit 2) : 0≤ Xj ≤ 2 Phase3 : (produit 1) : 0≤ Xj ≤ 2 En tenant compte du poids total disponible et des poids unitaires de chaque produit.
Résolution du problème Phase1 (Produit 1): s F1(s,xj)=20xj Politiques Optimales 1 2 3 4 xj f1(s,xj*) - 20 40 5 6 60 7 8 80
F2(s,xj)=55xj + f1 (s – 4xj,xj*) Suite… Phase 2(Produit2): s F2(s,xj)=55xj + f1 (s – 4xj,xj*) Politiques Optimales 1 2 xj f1(s,xj*) 0 + 0 - 0 + 20 20 3 4 0 + 40 55 + 0 55 5 6 0 + 60 55 + 20 75 7 8 0 + 80 55 + 40 110
F2(s,xj)=55xj + f1 (s – 4xj,xj*) Suite… Phase 3(Produit3): s F2(s,xj)=55xj + f1 (s – 4xj,xj*) Politiques Optimales 1 2 xj f1(s,xj*) - 20 3 40 4 55 40+0 5 40+20 60 6 75 40 + 20 80 + 0 80 7 40 + 55 8 110 80 + 20