You are on page 1of 88

TPE 2004

BLEIBEL Franois
DORKEL Aymeric

Les algorithmes de
lintelligence
artificielle

Quels algorithmes permettent un


robot de se dplacer de manire
autonome dans son environnement ?

Introduction
Lintelligence artificielle est une comptence spcifique aux robots ou aux
automatismes ( artificielle ) qui dtermine sa facult imiter un comportement
humain. Cette intelligence essaye dimiter le fonctionnement dun cerveau
humain dans beaucoup de domaines, par exemple la parole ou le caractre, deux
aspects spcifiques aux humains, mais aussi notamment la capacit du cerveau
reconnatre les objets ou personnes qui lentourent. Elle a des applications tout
dabord dans linformatique pure : une des utilisations de lintelligence artificielle
sert lapprentissage dune voix par un ordinateur pour la reconnaissance
vocale; les jeux vido utilisent aussi beaucoup une intelligence simule pour
donner au joueur limpression de jouer avec des humains, donnant la capacit
aux personnages contrls artificiellement de se comporter comme un
humain, en adoptant un caractre, un langage ou encore des actions qui sont
lorigine de lattitude du joueur envers eux, et qui imiteraient un dialogue ou un
combat le plus raliste possible. On peut aussi lutiliser pour contrler des
chanes de production mcanises (industrie lourde ou robotique) : des machines
intelligentes sont ainsi capables de deviner le moment o un dfaut ou une
fausse manoeuvre va survenir bien avant des capteurs traditionnels, soit par un
apprentissage pralable ou soit en utilisant des algorithmes classiques
(mthode la moins utilise), le rsultat source de rduction du temps darrt de
la production, faisant ainsi conomiser du temps et de largent lentreprise qui
les utilise.
Dans ce TPE, notre but est de dcouvrir et examiner les diffrentes solutions qui
permettent un robot quelconque de se dplacer dans son environnement (une
maison ? une pelouse) pour aller chercher une balle rouge. Il devra pour ce faire
viter les obstacles qui se prsenteraient lui, et pourquoi pas, optimiser son
trajet histoire dconomiser de lnergie en se dplaant jusqu la balle. Ce robot
doit faire preuve de deux aptitudes humaines ou les imiter pour raliser son
objectif.
La premire consiste donner un robot (ou personnage, dans une approche
virtuelle) la capacit de se mouvoir intelligemment
dans un environnement. Ici lintelligence mise en
uvre aura pour but de se mouvoir dun point un
autre en vitant les obstacles. On pourrait penser que
cest une intelligence assez simple ou en dautres
termes, vidente : nos trajets de tous les jours nous
semblent simples; contourner des obstacles, ou aller
chercher une chaise derrire une table ne relve pas
du dfi pour nous les humains. Mais dans le cadre dun
robot,
avec
pour
seule
intelligence
un
microprocesseur et des capteurs, cest beaucoup plus
ardu : il se pose alors le problme dune dtermination optimale (c'est--dire la
plus courte) du trajet, ceci en nayant pas forcment la vision spatiale et
immdiate de lenvironnement que nous avons (c'est--dire sans forcment
connatre la position des obstacles lavance : nous examinerons les deux cas),
et mme alors, les points de passage (du trajet) doivent tre calculs de
manire prcise en minimisant la distance parcourue, mettant en uvre des
algorithmes aussi complexes que varis, dont les utilisations sont dcrites dans la
partie II.
1

La seconde aptitude humaine que nous allons tudier consiste reconnatre les
objets, c'est--dire leurs formes et/ou leurs couleurs. Les yeux qui
nous permettent de reconnatre une balle quand nous en voyons
une (en nous basant sur notre exprience et les informations de
nos sens) ont leurs quivalents robotiques. Ces capteurs CCD ou
autres camras numriques embarqus sur notre robot couples
un systme de commande (le cerveau lectronique du robot) lui
permettent de reconnatre les caractristiques (la forme et la
couleur dune balle rouge, par exemple) des objets. Le robot peut
alors identifier certains objets et prendre des dcisions en temps
rel bases sur sa reconnaissance de lenvironnement.
Ces deux aptitudes sont les plus utilises dans les applications modernes de
lintelligence artificielle : la premire (dtermination du trajet) sert dans les
logiciels de cartes routires ou les ordinateurs de bord, afin de conseiller
lutilisateur sur la meilleure route prendre. La seconde peut servir dans la
reconnaissance des personnes (un robot - chien qui reconnatrait son matre par
exemple) ou pour guider le dplacement dun robot vers un objet, comme dans
notre cas.
Nous allons donc tudier les algorithmes et autres mthodes ncessaires pour
raliser notre objectif. Le robot doit reconnatre la balle et en dterminer sa
position, pour pouvoir ensuite se dplacer jusqu elle. Ce TPE est donc divis en
trois parties. La premire, Reconnaissance dimages traite des algorithmes,
capteurs, et tout ce qui est ncessaire pour que le robot puisse reconnatre notre
balle et en dterminer sa position. La seconde partie, intitule Dtermination
Intelligente de Trajet, parle des algorithmes utiliss pour que le robot trouve (et
optimise) son chemin en se dplaant jusqu la balle. Enfin, la dernire partie,
Les rseaux neuronaux, explique les mcanismes de fonctionnement dune des
plus rcentes et plus compliques dcouvertes de lintelligence artificielle.

Sommaire

I. Reconnaissance et localisation dobjets partir dimages


numrises
A. Codage et stockage de limage
1) Acquisition et codage
2) Stockage : la matrice
3) Modifications de base
B. Elimination du bruit
1) Principe de convolution
2) Filtres linaires
3) Filtres non-linaires
C. Slection
D. Dtermination de contours
1) Par convolution
2) Autres mthodes
E. Reconnaissance de forme
F. Localisation de la balle

II. Dtermination Intelligente de Trajet


Introduction
1. La ligne droite
2. Depth First Search ( DFS)
3. Breadth First Search (BFS)
4. Dijkstra
5. A* ( A star)
Comparatif et conclusion
III. Les rseaux neuronaux
1. La thorie
2. Application la reconnaissance dimages
3. Application la Dtermination Intelligente de Trajet

Reconnaissance et localisation dobjets


partir dimages numrises

Les systmes robotiss utilisant des informations visuelles provenant de


capteurs optiques, du type de ceux utiliss dans des camras ou appareils photo,
sont nombreux (ex : systmes de contrle industriel, robots dexploration
spatiale, ). Mais comment sont-ils capables dinterprter ce quils voient
pour interagir avec leur environnement ? A partir dun exemple, nous allons
essayer dillustrer diffrentes mthodes permettant un robot de reprer un
objet pour aller le ramasser, nous utiliserons pour cela une balle rouge.

M ise en situation
Nous disposons dune image, provenant du capteur dun robot (voir cidessous). Nous allons reprer la balle rouge quil devra ramasser, aprs en avoir
dtermin la position.
Pour simplifier le problme, nous dfinissons quun seul objet sphrique rouge
(la balle) sera visible par le robot, et quil ne sera pas masqu plus de 25% par
un obstacle.

Image provenant du capteur du robot

Processus permettant daboutir une solution

Codage et stockage de l'image:


Comment coder et stocker l'image acquise

Suppression du bruit:
Comment gommer les imperfections de l'image

Slection des couleurs


Comment simplifier l'image pour acclrer les calculs

Distinction des contours


Comment dlimiter les diffrents objets visibles sur l'image

Reconnaissance des formes


Comment trouver la balle parmi tous les objets

Localisation
Comment trouver la position de la balle grce au traitement de l'image

A. Codage et stockage de limage


1) Acquisition et codage
Dans la majorit des cas, le systme rceptionne les donnes provenant dun
capteur CCD (Charge Coupled Device ou Dispositif Transfert de Charges en
franais). Ce type de cellule photo-sensible est utilis dans la plupart des
appareils photos et camras numriques. Il dlivre les donnes de limage sous la
forme dun tableau de pixels. Pour chaque pixel, les informations de luminosit et
de couleur sont codes puis stockes dans une entit de taille dfinie. Dans la
majorit des cas, on utilise des codes couleurs dits 24 bits .
Une couleur est stocke sur 24 bits, soit 3 octets, comme le montre le schma
ci-dessous.
On stocke lintensit de chacune des composantes primaires (rouge, vert et
bleu) sur un octet, soit 256 niveau de luminosit diffrents. Cela permet dobtenir
2563, soit 16 777 216 nuances de couleurs distinctes.

Stockage dune couleur sur 24 bits

La dimension de la structure de stockage dpend de plusieurs facteurs. Elle


est proportionnelle la qualit du capteur et la qualit requise. Une image en
noir et blanc utilise des couleurs stock sur 1 bit (2 tats, noir et blanc), une
image en niveaux de gris utilise des couleurs stockes sur 16 bits. Les images
couleurs utilisent gnralement des structures de stockages de 16, 24 ou 32 bits.
Dans ce TPE, nous utiliserons des couleurs 24 bits, car elles sont trs pratiques
(1 octet, soit 256 tats, par couleur primaire).
2) Stockage : la matrice
En mathmatique, une matrice est un tableau de valeurs. Nous allons donc
considrer quune image peut tre dfinie par trois matrices, une pour chaque
couleur primaire (rouge, vert, bleu). Les valeurs initiales de celles-ci seront des
entiers, compris entre 0 et 255.
Pour obtenir la couleur dun pixel dabscisse x et dordonn y dune matrice M,
nous utilisons la syntaxe suivante : Couleur = M(x, y)
Exemple de matrice M (valeurs entre 1 et 9) :
5
3
1
1
1

7
9
5
1
1

7
6
5
2
8

4
5
9
1
3

3
4
1
5
4

En gris, la case de coordonn (3,2). Nous pouvons donc crire M(3,2) = 9.


La case de coordonne 0,0 se situe en haut gauche.
6

3) Modifications de base
Au fur et mesure de lavancement des processus de recherche de la position
de la balle, les algorithmes utiliss vont modifier les valeurs des trois matrices
initiales. Aprs certaines tapes, leurs contenus ne seront plus directement
visualisables, car ils ne correspondront plus des niveaux de couleur compris
entre 0 et 255. Elles pourront contenir aussi bien des nombres ngatifs que des
valeurs suprieures 255.
Afin de pouvoir visualiser la progression de la recherche, nous adapterons les
valeurs de ces matrices, en fonction de la situation. Nous pourront soir remplacer
les valeurs ngatives par leur oppos, soit par une valeur nulle. Les valeurs trop
leves seront tronques.

B. Elimination du bruit
Les camras contiennent des circuits lectroniques associs des capteurs
optiques. Le bruit qui est induit par tout composant lectronique gnre des
pixels dont la couleur ne correspond pas la ralit, qui forment un bruit.
Les algorithmes de reconnaissance de formes ragissent trs mal la
prsence de bruit, car ils le considrent comme de petits objets. Il faut donc
supprimer ce bruit, ou lattnuer. Pour cela, nous utiliserons des filtres, qui
mettent en uvre des principes mathmatiques qui peuvent tre par exemple la
convolution.
Afin de pouvoir juger de lefficacit des filtres utiliss, nous allons utiliser un
extrait de la photo prise par le robot, auquel nous allons ajouter un bruit
artificiel. Nous pourrons ensuite le traiter avec les diffrents filtres prsents.

Image de base

Pour bruiter limage, nous attribuons des couleurs alatoires 10 000 pixels
alatoirement choisis. Voici le rsultat :

Image alatoirement bruite

1) Principe de convolution
La convolution est une opration mathmatique que lon applique aux
matrices. Elle permet de gnrer une matrice fille (image traite) partir dune
matrice mre (image traiter), et dune matrice noyau (fonction de la finalit
du filtre).
Soit une matrice fille N, une matrice mre P, et une matrice noyau K, de
dimensions latrales impaires imax et jmax, dont la valeur de coordonne (0,0) est
le centre.
Voici la formule permettant deffectuer une convolution :

N yx =

iMax 1
2

i =

jMax 1
2

iMax 1
j 1
j = Max
2
2

K (i, j ) *P ( x + j , y + i )

Exemple de convolution :

Sur la gauche, en arrire plan, un dessin reprsentant la matrice mre. En rouge,


la partie dont les valeurs chiffres sont donnes dans le tableau numrique de
gauche. Sur la droite, la matrice noyau .
Calculons la valeur du centre du carr rouge aprs la convolution :
N(x,y) = (-1 x 222) +
( 0 x 170) +
( 1 x 149) +
(-2 x 173) +
( 0 x 147) +
( 2 x 205) +
(-1 x 149) +
( 0 x 198) +
( 1 x 221) = 63
Pour effectuer une convolution, on utilise les pixels voisins de chaque pixel.
On ne peut donc pas appliquer cette technique aux pixels du bord de la matrice
mre. La matrice fille est donc plus petite que la matrice mre (plus la taille de la
matrice noyau est importante, plus cette diffrence sera grande).

Il ne faut pas oublier que ces oprations sont trs coteuses en calculs : pour
une image carre, de 100 pixels de ct, avec une matrice noyau de dimensions
3x3, il faut dj faire :
(98 [ct valide de la matrice mre] )
x 9[Nombre de valeurs de la matrice noyau ]
= 86.436 multiplications et autant dadditions.
(pour une image de meilleure qualit, 800x600 pixels, avec une plus grande
matrice noyau, de 11x11 par exemple, il faudrait 112 796 200 oprations !)

10

2) Filtres linaires : limination base sur la convolution


Les filtres linaires sont des filtres relativement basiques, utilisant
uniquement le principe de convolution prcdemment dcrit. Nous allons en
tudier deux, le filtre dit moyenneur et celui dit gaussien .
a) Filtre moyenneur
Cet algorithme calcule, pour chaque pixel, la couleur moyenne dune zone
lentourant. La convolution utilise donc une matrice noyau dont la somme vaut 1,
pour ne pas modifier limage. Il donne ensuite la couleur rsultant du calcul au
pixel tant trait.
Gnralement, on essaye dappliquer un filtrage qui a le mme effet dans
toutes les directions, ce que lon nomme filtrage isotopique. Pour les matrices
noyaux de grande taille, la zone utilise sera circulaire.
Exemples de matrices :
1
9

1
Matrice 3x3 :
9

9
Il sagit ici dune
correct.
Matrice 7x7 :
0
0
0
0
1/29 1/29
0
1/29 1/29
1/29 1/29 1/29
0
1/29 1/29
0
1/29 1/29
0
0
0

1 1
9 9

1 1
9 9

1 1

9 9
matrice de base, elle permet un calcul rapide et un filtrage

1/29
1/29
1/29
1/29
1/29
1/29
1/29

0
1/29
1/29
1/29
1/29
1/29
0

0
1/29
1/29
1/29
1/29
0
0

0
0
0
1/29
0
0
0

Cette matrice noyau de plus grande taille ncessite un temps de calcul plus long
et doit de prfrence tre utilise avec des images de hautes rsolution, o les
imperfections pourraient tres de plus grandes taille (en nombre de pixels
pollus).
Dun point de vu pratique, lalgorithme moyenneur na pas besoin dune
convolution, il existe une faon plus simple de le mettre en uvre.
Pour chaque pixel valide, nous effectuons lopration en boucle suivante :
Calcul de la somme des valeurs des couleurs du pixel et de ses voisins
Division par le nombre de pixels pris en compte
Application de la nouvelle couleur au pixel trait
(les pixels situs au bord le limage nont pas le nombre de voisins requis pour
tre traits, ils ne sont donc pas valides )
11

Exemple pratiques :

Image avec bruit, filtre avec noyau 9 pixels, filtre avec noyau 225
pixels.
On note que plus la matrice noyau est grande, plus le bruit est attnu. En
contrepartie, plus elle est grande, plus limage devient floue.
Avec limage provenant de notre robot :

Image alatoirement bruite


10 000 pixels de couleur modifie

Image nettoye avec un filtre


moyenneur, matrice noyau de ct 3

