algorithme IA

88
0 TPE 2004 BLEIBEL François DORKEL Aymeric Les algorithmes de l’intelligence artificielle Quels algorithmes permettent à un robot de se déplacer de manière autonome dans son environnement ?

description

algorithme intelligence artificielle

Transcript of algorithme IA

0TPE 2004 BLEIBEL Franois DORKEL Aymeric Les algorithmes de lintelligence artificielle Quels algorithmes permettent un robot de se dplacer de manireautonome dans son environnement ? 1Introduction Lintelligenceartificielleestunecomptencespcifiqueauxrobotsouaux automatismes ( artificielle ) qui dtermine sa facult imiter un comportement humain.Cetteintelligenceessayedimiterlefonctionnementduncerveau humain dans beaucoup de domaines, par exemple la parole ou le caractre, deux aspects spcifiques aux humains, mais aussi notamment la capacit du cerveau reconnatreles objetsou personnesquilentourent.Elleadesapplicationstout dabord dans linformatique pure : une des utilisations de lintelligence artificielle sertlapprentissagedunevoixparunordinateurpourlareconnaissance vocale;lesjeuxvidoutilisentaussibeaucoupuneintelligencesimulepour donneraujoueurlimpressiondejoueravecdeshumains,donnantlacapacit auxpersonnagescontrlsartificiellementdese comporter commeun 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 combatleplusralistepossible.Onpeutaussilutiliserpourcontrlerdes chanes de production mcanises (industrie lourde ou robotique) : des machines intelligentes sontainsi capablesde deviner le moment o un dfaut ou une fausse manoeuvre va survenir bien avant des capteurs traditionnels, soit par un apprentissagepralableousoitenutilisantdesalgorithmes 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 viterlesobstaclesquiseprsenteraientlui,etpourquoipas,optimiserson 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.

