Recherche de chemins de co - PowerPoint PPT Presentation

About This Presentation
Title:

Recherche de chemins de co

Description:

Structure des donn es : std::priority_queue N cessit de mettre en uvre un conteneur permettant de : R cup rer un l ment de co t total minimum : ... – PowerPoint PPT presentation

Number of Views:77
Avg rating:3.0/5.0
Slides: 56
Provided by: NoOn1
Category:

less

Transcript and Presenter's Notes

Title: Recherche de chemins de co


1
Recherche de cheminsde coût minimalavec
lalgorithme AMise en Å“uvre pratique
  • Olivier NOCENT

IUT de Reims-Châlons-Charlevillerue des
crayères, BP 103551687 Reims Cedex 2
2
Introduction
  • Objectif Déterminer, pour un agent donné, un
    chemin de coût minimum depuis un sommet source
    vers un sommet destination au sein dun graphe
    orienté.
  • Un agent est un objet informatique autonome
    utilisé pour représenter une entité mobile dotée
    dun comportement (humain, animal, véhicule, )

3
Applications
  • Jeux vidéo
  • Animation des personnages non joueurs (RPG, FPS)
  • Déplacement réaliste dun personnage contrôlé par
    le joueur vers un objectif désigné par le joueur
    (RTS)
  • Simulation vie artificielle
  • Etude du comportement dune foule, du traffic
    automobile,
  • Effets spéciaux (scènes de bataille, )

4
Représentation du graphe à partir dinformations
topographiques
5
Relations dadjacence grille carrée
Pont
Prairie
Rivière
6
Relations dadjacence grille hexagonale
Prairie
Pont
Rivière
7
Relations dadjacence points visibles
Obstacles
Couloirs
8
Coût des arcs
  • Signification du coût dun arc
  • Distance kilométrique
  • Recherche de chemins de longueur minimale
  • Temps (nécessaire au franchissement de larc)
  • Recherche de chemins en temps minimum
  • Consommation de carburant
  • Rechercher de chemins  économes 

9
Coût des arcs grille carrée
10
10
10
10
10
Coût des arcs grille hexagonale
Triangle équilatéral
11
Coût des arcs pondération en fonction de la
nature de lenvironnement
Prairie
Montagne
12
Coût des arcs pondération en fonction de la
nature de lagent
Coût du franchissement dun pont C 10
pour un humain. C 50 pour une voiture. C
500 pour un semi-remorque.
C
C
13
Algorithme A
14
Principe général évaluation du coût total dun
sommet
  • Coût total (F) Coût depuis la source (G)
    Coût vers la destination (H)
  • G Coût depuis la source
  • Algorithmes classiques (Ford, Bellman, Dijkstra)
  • Gi min Gj Cij / i prédecesseur de j
    Cij coût de larc (i,j)
  • H Coût vers la destination
  • Difficile puisque le reste du chemin (vers la
    destination) est encore inconnu.

15
Coût vers la destination
  • Pourquoi évaluer un coût vers la destination ?
  • Afin de resserrer lensemble des sommets à
    explorer en privilégiant les sommets qui
    semblent nous rapprocher de la destination.
  • RemarqueDans le cas dun algorithme de recherche
    plus classique (Dijsktra), on effectue une
    recherche exhaustive parmi TOUS les sommets.
  • Conséquencelalgorithme A est plus performant
    que nimporte quel autre algorithme puisquil
    diminue lensemble des sommets à explorer.

16
Coût vers la destination
  • Comment évaluer un coût vers la destination ?
  • En utilisant des heuristiques (prédictions) afin
    dévaluer un coût vers la destination INFERIEUR
    au coût réel (encore inconnu).
  • A ce titre, A est un algorithme optimiste.
  • RemarqueSi lheuristique était supérieur au coût
    réel, on risquerait de générer un chemin qui ne
    soit pas minimal.

