NFP136 - ALGORITHMES « GLOUTONS » PLAN • • • • Problèmes d'optimisation Algorithmes gloutons Arbre couvrant minimal Choix d'activités 1 PROBLEMES D’OPTIMISATION 2 un problème une solution plusieurs solutions une valeur problème d'optimisation : recherche d'une « meilleure » solution = de valeur optimale (min ou max) algorithme de résolution : • reconnaissance d'une solution • évaluation d'une solution • sélection d'une des meilleures solutions 3 problèmes d'optimisation faciles difficiles --------------------------------------------------------------EXEMPLES 3 B 1) Plus court chemin 3 E 5 2 C A 6 2 D 4 1 4 F G 4 problème facile (algorithme de Dijkstra, ou parcours en largeur si longueurs=1) : ici, valeur min=9 (ABECG) 4 2) Voyageur de commerce (TSP) Recherche d'un plus court cycle hamiltonien dans un graphe complet : problème difficile ==> Ici, 3 solutions optimales B 4 2 (ACBDEA, ACEBDA, et 2 1 A D 5 2 AEBDCA, de valeur 12) 3 1 E Nombre de solutions possibles : 24 (Dans le cas général=(n-1)!) 3 C 4 5 Problèmes « faciles » ==> algorithme de complexité polynomiale (cf cours « Complexité ») ==> conception d'un tel algorithme ? 6 Problèmes « difficiles » : tous les algorithmes exacts connus sont de complexité non polynomiale (problèmes dits NP-complets ou NP-difficiles) ==> ? – problèmes de petite taille énumération possible – problèmes de grande taille énumération impossible 32 (30! > 10 ), et donc ? 7 ALGORITHMES GLOUTONS 8 Choix glouton = fait une fois pour toute durant l'algorithme, et jamais remis en cause ensuite ==> algorithme glouton = basé sur ce paradigme (A chaque étape, on fait le choix le plus « intéressant » à cet instant.) Glouton ==> difficile d'atteindre et/ou garantir l'optimalité (selon le problème/les données)... MAIS Glouton ==> facile à concevoir/implémenter et rapide, en général ! 9 EXEMPLE un algorithme glouton pour le TSP : - trier les arêtes par ordre des coûts croissants, - sélectionner dans l'ordre les arêtes autorisées. 2 3 B 4 2 1 A D C 2 5 3 1 E 4 ([A,E],[B,D],[A,B], [A,D],[B,E],[A,C], [E,D],[C,E],[C,D]) [A,B,D,C,E,A] valeur 13 (opt=12 [ACEBDA]) 10 EXEMPLE un autre algorithme glouton pour le TSP : - choisir un sommet de départ arbitraire, - à chaque étape, choisir le plus « proche » voisin. Sur le graphe précédent, en partant de A : AEBDCA Cycle hamiltonien de valeur 12 ==> optimal (ici) ! 11 AUTRE EXEMPLE Problème « du boulanger » : Comment rendre la monnaie à un client avec un nombre minimum de billets/pièces ? Algorithme glouton : rendre la monnaie à l'aide de la pièce/du billet de plus forte valeur, puis passer au suivant si besoin, etc. Par exemple, si somme = 98 euros, alors le glouton renvoie 50+2*20+5+2+1 Dans notre système (500, 200, 100, 50, 20, 10, 5, 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02, 0.01), la stratégie gloutonne est TOUJOURS la meilleure ! Mais si 5, 4, 1 et non 5, 2, 1, alors la stratégie 12 gloutonne n'est PAS optimale pour 98 ! ARBRE COUVRANT DE POIDS MINIMUM 13 LE PROBLÈME relier des villes en réseau avec des liens (routes) de longueur totale minimum Graphe pondéré associé : - sommets = objets (villes, PC, etc.) - arête = lien possible - poids d'une arête = longueur du lien 14 -------------------------------------------------------------- EXEMPLE 1 B 5 E 1 1 A 5 1 D G 5 5 F 1 --------------------------------------------------------------- ==> solution optimale sans cycle et connexe ARBRE par tous les sommets COUVRANT de longueur totale min. DE POIDS MIN. 15 ALGORITHME DE KRUSKAL entrée : Graphe connexe G = (X,U,P) à n sommets et m arêtes sortie : A, un arbre couvrant de poid minimum de G (==> n-1 arêtes) 16 procedure kruskal (entrée : graphe G, sortie : arbre A) entier k=0; U'=; (U'=arêtes sélectionnées et k=|U'|) début i=1; Trier les arêtes de G par ordre de poids croissants tant que k < n-1 faire Si la ième arête ai de U ne forme pas de cycle avec les arêtes dans U' alors U':=U'+{ai}; k=k+1; Finsi i:=i+1; fait Retourner le graphe A=(X,U'); fin 17 -------------------------------------------------------------3 2 b EXEMPLE 2 c 2 1 a 3 2 1 h 3 4 d 1 1 i 4 e 3 1 g Liste triée : 1 f ah de di ei hi fg ab bh ci cd bc ch ef gh ag ge 1 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 x x x - x x x - x - - - x STOP - n = 9 stop après n-1=8 arêtes sélectionnées Poids(A) = (1+1+1+1+1+2+2+3) = 12 -------------------------------------------------------------- 18 BILAN : • Algorithme glouton (toute arête sélectionnée l'est une fois pour toute) MAIS OPTIMAL • Implémentation de certaines parties à préciser ==> cf ED • Complexité = O(m log m) (comme le TRI), si implémentation astucieuse 19 CHOIX D’ACTIVITES 20 LE PROBLÈME A = {a1,a2,..,an} ==> n activités ai [di,fi] di début, fi fin de ai ai et aj compatibles si di fj ou dj fi Problème: choisir le plus grand nombre d'activités compatibles à effectuer 21 ALGORITHME CHOIX_ACTIVITÉ choix glouton (maximise le temps restant après l'activité choisie) Algorithme choix_activité (donnée A: liste initiale d'activités, sortie A*: liste d'activités choisies) début trier et numéroter les ai dans l'ordre croissant des fi; f1 f2 … fn A* = {a1}; j = 1; j représente la dernière activité sélectionnée pour i = 1 à n faire si di ≥ fj alors A* = A*U{ai}; j = i; finsi fait fin 22 Complexité pire cas : O(n log(n)) + O(n) tri des fi boucle O(n log(n)) -------------------------------------------------------------EXEMPLE di = date de début de l'activité ai fi = date de fin de l'activité ai activités triées selon les fi i di fi 1 1 4 2 3 5 3 0 6 4 5 7 5 3 8 6 7 8 9 10 11 5 6 8 8 2 12 9 10 11 12 13 14 23 1 2 1 3 1 4 1 4 5 1 4 6 1 4 7 1 4 8 1 4 8 9 1 4 8 10 1 4 8 11 1 0 1 2 4 3 4 5 6 8 7 8 11 9 10 11 12 13 14 temps 24 BILAN : - De nouveau, algorithme glouton très efficace (en O(n log(n)) - Algorithme très simple à implémenter (tableaux pour stocker les di et fi) - Algorithme également OPTIMAL : si la meilleure solution ne commence pas par l'activité 1, on peut remplacer sa première activité par la 1 sans dégrader la solution, etc. 25 BILAN SUR LES ALGORITHMES GLOUTONS Concept simple mais puissant et utile, ● Potentiellement optimaux (selon la nature du problème ou des données) : c'est toujours le cas si le problème considéré est un matroïde ! ● Utilisés également pour les problèmes difficiles : peuvent fournir rapidement des solutions, parfois bonnes, ou au moins améliorables par différents types de méthodes plus évoluées... ● 26