Lapremireconsistedonnerunrobot(oupersonnage,dansuneapproche virtuelle) la capacit de se mouvoir intelligemment dansunenvironnement.Icilintelligencemiseen uvreaurapourbutdesemouvoirdunpointun autre en vitant les obstacles. On pourrait penser que cestune intelligenceassez simple ouendautres termes,vidente :nostrajetsdetouslesjoursnous semblentsimples;contournerdesobstacles,oualler chercherunechaisederrireunetablenerelvepas du dfi pour nous les humains. Mais dans le cadre dun robot,avecpourseule intelligence un microprocesseuretdescapteurs,cestbeaucoupplus ardu :ilse pose alors le problme dune dtermination optimale (c'est--dire la pluscourte)dutrajet,ceciennayantpasforcmentlavisionspatialeet immdiatedelenvironnementquenousavons(c'est--diresansforcment connatre la position des obstacles lavance : nous examinerons les deux cas), etmmealors,les pointsdepassage (dutrajet)doiventtrecalculsde manireprciseenminimisantladistanceparcourue,mettantenuvredes algorithmes aussi complexes que varis, dont les utilisations sont dcrites dans la partie II. 2 Lasecondeaptitudehumaine que nous allons tudier consiste reconnatre les objets, c'est--dire leurs formes et/ou leurs couleurs. Les yeux qui nouspermettent de reconnatreuneballe quand nous en voyons une(ennousbasantsurnotre exprience etles informationsde nossens) ontleursquivalents robotiques.Ces capteurs CCD ou autres camras numriques embarqus sur notre robot couples unsystmedecommande(lecerveaulectroniquedurobot)lui permettentdereconnatrelescaractristiques(laformeetla couleur dune balle rouge, par exemple) des objets. Le robot peut alorsidentifiercertainsobjetsetprendre desdcisionsen temps rel bases sur sa reconnaissance de lenvironnement. Cesdeuxaptitudessontlesplusutilisesdanslesapplicationsmodernesde lintelligenceartificielle :lapremire(dterminationdutrajet)sertdansles logicielsdecartesroutiresoulesordinateursdebord,afindeconseiller lutilisateursurlameilleurerouteprendre.Lasecondepeutservirdansla 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. Nousallonsdonctudierlesalgorithmesetautresmthodesncessairespour ralisernotreobjectif.Lerobotdoitreconnatrelaballeetendterminersa position, pour pouvoir ensuite se dplacer jusqu elle. Ce TPE est donc divis en troisparties.Lapremire,Reconnaissancedimagestraitedesalgorithmes, capteurs, et tout ce qui est ncessaire pour que le robot puisse reconnatre notre balleetendterminersaposition.Lasecondepartie,intituleDtermination Intelligente de Trajet, parle des algorithmes utiliss pour que le robot trouve (et optimise)son cheminensedplaantjusqu la balle. Enfin, la dernire partie, Lesrseauxneuronaux,expliquelesmcanismesdefonctionnementdunedes plus rcentes et plus compliques dcouvertes de lintelligence artificielle. 3Sommaire I.Reconnaissanceetlocalisationdobjetspartirdimages 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 4Reconnaissance et localisation dobjets partir dimages numrises Lessystmesrobotissutilisantdesinformationsvisuellesprovenantde capteurs optiques, du type de ceux utiliss dans des camras ou appareils photo, sontnombreux(ex :systmesdecontrleindustriel,robotsdexploration spatiale,).Maiscommentsont-ilscapablesdinterprtercequils voient pourinteragiravecleurenvironnement ?Apartirdunexemple,nousallons essayerdillustrerdiffrentesmthodespermettantunrobotdereprerun objet pour aller le ramasser, nous utiliserons pour cela une balle rouge. Mi se en si tuati on Nousdisposonsduneimage,provenantducapteurdunrobot(voirci-dessous). 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 5Processus permettant d abouti r une soluti on LocalisationComment trouver la position de la balle grce au traitement de l'imageReconnaissance des formesComment trouver la balle parmi tous les objetsDistinction des contoursComment dlimiter les diffrents objets visibles sur l'imageSlection des couleursComment simplifier l'image pour acclrer les calculsSuppression du bruit:Comment gommer les imperfections de l'imageCodage et stockage de l'image:Comment coder et stocker l'image acquise6A. Codage et stockage de l image 1) Acqui si ti on et codage Dans la majorit des cas, le systme rceptionne les donnes provenant dun capteurCCD(ChargeCoupledDeviceouDispositifTransfertdeChargesen franais).Cetypedecellulephoto-sensibleestutilisdanslaplupartdes 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 decouleursontcodespuisstockesdansuneentitdetailledfinie.Dansla 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. Onstockelintensitdechacunedescomposantesprimaires(rouge,vertet bleu) sur un octet, soit 256 niveau de luminosit diffrents. Cela permet dobtenir 2563, soit 16 777 216 nuances de couleurs distinctes. 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 : l a matri ce Enmathmatique,unematriceestuntableaudevaleurs.Nousallonsdonc considrerquuneimagepeuttredfiniepartroismatrices,unepourchaque couleurprimaire(rouge, vert,bleu).Les valeursinitiales 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) : 57743 39654 15591 11215 11834 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. Stockage dune couleur sur 24 bits 73) Modi fi cati ons de base Au fur et mesure de lavancement des processus de recherche de la position delaballe,lesalgorithmesutilissvontmodifierlesvaleursdestroismatrices initiales.Aprscertainestapes,leurscontenusneserontplusdirectement visualisables,carilsnecorrespondrontplusdesniveauxdecouleurcompris 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. 8B. Elimination du bruit Lescamrascontiennentdescircuitslectroniquesassocisdescapteurs optiques.Lebruitquiestinduitpartoutcomposantlectroniquegnredes pixels dont la couleur ne correspond pas la ralit, qui forment un bruit. Lesalgorithmesdereconnaissancedeformesragissenttrsmalla prsencedebruit,carilsleconsidrentcommedepetitsobjets.Ilfautdonc supprimercebruit,oulattnuer.Pourcela,nousutiliseronsdesfiltres,qui mettent en uvre des principes mathmatiques qui peuvent tre par exemple la convolution. Afindepouvoirjugerdelefficacitdes filtres utiliss, nous allons utiliser un extraitdelaphotopriseparlerobot,auquelnousallonsajouterunbruit artificiel. Nous pourrons ensuite le traiter avec les diffrents filtres prsents. Pourbruiterlimage,nousattribuonsdescouleursalatoires10000pixels alatoirement choisis. Voici le rsultat : Image de base Image alatoirement bruite 91) Pri nci pe de convol uti on Laconvolutionestuneoprationmathmatiquequelonappliqueaux 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). SoitunematricefilleN,unematricemreP,etunematricenoyauK,de dimensions latrales impaires imax et jmax, dont la valeur de coordonne (0,0) est le centre. Voici la formule permettant deffectuer une convolution :1 12 21 12 2( , ) * ( , )Max MaxxMax Maxi jyi ji jN Ki j Px j y i = == + + Exemple de convolution : Sur la gauche, en arrire plan, un dessin reprsentant la matrice mre. En rouge, lapartiedontlesvaleurschiffressontdonnesdansletableaunumriquede 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 Poureffectueruneconvolution,onutilise lespixelsvoisinsdechaquepixel. 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). 10Il 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. (pouruneimagedemeilleurequalit,800x600pixels,avecuneplusgrande matrice noyau, de 11x11 par exemple, il faudrait 112 796 200 oprations !) 112) Fi l tres li nai res : l i mi nati on base sur l a convol uti on Lesfiltreslinairessontdesfiltresrelativementbasiques,utilisant uniquementleprincipedeconvolutionprcdemmentdcrit.Nousallonsen tudier deux, le filtre dit moyenneur et celui dit gaussien . a) Fi l tre moyenneur Cetalgorithmecalcule,pourchaquepixel,lacouleurmoyennedunezone lentourant. La convolution utilise donc une matrice noyau dont la somme vaut 1, pour nepas modifierlimage. Ildonneensuitela couleurrsultantdu calcul au pixel tant trait. Gnralement,onessayedappliquerunfiltragequialemmeeffetdans touteslesdirections,cequelonnommefiltrageisotopique.Pourlesmatrices noyaux de grande taille, la zone utilise sera circulaire. Exemples de matrices : Matrice 3x3 : 1 1 19 9 91 1 19 9 91 1 19 9 9 Ilsagiticidunematricedebase,ellepermetuncalculrapideetunfiltrage correct. Matrice 7x7 :0001/29000 01/291/291/291/291/290 01/291/291/291/291/290 1/291/291/291/291/291/291/29 01/291/291/291/291/290 01/291/291/291/2900 0001/29000 Cette matrice noyau de plus grande taille ncessite un temps de calcul plus long etdoitdeprfrence treutiliseavec desimages de hautes rsolution, o les imperfectionspourraienttresdeplusgrandestaille(ennombredepixels pollus). Dunpointdevupratique,lalgorithmemoyenneurnapasbesoindune 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 ) 12Exemple pratiques : Image avec bruit, filtre avec noyau 9 pixels, filtre avec noyau 225 pixels. Onnotequepluslamatricenoyauestgrande,pluslebruitestattnu.En contrepartie, plus elle est grande, plus limage devient floue. Avec limage provenant de notre robot :

On constate facilement que le rsultat est de trs mauvaise qualit. Le bruit a t peine attnu. Cetalgorithmeauntrsgranddfaut :ilrendlesimagesfloues.Eneffet, dansles zones de changementdecouleur, on retrouveuneffet de fondu, dont limportanceestproportionnellelatailledelamatrice noyau .Cefiltre appliquegalementceteffetauxpixelsconsidrscommenttantdubruit,ce qui lattnue mais ne le supprime pas totalement. Le filtre moyenneur est extrmement simple mettre en place et ne demande pastropderessourceslorsdesonfonctionnement.Ilestrarementutilis, lorsque un trs faible bruit doit tre attnu. Image alatoirement bruite 10 000 pixels de couleur modifie Image nettoye avec un filtre moyenneur, matrice noyau de ct 3 13b) Fi ltre gaussi en Le filtre gaussien, qui doit son nom au clbre mathmaticien ayant dfinit la courbecaractristiquereprsenteci-dessous,esttrsprochedufiltre moyenneur, cela prs quil ne prend pas autant en compte les pixels loignes dupixeltraiterqueceuxquiluisontdirectementvoisins.Cestunesortede moyennepondre, dont lespoids sont dfinisparla courbe de Gauss. Plus un pixelestprocheducentredelamatricenoyau,plussacouleurestpriseen compte. Exemple de courbe de Gauss : Si on nomme K la matrice noyau, le calcul des poids se fait selon la formule suivante : 2 22 21( , ) exp2 2x yKxy += Laconstante permetdefacilementrglerledegrdefiltrage,commele montre les diffrentes reprsentations tridimensionnelles des poids de la matrice noyau suivantes : Courbe de Gauss = 2 = 3 14Cefiltrepermetunepriseencompteprogressivedelacouleurdespixels 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 supprimepastotalementlespixelsparasites,maissecontentedattnuerle 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 reconnaissancedecontours. Seulsdes filtres non-linaires pourront rsoudre ce problme. 153) Fi l tres non-l inai res Lesfiltresnonlinairesutilisenttousdestestsconditionnels,ilssontpar exemplesparfoisbasssurdesseuillagesoudesclassements,cequilesrend non linaires. a) Fi l tre mdi an 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 ensembledemmetaille.Cestdoncunevaleurappartenantlasrie, contrairement la moyenne, qui est une valeur calcule. Cela vite les effets de flou. Exemple dapplication : Zone de limage, avec sur fond bleu, le pixel traiter. Seuls les pixels sur fond color sont pris en compte pour la mdiane. 710127999 12121279910 99101071012 10991210912 121212107710 107101212107 10791210912 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. 16Rsultat avec un extrait de limage de notre robot :