17
Distance euclidienne
Théorème de Pythagore H 2 (Coté oppose) 2
(Coté adjacent) 2 H 2 40 2 20 2
2000 H 20 x (5) 1/2
S
40
H
20
D
18
Distance de Manhattan
Nombre de cellules, en horizontal et en vertical
entre la source et la destination. Plus conforme
à la nature des déplacements autorisés (haut,
bas, gauche, droite)
S
D
19
Algorithme A
  • Initialisation
  • Sommet source (S)
  • Sommet destination (D)
  • Liste des sommets à explorer (E) sommet source
    S
  • Liste des sommets visités (V) vide
  • Tant que (la liste E est non vide) et (D nest
    pas dans E) Faire
  • Récupérer le sommet X de coût total F minimum.
  • Ajouter X à la liste V
  • Ajouter les successeurs de X (non déjà
    visités) à la liste E en évaluant leur coût
    total F et en identifiant leur prédécesseur.
  • Si (un successeur est déjà présent dans E) et
  • (nouveau coût est inférieur à lancien)
    Alors
  • Changer son coût total
  • Changer son prédécesseur
  • FinSi
  • FinFaire

20
Exemple 1
S
Sommet source
D
Sommet destination
D
Obstacle
S
21
Exemple 1
Sommet déjà visité
Sommet à explorer
10 30
D
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
Référence auprédécesseur
22
Exemple 1
20 40
Sommet déjà visité
Sommet à explorer
10 30
20 40
D
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
Référence auprédécesseur
23
Exemple 1
20 40
Sommet déjà visité
Sommet à explorer
10 30
20 40
D
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
20 60
Référence auprédécesseur
24
Exemple 1
20 40
Sommet déjà visité
Sommet à explorer
10 30
20 40
D
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
20 60
20 60
Référence auprédécesseur
25
Exemple 1
20 40
30 50
Sommet déjà visité
Sommet à explorer
10 30
20 40
D
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
20 60
20 60
Référence auprédécesseur
26
Exemple 1
20 40
30 50
30 30
Sommet déjà visité
Sommet à explorer
10 30
20 40
D
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
20 60
20 60
Référence auprédécesseur
27
Exemple 1
20 40
40 20
30 50
30 30
Sommet déjà visité
Sommet à explorer
10 30
20 40
D
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
20 60
20 60
Référence auprédécesseur
28
Exemple 1
20 40
40 20
50 10
30 50
30 30
Sommet déjà visité
Sommet à explorer
10 30
20 40
D
50 10
Coût depuisla source
Coût versla destination
10 50
S
G H
10 50
20 60
20 60
Référence auprédécesseur
29
Exemple 1
20 40
40 20
50 10
30 50
30 30
Sommet déjà visité
Sommet à explorer
10 30
20 40
60 0
50 10
Coût depuisla source
Coût versla destination
10 50
S
60 20
G H
10 50
20 60
20 60
Référence auprédécesseur
30
Exemple 1
D
S
31
Exemple 2
S
Sommet source
D
Sommet destination
D
Obstacle
S
32
Exemple 2
Sommet déjà visité
Sommet à explorer
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
Référence auprédécesseur
33
Exemple 2
Sommet déjà visité
Sommet à explorer
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
Référence auprédécesseur
34
Exemple 2
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
Référence auprédécesseur
35
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
Référence auprédécesseur
36
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
Référence auprédécesseur
37
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
30 70
Référence auprédécesseur
38
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
40 60
30 70
Référence auprédécesseur
40 80
39
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
40 60
50 50
30 70
Référence auprédécesseur
40 80
50 70
40
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
40 60
50 50
60 40
30 70
Référence auprédécesseur
40 80
50 70
60 60
41
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
20 60
40 60
50 50
60 40
70 30
30 70
Référence auprédécesseur
40 80
70 50
50 70
60 60
42
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
10 50
S
G H
80 20
20 60
40 60
50 50
60 40
70 30
30 70
Référence auprédécesseur
40 80
70 50
80 40
50 70
60 60
43
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
D
Coût depuisla source
Coût versla destination
10 30
90 10
10 50
S
G H
80 20
20 60
40 60
50 50
60 40
70 30
30 70
Référence auprédécesseur
40 80
70 50
80 40
50 70
60 60
44
Exemple 2
30 50
Sommet déjà visité
Sommet à explorer
20 40
100 0
Coût depuisla source
Coût versla destination
10 30
90 10
10 50
S
G H
80 20
20 60
40 60
50 50
60 40
70 30
30 70
Référence auprédécesseur
40 80
70 50
80 40
50 70
60 60
45
Exemple 2
D
S
46
Structure des données détail dimplémentation
  • Initialisation
  • Sommet source (S)
  • Sommet destination (D)
  • Liste des sommets à explorer (E) sommet source
    S
  • Liste des sommets visités (V) vide
  • Tant que (la liste E est non vide) et (D nest
    pas dans E) Faire
  • Récupérer le sommet X de coût total F minimum.
  • Ajouter X à la liste V
  • Ajouter les successeurs de X (non déjà
    visités) à la liste E en évaluant leur coût
    total F et en identifiant leur prédécesseur.
  • Si (un successeur est déjà présent dans E) et
  • (nouveau coût est inférieur à lancien)
    Alors
  • Changer son coût total
  • Changer son prédécesseur
  • FinSi
  • FinFaire

