420 likes | 542 Views
Cours d’Algorithmique. Exploration combinatoire complète Branch-and-Bound Solutions approchées. Les grandes lignes du cours. Trier et chercher, recherche textuelle Listes et arbres Le back-track, solutions approchées Arbres équilibrés Récursivité et induction sur la structure
E N D
Cours d’Algorithmique Exploration combinatoire complète Branch-and-Bound Solutions approchées Cours d'algorithmique 12 / Intranet
Les grandes lignes du cours • Trier et chercher, recherche textuelle • Listes et arbres • Le back-track, solutions approchées • Arbres équilibrés • Récursivité et induction sur la structure • Divide and conquer, algorithmes gloutons • Minimax, alpha-beta • Dérécursion • NP-complétude, Branch-and-Bound • Logique de Hoare • Programmation dynamique • Complexité et calculabilité Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- • Le « Voyageur de Commerce », en anglais « Traveling Salesman Problem » ( TSP ) : • « n » villes, • un réseau routier complet entre ces villes avec les distances, • La question : Quel est le coût du circuit (point de départ = point d’arrivée) le moins cher qui visite chaque ville une et une seule fois ? Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- • Exemple : B 15 30 17 D 35 A 45 C 20 Un tour à coût 110 ! Un tour à coût 87 ! Il suffit d’un inspecter tous les circuits ! Seulement, il y en a n ! pour n villes ! Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- • Exemple : • La matrice M des distances : B 15 30 17 D 35 A 45 C 20 ) ( +µ 30 20 35 A B 30 +µ 17 15 Par symétrie ! 20 17 +µ 45 C D 35 15 45 +µ Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- • Pour avoir un circuit il faut sélectionner « n » arêtes ! • La représentation du problème : • « c » est le nombre d’arêtes déjà choisies, • « E » est l’ensemble de ces arêtes, • « s » est la somme des longueurs des arêtes de « E », • « M » est la matrice courante avec les arêtes interdites ou déjà choisies mises à +µ. • Le principe du back-track : • Nous choisissons une arête pour l’imposer ou l’interdire ! Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- • Lorsque nous avons sélectionné « n » arêtes, • il faut rendre « s » comme résultat ! • Sinon, • nous choisissons une arête ( a , b ) de poids fini ! • Si ce n’est pas possible, nous sommes dans une impasse et nous rendons +µ (pas de circuit !). • Si l’arête ( a , b ) ferme le circuit trop tôt, • nous ne pouvons que l’interdire ! Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- a b Les arêtes sélectionnées ! Nous pouvons compléter vers un circuit ! Nous ne pouvons plus compléter vers un circuit ! Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- • Interdire une arête revient à : • garder le même nombre « c » d’arêtes sélectionnées, • le même ensemble « E », • la même somme « s », • mettre l’entrée ( a , b ) de « M » à +µ . • Notation : • M [ ( a , b ) <- v , ( c , d ) <- w ] : 2 entrées sont changées. • M [ ( a , _ ) <- v ] : une ligne est modifiée. Cours d'algorithmique 12 / Intranet
TSP-----------------------------------------------------------------TSP----------------------------------------------------------------- • Lorsque l’arête ( a , b ) est de poids fini et acceptable, nous pouvons décider de • soit l’interdire, nous avons vu comment faire, • soit, la sélectionner. A ce moment : • c <- c + 1 • e <- E v { ( a , b ) } • s <- s + M( a , b ) • M <- M[ ( a , _ ) <- +µ , ( _ , b ) <- +µ ] • Ensuite, nous continuons l’exploration et nous rendons la meilleure des deux solutions ! Au moins 2^n cas à inspecter ! Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • L’idée est la suivante : • Si les arêtes que nous avons déjà choisies sont très chères, • alors, même en continuant de la meilleure manière, notre solution sera très chère, • et même plus chère qu’une solution complète déjà connue ! Arrêtons les frais ! ! ! Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Le programme gère une variable opt* qui mémorise la longueur de la meilleure solution trouvée jusqu’à présent. • Nous explorons un arbre (problème) « A » à la recherche de la meilleure solution locale : opt( A ) . • Nous espérons que opt( A ) soit meilleure que opt* . • Avant d’explorer complètement A , nous aimerions avoir une « petite idée » des solutions que nous risquons d’y trouver ! ! ! • Supposons qu’une fonction « lb », pas trop compliquée à calculer, nous donne un minorant de la meilleure solution : lb( A ) <= opt( A ) Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Nous allons comparer lb( A ) à opt* : • Si opt* <= lb( A ) alors opt* <= lb( A ) <= opt( A ) . • Ce n’est pas la peine d’explorer A ! ! ! • Le calcul lb( A ) est beaucoup plus rapide que celui de opt( A ). • Tout bénef ! • Si opt* > lb( A ) alors on ne peut rien en déduire. • En effet, lb( A ) <= opt( A ) et lb( A ) < opt* , mais . . . ? ? ? • Le calcul lb( A ) ne sert à rien ! Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Principe du Branch-and-Bound ( Séparer et évaluer ) : • Nous connaissons opt* ! • Nous calculons lb( A ) en « temps raisonnable » ! • Si opt* <= lb( A ) , nous pouvons éliminer A ! • Si opt* > lb( A ) , nous explorons A normalement ! Calcul spéculatif ! Il faut savoir combien de temps lui attribuer ? Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Le calcul spéculatif : • Si nous lui consacrons trop peu de temps, la borne sera mauvaise et ne servira à rien ! • Si nous lui consacrons trop de temps, c’est contre-productif ! Augmenter, encore et encore, le temps n’améliore pas nécessairement la borne ! • Tout est une question d’expérience, purement empirique ! • Pour le TSP, des bornes en complexité n^3 ont donné les meilleurs résultats, si n est grand. Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Pour notre TSP : • Nous avons « c » , « E » , « s » et « M » . • Donc, il y a « c » lignes complètement remplies avec +µ . • Il y a « n-c » lignes contenant des valeurs finies ! • Dans chaque ligne, il faut choisir une valeur. • Cette valeur sera au moins aussi grande que la plus petite valeur finie dans la ligne. • Nous obtenons une borne inférieure en sommant « s » et les « n-c » minima des lignes non complètement remplis de +µ . Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Exemple : ) s = 42 ( +µ +µ +µ +µ 30 +µ +µ 15 10 17 +µ 45 35 +µ +µ +µ L’idée : Il faudra bien partir de la seconde ville et cela coûtera au moins 15, de même pour les autres villes ! Notre raisonnement reste incomplet car il ne tient pas compte du fait que nous ne pourrons pas aller deux fois vers la première ville ! Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Exemple : ) s = 42 ( +µ +µ +µ +µ 30 +µ +µ 15 10 17 +µ 45 35 +µ +µ +µ Donc : lb ( A ) = 102 = 42 + 15+ 10+ 35 Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Exemple : ) s = 42 ( +µ +µ +µ +µ Cette borne inférieure correspond par chance à la longueur du plus court circuit : A – C – B – D – A 15 +µ +µ 0 0 7 +µ 35 0 +µ +µ +µ Donc : lb ( A ) = 102 = 42 + 15+ 10+ 35 Mieux, nous diminuons chaque ligne de son minimum et nous appliquons le même raisonnement aux colonnes ! lb ( A ) = 109 = 102+ 7 Cours d'algorithmique 12 / Intranet
Branch and Bound----------------------------------------------------------------- • Principe du Branch-and-Bound ( Séparer et évaluer ) : • Nous connaissons opt* ! • Nous calculons lb( A ) en « temps raisonnable » ! • Si opt* <= lb( A ) , nous pouvons éliminer A ! • Si opt* > lb( A ) , nous explorons A normalement ! Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- • Nous renonçons à l’optimum ! • Une solution rapide et pas trop mauvaise fera l’affaire ! • Calculons juste un réseau connexe de poids minimal ! Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- Il n’est pas complet, mais ce n’est pas grave ! 30 15 8 5 10 12 7 18 9 11 Nous relions tout le monde au coût minimal ! Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- • Nous renonçons à l’optimum ! • Une solution rapide et pas trop mauvaise fera l’affaire ! • Calculons juste un réseau connexe de poids minimal ! • C’est un « arbre de recouvrement minimal » (ARM) ! • Son calcul est en O( n^2 ) . • Nous allons en déduire un circuit, peut-être pas optimal ! • Mais, notre solution sera rapide à calculer ! Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- coût( ARM ) = 45 30 Nous doublons chaque arête et construisons un circuit : CIRC 15 8 5 10 12 7 18 coût( CIRC ) = 90 9 11 coût( ARM ) <= coût( TSP ) <= coût( CIRC ) = 2*coût( ARM ) Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- coût( ARM ) = 45 30 Nous doublons chaque arête et construisons un circuit : CIRC 15 8 5 10 12 7 18 coût( CIRC ) = 90 9 11 Nous évitons de passer plusieurs fois dans un sommet en prenant un raccourci ! ! ! coût( ARM ) <= coût( TSP ) <= coût( CIRC ) = 2*coût( ARM ) Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- coût( ARM ) = 45 30 Nous doublons chaque arête et construisons un circuit : CIRC 15 8 5 10 12 7 18 coût( CIRC ) = 90 9 11 Nous évitons de passer plusieurs fois dans un sommet en prenant un raccourci ! ! ! coût( ARM ) <= coût( TSP ) <= coût( CIRC ) = 2*coût( ARM ) Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- coût( ARM ) = 45 30 Nous doublons chaque arête et construisons un circuit : CIRC 15 8 5 10 12 7 18 coût( CIRC ) = 90 9 11 Si l’inégalité triangulaire est vérifiée le circuit SOL que nous trouvons est plus court que CIRC ! ! ! Nous évitons de passer plusieurs fois dans un sommet en prenant un raccourci ! ! ! coût( ARM ) <= coût( TSP ) <= coût( SOL ) <= coût( CIRC ) = 2*coût( ARM ) Cours d'algorithmique 12 / Intranet
Solutions approchées----------------------------------------------------------------- • Nous obtenons un circuit en temps O( n^2 ) ! • Notre solution est au pire deux fois plus longue que le circuit optimal ! • C’est en fait très mauvais, dans le pire des cas ! • En moyenne, nous sommes à 5% ou 10% de l’optimum ! • Il y a des algorithmes approchés meilleurs que celui-ci . Cours d'algorithmique 12 / Intranet
Nous avons parlé de tout ceci : • Trier et chercher, recherche textuelle • Listes et arbres • Le back-track, solutions approchées • Arbres équilibrés • Récursivité et induction sur la structure • Divide and conquer, algorithmes gloutons • Minimax, alpha-beta • Dérécursion • NP-complétude, Branch-and-Bound • Logique de Hoare • Programmation dynamique • Complexité et calculabilité Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle • Calcul réparti Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle • Calcul réparti • Du Web et ses langages Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle • Calcul réparti • Du Web et ses langages • Traitement d’images, son, . . . Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle • Calcul réparti • Du Web et ses langages • Traitement d’images, son, . . . • Optimisation combinatoire Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle • Calcul réparti • Du Web et ses langages • Traitement d’images, son, . . . • Optimisation combinatoire • Génie logiciel Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle • Calcul réparti • Du Web et ses langages • Traitement d’images, son, . . . • Optimisation combinatoire • Génie logiciel • Tests de programmes Cours d'algorithmique 12 / Intranet
Nous n’avons pas parlé de : • Langages objets • Langages fonctionnels • Langages logiques • Graphes • Analyse numérique • Calcul parallèle • Calcul réparti • Du Web et ses langages • Traitement d’images, son, . . . • Optimisation combinatoire • Génie logiciel • Tests de programmes • . . . et bien d’autres ! Cours d'algorithmique 12 / Intranet