Le filtrage mdian a permis de retrouver une image nette, dbarrasse de la majorit du bruit anciennement prsent, sans effet de flou. Oncomprendtrsbienpourquoicefiltrenajoutepasdeffetdeflou limage,commelemontrelacomparaisonci-dessous,quireprsenteen changement de couleurtrait avec un filtre moyenneur et unfiltre mdian. En abscisse, une dimension (par exemple une ligne dune image) et en ordonn, les couleurs. Lamdianepermetdedonnerdeslimitesnettesauxformes,etsupprime totalementlebruit.Malheureusement,letempsdecalculncessaireestplus long,unemoyenneestplusrapidecalculerquunemdiane.Lefiltremdian restepluttsimpleimplanter,etauntrsbonrapporttempsdecalcul ncessaire / nettet du rsultat. Image alatoirement bruite 10 000 pixels de couleur modifie Image nettoye avec un filtre mdian, sur 9 pixels 17 b) Fi ltre seui l l 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 bruitquilfautliminerquedansleszonesdetransitions(contours)quilsont tendance rendre flou, ou dformer. Le principe de moyenne seuille est une fonctionquelon peut coupler avec un filtre linaire, par exemple avec un filtre moyenneur, gaussien ou mdian, afin dviter ce problme. Principe : Lalgorithmecalculelavariancesurunezoneautourdechaquepixel.La varianceestunegrandeurmathmatiquepermettantdestimerladispersion dune srie de valeurs. Sielleestfaible(infrieureunseuil),noussommesdansunezone 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, nousnoustrouvonsdansunezonedetransition(parexempleuncontour dlimitantdeuxformesdistinctes)etnousnappliquonspaslefiltrage, pour ne pas dtriorer la nettet du contour. Danslecasonousutilisonsunfiltremoyenneseuille,lefiltragepar moyennenerendpluslesimagesfloues,maisattnuetoutdemmeles imperfections de limage. c) Fi l tre pondr Le filtre pondr est une volution du filtre seuill. Lorsque ce dernier agissait defaonbinaire,etdfinissaitsilfautousilnefautpasappliquerdefiltrage pour un pixel en fonction de la variance de la zone lentourant, le filtre pondr appliquelefiltrageinversementproportionnellementcettevariance.Plusla varianceestfaible(zoneplutthomogne)pluslefiltrageestefficace.Plusla variance est lev (zone de contour) plus le filtrage est discret. Le filtre pondr permet un filtrage en fonction de limage, adapt chaque situation.Ilnerendpaslescontoursflous,maisgommelesimperfectionsdes zones homognes. 18d) Fi l tre de Nagao LefiltredeNagao,aussiappelfiltreslectiondevoisinage,estlultime 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. Lorsquelonapplique le filtre de Nagao un pixel, on calcule la variance de chaquedomaineDidelazonecarrelentourant.Celuipourlequelelleserala plusfaibleneseratraversparaucuncontour.Nousallonsdoncappliquerun 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 laplusfaibleestledomaineD1etquelefiltresecondaireestunfiltre moyenneur,nousappliquerontlacouleurmoyennedetouslespixelsenrouge sur le schma du domaine D1, reprsent ci-dessus. 19Concl usi on sur l e fi l trage anti-brui t Le choix dun filtre anti-bruit va dpendre de plusieurs critres : La puissance de calcul disponible : si les oprations doivent tres excutes parunordinateurembarqudansun robotdepetitetaille,lematriel ne disposepasforcmentdunegrandevitessedecalculoudebeaucoupde mmoire. La vitesse de calcul requise : Le choix du filtre ne sera pas le mme si les rsultatsdoiventtresobtenus entempsrel ,parexemplepourun systmencessitantundplacementrapide,ouunefrquencemoins leve, par exemple pour un systme de surveillance. Letypedebruit :desfiltresrelativementsimples(commelemdian appliqusuruncarrde3pixelsdect)serontsuffisantspournous dbarrassertotalementdunbruitimpulsionnel(pixelsdecouleur incohrenteparrapportaurestedelimage,pouvantprovenir dinterfrences dans llectronique dacquisition) mais ne greront peut-tre pascorrectementunbruitplusimportant(commedepetitestachessur lobjectif du capteur, dune surface bien plus grande quun pixel) Lersultatrequis :parfois,uneattnuationdubruitpeutsuffire,quand dansdautrescas,lesmoindresinterfrencespourraitsavrertrs gnantes. Cela dpend des traitements appliqus limage aprs le filtrage anti-bruit. Ci-contre,unecomparaisondufiltre deloyenneur(ligne),dufiltremdian (toiles)etdufiltredeNagao(cercles) sur une zone de transition. En abscisses, unepositionsurlimage,enordonne, une couleur (par exemple en niveaux de gris). On vois que le filtre de Nagao rend lescontourstrsnettes(trsforte courbe)quandles deux autres sont plus progressifs.Voici un comparatif des filtres prsents les plus importants : FiltrePoints fortsPoints Faibles MoyenneurCalculs trs rapides Fonctionnement trs simple Attnue le bruit sans le supprimer Ajoute un effet de flou MedianCalculs assez rapides Aucun effet de flou Peut lgrement dformer les contours SeuillFiltrage non-systmatiqueTemps de calcul lev NagaoQualit de filtrage leveTemps de calcul lev (le plus long) Lesfiltresanti-bruit sont trs varis, et adapts de nombreuses situations. Lefiltreleplussimple,lemoyenneur,seradeprfrenceimplantdansles systmesautonomesnencessitantpasunegrandeprcisionetnedisposant pas dune grande capacit de claculs, alors que le filtre le plus pouss, le filtre de Nagao, ne serautilis que dansdescas bien particuliers, comme un traitement de photo par exemple. 20C. Slection Dansnotrecas,noussavonsquelobjetquenousrecherchonsestrouge.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 primairesdechaquecouleur(quantitderouge,devert,debleu,variantpour chacuneentre0et255),etdautrepart,laproportiondechaquecouleur primaire dans la couleur finale. Voici limage que nous allons binriser : Etantdonnque 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 Cetteslectionpermettraunenetteacclrationdescalculsdedtectionde contours(aulieudetravaillersurtroismatricesdontlesvaleurssont chelonnes entre 0 et 255, nous obtiendront une matrice binaire). Image de base aprs filtrage antibruit 21Premire tentative Conditionpourquunpixelsoitslectionn :sacomposanterougedoit reprsenteraumoins40%delasommedesvaleursdes3couleursprimaires. Soit R la composante Rouge, B la Bleu, et V la verte : 0.4RR V B+ + avec [ [[ [[ [, 0, 255, 0, 255, 0, 255R RV VB B Rsultat : On vois que le contour de la balle a t correctementdlimit(tantdonnque 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 reprsenteraumoins50%delasommedesvaleursdes3couleursprimaires (soit 10% de plus). 0.5RR V B+ + avec [ [[ [[ [, 0, 255, 0, 255, 0, 255R RV VB B Rsultat : Lerefletdelaballenestplus slectionn,etleslignesbrunesnonplus. Par contre, il reste toujours une partie de la ballejaune,etlesbordsdelaballerouge onttscorches,cequirisquede compliquerlareconnaissancedeformes.22Troisime tentative Conditionspourquunpixelsoislectionn :sacomposanterougedoit reprsenter au moins 40% de la somme des valeurs des 3 couleurs primaires et lescomposantesvertesetbleuesnedoiventpasavoirdevaleurssuprieurs 110 (sur 255). 0.5110110RR V BVB+ +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. Onpeututiliserlasparationdespartiesquand leslongueurs renvoyes parla 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 : 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. 38 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 : Ici,lesdeuxobstaclesrajoutsnontpastvitscarladernireligneest passe juste entre les deux : le robot se retrouverait bloqu sil suivait le chemin dcid ! Pourremdiercettesituation,onpeutparexempleslectionnertoutesles casessituesunecertainedistance(enfait,lerayonducerclecirconscritau robot) de la ligne en parcourant celle-ci, au lieu de ne slectionner que les cases sous la ligne. Exemple de chemin compltement dtermin.Situation problmatique !39Unautreproblmesesitueauniveaudesobstaclesconcaves :imaginonsla situation suivante : Quand le robot arrive en a, il choisit entre la case 1 et la case 2. Supposons que lalgorithmeluifassechoisirlacase1;danscecas,lexamendescases adjacentesdsigneralacaseacommesuccesseur,quidsigneralacase1et 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.SoientAetBdeuxpoints.LepointAestdfinicommelepointde dpart et B le point darrive. 2.On trace une ligne entre le point A et le point B. 3.SiilyaunobstacleentreAetB,alorsonmarquetouteslescases traversesparlalignejusqulobstacle,onchoisitunsuccesseurC pourle pointA(successeurveutdireunecaseadjacente),puisonrecommence ltape 2 en dfinissant A = C. 4.Siilnyapasdobstacle,alorsonmarquelescasestraversesparla ligne, et lalgorithme se termine. Probl mes connus Dans le cas dun obstacle concave, si on nutilise pas une mthode de mise enmmoiredescasesvisites,alorslalgorithmepeutrester bloqu entre deux cases. Une ligne qui passe exactement entre deux cases peut ne pas dsigner ces deuxcasescommepointsdepassage,rsultantenunblocagedurobot, tout dpend de la manire dont on dsigne les cases de passage partir de la ligne. Avantages Lamiseenplacedecetalgorithmeesttrssimple,etilncessitetrspeude calculs. 40Siilnyaaucunoupeudobstacles(etquilssontdefaibletaille),alorson 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 descases sous cetteligne,ainsiqueletestdunobstacleprsent :il prsente une faible complexit temporelle. Enfin,ilnutilisequasimentpasdemmoirepourstockersesdonnesde fonctionnement : il a une faible complexit spatiale. Inconvni ents Parcontre,cetalgorithmenetrouvepasforcmentuncheminoptimal,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 mmenepastrouverdechemindutout,etonnepeutluiappliqueraucune mthodepourprendreencomptelepoidsdescases(quisetraduitparune lvation ou un diffrent type de terrain). Enrsum,cetalgorithmeestimpensableutiliserpourunrobotquise respecte. Ilpeut par contre treutilis 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. 412.Depth First Search (DFS) Lalgorithme DFS (Depth First Search, profondeur dabord ), est lorigine un algorithmedetraversedegraphes.Sonoriginalitestdeparcourirtousles enfants des nuds dun graphe avant ses voisins (et dtre trs simple). En quoi unalgorithmedeparcoursdegraphespourraitiltreutiledansnotre situation ? Anal ogi e graphe / notre terrai n Le DFS travaillant sur des graphes, il a fallu ladapter pour pouvoir travailler avec notrematrice.Pourcela,nousavonsdfiniuneanalogieentrelescomposants dun graphe et les composants de notre matrice. 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) Un problme typique des graphes : on a un point de dpart (bleu), un point darrive (vert), et on cherche un chemin pour les joindre. 42nont 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. Les 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 : 853 4372 641 Lordre dans lequel les nuds sont placs a une importance cruciale pour le DFS etmoindrepourlesautresalgorithmes.Globalement,onpeutretenirquesile premier nud retourn est situ dans la direction du nud darrive (souvenez vousquenudquivaut 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 variabledentreunautrenudB,comparelenudA(X,Y)auquelelle 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 } Pri nci pe de l al gori thme Soit la situation suivante : 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. 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). 44On 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 : russiet 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 45nest 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 : Infl uence de l a foncti on GetSuccessors Vu que la fonction dfs examine le premier successeur dabord, lordre dans lequel cessuccesseursapparaissentestdune importanceprimordiale :ainsi,danscet exemple,lenudenbasdroitedunudcourantestretournenpremier, rsultantenuncheminassezcourt.Maisimaginonsquelesnudssoient retourns dans cet ordre : 20, 20 20, 19 19, 18 18, 17 17, 16 16, 15 15, 14 14, 13 13, 12 12, 11 11, 10 10, 9 9, 8 8, 7 7, 6 dernier lment de Chemin Ordre des nuds retourns par GetSuccessor() : 853 72 641 premier lment de chemin 641 72 853 46Dans ce cas, lutilisation de DFS donnerait le chemin suivant : 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 nudsdelacartejusqutrouverlenuddarrive, mme sicelui-ci est situ juste ct du nud de dpart ! Uneamliorationdecetalgorithmeseraitdemettrelepremiernudretourn parGetSuccessors()dansladirectionapproximativedunuddarrive,cequi aboutiraituneconvergenceplusrapideverslegoal,etviteraitcertains cheminsqui,pourtanttriviaux surleterrain seraientbeaucoupplus compliqus une fois retourns parlalgorithme DFS. Uni t de cal culCetalgorithmeutiliselarcursivit. Leproblmedune fonctionrcursive, cest quellepeutsexcuterindfiniment(oupendantunetrslonguepriodede temps)sansquilsoitpossibledelinterrompre,empchantainsilerobotde pouvoirfairedautreactions(commeparexempleinterprteretrcuprerles informationsdescapteurs)pendantquilrflchisaucheminprendre.Cest pourcelaquonpeutintroduirelanotiondunitdecalculpourlesalgorithmes rcursifs :lebutestde casser larcurrence ,c'est--direpermettrela fonction dtre appele plusieurs fois, autant de fois quil faudra pour rsoudre le problmepos, etfaisant uncertain nombre (rduitaumaximum)decalculs chaqueappel,permettantlafonctiondtreappeleplusieursfois, indpendamment,permettantaurobotdeffectuerdautrescalculsavantet aprs.Deplus,cettemaniredeprocderadautresavantages,facilitant notammentledboguage(c'est--direlarecherchederreursdansle 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. Un chemin incohrent47Rsum Pour trouverunchemin dansun graphe ou une matrice laide de lalgorithme DFS : -Il faut colorier les nuds traverss -Ontraversechaquesuccesseurdechaquenudenle coloriantjusquauderniersuccesseurnoncoloridu derniernudnoncolori,puisonremonte progressivementgrcelarcursivit,jusquaunudde dpartsionnetrouvepaslenuddarrive.Sionle trouve,onremontelesnudsenlesajoutantuneliste qui permettra de retrouver le chemin parcouru. Probl mes 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 Laconvergencedecetalgorithme peut tre trs rapide, si les successeurs sont donnsdanslebonordre(enfaitlaconvergencelaplusrapidedetousles algorithmes prsents, comme nous le verrons plus tard). Inconvni ents Cetalgorithmeneretournepastoujoursuncheminoptimal :eneffet,siles successeurssontdonnsdanslemauvaisordre(oupluttdansunmauvais ordre),alorslecheminobtenuserapraticable(ilrespectelaconditionde parcours, du nud de dpart vers le nud darrive), mais nest pas forcment lemeilleur(mmesouventaberrantpourdescastriviaux).Ilfaudraiteneffet proposerunsystmedemodificationautomatiquedelordredessuccesseurs pourobtenirunalgorithmevraimentefficace.Deplus,cetalgorithmenetient 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 successeursne sont pas retourns dans le bon ordre. Enrsum,cet algorithmeprsente untrop grand nombre de calculspourtre retenudansuncontexterobotique,carildemandetropdepuissancedecalcul pour tre optimis. 483.Breadth First Search (BFS) LalgorithmeBreadthFirstSearch,communmentappelBFS,estaussiun algorithme de traverse de graphes, comme le DFS. Loriginalit de cet algorithme estquiltraversedabordlesvoisinsdunnudavantsesenfants.Deplus,le BFSutilisedeslistespourgarderlatracedesnudsquildoittraverser(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. Les l i stes 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 12, 11 11, 10 10, 9 9, 8 8, 7 7, 6 Leslistessontunproblmepartentirepourlesmathmaticiens,les algoriciens quisesontpenchssurdiffrentsproblmes,notamment doptimisationpour le trideslistes.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, parexemple),letripeutprendrebeaucoupdetempsselonlamthode(un algorithme part entire !) utilise. Ces algorithmes ne font pas lobjet de ce TPE, nanmoins, lalgorithme que nous utiliseronspourclassernoslistes(partirdu4.-dijkstra)seralalgorithme quick sort . 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. 49Foncti onnement Nous avons donc le problme classique : 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.SoitunequeueQ.(pourlinstant,considrezquunequeueestuneliste 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.Sionretiraitlenudnumro1,lenudnumro2silexiste 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 Le Problme Classique (sans obstacles). 508.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 :51 (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, Initialisation On ajoute le nud de dpart Q Fin de lalgorithme On na pas russi trouver le goal 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 On incrmente i. (on passe au successeur suivant) Q est vide Q nest pas vide On examine Q On a dj parcouru tous les successeurs de N Fin de lalgorithme On a trouv le goal Ni est le nud darrive On colorie Ni On ajoute Ni la queue tape 2 tape 3 tape 8 tape 5 (ou 6) tape 9 tape 6 52car il rutilise les mmes structures de donnes et les mmes fonctions que les algorithmes de parcours de graphe). Cetalgorithmepeutsemblerrcursif,causedelabouclederetourallantde 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. 53 Et le chemin suivre ? Onvoitquelalgorithmese rpand surdescerclesconcentriques(quiont pourcentrelepointdedpart,plusexactement)jusqucequelenud darrivesetrouvesurundecescercles.Laquestionest :unefoisquona trouv le nud darrive, comment remonter au nud de dpart ? La technique estsimple :ilfautajouterunepropritquonappelleParentchaquenud. QuandonexaminelenudNi,ondfinitleparentdeNicommetantN ;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 nudadjacentNileplusprochedupointdedpart(causedescercles 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 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 ci-dessous comment obtenir ce chemin). 54un nud a plusieurs successeurs) pour avoir fini la dtermination intelligente de trajet avec lalgorithme breadth first search. Un cas intressant Examinonsmaintenantcetteimage :unchemincompltementrsolugrce lalgorithmeBFS.Cettefoisci,lacartecomportedesobstacles,cequifait apparatre quelques faits intressants sur la recherche : Toutdabord,lepoint2.Onvoit quau point 2, les cases sont restes vierges,c'est--direqueles successeursnontpast parcourus :celaestduaufaitque lalgorithmesarrteunefoisquil a trouvlenuddarrive.Surles partiesavecbeaucoupdobstacles, lessuccesseurssontplusrares,ce quipermet lalgorithmedavancer plusvitesurcesparties(carmoins desuccesseursexaminer)alors quelespartiesavecunterrain viergedobstaclesseront scannes intgralementpar lalgorithme. Aupoint1,onvoituntrajetqui semble bizarre et qui ne semble pas tre le plus court : cela est du la fonction GetSuccessorsquonavuau2).Cetalgorithmenepeutconsidrerlescases pondres ;ilestdoncimpossibledeluifaire comprendre quallersurune casesitueendiagonaledunnudparentestpluslongquallersurunecase situehorizontalementouverticalementdesonfils.Cecheminestdonc 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 55 Onvoitquelecheminachang,maisrestequivalentennombredenuds traverss. Onsaitquelalgorithmeexaminechaquenudenposition1danslaqueue 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 ?Pourquoinepasenleverunnudsituaumilieu,oulafinde cette liste ? Pourlemontrer,voicilecheminretournparunevarianteduBFSqui examinerait les derniers nuds de la queue : Deuxime solution. Devinez lordre des successeurs ! Un chemin incohrent. Je parie que ce nest pas lalgorithme utilis par Mars Pathfinder ! 56 On voit que le chemin nest pas optimal (digne des pires cauchemars de DFS !). Ce phnomneestdaufait quonretire le dernierlment dansla liste. Mais quereprsentecedernierlment ?cestenfaitllmentajoutleplustard danslaliste,donclenudleplusloigndupointdedpart(encomptant lloignementennuds) :chaquesuccesseurajoutantsonnud,cest seulementlenudduderniersuccesseurquiauraajoutdesnudsquisera examin et qui ajoutera ses nuds, et ainsi de suite. Rsultat : le chemin obtenu estceluiquiestloignduplusdenudspossibleducheminoptimal.Peu adapt quand on pense que le but de cet algorithme est de fournir le chemin le pluscourt !Enrsum,unequeueestindispensableaufonctionnementdecet algorithme. Uni t de cal culCet 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 exempledalgorithmercursif).Onpeutdireque,silexistaitunefonctionbfs (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 -Silundeuxestlegoal,onatrouvlechemin.Sinon,on continue jusqu ce quil ny ait plus de nuds (condition dchec). Probl mes connus Cetalgorithmenesouffrepasdesmmesproblmesquelesprcdents 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. Inconvni ents Letraageduchemin(c'est--direladterminationducheminprispar lalgorithme une fois quil a trouv le nud darrive) oblige une augmentation demmoireproportionnelleaunombredenudstraverss(laproprit parent ajoute chaque nud) et oblige des calculs (peu de calculs, mais prsents quand mme) pour donner un chemin utilisable par le robot. Cetalgorithmecherchebeaucoupdenudspourarriveraunudfinal(tout dpenddelloignementaunudfinal,maislescerclesconcentriquesfont 57apparatre de plus en plus de nuds aux fur et mesure que lon se rapproche dunuddarrive),ceuxciprenantunegrandeplaceenmmoire(dansla queue), ce qui peut tre handicapant. Deplus,lefaitquilnetiennepascomptedespoidsentranequelques 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 srundescheminslespluscourts,maisilrestequelquesinconvnients ennuyeuxquedautresalgorithmespeuventcorriger.Entreautres,lutilisation mmoire est vraiment un facteur handicapant, alors que les calculs demands au microprocesseurdurobotselimitentladterminationdesnudsfils (GetSuccessors). Cest donc un algorithme qui pourrait tre intgr dans un vrai robot. Sil ny avait pas dautres algorithmes plus performants 584.Dijkstra Lalgorithmededijkstranestpas,contrairementauBFSetauDFS,un algorithmedeparcoursdegraphes,maislatechniquequilexpliquepeuttre appliqueauprincipedescasesetdesnoeuds.Ilesttrssimilairedansson comportementauBFS,danslesensoquand il va explorerlacarte(traverser lesnuds),ilvaconsidrerdabordles voisinsdun 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 delalgorithmeA*.CestaussilpartirdelalgorithmedeDijkstra 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 sesertdunelistedenuds,nommecommunmentClosedpourviterde repassersurdesnudsdjvisits(lutilisationeffectivedunelistepourcet usage sera explicite plus tard). Il utilise aussi la liste Open, qui est lquivalent de la queue Q du BFS quelques amliorationsprs(jerappellequelebutdecettelistetaitdestockerles positions des nuds visiter). Lintervention des poids On associe chaque case (nud) un poids qui correspond une ralit physique (rappel :cescaractristiquesphysiquespeuventtreletypedeterrain,une lvation etc.) Examinons un exemple de dbut de recherche avec cet algorithme, et regardons plus particulirement le nud entour en rouge. Le chemin provisoire dtermin parlalgorithmequandilarrivecenudestindiqu en noir.On associece nud une valeur g, telle que g soit la somme des poids des cases parcourues pourarrivercenud .Ici,les casesparcouruespour arrivercenud sontlescasescoloriesennoir,lacasededpart(quiestcomptedansle calcul,bienquonpuisseloublier)etnotrenud(entourderouge).Chaque caseaunpoidsde1surcettecarte.Donclavaleurgdenotrenudsera 1+1+1+1=4,carpourarrivercenudilafautdabordpassersurquatre cases pondres de poids respectifs 1. Une carte quelconque. Tous les poids de toutes les cases sont mis 1 par dfaut . 59 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 associerunevaleurgunique(carchaque nud nestexamin quunefois dans les algorithmes qui lutilisent). On peut donc noter g(N) = 9 pour ce nud. Foncti onnement LefonctionnementdecetalgorithmeesttrssimilaireauBFS,ausensoon 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.Ontrie la listeOpen parordrecroissantdeg. Ainsi,lenudavec le gle 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 pasdjdans Closed(cettetechniqueest quivalent au coloriage du DFS etBFS). 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. Onvoitqueleprincipedefonctionnementesttrssemblableceluide 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 robotsont placs en premire positionetsont donc examins en premier. Mais Dijkstra examinequand mme touslesnuds, cequirsulteenlacration de cercles concentriques comme dans BFS. Ci-dessous gt le diagramme rgissant les actions de cet algorithme : 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. 60Initialisation On ajoute le nud de dpart Open Fin de lalgorithme On na pas russi trouver le goal 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 Open est vide Open nest pas vide On trie Open par ordre de g (croissant) On a dj parcouru tous les successeurs de N Fin de lalgorithme On a trouv le goal Ce successeur est le nud darrive On ajoute Ni Open 61Voyons pour commencer un exemple de recherche dun chemin avec lalgorithme BFS : 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 : OnvoitbienquavecDijkstra,lalgorithmevitenaturellementlescases pondres et trouve le plus court chemin vers son but. On peut aussi reprendre un des problmes du BFS, qui tait celui-ci : 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. Un chemin trouv grce lalgorithme de Dijkstra. 62 Et voyons ce que nous aurait donn lalgorithme de Dijkstra dans ce cas : On voit que Dijkstra nous donne le plus court chemin ; en effet, le fait de donner unpoidssuprieur1auxcasessituesendiagonalelimitelesdplacements diagonauxdelalgorithmequileurprfrera,sipossible,undplacement horizontalouvertical.Cestdonccettepetiteastucequi,grcelapriseen compte des poids, permet doptimiser le chemin. CetalgorithmetanttrssemblableBFSdanssapropagation sur la carte, je me contenterait de mettre un exemple montrant lalgorithme en action : Une des recherches faites avec lalgorithme BFS. Notez les problmes du chemin trouv. La mme recherche, vue par Dijkstra. 63On peut remarquer accessoirement que les cercles concentriques qui sont forms ressemblent plusdescerclesquaveclalgorithmeBFS(dufaitdesa prfrence pour les cases horizontales et verticales plutt que diagonales). Lalgorithmegardedoncenmmoirelespoidsdescasesvisites,quisont places dans la queue. La queue sert examiner en priorit les nuds ayant les poidslesplusfaibles.Leprincipeetlescheminsdecetalgorithmesonttrs similaires lalgorithme BFS. LalgorithmedeDijkstraestfacilemettresouslaforme unitdecalcul grcelutilisationdelaliste(cf.BFS),quipermetdoncdediviserletemps demand pour la dtermination du trajet. Rsum Pour trouver un chemin avec lalgorithme de Dijkstra : -Onajoutelenuddedpartunequeue Open(quicontient 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. -Silundeuxestlegoal,onatrouvlechemin.Sinon,on continue jusqu ce quil ny ait plus de nuds (chec). Sur cette image, on voit les cercles concentriques forms par Dijkstra autour du nud de dpart dans sa qute pour le nud darrive. 64Probl mes connus Cetalgorithme trouvetoujoursson cheminsil existe :onne note doncpasde problmespourcetalgorithme,bienquonaitlesmmesdifficults remonter dansleprogrammepartirdunuddarrivepourdterminer exactement le chemin (cf. les Problmes connus du BFS). Avantages Grcesondploiementencerclesconcentriques,Dijkstratrouvetoujoursle chemin le plus court. A la diffrence du BFS nanmoins, lutilisation du poids des casespermetdetenir comptedes 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. Inconvni ents 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 depresquetoutleterrainavantdetrouverlenuddarrive. 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. Cetalgorithmeestbeaucoupplusgourmandauniveaudescalculsque lalgorithmeBFS,surtoutcausedutrideslistesintensifchaquenud.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. 655.A* - A star Cet algorithme est laboutissement des recherches sur lalgorithme de Dijkstra. Il rutiliselestechniquesduBFSetdeDijkstrapourlescombineretenfaire 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. Ilnapastconuspcifiquementpourtrecompatibleaveclesgraphes. Nanmoins,etpournepassurchargerceTPEdedtails,nousconsidrerons uniquementlavariantedecetalgorithmequiluipermetdetravailleravecdes nuds. La foncti on h : une distance Onassociechaquenudladistancedecenudlacase darrive,comme indiqu sur cette image : OnvoitsurcetteimageladistancehdunudNaunuddarrive.Cette distanceestuniquepourchaquenud/casedelacarte,onditdoncquon 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). La foncti on h : un heuri stique Quest-cequunheuristique ?Ladfinitionalgorithmedunheuristiqueestun moyen de guider un algorithme plus grand, sans pour autant pouvoir remplacer lalgorithmeluitoutseul(dfinitionvolontairementsimplifieetadapte notrecas).Danscecas,notreheuristiqueestlafonctionh,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 oelle guideraitlesens de propagation de lalgorithme, au mme titre quelafonctiong.Onpourraitdoncimaginerunetroisimefonctionfqui associeraitchaquenudunevaleurfquitiennecomptedegetdehdece Le segment quon voit en noir sur cette image est h(N). (les cases noires et grises nont aucune importance) 66nud,cequipermettraitdeclasserlesnudsdanslalisteOpenparordre croissant (ou dcroissant) de f, pour avoir les nuds les plus adapts au chemin au dbut de la liste pour un examen plus rapide. 67La foncti on 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.LesnudsdanslalisteOpenserontdonctrisparordrecroissantdef, pour avoir lesnuds 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). Foncti onnement 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.OntrielalisteOpenparordrecroissantdef(lenudaveclefleplus 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 :68Initialisation On ajoute le nud de dpart Open Fin de lalgorithme On na pas russi trouver le goal 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 Open est vide Open nest pas vide On trie Open par ordre de f (croissant) On a dj parcouru tous les successeurs de N Fin de lalgorithme On a trouv le goal Ce successeur est le nud darrive On ajoute le successeur Open 69Voici un exemple de rsolution dun chemin avec lalgorithme A* : 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. 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. Jenedonneraipasdautresexemplesdersolutiondeproblmescarcet algorithmedonnelesmmesrsultatsquelalgorithmedeDijkstra(touten examinant moins de nuds). 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) le problme classique : un dbut de recherche. Les cercles rouges correspondent aux nuds situs dans Open (en cours dexamen). 70 71Li nfl uence des heuri sti ques Supposons que nous ayons une case N dont le point situ au centre de cette case auraitcommecoordonnes(X,Y).Notrecasedarriveauraitcomme coordonnesdesonpointcentral(XA,YA).Onveutcalculerh(N),quiestla distance entre N et le point darrive. Avec la formule de la distance euclidienne (thorme de Pythagore), on a : 2 2) ( ) ( ) (A AY Y X X N h + = Voyons ce quon obtient comme recherche avec cet heuristique : Visiblement, cenestpas unheuristique trs efficace, car il dirige suffisamment mal lalgorithme A* pour entraner lexploration de dizaines de cases inutiles. Maisilexisteaussidautresheuristiques,c'est--direicidautresmoyensde calculer cette distance. Lune des plus connues est la distance maximum : ) , max( ) (A AY Y X X N h = 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). Heuristique : distance euclidienne 72 Cestencorepirequeladistanceeuclidienne !Cetheuristiquefaittraverser encore plus de nuds lalgorithme A*. Ilexisteundernierheuristique,nommla distancedeManhattan ,quise calcule comme ceci : A AY Y X X N h + = ) ( Voyons ce que cet heuristique peut faire faire notre A* : Ladiffrenceestflagranteparrapportauxdeuxpremiersheuristiques :la distancedeManhattanfaiteneffetparcourirbeaucoupmoinsdenuds lalgorithmeA*Jenai pasencoreassez de connaissances mathmatiques pour prouver pourquoi un heuristique produit de meilleurs rsultats quun autre, mais ilfautsavoirquelafonctionh,lheuristiqueestcensretournerlenombrede casesquilfautparcourirpour sedplacerentre unnud 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 Heuristique : distance maximum Heuristique : distance de Manhattan 73de la distance fournit une approximation correcte, mais la distance de Manhattan se rapproche plus du nombre de cases que la distance euclidienne, par exemple. Lesalgoriciensmontrentquesiilexistaitunheuristiquequiretournerait exactementlenombredecasesentreunnudetlenuddarrive,alorsA* passerait directement par le chemin le plus court, sans jamais examiner un seul nudsuperflu.Malheureusement,etpuisquuntelheuristiquenexistepas,on travaille avec des approximations. Rsum Pour trouver un chemin avec lalgorithme A* : -Onajoutelenuddedpartunequeue Open(quicontient 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. Oncalculelavaleurdefpourchaquesuccesseur,etonvrifiequil 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). Probl mes connus LalgorithmeA*nesouffredaucunproblmeconnu.Ilretourneuncheminqui est exactement le chemin le plus court. Avantages Cetalgorithme 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 luifait occuper une place en mmoire plus faible que les algorithmes de Dijkstra et BFS. Inconvni ents A* peut prendre beaucoup de temps de calcul cause du tri intensif des listes et surtoutdescalculsdedistances(quincessitentenplusdinstallerun 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). 74Conclusion OnadoncvucinqalgorithmestraversceTPE :lalignedroite,DFS,BFS, Dijkstra et A* (qui rutilise la ligne droite travers la fonction h). Ilesttempsmaintenant,auvudesinconvnientsetavantagesdechaque algorithme,delescomparerpourleurutilisationdanslebutdenotreTPE : dplacernotrerobotjusqulaballerouge(quiaunepositioncompltement dtermineparlareconnaissancedimages).Notrerobotserapprochantplutt de la taille dun robot-chien (cf. Abo, en introduction), il a les mmes limites et capacits (quirejoignentleslimitescourantesquonretrouvedansla robotisation) : -ladterminationdutrajetnedoitpasprendretropde tempspourlaisserauprocesseurleloisirdesoccuper dautres parties du robot ; -lammoireestquasimentillimite(touscesalgorithmes neprennentquequelquesmga-octetsdemmoireau grandmaximum,cequiestfacilementadaptablemme sur un robot de cette taille) ; -lespoidsetlesobstaclesdoiventtreprisencompte (notamment si lutilisateur dit au robot dviter les tapis si possiblepoids-etlesobjetsfragilestoutprix obstacles -) ; -lerobotnedoitpasresterbloqudansletrajet 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 : Classement AlgorithmeRaisons 1 Dijkstra Assez rapide, trajet largement optimis qui ne bloque jamais le robot, priseen compte des poids. 2 A*Relativement lent par rapport aux autres algorithmes. 3 BFS Ne tient pas compte des poids. Quelques aberrations dans le trajet. 4 DFS Trajet pas toujours optimal et parfois compltement ct, ne tiens pas compte des poids. 5 Ligne droiteNe tiens pas compte des poids, se bloque parfois dans le trajet. CestdonclalgorithmedeDijkstraque lon retiendrait dansnotre analyse pour notre robot. Mais lalgorithme A* est de plus en plus rpandu car il est trs efficace dans des domainesvaris(dterminationintelligentedetrajetpourlesordinateursde 75bord,utilisationsdanslesjeuxvido)grandspublic,olaplacenestpas forcment compte et o les limites technologiques sont sans cesse repousses. Il remplace souvent lalgorithme de Dijkstra. Lalgorithme BFSreste utilis dans la miniaturisation, mme sil est difficile dimplanter un algorithme complet dans untroppetitespace.LalgorithmeDFSquantluiresteunalgorithmede traversedegraphes,carilsadaptepeuladterminationduntrajet 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 partieIIIsontbeaucoupplus souples dansleurutilisationpourdcouvrir commentunalgorithmepeutvolueretenplustrouveruncheminoptimal, tournez la page ! 76III. 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 bi ologi que 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 post-synaptiques prsents sur les dendrites. L'effet peut tre excitateur ou inhibiteur. Chaque neurone intgre en permanence jusqu' un millier de signaux synaptiques. Schmatisation dun neurone biologique. Les ronds sont les cellules neuronales. Les lignes simples sont des dendrites et les lignes doubles des axones (cf. ci-dessous). 77b) Que permettent-i l s de fai re ? Les rseaux de neurones, aussi appels rseaux neuro-mimtiques sontce 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 neuro-mimtiques. 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 vi rtuelUn neurone en robotique est reprsent sous cette forme : 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. Le neurone virtuel 78On 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) Les rseaux Un rseau de neurones est form de la liaison de plusieurs neurones agencs en couches, comme prsent sur cette figure : 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). Les poids affects aux connections permettent de relier les entres aux sorties du rseau par le calcul effectu par chaque neurone.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. On voit la forme dun rseau de neurones multi-couches. 79Lorsquon 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) L apprenti ssage 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 l es 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. 80Plus 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 daction-raction : un tat correspondent des actions appropries). 812. Application la reconnaissance d images 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.82angle vecteur vitesse direction de la balle balle robot 3. Application la Dtermination Intelligente de T