47
Structure des données détail dimplémentation
  • Nécessité de mettre en Å“uvre un conteneur
    permettant de
  • Récupérer un élément de coût total minimum.
  • Insérer un nouvel élément et trier le conteneur.
  • Mettre à jour le coût total dun élément déjà
    présent dans le conteneur.
  • Déterminer si le conteneur est vide.

48
Solution  élégante  files
  • Template ltclass Tgt
  • class stdqueue
  • public
  • bool empty()
  • T pop() return pop_front()
  • void push(T t) push_back(t)

t
push(t)
pop()
49
Solution  élégante  files à priorité
  • Le type T doit surcharger lopérateur de
    comparaison lt
  • Template ltclass Tgt
  • class stdpriority_queue
  • public
  • bool empty()
  • T pop() return pop_front()
  • void push(T t) /insertion triée/

t
push(t)
pop()
50
Insertion triée  efficace 
  • Utilisation dun arbre binaire déléments
  • Le fils gauche est strictement inférieur au nÅ“ud
    courant.
  • Le fils droit est supérieur ou égal au nÅ“ud
    courant.

5
3
12
4
1
7
20
15
25
51
Structure des données stdpriority_queue
  • Nécessité de mettre en Å“uvre un conteneur
    permettant de
  • Récupérer un élément de coût total minimum OUI
  • Insérer un nouvel élément et trier le conteneur
    OUI
  • Mettre à jour le coût total dun élément déjà
    présent dans le conteneur NON
  • Déterminer si le conteneur est vide OUI

52
Structure de données personnalisée
MyPriorityQueue
  • templateltclass Tgt
  • class MyPriorityQueue
  • public
  • T pop()
  • void push()
  • private
  • stdvectorltTgt heap

53
Structure de données personnalisée
MyPriorityQueue
  • templateltclass Tgt
  • T MyPriorityQueuepop()
  • // Lélément le plus grand est au début
  • // du conteneur heap position 0.
  • T value heap.front()
  • // 1. Déplace le premier élément à la position
    N-1.
  • // 2. Trie les éléments de la position 0 à N-2
  • stdpop_heap(heap.begin(), heap.end(), Inf())
  • // Supprime lélément en position N-1
  • // cest à dire, lancien premier.
  • heap.pop_back()
  • return value

54
Structure de données personnalisée
MyPriorityQueue
  • templateltclass Tgt
  • T MyPriorityQueuepush(T value)
  • // Ajout de la valeur en queue du conteneur
  • // position N.
  • heap.push_back(value)
  • // Trie les éléments de la position 0 à N.
  • stdpush_heap(heap.begin(), heap.end(), Inf())
  • return value

55
Un peu de lecture
Game Programming Gems 1 by Mark de
DeLoura (Charles River Media ) August, 2000
http//www.gamedev.net http//www.gamasutra.com
Write a Comment
User Comments (0)
About PowerShow.com