Académique Documents
Professionnel Documents
Culture Documents
BLEIBEL Franois
DORKEL Aymeric
Les algorithmes de
lintelligence
artificielle
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
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.
Suppression du bruit:
Comment gommer les imperfections de l'image
Localisation
Comment trouver la position de la balle grce au traitement de l'image
7
9
5
1
1
7
6
5
2
8
4
5
9
1
3
3
4
1
5
4
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 :
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 :
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
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 :
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
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
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
Image avec bruit, filtre avec mdiane sur 9 pixels, filtre avec mdiane sur 81
pixels.
15
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.
18
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)
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 :
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 :
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 :
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 :
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
23
Exemple :
Contrastes horizontaux
Contrastes verticaux
24
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
A
B
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
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
29
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.
31
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.
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 :
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
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
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
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
40
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 :
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
20, 19
19, 18
18, 17
17, 16
16, 15
15, 14
14, 13
13, 12
12, 11
11, 10
7
6
3
2
10, 9
9, 8
8, 7
7, 6
2
5
45
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
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).
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
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 :
52
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
54
Deuxime solution.
Devinez lordre des successeurs !
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.)
Initialisation
On ajoute le nud de
dpart Open
Fin de lalgorithme
On na pas russi
trouver le goal
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
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 :
61
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
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)
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
Fin de lalgorithme
On na pas russi
trouver le goal
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
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.
70
h( N ) = ( X X A ) 2 + (Y Y A ) 2
Voyons ce quon obtient comme recherche avec cet heuristique :
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
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* :
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
A*
BFS
DFS
Ligne droite
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
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 :
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
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 :
79
80
81
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 :
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
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
Garder la vitesse
A gauche
Obstacle proche
Obstacle proche
Garder la vitesse
A droite
Touche presque
lobstacle
Ralentir
A fond droite
Touche presque
lobstacle
Ralentir
A fond gauche
Touche presque
lobstacle
Obstacle proche
Garder la vitesse
A droite
Obstacle proche
Touche presque
lobstacle
Garder la vitesse
A gauche
Obstacle proche
Obstacle proche de
la moiti
Garder la vitesse
A fond droite
Obstacle proche de
la moiti
Obstacle proche
Ralentir
A fond gauche
Sorties associes
Rotation
A fond gauche
A gauche
Tout droit
A droite
A fond droite
Rotation
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
...
...
...
...
...
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
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