La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Cours d’Algorithmique

Présentations similaires


Présentation au sujet: "Cours d’Algorithmique"— Transcription de la présentation:

1 Cours d’Algorithmique
Exploration combinatoire complète Branch-and-Bound Solutions approchées 10 janvier 2007 Cours d'algorithmique 12 / Intranet

2 Présentation générale
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é 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

3 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 ? 10 janvier 2007 Cours d'algorithmique 12 / Intranet

4 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

5 TSP -----------------------------------------------------------------
Exemple : La matrice M des distances : B 15 30 17 D 35 A 45 C 20 ( ) A 30 20 35 B 30 17 15 Par symétrie ! C 20 17 45 D 35 15 45 10 janvier 2007 Cours d'algorithmique 12 / Intranet

6 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

7 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

8 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

9 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. 10 janvier 2007 Cours d'algorithmique 12 / Intranet

10 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

11 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 ! ! ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

12 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 ) 10 janvier 2007 Cours d'algorithmique 12 / Intranet

13 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

14 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 ? 10 janvier 2007 Cours d'algorithmique 12 / Intranet

15 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. 10 janvier 2007 Cours d'algorithmique 12 / Intranet

16 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 +µ . 10 janvier 2007 Cours d'algorithmique 12 / Intranet

17 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

18 Cours d'algorithmique 12 / Intranet
Branch and Bound Exemple : ( ) s = 42 30 15 10 17 45 35 Donc : lb ( A ) = 102 = 10 janvier 2007 Cours d'algorithmique 12 / Intranet

19 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 7 35 Donc : lb ( A ) = 102 = Mieux, nous diminuons chaque ligne de son minimum et nous appliquons le même raisonnement aux colonnes ! lb ( A ) = 109 = 10 janvier 2007 Cours d'algorithmique 12 / Intranet

20 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

21 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

22 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

23 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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet

24 coût( ARM ) <= coût( TSP ) <= coût( CIRC ) = 2*coût( ARM )
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 ) 10 janvier 2007 Cours d'algorithmique 12 / Intranet

25 coût( ARM ) <= coût( TSP ) <= coût( CIRC ) = 2*coût( ARM )
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 ) 10 janvier 2007 Cours d'algorithmique 12 / Intranet

26 coût( ARM ) <= coût( TSP ) <= coût( CIRC ) = 2*coût( ARM )
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 ) 10 janvier 2007 Cours d'algorithmique 12 / Intranet

27 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 ) 10 janvier 2007 Cours d'algorithmique 12 / Intranet

28 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 . 10 janvier 2007 Cours d'algorithmique 12 / Intranet

29 Présentation générale
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é 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

30 Présentation générale
Nous n’avons pas parlé de : Langages objets 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

31 Présentation générale
Nous n’avons pas parlé de : Langages objets Langages fonctionnels 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

32 Présentation générale
Nous n’avons pas parlé de : Langages objets Langages fonctionnels Langages logiques 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

33 Présentation générale
Nous n’avons pas parlé de : Langages objets Langages fonctionnels Langages logiques Graphes 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

34 Présentation générale
Nous n’avons pas parlé de : Langages objets Langages fonctionnels Langages logiques Graphes Analyse numérique 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

35 Présentation générale
Nous n’avons pas parlé de : Langages objets Langages fonctionnels Langages logiques Graphes Analyse numérique Calcul parallèle 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

36 Présentation générale
Nous n’avons pas parlé de : Langages objets Langages fonctionnels Langages logiques Graphes Analyse numérique Calcul parallèle Calcul réparti 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

37 Présentation générale
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 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

38 Présentation générale
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, . . . 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

39 Présentation générale
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 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

40 Présentation générale
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 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

41 Présentation générale
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 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique

42 Présentation générale
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 ! 10 janvier 2007 Cours d'algorithmique 12 / Intranet Cours d'algorithmique


Télécharger ppt "Cours d’Algorithmique"

Présentations similaires


Annonces Google