Algorithmique Avancée Cours n 5 : Algorithmes Gloutons (suite) Master 1 Génie Logiciel Université Abou Bakr Belkaïd Tlemcen 2016/2017 Mahfoud Houari mahfoud.houari@gmail.com hmahfoud.wordpress.com
Bilan du cours passé : 1. Une approche gloutonne peut être vue comme étant une amélioration d'une approche dynamique. 2. Un algorithme glouton choisit à chaque étape des solutions qui paraissent localement optimales à la base d'un critère glouton. 3. L'objectif est de choisir des solutions localement optimales pour atteindre à la fin une solution globalement optimale. 4. Un algorithme glouton parcourt une seule branche de l'arbre et ne fait jamais du backtracking. 5. Si le critère est optimal alors on parle d'un algorithme glouton exact, sinon on parle d'une heuristique gloutonne. 6. La difficulté d'une approche gloutonne réside dans la correction du choix glouton (prouver qu'il est optimal).
Problème du «Bin Packing» (Remplissage de boites)
Description : Soit un ensemble de N objets de poids p 1, p 2,, p N tel que : p i > 0. Un ensemble de M boites de même capacité C. Objectif : Il s'agit de déterminer un nombre minimum de boites pour ranger tous les objets. Formulation : M min j=1 1 i N 1 j M y j M, j=1 N, i=1 x ij =1 p i x ij C y j,, x {0, 1} y ij j {0, 1} 1 i N 1 j M
Existe il une solution gloutonne pour ce problème? Choix gloutons possibles : 1. Considérer l'objet ayant le plus grand poids. 2. Considérer l'objet ayant le plus petit poids.
Problème du «Bin Packing» 1. Considérer l'objet ayant le plus grand poids : Contre exemple pour ce choix: Les poids des objets : 2 2 3 3 3 5 6 Capacité des boites : 12 5 2 6 3 3 3 2 Solution gloutonne 2 2 3 3 3 6 5 Solution optimale Choix glouton non optimal.
Problème du «Bin Packing» 2. Considérer l'objet ayant le plus petit poids : Contre exemple pour ce choix: Les poids des objets : 2 2 3 3 Capacité des boites : 5 2 2 3 3 Solution gloutonne 2 2 3 3 Solution optimale Choix glouton non optimal.
Problème du «Bin Packing» Conclusion Aucun critère glouton optimal ne peut être trouvé pour ce problème. Il s'agit d'un problème NP complet (à voir plus tard) qui n'accepte pas une solution praticable.
Problèmes ayant une solution gloutonne exacte Rendu de monnaie avec le système {1, 2, 5, 10, 20, 50, 100, 200}. Choix glouton : Prendre la pièce de la plus grande valeur Ordonnancement de tâches. Choix glouton : Prendre la tâche qui termine le plus tôt Sac à dos version fractionnaire. Choix glouton : Prendre l'objet ayant la plus grande v i /w i Algorithme de Kruskal (Arbre de poids minimal). Choix glouton : Prendre l'arrête ayant la plus petite valeur.
Conception d'une solution gloutonne pour le problème d ordonnancement de tâches
Problème d'ordonnancement de tâches Soit une salle de conférence qui peut être allouée à la fois à une et une seule tâche (cours, workshop, réunion,...). Soit un ensemble de tâches t 1, t 2,, t n ayant chacune une date de début d i et une date de fin f i ( f i > d i ). Objectif : Allouer la salle à un nombre maximum de tâches.
Problème d'ordonnancement de tâches Soit une salle de conférence qui peut être allouée à la fois à une et une seule tâche (cours, workshop, réunion,...). Soit un ensemble de tâches t 1, t 2,, t n ayant chacune une date de début d i et une date de fin f i ( f i > d i ). Objectif : Allouer la salle à un nombre maximum de tâches. Exemple : t i 1 2 3 4 5 6 7 8 9 10 11 d i 1 3 0 5 3 5 6 8 8 2 12 f i 4 5 6 7 9 9 10 11 12 14 16 Quelques solutions optimales : (t 1, t 4, t 8, t 11 ) ou (t 2, t 4, t 9, t 11 ). Solutions non optimales : (t 6, t 11 ), (t 4, t 8, t 11 ), (t 4, t 9, t 11 ).
Problème d'ordonnancement de tâches Quelques choix gloutons possibles : 1. La tâche qui commence le plus tôt. 2. La tâche qui occupe le moins de temps (f i d i est plus petit). 3. La tâche qui termine le plus tôt.
Problème d'ordonnancement de tâches 1. La tâche qui commence le plus tôt : (non optimal) 1 2 3 4 5 6 7 8 9 10 temps
Problème d'ordonnancement de tâches 2. La tâche qui occupe le moins de temps : (non optimal) 1 2 3 4 5 6 7 8 9 10 temps
Problème d'ordonnancement de tâches 3. La tâche qui termine le plus tôt : (critère optimal) Il n'existe aucun contre exemple pour ce critère Exemple d'application: Pré traitement : trier les tâches selon leurs dates de fin. t i 1 2 3 4 5 6 7 8 9 10 11 d i 1 3 0 5 3 5 6 8 8 2 12 f i 4 5 6 7 9 9 10 11 12 14 16 Solution gloutonne : (t 1, t 4, t 8, t 11 ).
Solution gloutonne Selon le 3 ème choix Algorithme glouton itératif: //trier en ordre croissant le tableau taches selon les dates de fin //Définir la classe Tache public Tache[] OT_Glouton(Tache[] taches){ Tache[] Sol = new Tache[]{ }; int derniere_fin = 0; for(int i = 0 ; i < taches.length ; i++){ if(taches[i].debut >= derniere_fin){ Sol = ajouter(taches[i], Sol); derniere_fin = taches[i].fin; } } } return Sol;
Autre solution exacte avec la PRD Algorithme dynamique récursif: Exercice: Proposez un algorithme dynamique pour le problème d'ordonnancement de tâches.
Conception d'une solution gloutonne pour le problème du Sac à dos (Version fractionnaire)
Description Étant donné un sac de capacité maximale C, un ensemble de N objects ayant chacun un poids w i et une valeur v i. Variante fractionnaire : veut dire que l'on peut prendre l'objet dans sa totalité ou juste une partie de cette objet. Trouver donc la quantité de chaque objet permettant de maximiser le gain total. Choix glouton optimal : Considérer l'objet ayant la plus grande fraction v i / w i.
Instance du problème Version 0/1 sac 1 2 3 sac 3 2 30 kg 20 kg 120 da + 100 da 60 da 10 kg 100 da 20 kg 120 da 30 kg 50 kg Version fractionnaire 3 2 sac 20 kg 80 da + 20 kg 100 da + 1 10 kg 60 da
Solution gloutonne Algorithme glouton itératif: //P est le tableau des poids des objets //V est le tableau contenant les valeurs des objets //P_max est le poids maximal du sac //trier en ordre décroissant les tableaux P et V selon les v i /w i public int SADF_Glouton(int[] P, int[] V, int P_max){ int G_max = 0 ;????? (à compléter) } return G_max;
Autre solution exacte avec la PRD Algorithme dynamique récursif: Exercice: Proposez un algorithme dynamique pour le problème du Sac à dos (version fractionnaire).