On constate facilement que le rsultat est de trs mauvaise qualit. Le bruit a


t peine attnu.
Cet algorithme a un trs grand dfaut : il rend les images floues. En effet,
dans les zones de changement de couleur, on retrouve un effet de fondu, dont
limportance est proportionnelle la taille de la matrice noyau . Ce filtre
applique galement cet effet aux pixels considrs comment tant du bruit, ce
qui lattnue mais ne le supprime pas totalement.
Le filtre moyenneur est extrmement simple mettre en place et ne demande
pas trop de ressources lors de son fonctionnement. Il est rarement utilis,
lorsque un trs faible bruit doit tre attnu.

12

b) Filtre gaussien
Le filtre gaussien, qui doit son nom au clbre mathmaticien ayant dfinit la
courbe caractristique reprsente ci-dessous, est trs proche du filtre
moyenneur, cela prs quil ne prend pas autant en compte les pixels loignes
du pixel traiter que ceux qui lui sont directement voisins. Cest une sorte de
moyenne pondre, dont les poids sont dfinis par la courbe de Gauss. Plus un
pixel est proche du centre de la matrice noyau, plus sa couleur est prise en
compte.
Exemple de courbe de Gauss :

Courbe de Gauss

Si on nomme K la matrice noyau, le calcul des poids se fait selon la formule


suivante :

x2 + y 2
1
K ( x, y ) =
exp
2
2 2
2
La constante permet de facilement rgler le degr de filtrage, comme le
montre les diffrentes reprsentations tridimensionnelles des poids de la matrice
noyau suivantes :

=2

=3
13

Ce filtre permet une prise en compte progressive de la couleur des pixels


voisins du pixel traiter, en fonction de leur distance celui-ci, contrairement au
filtre moyenneur, qui dfinit une zone de pixels pris galement en compte.
Malheureusement, ce filtre ajoute galement un effet de flou limage, et ne
supprime pas totalement les pixels parasites, mais se contente dattnuer le
bruit. Il est relativement peu utilis.

Les filtres linaires, bases sur les convolutions de matrices ne sont pas trs
efficaces. Le bruit nest quattnu, et limage devient flou, ce qui va compliquer
la reconnaissance de contours. Seuls des filtres non-linaires pourront rsoudre
ce problme.

14

3) Filtres non-linaires
Les filtres non linaires utilisent tous des tests conditionnels, ils sont par
exemples parfois bass sur des seuillages ou des classements, ce qui les rend
non linaires.
a) Filtre mdian
Le filtre mdian considre les pixels entourant le pixel traiter, gnralement
sur un disque, pour obtenir un filtrage isotopique, et en trouve la valeur mdiane,
qui sera donne au pixel traiter.
Dans une srie, la mdiane correspond la valeur qui spare la srie en deux
ensemble de mme taille. Cest donc une valeur appartenant la srie,
contrairement la moyenne, qui est une valeur calcule. Cela vite les effets de
flou.
Exemple dapplication :
Zone de limage, avec sur fond
Seuls les pixels sur fond color
7
10 12
7
9
9
12 12 12
7
9
9
9
9
10 10
7
10
10
9
9
12 10
9
12 12 12 10
7
7
10
7
10 12 12 10
10
7
9
12 10
9

bleu, le pixel traiter.


sont pris en compte pour la mdiane.
9
10
12
12
10
7
12

Voici la liste ordonne des 29 valeurs prises en comptes :


7, 7, 7, 7, 7, 7, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12,
12, 12, 12, 12, 12
La valeur sur fond gris reprsente la mdiane de la srie. Elle sera applique
au pixel traiter.
Rsultats :

Image avec bruit, filtre avec mdiane sur 9 pixels, filtre avec mdiane sur 81
pixels.

15

Rsultat avec un extrait de limage de notre robot :

Image alatoirement bruite


10 000 pixels de couleur modifie

Image nettoye avec un filtre


mdian, sur 9 pixels

Le filtrage mdian a permis de retrouver une image nette, dbarrasse de la


majorit du bruit anciennement prsent, sans effet de flou.
On comprend trs bien pourquoi ce filtre najoute pas deffet de flou
limage, comme le montre la comparaison ci-dessous, qui reprsente en
changement de couleur trait avec un filtre moyenneur et un filtre mdian. En
abscisse, une dimension (par exemple une ligne dune image) et en ordonn, les
couleurs.

La mdiane permet de donner des limites nettes aux formes, et supprime


totalement le bruit. Malheureusement, le temps de calcul ncessaire est plus
long, une moyenne est plus rapide calculer quune mdiane. Le filtre mdian
reste plutt simple implanter, et a un trs bon rapport temps de calcul
ncessaire / nettet du rsultat.

16

b) Filtre seuill
Le principal dfaut des filtres prcdemment dtaills rside dans le fait quils
lissent toute limage, aussi bien dans les zones de couleur unie o se trouvent un
bruit quil faut liminer que dans les zones de transitions (contours) quils ont
tendance rendre flou, ou dformer. Le principe de moyenne seuille est une
fonction que lon peut coupler avec un filtre linaire, par exemple avec un filtre
moyenneur, gaussien ou mdian, afin dviter ce problme.
Principe :
Lalgorithme calcule la variance sur une zone autour de chaque pixel. La
variance est une grandeur mathmatique permettant destimer la dispersion
dune srie de valeurs.
Si elle est faible (infrieure un seuil), nous sommes dans une zone
relativement homogne, donc dans une mme forme, et nous pouvons appliquer
le filtre afin de supprimer les imperfections. Par contre, si la variance est leve,
nous nous trouvons dans une zone de transition (par exemple un contour
dlimitant deux formes distinctes) et nous nappliquons pas le filtrage, pour ne
pas dtriorer la nettet du contour.
Dans le cas o nous utilisons un filtre moyenne seuille, le filtrage par
moyenne ne rend plus les images floues, mais attnue tout de mme les
imperfections de limage.
c) Filtre pondr
Le filtre pondr est une volution du filtre seuill. Lorsque ce dernier agissait
de faon binaire, et dfinissait sil faut ou sil ne faut pas appliquer de filtrage
pour un pixel en fonction de la variance de la zone lentourant, le filtre pondr
applique le filtrage inversement proportionnellement cette variance. Plus la
variance est faible (zone plutt homogne) plus le filtrage est efficace. Plus la
variance est lev (zone de contour) plus le filtrage est discret.
Le filtre pondr permet un filtrage en fonction de limage, adapt chaque
situation. Il ne rend pas les contours flous, mais gomme les imperfections des
zones homognes.

17

d) Filtre de Nagao
Le filtre de Nagao, aussi appel filtre slection de voisinage, est lultime
volution des filtres seuills et pondrs. Il va appliquer un filtrage en fonction de
la variance sur des formes prdfinies, des gabarit, correspondant aux contours
les plus souvent rencontrs. Il va donc supprimer le bruit prsent sur limage et
renforcer les contours prsents.

Chaque carr de 5 pixels de ct est divis en 9 domaines, nomms D0 D8.


D2, D4 et D6 sont dduits de D0 par rotations de 90, de mme pour D3, D5 et
D7, provenant de rotations de D1.
Lorsque lon applique le filtre de Nagao un pixel, on calcule la variance de
chaque domaine Di de la zone carre lentourant. Celui pour lequel elle sera la
plus faible ne sera travers par aucun contour. Nous allons donc appliquer un
filtre secondaire (mdian ou moyenneur par exemple) en utilisant uniquement les
valeurs du domaine slectionn.
Par exemple, si lors du traitement dun pixel, le domaine dont la variance est
la plus faible est le domaine D1 et que le filtre secondaire est un filtre
moyenneur, nous appliqueront la couleur moyenne de tous les pixels en rouge
sur le schma du domaine D1, reprsent ci-dessus.

18

Conclusion sur le filtrage anti-bruit


Le choix dun filtre anti-bruit va dpendre de plusieurs critres :
La puissance de calcul disponible : si les oprations doivent tres excutes
par un ordinateur embarqu dans un robot de petite taille, le matriel ne
dispose pas forcment dune grande vitesse de calcul ou de beaucoup de
mmoire.
La vitesse de calcul requise : Le choix du filtre ne sera pas le mme si les
rsultats doivent tres obtenus en temps rel , par exemple pour un
systme ncessitant un dplacement rapide, ou une frquence moins
leve, par exemple pour un systme de surveillance.
Le type de bruit : des filtres relativement simples (comme le mdian
appliqu sur un carr de 3 pixels de ct) seront suffisants pour nous
dbarrasser totalement dun bruit impulsionnel (pixels de couleur
incohrente par rapport au reste de limage, pouvant provenir
dinterfrences dans llectronique dacquisition) mais ne greront peut-tre
pas correctement un bruit plus important (comme de petites taches sur
lobjectif du capteur, dune surface bien plus grande quun pixel)
Le rsultat requis : parfois, une attnuation du bruit peut suffire, quand
dans dautres cas, les moindres interfrences pourrait savrer trs
gnantes. Cela dpend des traitements appliqus limage aprs le filtrage
anti-bruit.
Ci-contre, une comparaison du filtre
de loyenneur (ligne), du filtre mdian
(toiles) et du filtre de Nagao (cercles)
sur une zone de transition. En abscisses,
une position sur limage, en ordonne,
une couleur (par exemple en niveaux de
gris). On vois que le filtre de Nagao rend
les contours trs nettes (trs forte
courbe) quand les deux autres sont plus
progressifs.
Voici un comparatif des filtres prsents les plus importants :
Filtre
Moyenneur
Median
Seuill
Nagao

Points forts
Calculs trs rapides
Fonctionnement trs simple
Calculs assez rapides
Aucun effet de flou
Filtrage non-systmatique
Qualit de filtrage leve

Points Faibles
Attnue le bruit sans le supprimer
Ajoute un effet de flou
Peut lgrement dformer les
contours
Temps de calcul lev
Temps de calcul lev (le plus long)

Les filtres anti-bruit sont trs varis, et adapts de nombreuses situations.


Le filtre le plus simple, le moyenneur, sera de prfrence implant dans les
systmes autonomes ne ncessitant pas une grande prcision et ne disposant
pas dune grande capacit de claculs, alors que le filtre le plus pouss, le filtre de
Nagao, ne sera utilis que dans des cas bien particuliers, comme un traitement
de photo par exemple.
19

C. Slection
Dans notre cas, nous savons que lobjet que nous recherchons est rouge. Il
nest donc pas ncessaire de sinquiter des autres couleurs prsentes sur notre
image. La slection consiste ne plus que soccuper des zones de limage ayant
la couleur recherche.
Nous allons modifier les couleurs de limage, en coloriant en blanc les parties
correspondant nos critres et en noir celles ne ncessitant pas notre attention.
Il sagit dune binrisation (au final il ne reste que deux tats distincts)
Pour effectuer cette slection, nous allons utiliser dune part les composantes
primaires de chaque couleur (quantit de rouge, de vert, de bleu, variant pour
chacune entre 0 et 255), et dautre part, la proportion de chaque couleur
primaire dans la couleur finale.
Voici limage que nous allons binriser :

Image de base aprs filtrage antibruit


Etant donn que la balle que nous recherchons est rouge, les conditions que
nous pouvons fixer sont :
La part de rouge minimale dans la couleur
Le niveau minimum de rouge
Le niveau maximum de bleu
Le niveau maximum de vert
Cette slection permettra une nette acclration des calculs de dtection de
contours (au lieu de travailler sur trois matrices dont les valeurs sont
chelonnes entre 0 et 255, nous obtiendront une matrice binaire).

20

Premire tentative
Condition pour quun pixel soit slectionn : sa composante rouge doit
reprsenter au moins 40% de la somme des valeurs des 3 couleurs primaires.
Soit R la composante Rouge, B la Bleu, et V la verte :
R , R [0, 255[
R
0.4 avec V ,V [0, 255[
R +V + B
B , B [0, 255[
Rsultat :

On vois que le contour de la balle a t


correctement dlimit (tant donn que
larrire plan au niveau de la balle nest pas
de la couleur slectionne), mais des zones
superflues ont t slectionnes
Zones sombres de la photo (lignes
brunes)
Partie de la balle jaune
Reflet de la balle rouge sur le support
(en dessous delle)

Seconde tentative
Condition pour quun pixel soit slectionn : sa composante rouge doit
reprsenter au moins 50% de la somme des valeurs des 3 couleurs primaires
(soit 10% de plus).
R , R [0, 255[
R
0.5 avec V ,V [0, 255[
R +V + B
B , B [0, 255[
Rsultat :

Le reflet de la balle nest plus


slectionn, et les lignes brunes non plus.
Par contre, il reste toujours une partie de la
balle jaune, et les bords de la balle rouge
ont ts corches, ce qui risque de
compliquer la reconnaissance de formes.

21

Troisime tentative
Conditions pour quun pixel soi slectionn : sa composante rouge doit
reprsenter au moins 40% de la somme des valeurs des 3 couleurs primaires et
les composantes vertes et bleues ne doivent pas avoir de valeurs suprieurs
110 (sur 255).
R
0.5
R +V + B
V < 110
B < 110

R , R [0, 255[

avec

V ,V [0, 255[
B , B [0, 255[

Rsultat :

On peut trs clairement voir que la balle


jaune na pas t slectionne. La slection
des lignes horizontales est sans importance car
elles seront limines par la reconnaissance de
formes.

Les conditions choisies lors de ce dernier essai sont donc satisfaisantes pour
binairiser cette image. Nous pourrions probablement encore les affiner, mais cela
limiterait trop la capacit dadaptation de lalgorithme, celui ci risquerait de mal
ragir lors dun changement dclairage par exemple.
Rsultat sur lensemble de limage :

22

D. Dtermination de contours
Pour pouvoir reconnatre des formes sur une image, il faut tout dabord en
distinguer les contours. Ces derniers sont gnralement caractriss par une
ligne de contraste, pouvant tre accompagne dun changement de couleur. Dans
notre cas, nous venons de binriser notre image. Les contours seront donc les
passages du blanc au noir, et vis-versa.
Il existe diffrentes mthodes utilises pour dterminer des contours. Nous
allons dtailler celles bases sur la convolution. Il sagit de drivations, car elles
mettent en valeur des changements de couleur.
1) Par convolution
Pour dtecter un pixel dlimitant deux formes, il faut dterminer sil appartient
une ligne de contraste. Pour cela, il faut comparer la couleur de ses pixels
voisins. Cela peut tre fait grce une convolution et une matrice noyau
adapte.
Nous allons chercher les contrastes horizontaux et verticaux sparment, ce
qui permettra de dfinir lorientation des contours.
La matrice noyau qui, aprs une convolution avec limage, permettra de
mettre en valeur le plus simplement possible les variations verticales de couleur
se nomme masque de Prewitt.
-1

Si le pixel droite de celui trait est de la mme couleur que celui gauche
du pixel trait, et que cette couleur a une valeur G, le rsultat de la convolution
sera : -1xG + 1xG = 0. Par contre, si ces deux pixels nont pas la mme couleur,
le rsultat sera diffrent de 0, et proportionnel au contraste autour du pixel
trait. La ligne de contraste tant situe entre deux sries de pixels, elles sera
matrialise par ce masque sur les pixels lentourant. Son paisseur sera donc de
deux pixels.
Cette matrice est trs simple, et ne permet pas dobtenir une bonne
apprciation de la direction du contour. La ligne de contraste peut facilement
former un angle de plus ou moins 45 avec la verticale. Pour tre plus prcis,
nous allons utiliser les matrices de Sobel.
-1
0
1
-2
0
2
-1
0
1
Contraste horizontale

-1
-2
-1
0
0
0
1
2
1
Contraste vertical

Ces matrices prennent en compte plus de pixels, et donnent un meilleur


rsultat, permettant de dduire la direction de la ligne de contraste plus
prcisment.

23

Exemple :

Image aprs filtrage anti-bruit et slection


Rsultats :

Contrastes horizontaux

Contrastes verticaux

Nous connaissons maintenant les contours de la balle rouge.

24

Maintenant que nous connaissons les variations de contrastes (donc les


contours) sur deux dimensions, nous pouvons dduire pour chacun de leurs point
le coefficient directeur de la tangente au contour en ce point, et donc le vecteur
qui lui est normal. Pour cela, nous allons utiliser le thorme de Pythagore et la
trigonomtrie.
Soit g le vecteur dfini grce aux contrastes sur laxe des abscisses (gx) et
sur laxe des ordonnes (gy). Soit g sa norme, et tta langle le sparant de laxe
des abscisses.

Les deux convolutions grce aux matrices de Sobel nous ont servi trouver
les lignes de contraste de limage (correspondant gnralement des contours
de formes) et les orienter.
2) Autres mthodes
Technique base sur les gabarits
Dans le cas de dtections de contours de formes bien particulires, on peut
utiliser une technique base sur des gabarits. Il sagit dun algorithme qui va
tenter de placer diffrents gabarits sur limage, en les adaptant grce des
transformations gomtriques de base (translations, rotations, changement de
taille, ) afin de trouver les formes prsentes sur limage.
Cette solution est trs peut utilise, car elle ne permet la recherche de formes
connues uniquement.
Codage de Freeman
Un contour est dcrit par une succession de codes de Freeman (ce qui
correspond une chane de Freeman). Chaque code nous indique lorientation du
contour en un point. Lalgorithme va chercher le pixel voisin le plus ressemblant
de chaque pixel trait (pour former un contour), et attribuer un code au pixel
trait en fonction de la position de ce voisin. La chane forme sera un contour.
Cette mthode est trs complique, et il est impossible de la dtailler
simplement. Sa mise en uvre ncessite une grande connaissance du traitement
dimages.
Il existe de nombreuses mthodes pour dterminer les contours dune image,
mais celles bases sur la convolution sont les plus simple comprendre et
implanter dans une application (par exemple dans un logiciel de traitement
dimages ou dans le systme de commande dun robot).

25

E. Reconnaissance de forme
Maintenant que nous disposons des contours des objets de la couleur de la
balle que nous recherchons, il va falloir dterminer lequel est la balle.
La balle tant une sphre, quel que soit le point de vue partir duquel nous
la photographions, elle nous apparatra comme un disque. Son contour formera
donc un cercle.
Le cercle possde une proprit gomtrique unique : toutes les
perpendiculaires ses tangentes se coupent en un seul point, le centre du cercle.

Etant donn que nous connaissons toutes les orientations de tous les
contours, nous allons tracer toutes les perpendiculaires des tangentes ces
contours, et le point o le plus grand nombre dentre elles se coupent sera le
centre du cercle.
En pratique, nous allons utiliser une matrice additive .
Procdure :
Nous crons une matrice possdant les dimensions de limage. Il y aura donc
une valeur dans cette matrice pour chaque pixel de limage. Toutes les valeurs de
cette matrice seront nulle au dpart.
Pour chaque pixel appartenant une ligne de contour de limage :
Nous dterminons lquation de la perpendiculaire la tangente au contour
en ce pixel
Nous incrmentons la valeur (lui additionnons 1) de toutes les cases de la
matrice additive correspondant aux points par lesquelles cette droite doit passer.
Lorsque tous les contours on ts traits, les valeurs les plus leves de la
matrice additive correspondent aux points par lesquels passent le plus de
perpendiculaire des tangentes de contours. Ce seront donc des centres de
cercles.
Nous avons donc trouv le centre de la balle rouge.

26

F. Localisation de la balle
Nous dsirons dterminer la position de la balle par rapport celle de notre
robot, afin quil puisse aller la chercher.
Grce une seule photo, le robot peut uniquement dterminer langle qui
spare la ligne de mire de sa prise de vue de la balle, tant donn quil connat la
position de la balle sur limage quil reoit de son capteur et que lon peut
dterminer langle de prise de vue de son capteur.
Ce schma reprsente la prise de vue du robot, vu du dessus. En bas, le
robot. Les deux trais noirs reprsentent les limites de son champ de vision. En
rouge, la balle. Nous constatons que lorsque celle-ci se trouve dans le champ de
vision du robot, nous pouvons dterminer langle (not a) sparant la trajectoire
du robot de la trajectoire menant la balle. Langle b est le demi angle de vision.

a
b

Dtermination du rapport des angles grce la photo :

A
B

La flche rouge reprsente la distance entre le bord de limage et le centre la


balle (dont nous avons prcdemment dtermin la position). Longueur : A
La flche noire reprsente la largeur de limage. Longueur : B
Nous tablissons le rapport :

A a
=
B b
Grce une photo, nous avons dtermin un angle permettant de situer la
balle. Le robot peut aller la chercher.
27

Avec deux photos prises ctes ctes, nous allons pouvoir dtermin les
coordonnes de la balle par rapport au robot, ce qui lui permettra dune part de
sorienter pour aller la chercher, mais galement den dterminer la distance.

Principe de trigonomtrie
La balle se situe au point C.
Les deux points de prises de
vues se situent en A et B, en
noir les limites des champs de
visions.
La longueur AB est connue.
Les angles a et b galement.

x
C

b
B

a
A

Dtermination des coordonnes x et y du centre de la balle :


y
AB x
y
tan(b) =
x
d ' ou
tan(a ) =

y = ( AB x) tan(a )
y = x tan(b)
d ' o
x tan(b) = ( AB x) tan(a )
x=

AB tan(a )
tan(a ) + tan(b)

et
y=

AB tan(a ) tan(b)
tan(a ) + tan(b)

28

Application pratique
Donnes de base :
Angle de vue de lappareil photo utilis :.Environ 70
Distance entre les 2 prises de vue : 10 cm
Largeur des photos en pixels : 1600
Position de la balle rouge :
A partir de la droite sur la photo de gauche : 634 pixels
A partir de la gauche sur la photo de droite : 641 pixels
Angles dduits :
a = 86.58
b = 84.88
Coordonnes de la balle par rapport la prise de vue gauche :
X = 4 cm
Y = 67 cm

Lutilisation dalgorithmes pour bruit limage, pour dterminer les contours


la composant, trouver une forme et la localiser a permis de trouver assez
prcisment la position de notre balle. Ces algorithmes sont donc trs adapts a
ce problme, car ils permettent de trouver une solution rapidement.
Un robot peut donc parfaitement se dplacer en utilisant des informations
visuelles.
Nous allons maintenant pouvoir utiliser ces informations afin de dterminer le
trajet que devrai emprunter le robot afin de se rendre jusqu' cette balle.

29

II. Dtermination Intelligente de Trajet


Sommaire
Introduction p.2
1.La ligne droite p.7
2. Depth First Search (DFS) p.11

3. Breadth First Search (BFS) p.18


4. Dijkstra p.27
5. A* (A star) p.34
Conclusion p.41

30

Introduction
Les algorithmes mettant en oeuvre la dtermination intelligente de trajet
ont beaucoup dutilisations. Ils sont utiles dans la robotique, car ils peuvent servir
guider un robot sur un terrain difficile sans besoin dune intervention humaine
constante, ce qui savre utile quand le robot est sur une autre plante comme
Mars, o certains types de terrains doivent tre vits, mais cause des
distances extrmes impliques, le contrler compltement distance serait
impossible ( cause des dlais des transmissions). Ces algorithmes pourraient
aussi tre utiles si le robot devait oprer sous leau, o les ondes radio ne
pourraient pas latteindre. Ils sont bien sr utiles dans presque tous les cas o un
vhicule doit se rendre quelque part, sans intervention humaine (par exemple la
tondeuse et laspirateur intelligents, le robot qui imite un chien). Ces algorithmes
servent aussi trouver le plus court chemin pour conduire dun point lautre sur
une carte, ou le plus court chemin pour diriger un e-mail par un rseau
dordinateurs. Notre but est dappliquer cet algorithme un robot qui,
connaissant la position dune balle [rouge], sera en mesure de planifier son
dplacement intelligent jusqu cette balle.
La dtermination intelligente de trajet est une application de lintelligence
artificielle et une caractristique dun robot qui lui permet de se dplacer
intelligemment dans un environnement. Pour cette partie, lintelligence mise
en uvre consiste viter des obstacles ou passer par certains endroits dans le
but de se mouvoir dun point source un point destination de lespace, et ceci en
optimisant le trajet, cest--dire en rduisant au maximum la longueur
parcourue et en prenant en compte les diffrents types de sols sur lesquels le
robot va se dplacer : ainsi, un robot-aspirateur-intelligent devra se construire
peu peu une carte mentale de la pice dans laquelle il est, alors que lors de
sa premire visite dans cette pice, il ne connatra rien ou presque des obstacles,
alors quaprs un certain nombre de passages, il saura la position plus ou moins
exactement des objets dans la pice et pourra commencer optimiser ses
dplacements en fonction de ces positions, alors que le robot-chien de Sony
(Abo) peut par exemple rejoindre le plus rapidement possible sa station de
recharge quand ses batteries sont presque puises.
On voit donc ici deux cas distincts, qui mettent en uvre des types dalgorithmes
trs diffrents : le premier cas suppose les coordonnes (ou positions des rgions
occupes) des obstacles connues, alors que dans un deuxime cas, les donnes
de dpart nincluent pas lenvironnement. Cette partie prsentera uniquement les
algorithmes qui fonctionnent avec les donnes de dpart connues du robot, alors
que la partie III prsentera dautres moyens pour rsoudre le mme problme.
Suivant les utilisations ou les donnes de dpart, certains algorithmes pourront
ou pas tre utiliss, et certains seront plus efficaces que dautres. Ce TPE va
prsenter les algorithmes les plus connus, comment les appliquer, ainsi que leurs
avantages et leurs inconvnients.

Mars pathfinder : cet engin a t


lanc sur mars afin dtudier le sol de
la plante rouge. Il se dplace de
manire autonome par rapport son
environnement.

31

Les algorithmes de recherche de chemin


Note : La condition ncessaire aux algorithmes prsents dans cette partie est que le terrain
(obstacles, lvations comme nous le verront plus tard) soit connu du robot (cette notion sera
explique dans Environnement et reprsentation). Pour dcouvrir des algorithmes plus
souples , voir la partie III.

Donnes de dpart : comment les obtenir ?


Pour connatre les coordonnes des obstacles, le robot doit tre quip de
capteurs et dune intelligence spciale qui exploite les donnes des capteurs,
pour construire graduellement ou en un coup ou une reprsentation interne de
lenvironnement qui lentoure. Par exemple, une tondeuse automatique qui aprs
un ou plusieurs passages, enregistrerait les positions et surfaces occupes des
massifs de fleurs dans le but doptimiser son voyage de retour construirait
un reprsentation graduelle de lenvironnement, qui deviendrait de plus en plus
prcise mesure quelle ferait plus de passages et augmenterait ainsi son temps
pass recueillir des informations, alors quun systme industriel utilis dans un
environnement inchang peut tre rempli ds le dpart avec les positions exactes
des objets qui lentourent.
Environnement et reprsentation
Le robot doit se dplacer du point de dpart au point darrive en vitant les
obstacles :
Si les rgions occupes par les obstacles sont connues, on peut reprsenter les
obstacles / espaces libres par une matrice de dimensions arbitraires :

Exemple de matrice. Les obstacles sont reprsents en rouge,


le point darrive en vert (de coordonnes 4 et 5) et le point
de dpart en bleu (de coordonnes 1 et 1).
(les cases sont repres sous la forme (colonne, ligne) pour
un reprage plus explicite).

Tous les algorithmes de cette partie se basent sur une matrice similaire qui
reprsente un environnement numris. (le rectangle et le carr rouges
pourraient par exemple reprsenter une table et une chaise).
Les dimensions de la matrice (nombre de lignes et de colonnes) dpendent du
niveau de dtail avec lequel on veut reprsenter les objets (obstacles) : avant de
pouvoir reprsenter un objet de forme complexe, il faut le transformer en une
srie de carrs sur la grille pour quil soit reprsentable. Cette transformation ne
fait pas lobjet de ce TPE, nanmoins il faut signaler que plus on agrandit les
dimensions de la grille, plus lobjet sera reprsent avec finesse, permettant au
robot de ce dplacer plus prs des obstacles pour gagner peut-tre quelques
mtres dans le dplacement final (suivant les diffrentes tailles de matrices).

32

Autres reprsentations

Reprsentation matricielle.
Les cases vertes reprsentent les
zones de collision o on ne
peut pas passer.

Reprsentation polygonale.
Les points verts sont les points
par lesquels ont peut passer.

Le chemin optimal est une


succession de cases de la
matrice.

La matrice nest pas la seule forme de reprsentation de lenvironnement : il en


existe dautres comme la reprsentation polygonale, qui peuvent diminuer la
distance de dplacement.
Poids des cases
Une case peut tre pondre, dans le but de passer en priorit sur certaines
zones du terrain : par exemple, pour le robot-chien [Abo], une case affecte du
poids 1 serait un sol normal alors quune case avec un point 2 serait un tapis,
o il peut quand mme y marcher si lviter dans le trajet global constituerait une
trop grosse dpense en terme de temps ou de distance, mais o il serait ralenti
par exemple (il peut aussi tre instruit spcifiquement par lutilisateur dviter
une zone trs frquente lorsque cela est possible). On pourrait dans le
mme genre demander la tondeuse automatique quand elle retourne son
point de dpart dviter si possible des portions de terrain recouvertes de
macadam, ou la laisser dterminer un plus court chemin lorsque le terrain nest
pas plat (les zones auraient un poids plus ou moins proportionnel leur altitude,
par exemple), et ainsi de suite. Cependant, tous les algorithmes ne prennent pas
en compte le poids des zones.
Temps de calcul
Sur un ordinateur, tous ces algorithmes ont un temps de calcul peu prs
quivalent, cause des performances des processeurs actuels et de la faible
demande en puissance de calcul et du fait que lutilisation de la mmoire pour de
tels algorithmes est faible devant la taille des mmoires actuelles. Nanmoins,
dans le cas des utilisations pour la cyberntique et la robotique, les processeurs
sont largement moins puissants et les mmoires moins importantes ou non
installes, et ces dispositifs sont suffisants pour le contrle direct ou
tlcommand du trajet. Mais quand on veut implmenter un mode de
raisonnement plus compliqu, algorithmique, on doit parfois ajouter des
mmoires externes ou adopter un microprocesseur plus puissant qui soit capable
de grer tout le robot en temps rel. Certains algorithmes de dtermination de
33

trajet demandent plus de puissance de calcul que dautres, et certains plus de


mmoire que dautres.

34

L issage du chemin
Le robot a besoin de points, de coordonnes prcises par lesquelles passer : les
cases de la matrices devront tre utilises pour transformer des zones de
passages en points de passage, mais cette transformation peut laisser des zones
de virage brusques. Le lissage permet de rendre le chemin pris par le robot le
plus naturel possible et permet aussi dviter des changements de directions
trop raides ou inutiles :

Chemin sans amlioration.


Le chemin comporte 7
brisures.

Chemin avec amlioration. Le


chemin comporte 4 brisures.

Il y a plusieurs mthodes pour lisser un chemin : on peut lamliorer simplement


en reliant des points situs sur des cases adjacentes (cf. illustration ci-dessus).
Exemple :

En bleu : zones de passage.


En rouge : points de passage.

A gauche, un chemin non liss qui oblige le robot tourner quatre fois. A droite
le chemin a t liss pour rduire au maximum les asprits du trajet, et le robot
ne tourne plus quune fois.
On peut aussi calculer des points intermdiaires partir des points obligatoires,
en utilisant les courbes de Bzier ou les courbes de Catmull-Rom. Mais il faut
alors faire attention ce que la courbe ne passe pas au-del des cases marques
comme praticables (surtout pour les courbes de Bzier) :

Chemin calcul

Lissage par courbe de Bzier

Lissage par courbe de Catmull-Rom

Les courbes sont sources dordres plus compliqus pour le robot et ncessitent un
systme de dplacement qui puisse varier la direction pendant le dplacement.
Mais si le robot prsent de tels quipements, elles servent rduire le temps que
met le robot se dplacer du point de dpart au point final.

35

L es algorithmes
Lanalyse prcdente nous a permis de dgager les points importants quun
algorithme doit prsenter et qui permettront de les classer.
Nous avons donc :
Loptimisation de la longueur du trajet (important)
Le temps de calcul (important)
Le temps de calcul ncessaire un algorithme est aussi appel complexit
temporelle de cet algorithme.
Lutilisation mmoire (moyennement important)
La taille de la mmoire ncessaire au fonctionnement dun algorithme est
appele complexit spatiale de lalgorithme.
La prise en compte ou non du poids des cases (moyennement important).

36

1.La ligne droite


Cest lalgorithme le plus simple, car cest celui quon applique instinctivement :
en gnral, on marche jusqu' un obstacle avant de le contourner, par la gauche
ou par la droite, alors quon connat la direction approximative du point o lon
veut aller.
Limplmentation de cet algorithme pourrait seffectuer uniquement avec des
capteurs et un systme de commande asservi, sans besoin dinformations
prcises sur lenvironnement. Mais les positions prcises des obstacles seront ici
utilises pour affiner le trajet et dans les calculs.
Principe de lalgorithme
On trace une ligne entre le point de dpart et le point darrive :

Matrice exemple
Point rouge : point de dpart (D).
Point vert : point destination (A).
Cases grises : obstacles.
Pour le calcul de distances et le trac de lignes,
on utilisera le point au centre des cases.

On fait avancer le robot jusqu lobstacle (cases rouges), puis on choisit une
direction dans laquelle le dplacer par rapport lobstacle (cases repres). Ici,
le choix entre la case 1 et la case 2 peut se faire soit au hasard (on choisit
toujours une des deux directions), soit en utilisant une mthode de prdiction :
on peut par exemple sparer le terrain en deux parties et diriger le robot dans la
partie comportant le moins de cases grises (ligne bleu clair), en supposant que
si il y a moins de cases grises dans une partie, cela implique moins dobstacles,
donc un chemin plus court. Dans ce dernier cas, la case 1 serait choisie en
priorit (5 cases compltes contre 9). On peut aussi mesurer la distance entre la
case 1 et la case 2 au point darrive :
| 1->A | = 181 = 13,45
| 2->A | = 145 = 12
(o | A -> B | signifiera distance du point A au point B dans ce TPE)
Dans ce cas, cest la case 2 qui lemporte.
On peut utiliser la sparation des parties quand les longueurs renvoyes par la
seconde mthode sont gales, par exemple.
On dcide de faire bouger le robot la case 2, et on recommence : on re-trace
une ligne et on dtermine une autre position pour le robot, et ainsi de suite. Dans
cette situation, on arrive rapidement jusquau but :
37

Exemple de chemin compltement


dtermin.

Remarque : Les cases en rouge sont celles slectionnes par lalgorithme, c'est-dire celles par lesquelles la ligne passe directement. Mais le robot a une taille
qui doit tre prise en compte. Par exemple, examinons la situation suivante :

Situation problmatique !

Ici, les deux obstacles rajouts nont pas t vits car la dernire ligne est
passe juste entre les deux : le robot se retrouverait bloqu sil suivait le chemin
dcid !
Pour remdier cette situation, on peut par exemple slectionner toutes les
cases situes une certaine distance (en fait, le rayon du cercle circonscrit au
robot) de la ligne en parcourant celle-ci, au lieu de ne slectionner que les cases
sous la ligne.

38

Un autre problme se situe au niveau des obstacles concaves : imaginons la


situation suivante :

Quand le robot arrive en a, il choisit entre la case 1 et la case 2. Supposons que


lalgorithme lui fasse choisir la case 1; dans ce cas, lexamen des cases
adjacentes dsignera la case a comme successeur, qui dsignera la case 1 et
ainsi de suite ! La mme situation est valable pour la case 2.
Pour remdier ce problme, on peut marquer les cases dj visites sur le
chemin pour quelles ne soient plus slectionnes, mais cela dpasse le cadre de
ce simple algorithme.
Rsum
1.
Soient A et B deux points. Le point A est dfini comme le point de
dpart et B le point darrive.
2. On trace une ligne entre le point A et le point B.
3.
Si il y a un obstacle entre A et B, alors on marque toutes les cases
traverses par la ligne jusqu lobstacle, on choisit un successeur C pour le
point A (successeur veut dire une case adjacente), puis on recommence
ltape 2 en dfinissant A = C.
4.
Si il ny a pas dobstacle, alors on marque les cases traverses par la
ligne, et lalgorithme se termine.
Problmes connus
Dans le cas dun obstacle concave, si on nutilise pas une mthode de mise
en mmoire des cases visites, alors lalgorithme peut rester bloqu
entre deux cases.
Une ligne qui passe exactement entre deux cases peut ne pas dsigner ces
deux cases comme points de passage, rsultant en un blocage du robot,
tout dpend de la manire dont on dsigne les cases de passage partir de
la ligne.
Avantages
La mise en place de cet algorithme est trs simple, et il ncessite trs peu de
calculs.
39

Si il ny a aucun ou peu dobstacles (et quils sont de faible taille), alors on


arrivera trs vite au but en un minimum de temps.
Les calculs ncessaires ne le sont que pour lquation de la ligne et la dfinition
des cases sous cette ligne, ainsi que le test dun obstacle prsent : il
prsente une faible complexit temporelle.
Enfin, il nutilise quasiment pas de mmoire pour stocker ses donnes de
fonctionnement : il a une faible complexit spatiale.
I nconvnients
Par contre, cet algorithme ne trouve pas forcment un chemin optimal, tout
dpend de lordre dans lequel lui sont donns les cases adjacentes (comme nous
lavons vu, cet ordre peut tre dfini laide de calcul de distances ou comptage
de cases, mais cela rajoute une surcharge de calcul pour le processeur). Il peut
mme ne pas trouver de chemin du tout, et on ne peut lui appliquer aucune
mthode pour prendre en compte le poids des cases (qui se traduit par une
lvation ou un diffrent type de terrain).
En rsum, cet algorithme est impensable utiliser pour un robot qui se
respecte. Il peut par contre tre utilis dans des robots plus petits et disposant
de moins de puissance de calcul. On verra que cet algorithme servira par la suite,
comme sous algorithme dans dautres plus performants.

40

2.Depth First Search (DFS)


Lalgorithme DFS (Depth First Search, profondeur dabord ), est lorigine un
algorithme de traverse de graphes. Son originalit est de parcourir tous les
enfants des nuds dun graphe avant ses voisins (et dtre trs simple). En quoi
un algorithme de parcours de graphes pourrait il tre utile dans notre
situation ?
Analogie graphe / notre terrain
Le DFS travaillant sur des graphes, il a fallu ladapter pour pouvoir travailler avec
notre matrice. Pour cela, nous avons dfini une analogie entre les composants
dun graphe et les composants de notre matrice.

Un problme
typique des
graphes : on a
un point de
dpart (bleu),
un point
darrive
(vert), et on
cherche un
chemin pour
les joindre.

Un graphe est compos de nuds connects entre eux par des liens : sur la
figure ci-dessus, les nuds sont reprsents par des disques et les liens qui les
relient sont des lignes noires. Le problme que le DFS rsout est le suivant :
donns un nud source et un nud cible, par quels nuds doit-on passer,
quelles routes doit-on emprunter pour joindre ces deux nuds en utilisant les
routes existantes ?
Par comparaison, notre problme est de dterminer par quelle(s) case(s) passer
alors quon cherche traverser la matrice dune case une autre.
On dfinit ainsi lanalogie suivante :
Les cases peuvent tre assimiles des nuds ;
Les liens entres les nuds nayant pas dquivalent direct, on donnera
chaque case huit liens au maximum la liant avec les cases adjacentes (une
case est lie avec toutes ses cases adjacentes qui ne sont pas des
obstacles) ;
Un successeur dun nud A (c'est--dire un nud B reli ce nud A)
reprsente une case adjacente B la case A.
Les nuds spciaux, c'est--dire le nud source et le nud cible, seront
assimils la case de dpart et la case darrive.
Les poids permettant de pondrer les cases ne peuvent pas tre pris en
compte dans des algorithmes travaillant sur des graphes.
Enfin, la distance pour aller dun nud un autre ne correspond pas la
distance relle sur le terrain , et on ne peut la calculer quaprs avoir
transform les deux nuds en cases et ensuite seulement peut-on mesurer
la distance entre ces cases.
Du fait de lanalogie prcdente, on peut dfinir plusieurs objets dans notre
programme : pour linstant, les nuds seront nos seuls objets. Les routes (liens)
41

nont pas besoin dtre reprsentes. Les objets que nous dfinirons auront des
caractristiques (par exemple pour un nud, sa position dans le graphe) et des
fonctions (toujours pour un nud, par exemple une fonction pour connatre tous
les nuds adjacents), comme cela est expliqu ci-dessous.
L es structures de donnes
Pour reprsenter ces objets (nuds, liens) dans le programme, il nous faut des
structures de donnes qui regroupent les proprits et les mthodes des objets.
Par exemple, un nud doit contenir :
Les proprits X et Y, deux nombres entiers positifs qui contiennent un
moyen de reprage de la case que ce nud reprsente (je le rappelle, X
est la colonne de la case dans la matrice et Y est la ligne correspondante).
Une proprit Colored, reprsentant une variable boolenne (0 ou 1)
permettant de savoir si le nud a t colori ou non (lusage des
nuds coloris sera expliqu plus en dtail dans le fonctionnement de
lalgorithme).
Une mthode GetSuccessors qui permet dobtenir tous les successeurs dun
nud, c'est--dire les cases adjacentes.
Une mthode (fonction) Compare pour comparer un nud un autre (ce
qui parat trivial pour nous mais est ncessaire au programme).
Dans le programme, ces proprits et mthodes seront reprsentes comme
suit :
structure node
{
entiers : X, Y proprits
bool : Colored proprits
liste : GetSuccessors() fonction
bool : Compare( node : B ) fonction
}
(o bool signifie variable booleenne )

La fonction GetSuccessors retourne une liste contenant tous les successeurs dun
nud : voici lalgorithme permettant de trouver la position des cases adjacentes
une autre :
liste : GetSuccessors()
{
entiers : Xs, Ys
liste : Successeurs
pour i = 1 jusqu i = -1
{
pour j = 1 jusqu j = -1
{
Xs = i + X
Ys = j + Y
Si (Xs,Ys) est en dehors de la grille Alors passer ce nud
Si (i,j) = (0, 0) Alors passer ce nud
Si (Xs, Ys) est un obstacle Alors passer ce nud
Successeurs : Ajouter (Xs,Ys)
}
}
Renvoyer la liste Successeurs
}

On remarque que avec cet algorithme, les nuds adjacents sont retourns dans
lordre suivant :
8

3
42

7
6

2
4

Lordre dans lequel les nuds sont placs a une importance cruciale pour le DFS
et moindre pour les autres algorithmes. Globalement, on peut retenir que si le
premier nud retourn est situ dans la direction du nud darrive (souvenez
vous que nud quivaut case), alors les algorithmes seront globalement plus
rapides (et beaucoup plus efficace pour le DFS, cf. suite).
La fonction Compare dun nud A est trs simple mais ncessaire au programme
qui ne fait que des comparaisons entre valeurs numriques. Elle accepte comme
variable dentre un autre nud B, compare le nud A(X, Y) auquel elle
appartient et B(B.X, B.Y) et retourne 0 ou 1 suivant lgalit ou non :
bool : Compare( node : B )
{
Si (B.X = X) ET (B.Y = Y) on compare les valeurs X et Y de B aux valeurs X
et Y du nud courant
Alors Renvoyer la valeur 1
Sinon Renvoyer la valeur 0
}

Principe de lalgorithme
Soit la situation suivante :

Rappel : la case rouge est le point de dpart, la


verte le point darrive. Les cases grises sont des
obstacles (ici, on peut imaginer des murs et des
portes, par exemple).

La manire de procder est la suivante :


1. Soient deux nuds A1 et B. On dfinit A1(6, 6) le point de dpart, et
B(20, 20) le point darrive. On dfinit n = 1
2. On colorie le nud An sur la grille (ici, les nuds colors sont
marqus laide de cercles bleus).
3. On cre une liste contenant chacun des successeurs de An.
4. Pour chaque successeur An+1 :
Si An+1 est colori, on examine le successeur suivant
Si An+1 = B, c'est--dire que An+1 est le point darrive, alors on
a trouv le but.
43

On incrmente n et on recommence(1) ltape 2


Sil ny a plus de successeurs, on dcrmente n et on revient(2)
ltape 4

Le nom depth-first vient du fait quon examine directement le premier successeur


dabord (on recommence ltape 2 sans avoir examin tous les successeurs).
Cet algorithme est rcursif : au (1), on repasse ltape 2, c'est--dire quon
rappelle lalgorithme avec un autre nud en paramtre. Il faut imaginer ltape
4 comme une boucle, et on ne sort (2) de la boucle que quand il y ny a plus de
successeurs examiner. La couleur sert ne jamais examiner deux fois le mme
nud, en le marquant. Cela est mieux traduit par le programme de lalgorithme :
(je trouve quun algorithme rcursif est mieux expliqu au travers dun
programme)
Dpart de lalgorithme:
node : Start = node : (6, 6)
node : Goal = node : (20, 20)
liste : Chemin
bool : russi
russi = dfs ( Start )
Fonction dfs (rcursive):
bool : dfs ( node : A )
{
Colorier A
liste : Successeurs
Successeurs = A.GetSuccessors()
Pour chaque node : C dans Successeurs
{
Si C est colori Alors passer au successeur suivant
Si C.Compare(Goal) = 1 Alors
{
Chemin : Ajouter C
Arrter la boucle
Retourner la valeur 1
}
bool : trouv
trouv = dfs ( C )
Si trouv = 1 Alors Arrter la boucle ET Retourner la valeur 1
}
Retourner la valeur 0
}

C.Compare(A) compare C A et retourne 1 si C = A, sinon 0.


Ici, bool : russi et bool : trouv sont des variables boolennes qui contiennent
la valeur de retour de la fonction dfs, qui dterminera si la recherche a russi
trouver le nud darrive ou non.
Chemin est une liste qui contiendra, aprs la fin de lalgorithme, tous les nuds
que lalgorithme a travers, dans lordre inverse, pour arriver au nud final. Il
suffira au robot de parcourir cette liste partir de la fin pour retrouver la liste
des cases sur lesquelles il doit passer.
La fonction retourne la valeur 0 quand il ny a pas ou plus de successeurs
examiner.
La fonction dfs1 est appele pour la premire fois avec le nud de dpart en
paramtre (tel que A = Start = 6, 6). Ce nud est examin, donc colori pour
viter de rappeler la fonction dfs sur ce nud si jamais il tait sorti comme
successeur dun nud adjacent. Ses successeurs sont sortis et mis dans la liste
Successeurs. On utilise ensuite la fonction dfs2 sur le premier successeur, si il
44

nest pas colori et sil nest pas le goal ; la fonction appele sappelle sur le
premier successeur du successeur, et ainsi de suite.
Quand on arrive un bout de la carte par exemple, il est possible quun nud
nait pas de successeur car tous les nuds adjacents ont t coloris ou sont des
obstacles. Dans ce cas, la fonction dfsn retourne 0, ce qui permet la fonction
dfsn-1 qui la appele de passer au successeur suivant, et ainsi de suite, ce qui
permet de couvrir toute la carte par rcurrence.
Si le goal est trouv, il est ajout Chemin, et la fonction dfsn retourne 1. La
fonction dfsn-1 qui lappele, remarque que la fonction dfsn a retourn la valeur 1,
ajoute le successeur quelle examinait la liste Chemin, puis retourne elle-mme
la valeur 1, ce qui permet la fonction dfsn-2 dajouter son nud Chemin et
ainsi de suite, jusqu dfs1 qui examinait un des successeurs du nud Start, et
qui ajoute ce successeur la liste Chemin.
Si le goal nest jamais trouv (par exemple si il est inaccessible), alors dfs
naura pas de successeurs car ils seront tous dj visits ou des obstacles ; dfs
retourne 0. De proche en proche, les fonctions appelantes seront aussi court de
successeurs, et retourneront 0. On arrive ainsi jusqu dfs1 qui retourne 0,
permettant ainsi au programme principal de savoir que la recherche a chou.
La liste Chemin permet de faire une trace des nuds solutions menant de Start
Goal.
Elle contient les solutions dans lordre inverse, En commenant par un successeur
de Start et en terminant par Goal.
Voyons comme exemple notre situation :
20, 20

dernier lment de Chemin

20, 19
19, 18
18, 17
17, 16
16, 15
15, 14
14, 13
13, 12
12, 11
11, 10

Ordre des nuds retourns par


GetSuccessor() :

7
6

3
2

10, 9
9, 8
8, 7
7, 6

premier lment de chemin

I nfluence de la fonction GetSuccessors


Vu que la fonction dfs examine le premier successeur dabord, lordre dans lequel
ces successeurs apparaissent est dune importance primordiale : ainsi, dans cet
exemple, le nud en bas droite du nud courant est retourn en premier,
rsultant en un chemin assez court. Mais imaginons que les nuds soient
retourns dans cet ordre :
6
4
1
7
8

2
5

45

Dans ce cas, lutilisation de DFS donnerait le chemin suivant :

Un chemin incohrent

Comme on le voit, le fait que les nuds situs en haut droite soient retourns
les premiers influence grandement le chemin pris par lalgorithme : en effet, au
dpart, le nud situ en haut gauche du premier est pris, puis celui en haut
gauche du second, et ainsi de suite.
On voit que cet algorithme garantit un chemin jusqu larrive (si cest possible,
videmment), mais pas forcment le plus court, et il peut chercher dans tous les
nuds de la carte jusqu trouver le nud darrive, mme si celui-ci est situ
juste ct du nud de dpart !
Une amlioration de cet algorithme serait de mettre le premier nud retourn
par GetSuccessors() dans la direction approximative du nud darrive, ce qui
aboutirait une convergence plus rapide vers le goal, et viterait certains
chemins qui, pourtant triviaux sur le terrain seraient beaucoup plus
compliqus une fois retourns par lalgorithme DFS.
Unit de calcul
Cet algorithme utilise la rcursivit. Le problme dune fonction rcursive, cest
quelle peut sexcuter indfiniment (ou pendant une trs longue priode de
temps) sans quil soit possible de linterrompre, empchant ainsi le robot de
pouvoir faire dautre actions (comme par exemple interprter et rcuprer les
informations des capteurs) pendant quil rflchis au chemin prendre. Cest
pour cela quon peut introduire la notion dunit de calcul pour les algorithmes
rcursifs : le but est de casser la rcurrence , c'est--dire permettre la
fonction dtre appele plusieurs fois, autant de fois quil faudra pour rsoudre le
problme pos, et faisant un certain nombre (rduit au maximum) de calculs
chaque appel, permettant la fonction dtre appele plusieurs fois,
indpendamment, permettant au robot deffectuer dautres calculs avant et
aprs. De plus, cette manire de procder a dautres avantages, facilitant
notamment le dboguage (c'est--dire la recherche derreurs dans le
programme) en permettant dobserver la recherche pas pas, par exemple.
Dans notre exemple, il faudrait inventer une fonction DFS qui sauvegarderait sa
position dans le calcul (c'est--dire les nuds visits) chaque appel, ce qui
se rvlerait extrmement utile.
46

Rsum
Pour trouver un chemin dans un graphe ou une matrice laide de lalgorithme
DFS :
- Il faut colorier les nuds traverss
- On traverse chaque successeur de chaque nud en le
coloriant jusquau dernier successeur non colori du
dernier
nud
non
colori,
puis
on
remonte
progressivement grce la rcursivit, jusquau nud de
dpart si on ne trouve pas le nud darrive. Si on le
trouve, on remonte les nuds en les ajoutant une liste
qui permettra de retrouver le chemin parcouru.
Problmes connus
Cet algorithme trouvera toujours un chemin si le nud darrive est porte. Par
contre, il est rcursif, ce qui signifie quil faut sparer le code en units de calcul
pour quil soit rellement utilisable par un robot.
Avantages
La convergence de cet algorithme peut tre trs rapide, si les successeurs sont
donns dans le bon ordre (en fait la convergence la plus rapide de tous les
algorithmes prsents, comme nous le verrons plus tard).
I nconvnients
Cet algorithme ne retourne pas toujours un chemin optimal : en effet, si les
successeurs sont donns dans le mauvais ordre (ou plutt dans un mauvais
ordre), alors le chemin obtenu sera praticable (il respecte la condition de
parcours, du nud de dpart vers le nud darrive), mais nest pas forcment
le meilleur (mme souvent aberrant pour des cas triviaux). Il faudrait en effet
proposer un systme de modification automatique de lordre des successeurs
pour obtenir un algorithme vraiment efficace. De plus, cet algorithme ne tient
pas compte des poids des cases, et il serait trs difficile de le modifier pour lui en
faire tenir compte. Il examine aussi un trs (trop) grand nombre de nuds si les
successeurs ne sont pas retourns dans le bon ordre.
En rsum, cet algorithme prsente un trop grand nombre de calculs pour tre
retenu dans un contexte robotique, car il demande trop de puissance de calcul
pour tre optimis.

47

3.Breadth First Search (BFS)


Lalgorithme Breadth First Search, communment appel BFS, est aussi un
algorithme de traverse de graphes, comme le DFS. Loriginalit de cet algorithme
est quil traverse dabord les voisins dun nud avant ses enfants. De plus, le
BFS utilise des listes pour garder la trace des nuds quil doit traverser (cela
sera expliqu plus tard).
Il utilise aussi la coloration des cases pour viter de rexaminer les cases quil a
dj examines.
En tant qualgorithme de traverse de graphes, il rutilise le principe des nuds
dj voqu avec lalgorithme depth first search.
L es listes
Avant de parler du premier algorithme qui utilise les listes, je vais dabord parler
des listes elles mmes.
20, 20
20, 19
19, 18
18, 17
17, 16
16, 15
15, 14
14, 13
13, 12

Un exemple de liste : la liste de coordonnes (donc de


nuds, un nud tant compltement et de manire
unique dfini par ses coordonnes) du 2). On peut
classer ses nuds en utilisant un paramtre dfini pour
chaque nud, ici, par exemple on pourrait utiliser la
distance dun nud au nud de dpart pour les classer
suivant leur proximit du nud de dpart.

12, 11
11, 10
10, 9
9, 8
8, 7
7, 6

Les listes sont un problme part entire pour les mathmaticiens, les
algoriciens qui se sont penchs sur diffrents problmes, notamment
doptimisation pour le tri des listes. Il faut savoir que lorsquon veut classer les
lments dune liste en fonction dune valeur caractristique de chaque lment
(on pourrait classer une liste de nuds daprs leur distance au point darrive,
par exemple), le tri peut prendre beaucoup de temps selon la mthode (un
algorithme part entire !) utilise.
Ces algorithmes ne font pas lobjet de ce TPE, nanmoins, lalgorithme que nous
utiliserons pour classer nos listes ( partir du 4.- dijkstra) sera lalgorithme
quick sort .

48

Fonctionnement
Nous avons donc le problme classique :

Le Problme Classique
(sans obstacles).

Le systme breadth first search, contrairement au systme DFS, examine dabord


les nuds adjacents au nud de dpart, cest dire quil regarde dabord si un
des nuds entourant un nud dfini nest pas le nud darrive avant de passer
lenfant de ce nud (rappel : un nud entourant un autre nud est appel un
enfant ou un successeur de ce dernier). Ce systme est mieux expliqu dans la
procdure suivre :
Initialisation
1. Soit une queue Q. (pour linstant, considrez quune queue est une liste
comme dcrite dans Les listes, donc laquelle on peut ajouter ou enlever
des noeuds).
2. Initialisation : on ajoute le nud de dpart Q. Ce nud est donc situ en
position 1 dans la liste Q (si on ajoutait un autre nud, il serait en position
2, etc. Si on retirait le nud numro 1, le nud numro 2 sil existe
prendrait sa place de deviendrait son tour le nud numro 1).
Dbut de lalgorithme
3. Si Q na aucun lment (la liste est vide), alors on passe ltape 8.
4. On retire le nud situ en position 1 de Q, et on lappelle N.
5. On dtermine les successeurs de N, quon note N1, N2, etc.
6. Pour chaque successeur Ni, on regarde dabord si il est colori ou si cest un
obstacle, auquel cas on passe au successeur suivant (tape 6 avec i
incrment).
Si il nest ni colori ni obstacle, alors regarde si cest le nud darrive, si
oui, on passe ltape 9. Si ce nest pas le nud darrive, on ajoute ce
successeur la queue Q et on le colore sur le graphe (on colorie la case
correspondante).
7. On passe ltape 3 (retour au dbut).
Fins de lalgorithme

49

8. Cette tape est atteinte quand la liste est vide : alors lalgorithme na pas
russi a trouver un chemin vers le goal en examinant tous les nuds (le
goal nest pas accessible).
9. On a russi trouver un chemin vers le goal.
Cet algorithme est mieux dcrit par le diagramme suivant que par du code :

50

Initialisation
On ajoute le nud de
dpart Q

On examine Q

tape

2
tape

Q est vide

Fin de lalgorithme
On na pas russi
trouver le goal

tape

Q nest pas vide

On enlve le 1er nud de Q, et on lappelle N.


On examine les successeurs de N qui ne sont pas coloris et
qui ne sont pas des obstacles, quon appelle Ni
tape

5 (ou 6)

On incrmente i. (on
passe au successeur
suivant)

Ni est le nud
darrive

On a dj parcouru
tous les successeurs
de N

Fin de lalgorithme
On a trouv le goal
tape

On colorie Ni
tape

6
On ajoute Ni la
queue

(il ne faut pas oublier pour autant que le code est ncessaire ! mais dans ce cas,
le code est trs largement semblable au code de lalgorithme DFS dcrit avant,
51

car il rutilise les mmes structures de donnes et les mmes fonctions que les
algorithmes de parcours de graphe).
Cet algorithme peut sembler rcursif, cause de la boucle de retour allant de
ltape 5 ltape 3, mais en fait il nen est rien : la queue garde trace de tous
les nuds restants traverser, vitant ainsi une fonction rcursive ; il est donc
trs facile de mettre cette algorithme sous la forme unit de calcul.
Et enfin, quelques images montrant lalgorithme en action :

Dbut dune recherche.


Les cercles rouges reprsentent les nuds
coloris. On voit que ce sont les successeurs
du nud de dpart.

Lalgorithme examine les successeurs des


successeurs. Les nuds marqus dun point
orange sont les nuds enlevs de la queue.

52

Une fois que tous les nuds situs dans un


coin de la carte ont t examins, ils nont
plus de successeurs et nont donc pas de
descendance active (c'est--dire dans la liste
Q), alors que les nuds situs en bas
droite du nud de dpart ont toujours des
enfants productifs , c'est--dire qui ont
eux-mmes des enfants qui vont finir par
atteindre le point darrive.
Il faut simaginer que les nuds situs en ce
moment dans la queue sont tous les nuds
situs la lisire des cases colories.

La recherche est termine.


On voit que lalgorithme a quasiment examin
tous les nuds de la carte. Les nuds
restants dans Q sont les nuds non coloris
(blancs) qui ne seront jamais examins car
lalgorithme a trouv le nud darrive avant
de les examiner.
Les nuds coloris en bleu reprsentent le
chemin conseill par lalgorithme. (voir cidessous comment obtenir ce chemin).

Et le chemin suivre ?
On voit que lalgorithme se rpand sur des cercles concentriques (qui ont
pour centre le point de dpart, plus exactement) jusqu ce que le nud
darrive se trouve sur un de ces cercles. La question est : une fois quon a
trouv le nud darrive, comment remonter au nud de dpart ? La technique
est simple : il faut ajouter une proprit quon appelle Parent chaque nud.
Quand on examine le nud Ni, on dfinit le parent de Ni comme tant N ; en
effet, quoiquun nud puisse avoir plusieurs successeurs ou enfants, il na quun
seul parent. Chaque nud travers se trouve donc assign dun parent, qui est le
nud adjacent Ni le plus proche du point de dpart ( cause des cercles
concentriques). Le nud darrive, quand il est travers, se trouve alors affubl
dun parent, et cest en remontant les parents des parents du nud darrive que
lon arrive jusquau nud de dpart, et quon a donc le chemin le plus court, quil
suffit de remettre lendroit (on ne peut obtenir le chemin dans lautre sens, car
53

un nud a plusieurs successeurs) pour avoir fini la dtermination intelligente de


trajet avec lalgorithme breadth first search.
Un cas intressant
Examinons maintenant cette image : un chemin compltement rsolu grce
lalgorithme BFS. Cette fois ci, la carte comporte des obstacles, ce qui fait
apparatre quelques faits intressants sur la recherche :
Tout dabord, le point 2. On voit
quau point 2, les cases sont restes
vierges,
c'est--dire
que
les
successeurs
nont
pas
t
parcourus : cela est du au fait que
lalgorithme sarrte une fois quil a
trouv le nud darrive. Sur les
parties avec beaucoup dobstacles,
les successeurs sont plus rares, ce
qui permet lalgorithme davancer
plus vite sur ces parties (car moins
de successeurs examiner) alors
que les parties avec un terrain
vierge
dobstacles
seront
scannes
intgralement
par
lalgorithme.
Au point 1, on voit un trajet qui
semble bizarre et qui ne semble pas tre le plus court : cela est du la fonction
GetSuccessors quon a vu au 2). Cet algorithme ne peut considrer les cases
pondres ; il est donc impossible de lui faire comprendre qualler sur une
case situe en diagonale dun nud parent est plus long qualler sur une case
situe horizontalement ou verticalement de son fils. Ce chemin est donc
quivalent en nombre de cases que le chemin optimal.
Pour connatre la relle influence de GetSuccessors, jai chang lordre des nuds
retourns par cette fonction. Le chemin obtenu est sur la page suivante

54

Deuxime solution.
Devinez lordre des successeurs !

On voit que le chemin a chang, mais reste quivalent en nombre de nuds


traverss.
On sait que lalgorithme examine chaque nud en position 1 dans la queue
dabord et ajoute donc ses successeurs en premier la liste ; cest donc les siens
qui seront examins en premier plus tard, et ainsi de suite. On peut ainsi deviner
que le premier successeur dans la deuxime solution devait tre le successeur en
haut [ droite] du parent, contrairement la premire o ce devait tre celui en
bas [ droite].
Pourquoi une queue ?
Une queue est une liste o on retire le premier lment dabord, celui qui est le
plus bas dans la liste. Mais quelle est donc lutilit de cette contrainte dans cet
algorithme ? Pourquoi ne pas enlever un nud situ au milieu, ou la fin de
cette liste ?
Pour le montrer, voici le chemin retourn par une variante du BFS qui
examinerait les derniers nuds de la queue :

Un chemin incohrent.
Je parie que ce nest pas
lalgorithme utilis par
Mars Pathfinder !

55

On voit que le chemin nest pas optimal (digne des pires cauchemars de DFS !).
Ce phnomne est d au fait quon retire le dernier lment dans la liste. Mais
que reprsente ce dernier lment ? cest en fait llment ajout le plus tard
dans la liste, donc le nud le plus loign du point de dpart (en comptant
lloignement en nuds) : chaque successeur ajoutant son nud, cest
seulement le nud du dernier successeur qui aura ajout des nuds qui sera
examin et qui ajoutera ses nuds, et ainsi de suite. Rsultat : le chemin obtenu
est celui qui est loign du plus de nuds possible du chemin optimal. Peu
adapt quand on pense que le but de cet algorithme est de fournir le chemin le
plus court ! En rsum, une queue est indispensable au fonctionnement de cet
algorithme.
Unit de calcul
Cet algorithme est dj quasiment sous la forme unit de calcul (je rappelle que
lunit de calcul est la fonction principale dun algorithme non rcursif) : en effet,
la boucle principale (tapes 3 6) se sert du premier nud tir de la queue au
lieu de se servir dun nud dfini par la rptition prcdente (voir DFS pour un
exemple dalgorithme rcursif). On peut dire que, sil existait une fonction bfs
(par analogie avec la fonction dfs qui elle est rcursive), elle ne prendrait aucun
argument (contrairement la fonction dfs), c'est--dire quelle est indpendante
de lappel prcdent de bfs la queue servant de seule liaison entre les diffrents
appels de cette fonction.
Rsum
Pour trouver son chemin grce lalgorithme BFS :
On ajoute le nud de dpart une queue Q
Tant quil y a des nuds dans Q :
On enlve le premier nud de Q, quon appelle N
On dtermine et on colorie les successeurs de N
Si lun deux est le goal, on a trouv le chemin. Sinon, on
continue jusqu ce quil ny ait plus de nuds (condition dchec).
Problmes connus
Cet algorithme ne souffre pas des mmes problmes que les prcdents
algorithmes. On peut nanmoins signaler la difficult quon peut avoir retrouver
le chemin pris par lalgorithme jusquau goal (il faut crer une nouvelle proprit
parent pour chaque nud).
Avantages
Cet algorithme trouve toujours le plus court chemin, car il cherche en faisant des
cercles concentriques dont lun finit par toucher le goal. De plus, lalgorithme
cherche dans toutes les directions la fois.
I nconvnients
Le traage du chemin (c'est--dire la dtermination du chemin pris par
lalgorithme une fois quil a trouv le nud darrive) oblige une augmentation
de mmoire proportionnelle au nombre de nuds traverss (la proprit
parent ajoute chaque nud) et oblige des calculs (peu de calculs, mais
prsents quand mme) pour donner un chemin utilisable par le robot.
Cet algorithme cherche beaucoup de nuds pour arriver au nud final (tout
dpend de lloignement au nud final, mais les cercles concentriques font
56

apparatre de plus en plus de nuds aux fur et mesure que lon se rapproche
du nud darrive), ceux ci prenant une grande place en mmoire (dans la
queue), ce qui peut tre handicapant.
De plus, le fait quil ne tienne pas compte des poids entrane quelques
incohrences sur le trajet pris (car les loignements sont considrs en nombre
de cases et non en distances euclidiennes) et empche le robot de considrer les
lvations et autres altrations du terrain.
Lalgorithme BFS est le premier algorithme que nous voyons et qui donne coup
sr un des chemins les plus courts, mais il reste quelques inconvnients
ennuyeux que dautres algorithmes peuvent corriger. Entre autres, lutilisation
mmoire est vraiment un facteur handicapant, alors que les calculs demands au
microprocesseur du robot se limitent la dtermination des nuds fils
(GetSuccessors). Cest donc un algorithme qui pourrait tre intgr dans un vrai
robot. Sil ny avait pas dautres algorithmes plus performants

57

4.Dijkstra
Lalgorithme de dijkstra nest pas, contrairement au BFS et au DFS, un
algorithme de parcours de graphes, mais la technique quil explique peut tre
applique au principe des cases et des noeuds. Il est trs similaire dans son
comportement au BFS, dans le sens o quand il va explorer la carte (traverser
les nuds), il va considrer dabord les voisins dun nud (voir lexplication au
chapitre 3) BFS). Je vais expliquer cet algorithme pour faire la transition entre les
techniques utilises par les algorithmes de parcours de graphe et les spcificits
de lalgorithme A*. Cest aussi l partir de lalgorithme de Dijkstra que le poids
des nuds sera enfin introduit et pris en compte dans les calculs.
Cet algorithme rutilise le principe de la coloration introduit partir du DFS pour
viter de repasser deux fois sur une mme case : la variante utilise par dijkstra
se sert dune liste de nuds, nomme communment Closed pour viter de
repasser sur des nuds dj visits (lutilisation effective dune liste pour cet
usage sera explicite plus tard).
Il utilise aussi la liste Open, qui est lquivalent de la queue Q du BFS quelques
amliorations prs (je rappelle que le but de cette liste tait de stocker les
positions des nuds visiter).
Lintervention des poids
On associe chaque case (nud) un poids qui correspond une ralit physique
(rappel : ces caractristiques physiques peuvent tre le type de terrain, une
lvation etc.)

Une carte quelconque. Tous les


poids de toutes les cases sont mis
1 par dfaut .

Examinons un exemple de dbut de recherche avec cet algorithme, et regardons


plus particulirement le nud entour en rouge. Le chemin provisoire dtermin
par lalgorithme quand il arrive ce nud est indiqu en noir. On associe ce
nud une valeur g, telle que g soit la somme des poids des cases parcourues
pour arriver ce nud . Ici, les cases parcourues pour arriver ce nud
sont les cases colories en noir, la case de dpart (qui est compte dans le
calcul, bien quon puisse loublier) et notre nud (entour de rouge). Chaque
case a un poids de 1 sur cette carte. Donc la valeur g de notre nud sera
1+1+1+1 = 4, car pour arriver ce nud il a faut dabord passer sur quatre
cases pondres de poids respectifs 1.
58

Une autre carte quelconque. Toutes


les cases blanches ont un poids de
1, les cases grises un poids de 2.
Les cases noires sont des cases
dj traverses de poids 1, et les
cases gris fonc des cases dj
traverses de poids 2.

Un autre exemple : on calcule la valeur g du nud N ici. g = 1 (nud de dpart)


+ 1 + 1 + 2 + 2 + 2 (car N est sur une case de poids 2) = 9. A chaque nud on
peut associer une valeur g unique (car chaque nud nest examin quune fois
dans les algorithmes qui lutilisent). On peut donc noter g(N) = 9 pour ce nud.
Fonctionnement
Le fonctionnement de cet algorithme est trs similaire au BFS, au sens o on
regarde dabord tous les successeurs dun nud avant un successeur particulier,
et on garde la liste Q (qui sappelle maintenant Open ).
Initialisation
1. On ajoute le nud de dpart Open.
Dbut de lalgorithme
2. Si Open est vide, alors lalgorithme a fini et on na pas trouv de solution.
3. On trie la liste Open par ordre croissant de g. Ainsi, le nud avec le g le
plus faible sera enlev (examin) en premier.
4. On retire le premier nud de Open, on lappelle N.
5. On calcule le g de chaque successeur de manire rcursive : g(successeur)
= g(N) + poids(successeur). On ajoute chaque successeur Open si il nest
pas dj dans Closed (cette technique est quivalent au coloriage du DFS
et
BFS).
Si ce successeur est le nud darrive, alors on a trouv le chemin. Sinon
on passe au successeur suivant.
6. On ajoute N la liste Closed pour viter de repasser dessus.
7. On passe ltape 2.
On voit que le principe de fonctionnement est trs semblable celui de
lalgorithme BFS, avec une exception notable : maintenant, les nuds mis dans
la liste Open sont tris par ordre croissant de g : ainsi, les nuds avec les g les
plus faibles, donc ceux qui doivent tre privilgis comme points de passage du
robot sont placs en premire position et sont donc examins en premier. Mais
Dijkstra examine quand mme tous les nuds, ce qui rsulte en la cration de
cercles concentriques comme dans BFS.
Ci-dessous gt le diagramme rgissant les actions de cet algorithme :
59

Initialisation
On ajoute le nud de
dpart Open

Open est vide

Fin de lalgorithme
On na pas russi
trouver le goal

On trie Open par ordre


de g (croissant)

Open nest pas


vide

On enlve le 1er nud de Open, et on lappelle N.


On lajoute Closed.
On examine les successeurs de N qui ne sont pas dans Closed
et qui ne sont pas des obstacles.

On passe au
successeur suivant
On a dj parcouru
tous les successeurs
de N

Ce successeur est le
nud darrive

Fin de lalgorithme
On a trouv le goal

On ajoute Ni Open

60

Voyons pour commencer un exemple de recherche dun chemin avec lalgorithme


BFS :

Un chemin trouv grce lalgorithme


BFS. Les cases grises sont les cases
viter si possible de poids 2. Toutes les
autres cases ont comme poids 1.

On voit bien ici que lalgorithme BFS na pas tenu compte du poids des cases et
est pass sur celles-ci comme si de rien ntait. Gardons la mme carte et faisons
la mme recherche grce dijkstra :

Un chemin trouv grce lalgorithme de


Dijkstra.

On voit bien quavec Dijkstra, lalgorithme vite naturellement les cases


pondres et trouve le plus court chemin vers son but.
On peut aussi reprendre un des problmes du BFS, qui tait celui-ci :

61

Une des recherches faites avec


lalgorithme BFS. Notez les
problmes du chemin trouv.

Et voyons ce que nous aurait donn lalgorithme de Dijkstra dans ce cas :

La mme recherche, vue par


Dijkstra.

On voit que Dijkstra nous donne le plus court chemin ; en effet, le fait de donner
un poids suprieur 1 aux cases situes en diagonale limite les dplacements
diagonaux de lalgorithme qui leur prfrera, si possible, un dplacement
horizontal ou vertical. Cest donc cette petite astuce qui, grce la prise en
compte des poids, permet doptimiser le chemin.
Cet algorithme tant trs semblable BFS dans sa propagation sur la carte, je
me contenterait de mettre un exemple montrant lalgorithme en action :

62

Sur cette image, on voit les cercles


concentriques forms par Dijkstra
autour du nud de dpart dans sa
qute pour le nud darrive.

On peut remarquer accessoirement que les cercles concentriques qui sont forms
ressemblent plus des cercles quavec lalgorithme BFS (du fait de sa
prfrence pour les cases horizontales et verticales plutt que diagonales).
Lalgorithme garde donc en mmoire les poids des cases visites, qui sont
places dans la queue. La queue sert examiner en priorit les nuds ayant les
poids les plus faibles. Le principe et les chemins de cet algorithme sont trs
similaires lalgorithme BFS.
Lalgorithme de Dijkstra est facile mettre sous la forme unit de calcul
grce lutilisation de la liste (cf. BFS), qui permet donc de diviser le temps
demand pour la dtermination du trajet.
Rsum
Pour trouver un chemin avec lalgorithme de Dijkstra :
On ajoute le nud de dpart une queue Open (qui contient
les nuds visiter)
Tant quil y a des nuds dans Open :
On trie la liste open par ordre de g croissant
On enlve le premier nud de Open, quon appelle N
On dtermine les successeurs de N.
On calcule la valeur de g pour chaque successeur de N.
On ajoute ce successeur de N Closed.
Si lun deux est le goal, on a trouv le chemin. Sinon, on
continue jusqu ce quil ny ait plus de nuds (chec).

63

Problmes connus
Cet algorithme trouve toujours son chemin sil existe : on ne note donc pas de
problmes pour cet algorithme, bien quon ait les mmes difficults
remonter dans le programme partir du nud darrive pour dterminer
exactement le chemin (cf. les Problmes connus du BFS).
Avantages
Grce son dploiement en cercles concentriques, Dijkstra trouve toujours le
chemin le plus court. A la diffrence du BFS nanmoins, lutilisation du poids des
cases permet de tenir compte des paramtres du terrain (hauteur, ) ainsi que
de pondrer les cases situes en diagonale dun nud, permettant ainsi davoir le
premier trajet vraiment optimis que nous voyons.
I nconvnients
Lalgorithme examine beaucoup de nuds (mme remarque que pour le BFS)
cause de lexpansion en cercle, non dirige vers le nud darrive, qui conduit
lexploration de presque tout le terrain avant de trouver le nud darrive.
On peut nanmoins remarquer que la fonction g, principe de lalgorithme, permet
dviter particulirement les cases pondres (le nombre de cases examines est
donc infrieur dans la plupart des cas celui retourn par lalgorithme BFS).
Il y a aussi un risque important de fautes dorthographe au niveau de son nom,
ce qui explique que lon peut lui prfrer dautres algorithmes, moins complexes
prononcer.
Cet algorithme est beaucoup plus gourmand au niveau des calculs que
lalgorithme BFS, surtout cause du tri des listes intensif chaque nud. Il
demande en plus beaucoup de mmoire, car il faut garder trace des nuds et de
leur valeur g. Toutes ces contraintes font que lalgorithme est plutt utilis dans
des systmes grand public ou qui ncessitent un chemin optimis (dtermination
de trajet sur des cartes routires, ordinateur de bord), mais il nest pas destin
la miniaturisation.

64

5.A* - A star
Cet algorithme est laboutissement des recherches sur lalgorithme de Dijkstra. Il
rutilise les techniques du BFS et de Dijkstra pour les combiner et en faire
lalgorithme le plus convergent de tous ceux que nous tudierons (cest aussi le
plus utilis).
On garde la technique des deux listes, Open et Closed de dijkstra (rappel : Open
contient les nuds visiter, Closed les nuds dj parcourus).
Lalgorithme A* est le plus utilis dans le monde actuel, car cest le plus efficace.
Il na pas t conu spcifiquement pour tre compatible avec les graphes.
Nanmoins, et pour ne pas surcharger ce TPE de dtails, nous considrerons
uniquement la variante de cet algorithme qui lui permet de travailler avec des
nuds.
L a fonction h : une distance
On associe chaque nud la distance de ce nud la case darrive, comme
indiqu sur cette image :
Le segment quon voit en noir sur
cette image est h(N).
(les cases noires et grises nont
aucune importance)

On voit sur cette image la distance h du nud N au nud darrive. Cette


distance est unique pour chaque nud/case de la carte, on dit donc quon
associe chaque nud N la fonction h(N) qui reprsente cette distance, en unit
de longueur (ici, h(N) vaudrait approximativement 14 en distance euclidienne).
L a fonction h : un heuristique
Quest-ce quun heuristique ? La dfinition algorithme dun heuristique est un
moyen de guider un algorithme plus grand, sans pour autant pouvoir remplacer
lalgorithme lui tout seul (dfinition volontairement simplifie et adapte
notre cas). Dans ce cas, notre heuristique est la fonction h, utilise
convenablement. Partons de lalgorithme de Dijkstra : cet algorithme choisissait
en priorit les nuds situs le plus prs du nud darrive grce la fonction g.
Pourquoi ne pas intgrer notre fonction h dans le choix des nuds ? on pourrait
en effet prfrer de choisir les nuds qui ont un h le plus faible, c'est--dire ceux
qui sont les plus proches du but. Dans ce cas, la fonction h serait un heuristique,
au sens o elle guiderait le sens de propagation de lalgorithme, au mme titre
que la fonction g. On pourrait donc imaginer une troisime fonction f qui
associerait chaque nud une valeur f qui tienne compte de g et de h de ce
65

nud, ce qui permettrait de classer les nuds dans la liste Open par ordre
croissant (ou dcroissant) de f, pour avoir les nuds les plus adapts au chemin
au dbut de la liste pour un examen plus rapide.

66

L a fonction f
Nous avons donc une fonction f, quon a dfinie telle que :

f=g+h
On voit que avec cette fonction, plus un nud est prs du nud de dpart, plus
son g est faible ; plus un nud est prs du nud darrive, plus son h est faible.
Les nuds dont les g et h sont les plus faibles font donc partie du chemin le plus
court. Les nuds dans la liste Open seront donc tris par ordre croissant de f,
pour avoir les nuds les plus susceptibles de fournir le chemin le plus court en
haut de ces deux listes (ce qui permet de transformer ces listes en queues, c'est-dire quon retirera toujours llment le plus haut dans la liste).
Fonctionnement
Initialisation
1. On ajoute le nud de dpart Open.
Dbut de lalgorithme
2. Si Open est vide, alors lalgorithme a fini et on na pas trouv de solution.
3. On trie la liste Open par ordre croissant de f (le nud avec le f le plus
faible sera examin en premier).
4. On retire le premier nud de Open, on lappelle N.
5. On calcule le f de chaque successeur :
f(successeur) = g(N) + poids(successeur) + h(successeur)
6. Si ce successeur est le nud darrive, alors on a trouv le chemin.
7. Si il existe dans Closed ou dans Open un nud X qui aurait dj un f
infrieur au f de ce nud N (f(X) < f(N)), alors on passe au successeur
suivant, car lexistence dun tel nud X prouve quil existe dj de
meilleures solutions qui ont dj t examines (ce nud X existe dans
Closed) ou qui vont ltre (ce nud X existe dans Open), il nest donc pas
ncessaire dexaminer N.
8. On ajoute N la liste Closed pour viter de repasser dessus.
9. On passe ltape 2.
On voit le mode de fonctionnement dans le diagramme suivant :

67

Initialisation
On ajoute le nud de
dpart Open

Open est vide

Fin de lalgorithme
On na pas russi
trouver le goal

On trie Open par ordre


de f (croissant)

Open nest pas


vide

On enlve le 1er nud de Open, et on lappelle N.


On lajoute Closed.
On examine les successeurs de N si ils ont un f meilleur que
tous ceux dj prsents dans Open ou dans Closed.

On passe au
successeur suivant
On a dj parcouru
tous les successeurs
de N

Ce successeur est le
nud darrive

Fin de lalgorithme
On a trouv le goal

On ajoute le
successeur Open

68

Voici un exemple de rsolution dun chemin avec lalgorithme A* :


Un chemin trouv grce lalgorithme
A*. Les cases grises sont les cases
viter si possible de poids 2. Toutes les
autres cases ont comme poids 1. Les
nuds marqus par un cercle rouge sont
passs directement dans Open alors que
ceux remplis dorange ont t dabord
par Closed (ils ont vraiment t
examins)

On voit clairement ici que, par rapport aux algorithmes de Dijkstra et BFS,
lalgorithme A* ne parcourt pas toute la carte ; en effet les nuds qui sloignent
trop du chemin optimal sont rejets (cercles rouges). Grce linclusion de la
fonction g, lalgorithme prfre les cases non pondres et les trajets en
diagonale, comme lalgorithme de Dijkstra. Grce notre heuristique,
lalgorithme na plus besoin de parcourir toute la carte pour trouver le nud
darrive.

le problme classique : un dbut de


recherche. Les cercles rouges
correspondent aux nuds situs dans
Open (en cours dexamen).

On voit que sous linfluence de lheuristique, lalgorithme forme une ligne


dans sa recherche du nud darrive. La ligne droite reste le plus court chemin
dun nud un autre, et cest la forme de propagation que A* adopte.
Je ne donnerai pas dautres exemples de rsolution de problmes car cet
algorithme donne les mmes rsultats que lalgorithme de Dijkstra (tout en
examinant moins de nuds).
69

70

L influence des heuristiques


Supposons que nous ayons une case N dont le point situ au centre de cette case
aurait comme coordonnes (X, Y). Notre case darrive aurait comme
coordonnes de son point central (XA, YA). On veut calculer h(N), qui est la
distance entre N et le point darrive. Avec la formule de la distance euclidienne
(thorme de Pythagore), on a :

h( N ) = ( X X A ) 2 + (Y Y A ) 2
Voyons ce quon obtient comme recherche avec cet heuristique :

Heuristique : distance euclidienne

Visiblement, ce nest pas un heuristique trs efficace, car il dirige suffisamment


mal lalgorithme A* pour entraner lexploration de dizaines de cases inutiles.
Mais il existe aussi dautres heuristiques, c'est--dire ici dautres moyens de
calculer cette distance. Lune des plus connues est la distance maximum :

h( N) = max( X X A , Y YA )
Cet heuristique prend comme distance finale la diffrence de distance maximum
sur X et sur Y, ce qui donne un chemin comme celui ci (voir page suivante).

71

Heuristique : distance maximum

Cest encore pire que la distance euclidienne ! Cet heuristique fait traverser
encore plus de nuds lalgorithme A*.
Il existe un dernier heuristique, nomm la distance de Manhattan , qui se
calcule comme ceci :

h( N) = X X A + Y YA
Voyons ce que cet heuristique peut faire faire notre A* :

Heuristique : distance de Manhattan

La diffrence est flagrante par rapport aux deux premiers heuristiques : la


distance de Manhattan fait en effet parcourir beaucoup moins de nuds
lalgorithme A* Je nai pas encore assez de connaissances mathmatiques pour
prouver pourquoi un heuristique produit de meilleurs rsultats quun autre, mais
il faut savoir que la fonction h, lheuristique est cens retourner le nombre de
cases quil faut parcourir pour se dplacer entre un nud et le nud darrive.
Or, on ne connat ce nombre de cases que lorsquon a dtermin compltement
le trajet ; il faut donc faire une approximation de ce nombre de cases. Le calcul
72

de la distance fournit une approximation correcte, mais la distance de Manhattan


se rapproche plus du nombre de cases que la distance euclidienne, par exemple.
Les algoriciens montrent que si il existait un heuristique qui retournerait
exactement le nombre de cases entre un nud et le nud darrive, alors A*
passerait directement par le chemin le plus court, sans jamais examiner un seul
nud superflu. Malheureusement, et puisquun tel heuristique nexiste pas, on
travaille avec des approximations.
Rsum
Pour trouver un chemin avec lalgorithme A* :
On ajoute le nud de dpart une queue Open (qui contient
les nuds visiter)
Tant quil y a des nuds dans Open :
On trie la liste Open par ordre de f croissant
On enlve le premier nud de Open, quon appelle N
On dtermine les successeurs de N.
On calcule la valeur de f pour chaque successeur, et on vrifie quil
nexiste pas dj un nud avec un f infrieur dans Closed et Open.
On ajoute ce successeur Closed.
Si lun deux est le nud darrive alors on a trouv le chemin.
Sinon, on continue jusqu ce quil ny ait plus de nuds (condition dchec).
Problmes connus
Lalgorithme A* ne souffre daucun problme connu. Il retourne un chemin qui
est exactement le chemin le plus court.
Avantages
Cet algorithme tient compte des poids et examine le moins de nuds possibles
grce lutilisation de lheuristique qui lui permet une expansion en ligne droite,
ce qui lui fait occuper une place en mmoire plus faible que les algorithmes de
Dijkstra et BFS.
I nconvnients
A* peut prendre beaucoup de temps de calcul cause du tri intensif des listes et
surtout des calculs de distances (qui ncessitent en plus dinstaller un
coprocesseur arithmtiques pour les nombres virgule dans les robots). Il prend
donc plus de temps pour faire une recherche que lalgorithme de Dijkstra. Il faut
aussi savoir choisir le bon heuristique (dans le cas dune grille, cest nanmoins la
distance de Manhattan qui prdomine).

73

Conclusion
On a donc vu cinq algorithmes travers ce TPE : la ligne droite, DFS, BFS,
Dijkstra et A* (qui rutilise la ligne droite travers la fonction h).
Il est temps maintenant, au vu des inconvnients et avantages de chaque
algorithme, de les comparer pour leur utilisation dans le but de notre TPE :
dplacer notre robot jusqu la balle rouge (qui a une position compltement
dtermine par la reconnaissance dimages). Notre robot se rapprochant plutt
de la taille dun robot-chien (cf. Abo, en introduction), il a les mmes limites et
capacits (qui rejoignent les limites courantes quon retrouve dans la
robotisation) :
- la dtermination du trajet ne doit pas prendre trop de
temps pour laisser au processeur le loisir de soccuper
dautres parties du robot ;
- la mmoire est quasiment illimite (tous ces algorithmes
ne prennent que quelques mga-octets de mmoire au
grand maximum, ce qui est facilement adaptable mme
sur un robot de cette taille) ;
- les poids et les obstacles doivent tre pris en compte
(notamment si lutilisateur dit au robot dviter les tapis si
possible poids - et les objets fragiles tout prix
obstacles -) ;
- le robot ne doit pas rester bloqu dans le trajet
dtermin ; il est prfrable que ce trajet soit le plus court,
et si possible quil soit cens.
A partir de ces critres, on peut donc classer les algorithmes notre disposition :
Classe
ment

Algorithme

Raisons

Dijkstra

Assez rapide, trajet largement optimis qui ne bloque jamais le


robot, prise en compte des poids.

A*

Relativement lent par rapport aux autres algorithmes.

BFS

Ne tient pas compte des poids. Quelques aberrations dans le


trajet.

DFS

Trajet pas toujours optimal et parfois compltement ct, ne


tiens pas compte des poids.

Ligne droite

Ne tiens pas compte des poids, se bloque parfois dans le trajet.

Cest donc lalgorithme de Dijkstra que lon retiendrait dans notre analyse pour
notre robot.
Mais lalgorithme A* est de plus en plus rpandu car il est trs efficace dans des
domaines varis (dtermination intelligente de trajet pour les ordinateurs de
74

bord, utilisations dans les jeux vido) grands public, o la place nest pas
forcment compte et o les limites technologiques sont sans cesse repousses.
Il remplace souvent lalgorithme de Dijkstra. Lalgorithme BFS reste utilis dans
la miniaturisation, mme sil est difficile dimplanter un algorithme complet dans
un trop petit espace. Lalgorithme DFS quant lui reste un algorithme de
traverse de graphes, car il sadapte peu la dtermination dun trajet
optimal . Enfin, la ligne droite nest gure utile que comme heuristique, et ne
peut gure tre utilise comme telle .
Il faut signaler que tous ces algorithmes se programment trs facilement (cf. les
fonctions de DFS) mais ne sont pas volutifs : les algorithmes dfendus dans la
partie III sont beaucoup plus souples dans leur utilisation pour dcouvrir
comment un algorithme peut voluer et en plus trouver un chemin optimal,
tournez la page !

75

III. Les rseaux neuronaux


1.La thorie
Cette partie tant trs thorique et peut tre un peu ennuyeuse , on peut lire uniquement le f) Rsum sur les
rseaux la fin de cette partie et passer aux parties suivantes en se reportant la thorie quand (et si) cela est
ncessaire
Note: faute de connaissances mathmatiques suffisantes, nous navons pas pu raliser les rseaux prsents ici, ce qui
nempche heureusement pas de les comprendre.

Comment l'homme fait-il pour raisonner, parler, calculer, apprendre, ...? Cette
question a mobilis les chercheurs en intelligence artificielle pendant plusieurs
dizaines dannes. Deux types d'approches pour essayer de rpondre cette
question de manire automatique ont t essentiellement explors :
procder d'abord l'analyse logique des tches relevant de la cognition
humaine et tenter de les reconstituer par programme : ce sont les
algorithmes ou les systmes automatiques qui ont notamment t tudis
dans la partie II.
puisque la pense est produite par le cerveau, tudier comment celui-ci
fonctionne. C'est cette approche qui a conduit l'tude de rseaux de
neurones formels.
Cest le second point, les rseaux de neurones qui seront tudis ici.
a) Le neurone biologique
Puisque les neurones artificiels sinspirent des neurones du cerveau, je vais
commencer par montrer le fonctionnement de notre cerveau :

Schmatisation dun neurone


biologique. Les ronds sont les
cellules neuronales. Les lignes
simples sont des dendrites et les
lignes doubles des axones (cf. cidessous).

Les neurones reoivent les signaux qui sont des impulsions lectriques par
lintermdiaire de dendrites, en fait des extensions ramifies de la cellule et
envoient l'information par de longs prolongements, les axones.
Les contacts entre deux neurones, de l'axone une dendrite, se font par
l'intermdiaire des synapses. Lorsqu'un potentiel d'action atteint la terminaison
d'un axone, des neuromdiateurs sont librs et se lient des rcepteurs postsynaptiques prsents sur les dendrites. L'effet peut tre excitateur ou inhibiteur.
Chaque neurone intgre en permanence jusqu' un millier de signaux
synaptiques.
76

b) Que permettent-ils de faire ?


Les rseaux de neurones, aussi appels rseaux neuro-mimtiques sont ce qu'il
y a de plus efficace pour mettre en place la cognition dans un programme.
Quest-ce que la cognition ? La cognition caractrise des outils tels que la
reconnaissance de caractres, la reconnaissance vocale, ou encore la
reconnaissance d'images. Les rseaux de neurones sont la base de tous ces
outils. Mais ce n'est pas tout : leurs capacits vont bien au del de la simple
cognition ; en effet ces rseaux peuvent galement tre utiliss pour la synthse
vocale, ou l'improvisation de mlodies (en temps rel !) appuye par une
musique dj existante. Ils peuvent galement tre utiliss dans des cas comme
les IDS (Intrusion Detection System), ou encore pour donner "vie" des robots
virtuels ou non. Le robot Mars Pathfinder qui roula sur le sol martien est un bon
exemple : l'un des principes qui rgissent ce robot sont les rseaux neuromimtiques.
La particularit de ces rseaux rside dans le fait quils sont capables dapprendre
une fonction qui prend n variables en entre, et retourne m variables en sortie
(les variables tant des nombres rels). Ce sont de telles fonctions qui rgissent
les actions dun robot : prenons par exemple Mars Pathfinder. Pour se dplacer,
le cerveau du robot prend en entre les informations de ses capteurs qui lui
disent sa position, les obstacles, etc. et doit retourner en sortie des instructions
pour ses moteurs, par exemple. Un rseau de neurones prend tous les signaux
de capteurs en entre et partir de ses entres et de ce quil a dj en mmoire,
est capable de donner les bons ordres ses actionneurs : le rseau agit donc
comme une fonction plusieurs variables.
Pour linstant, les rseaux neuronaux paraissent semblables aux systmes
experts (qui ne sont que des programmes crits une fois pour toutes et
incapables dvoluer). Mais les rseaux neuro-mimtiques sont des usines
apprendre, elles voluent sans cesse (pour peu qu'on leur demande) et si par
exemple un jour, un paramtre venait changer, contrairement aux systmes
experts, les rseaux neuro-mimtiques s'adapteraient automatiquement sans
intervention humaine : cest la magie de lapprentissage, ce que sont capables de
faire les neurones. Mais avant de passer lapprentissage proprement dit,
voyons dabord comment un neurone est reprsent sous forme robotique.
c) Le neurone virtuel
Un neurone en robotique est reprsent sous cette forme :

Le neurone virtuel

On voit le neurone (le cercle central) qui ralise lintgration des signaux, des
entres notes xn. A chaque entre correspond un poids. Ce poids est utilis dans
le traitement de linformation ; en effet, le neurone ralise la somme pondre de
toutes les entres : N = x1 * w1 + x2 * w2 + + xn * wn.
77

On fait ensuite passer la valeur N travers une fonction H. H peut tre une
fonction de seuil, tel que H(N) peut prendre les valeurs 0 ou 1 par exemple,
suivant les valeurs de N, ou peut encore tre une fonction plus complique (le
choix de la fonction est fait suivant les sorties que doit donner le rseau et ne fait
pas partie de ce TPE on peut considrer pour linstant que la fonction H est une
fonction de seuil).
Le neurone est lunit de base des rseaux neuronaux, cest lui qui ralise les
calculs . Mais seul, il est inutile. Cest pour cela quon associe plusieurs
neurones dans des rseaux de neurones.
d) L es rseaux
Un rseau de neurones est form de la liaison de plusieurs neurones agencs en
couches, comme prsent sur cette figure :

On voit la forme dun rseau de


neurones multi-couches.

On voit donc un rseau form de trois couches de neurones. La premire couche


est constitue de 3 neurones et sappelle la couche dentre. Tous les neurones
de cette couche prennent leurs entres de trois variables x0, x1 et x2. Leurs
sorties sont relies aux neurones de la couche secondaire, la couche cache. Les
neurones de la couche cache prennent leurs entres des neurones de la couche
dentre et leurs sorties sont combines pour calculer la sortie finale du rseau S.
On voit que ce rseau modlise une fonction qui prend 3 variables en entre et
en retourne une en sortie (nous verrons plus en dtail dans les parties suivantes
ce que peuvent tre les variables dentre et de sortie, mais ce sont toujours des
nombres rels). A chaque trait sur la figure ci-dessus est associ une liaison avec
un poids (cf. le schma dun neurones plus haut).
Un autre exemple de rseau,
avec un nombre diffrent de
couches et de neurones.
Ce rseau peut prendre 5
variables en entre et retourner
deux sorties.

Les poids affects aux connections


permettent de relier les entres aux sorties
du rseau par le calcul effectu par chaque
neurone.
78

Lorsquon prsente aux neurones dentres diffrentes valeurs, le calcul successif


des sorties de neurones de toutes les couches permet de calculer les sorties
correspondantes. A chaque liste dentres correspond donc une liste de sorties
que le rseau peut calculer.
Mais comment dterminer ces poids dans le but de faire une approximation de la
fonction que lon veut reproduire avec le rseau ? Et pourquoi parle t-on des
capacits dvolution de ces rseaux ?
e) Lapprentissage
On a vu prcdemment quun rseau tait capable dapproximer nimporte quelle
fonction, pour peu quon lui mette les poids ncessaires aux neurones appropris.
Pour la plupart des fonctions que lon peut reprsenter par de tels rseaux, on
dispose dun pack dchantillons (un chantillon tant une liste dentres et la
liste de sorties correspondantes). Il suffit de prsenter au rseau un exemple (un
chantillon) dentres et les sorties correspondantes pour quil l apprenne .
Que se passe til quand un rseau a appris lchantillon ? Il suffit alors de lui
prsentes comme valeurs dentre les entres prsentes dans lchantillon pour
quil sorte aprs calcul une approximation des valeurs de sorties qui taient dans
lchantillon : le rseau a appris cet chantillon. Le rseau est capable
dapprendre plusieurs chantillons ; ce sont les neurones qui ralisent cette
fonction mmoire, car ils enregistrent les poids correspondants. Plus il y a de
neurones dans un rseau et plus on pourra enregistrer dchantillons diffrents
tout en gardant une prcision de sortie suffisante. On peut apprendre le mme
chantillon plusieurs fois pour augmenter cette prcision. Quand tous les
chantillons ont t prsents et que les valeurs de sorties sont satisfaisantes, le
rseau ralise alors lapproximation de la fonction considre. Le principal
avantage des rseaux sur les systmes classiques est quils peuvent donner des
sorties satisfaisantes pour des entres qui nont jamais t donnes en exemple.
Leur second avantage est quils peuvent apprendre en temps rel ; imaginons
par exemple un rseau qui soccuperait de la surveillance dune chane de
production. Les capteurs envoient leurs donnes au rseau (les capteurs sont des
entres) qui dtermine laide de ces informations si un dfaut ( prsence
dfaut est une sortie du rseau) est prs de se produire sur la chane et larrte
alors. Si un dfaut est quand mme signal par des capteurs externes ou par un
oprateur (par lintermdiaire de larrt durgence, par exemple) se produit alors
que le rseau ne lavait pas prvu, le rseau apprend alors que les entres quil
avait au moment du dfaut correspondent effectivement une possibilit de
dfaut et quil doit tre signal grce la sortie correspondante. Ainsi, alors que
les concepteurs du rseau navaient pas pens ou pas prvu un dfaut dans ces
conditions, le rseau lapprend et sera capable de le signaler si le mme cas se
rpte, ce qui permet de prdire les erreurs futures et dviter linterruption
prolonge de la production, dans ce cas.
Il existe bien videmment des algorithmes qui permettent de trouver les poids et
de les modifier partir des chantillons, mais ils ne font pas lobjet de ce TPE.
f) Rsum sur les rseaux neuronaux
Un rseau neuronal est constitu de plusieurs neurones (des units de
calcul simples) relis entre eux. Ces neurones sont agencs en couches.
Lassociation des neurones permet de simuler une fonction (en faire une
approximation) plusieurs paramtres, c'est--dire de calculer des valeurs
de sortie voulues partir de valeurs dentre.

79

Plus il y a de neurones, plus le rseau peut mmoriser de paires {valeurs


dentres / valeurs de sortie}.
Un rseau peut apprendre cette fonction, si on lui prsente des exemples.
Un exemple tant un chantillon de valeurs dentres et les valeurs de
sorties que lon veut faire calculer au rseau quand on lui prsente ces
entres. Il peut apprendre en temps rel de nouveaux exemples si on lui
prsente les bons chantillons.
Il peut ainsi simuler une intelligence humaine (par le mcanisme dactionraction : un tat correspondent des actions appropries).

80

2. Application la reconnaissance dimages


Les rseaux neuromimtiques sont couramment utiliss dans des problmes
utilisant des images. Le plus souvent, ils sont impliqus dans des applications de
reconnaissance de caractres (OCR), dont lobjectif est de transformer une
criture manuscrite en donnes informatiques. Leur capacit dapprentissage leur
permet de sadapter une criture humaine, afin de pouvoir la lire .
Nous pouvons galement les utiliser pour dterminer la position dune balle
sur une image, mme si cela peut sembler moins vident. En effet, nous navons
trouv aucune application pratique effectuant une recherche similaire grce un
rseau de neurones, mais cela reste tout fait faisable.
Il faudra tout dabord simplifier limage. Un traitement basique permettra de
diminuer le nombre de couleurs et de supprimer le bruit. Mme si cela nest pas
forcment ncessaire, cela ne pourra que simplifier la tche du rseau de
neurones.
La taille de limage dfinira la dimension de la couche dentre du rseau. On
peut donc diminuer la rsolution de limage, afin de restreindre le rseau.
Entres du rseau : les pixels de limage et les informations sur lobjet recherch
Sorties : la position de la balle
Il est probablement possible de fournir comme informations sur lobjet
recherch une image de cercle rouge au rseau. Celui ci tentera donc de la
localiser sur limage.
Nous ne pouvons donner plus dinformations sur lutilisation dun rseau
neuronal pour dterminer la position dun objet sur une image, car cela fait partie
des sujets actuellement tudis par les dveloppeurs de logiciels commerciaux de
traitement dimage. Nous ne disposons donc que de trs peu dinformations ce
sujet.

81

3. Application la Dtermination Intelligente de Trajet


Dans la partie II, le robot avait en tte une reprsentation prcise de
lenvironnement qui lentourait. Les algorithmes qui lui permettaient de trouver
son chemin jusqu son but (la baballe) faisaient grand usage de cette
reprsentation interne pour optimiser et trouver le chemin. Mais si on ne connat
pas lenvironnement (par manque dinformations, de capteurs, de temps etc.), on
peut utiliser un rseau neuronal pour dplacer le robot travers lenvironnement
en direction de la balle.

robot
angle

vecteur
vitesse

direction
de la balle

balle

a) Les entres-sorties
Nous dirons donc que nous disposons
dune info : la position de la balle par
rapport au robot (qui peut tre modlise
par un angle entre le vecteur direction du
robot et le vecteur robot -> balle). Une
autre information (les informations vont
former les entres du rseau) sera forme
par la position dun obstacle. On dcide de
prendre en compte les obstacles situs
devant le robot et plus particulirement
devant gauche, devant droite et
devant tout droit, comme indiqu sur la
figure suivante :

En rouge : les obstacles


considrs comme tant
gauche du robot.
En jaune : les obstacles
devant le robot.
En bleu : les obstacles
droite du robot.
Langle alpha est langle
entre le robot et la balle.

On va donc ajouter trois informations dentre au rseau. La premire sera la


distance de lobstacle le plus proche situ sur la gauche (en mtres, par
exemple). La seconde, la distance de lobstacle le plus proche situ au centre, et
la troisime, la distance de lobstacle le plus proche situ droite. Par exemple,
dans la situation prsente ci-dessus, lchantillon dentre serait {45, 0.5, 1.0,
1.0}. Le premier chiffre est langle form entre la balle et la direction qua prise
82

le robot. Le second est la distance du robot lobstacle O. Il ny a dobstacle ni


au centre ni droite ; on met donc la distance maximale (situe en loccurrence
1m du robot) pour les deux dernires valeurs, ce qui signifie pas dobstacle
pour linstant .
Comme sorties pour le robot, on choisira de retenir deux valeurs importantes
pour le circuit de commande : rotation et acclration. La rotation sera une
valeur comprise entre 0 et 1, 0 correspondant tourner fond gauche, 0.5
continuer tout droit et 1 tourner fond droite.
Lacclration sera aussi une valeur comprise entre 0 et 1, 0 tant freiner fond,
0.5 continuer la mme vitesse et 1 acclrer fond (il y a toujours une vitesse
de croisire qui bloquera lacclration).
On peut donc construire notre rseau neuronal comme ceci :

Le nombre de neurones utiliss pour la 1re et la 2nde couches intermdiaires a t


dcid aprs plusieurs essais.
A chaque seconde (ou intervalle de temps encore plus court), on met en entre
les valeurs donnes par les capteurs, et on laisse le rseau calculer les sorties
correspondantes, qui seront traites par le robot et utilises pour actionner les
moteurs.
b) L entranement
Avant de pouvoir utiliser le rseau, il faut lentraner avec diffrents exemples.
Voici les valeurs quon lui prsenterait en exemple : (chaque ligne est un
exemple)
Neurones dentre
Distance lobstacle

Sorties associes

Gauche

Centre

Droite

Acclration

Rotation

Aucun obstacle

Aucun obstacle

Aucun obstacle

Acclration
maximum

Tout droit

Moiti de la distance
maximum

Aucun obstacle

Aucun obstacle

Acclrer un peu

Un peu vers la droite

83

Aucun obstacle

Aucun obstacle

Moiti de la distance
maximum

Acclrer un peu

Un peu vers la
gauche

Aucun obstacle

Moiti de la distance
maximum

Aucun obstacle

Ralentir

Un peu vers la
gauche

Moiti de la distance
maximum

Aucun obstacle

Moiti de la distance
maximum

Acclrer

Tout droit

Touche presque
lobstacle

Touche presque
lobstacle

Touche presque
lobstacle

Freiner fond

A gauche

Moiti de la distance
maximum

Moiti de la distance
maximum

Moiti de la distance
maximum

Garder la vitesse

Un peu vers la
gauche

Touche presque
lobstacle

Aucun obstacle

Aucun obstacle

Ralentir

A fond droite

Aucun obstacle

Aucun obstacle

Touche presque
lobstacle

Ralentir

A fond gauche

Aucun obstacle

Touche presque
lobstacle

Aucun obstacle

Freiner fond

A gauche

Touche presque
lobstacle

Aucun obstacle

Touche presque
lobstacle

Acclration
maximum

Tout droit

Touche presque
lobstacle

Touche presque
lobstacle

Aucun obstacle

Freiner fond

A fond droite

Aucun obstacle

Touche presque
lobstacle

Touche presque
lobstacle

Freiner fond

A fond gauche

Obstacle proche

Obstacle proche

Obstacle trs proche

Garder la vitesse

A gauche

Obstacle trs proche

Obstacle proche

Obstacle proche

Garder la vitesse

A droite

Touche presque
lobstacle

Obstacle trs proche

Obstacle trs proche

Ralentir

A fond droite

Obstacle trs proche

Obstacle trs proche

Touche presque
lobstacle

Ralentir

A fond gauche

Touche presque
lobstacle

Obstacle proche

Obstacle loin devant

Garder la vitesse

A droite

Obstacle loin devant

Obstacle proche

Touche presque
lobstacle

Garder la vitesse

A gauche

Obstacle trs proche

Obstacle proche

Obstacle proche de
la moiti

Garder la vitesse

A fond droite

Obstacle proche de
la moiti

Obstacle proche

Obstacle trs proche

Ralentir

A fond gauche

Et les chantillons pour grer le dplacement vers la balle :


Neurones dentre
Angle en degrs
Position relative de la balle
Compltement gauche
A gauche
Tout droit
A droite
Compltement droite

Sorties associes
Rotation
A fond gauche
A gauche
Tout droit
A droite
A fond droite

Rotation

On associe maintenant ces chantillons des valeurs numriques :


Neurones dentre
Distance lobstacle

Sorties associes

Gauche

Centre

Droite

Acclration

Rotation

1.0

1.0

1.0

1.0

0.5

0.5

1.0

1.0

0.6

0.7

1.0

1.0

0.5

0.6

0.3

1.0

0.5

1.0

0.3

0.4

0.5

1.0

0.5

0.7

0.5

84

...

...

...

...

...

Ces couples dactions ractions correspondent ce que ferait un tre humain


confront aux mmes situations.
Une fois que lon a entran ce rseau avec les valeurs, le robot ainsi conduit par
le rseau se dplace automatiquement vers la balle en vitant les obstacles :

Le plus gros problme pos par lutilisation des rseaux neuronaux dans ce cas
est le temps de calcul, qui est trs grand avec le nombre de connexions entre
neurones, chaque connexion demandant le calcul dune somme pondre par un
neurone. Dans notre cas, nous avons en tout 260 connexions en reliant tous les
neurones entre eux, ce qui fait une grande somme de calculs pour un
processeur embarqu sur un robot.
Les rseaux neuronaux sont encore un stade de test dans leurs
applications ; en effet, les formules qui les rgissent sont tellement compliques
que peu de chercheurs arrivent comprendre compltement et concevoir de tels
rseaux. Nanmoins, ils ont beaucoup dapplications dans plusieurs domaines qui
se situent surtout, pour lindustrie, dans la prvention de problmes ou
dvnements (dfauts dans une chane de production, ) qui pourraient survenir
sur un systme.

85

Conclusion
Nous avons vu dans ce TPE combien les algorithmes actuels sont performants
et adapts pour effectuer des oprations relativement simples, comme localiser
et aller chercher une balle. Ils sont galement trs comptents dans beaucoup
dautre domaines, comme la dtection de dfaut (par exemple dans les chanes
de fabrication industrielles), la simulation de comportement humain (trs utilise
dans les jeux vidos, par exemple dans un jeu dchecs) ou encore lassistance
pouvant tre fournie un utilisateur (systme de vise sur les avions de chasse
ou de reprage sur les avions de ligne). Lutilisation des nombreux algorithmes
existants permet de simplifier notre vie, en nous dbarrassant des tches les plus
rptitives et en nous assistant pour les plus complexes.
Beaucoup de types dalgorithmes que nous navons pas prsent ont ts
conus pour rpondre des problmes prcis, comme par exemple les
algorithmes experts, bass sur la comparaison des situations prenregistres et
par exemple utiliss pour crer une intelligence artificielle dans un jeu dchecs,
ou les algorithmes gntiques, bass sur le principe dvolution dfinit par le
biologiste Darwin, utiliss principalement pour des optimisations.
Les algorithmes neuronaux font partie des domaines de lintelligence
artificielle qui voluent actuellement le plus rapidement car beaucoup de
recherches leur sont consacres, et leurs possibilits sont normes. Leur capacit
unique lapprentissage fait deux les algorithmes pouvant le plus voluer. Qui
sait ce pour quoi on pourra les utiliser dans une dizaine dannes

Robot martien utilisant des algorithmes de pointe

86

Sources

www.GameDev.net

http://prografix.games-creators.org

www.Generation5.org
m

www.ProgramamtionWorld.co

http://galileo.cpe.ma.cx

www.c2i.fr

www.gamasutra.com

www.vieartificielle.com

http://www.dearesin.cicrp.jussieu.fr/dearesin/module7/
http://glutro.free.fr/projet/nasp.htm
http://www.jautomatise.com
http://www.grappa.univ-lille3.fr/polys/apprentissage/sortie005.html
http://apiacoa.org/software/pathfinding/
http://www.sbcomputing.de/heni/libkdegames/pathdoc/astar_search.html
http://www.policyalmanac.org/games/aStarTutorial.htm

87

You might also like