0,75 Mo
Transcription
0,75 Mo
LYCEE JAQUES DE VAUCANSON TPE 2010 L’Intelligence Artificielle Florentin Delaine – Joseph Gennetay – Jason Loyau TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Sommaire Introduction................................................................................................................................ 3 Problématique ............................................................................................................................ 3 I. Qu'est ce que l'Intelligence Artificielle? ............................................................................. 4 1) Définition ......................................................................................................................... 4 2) L'Histoire de l'Intelligence Artificielle .............................................................................. 4 3) Les différents types d'intelligence artificielle.................................................................. 5 II. Le Rubik’s Cube et le robot ................................................................................................ 6 1) Le Rubik's Cube................................................................................................................ 6 2) Pourquoi avoir choisi le Rubik's Cube ? .......................................................................... 6 3) Les Lego Mindstorms et TiltedTwister ............................................................................ 7 4) Les Legos Mindstorms NXT 2.0 ....................................................................................... 7 III. L’algorithme de résolution ................................................................................................. 7 1) Base de l’algorithme ........................................................................................................ 7 2) Réflexion menée et outils utilisés ................................................................................... 8 IV. Réalisation du TPE .............................................................................................................. 8 1) Organisation .................................................................................................................... 9 2) Solutions apportées et problèmes rencontrés ............................................................... 9 a) Construction du robot .............................................................................................. 9 b) Programmation ...................................................................................................... 10 c) Robot – Solveur ......................................................................................................... 11 d) Interface graphique................................................................................................ 11 3) Résultats obtenus .......................................................................................................... 11 Conclusion ................................................................................................................................ 12 Ressources documentaires ...................................................................................................... 14 Page 2 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Introduction L’Intelligence Artificielle est une domaine associé principalement à l’informatique qui consiste à imiter l’Intelligence Humaine pour résoudre des problèmes, des situations données seul. Nous nous sommes demandé comment face à un problème spécifique, un programme pouvait résoudre cette situation en lui donnant tous les outils nécessaires. Problématique Comment une Intelligence Artificielle peut-elle résoudre un problème donné ? Page 3 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau I. Qu'est ce que l'Intelligence Artificielle? 1) Définition Le terme « intelligence artificielle », qui est le plus souvent abrégé par le sigle I.A, a été créé par John McCarthy en 1956. On y associe le mot « artificielle » par l'usage des systèmes informatiques, d'ordinateurs, et le mot « intelligence » pour la recherche d'imiter le comportement humain. C'est la discipline scientifique consistant a faire faire par une machine une tâches qui requiert l'intelligence humaine. Les domaines d'applications de l'intelligence artificielle sont nombreux et très diversifiés. On trouve parmi eux : le système bancaire, avec des systèmes d'évaluation de risques liés aux obtentions de crédit (le crédit scoring), l'armée, avec des systèmes autonomes tels que les drones (système d'aide a la décision et de commandement), les jeux vidéos, avec les bots (personnages commandé par le jeu), ou encore la médecine, avec des systèmes d'aide au diagnostique. Le principe de fonctionnement général de l'I.A est le suivant : Problème demandant l’intelligence de l’homme pour être résolu Passage par un système doté d’une intelligence artificielle Résolution du problème précédent 2) L'Histoire de l'Intelligence Artificielle Depuis ses débuts fin des années 50 jusqu'à nos jours, de nombreuses avancées techniques et évolutions ont été orchestrées dans le domaine. C'est en octobre 1950, avec la publication de l'article d'Alan Turing « Computing Machinery and Intelligence », que se trouve vraisemblablement l'origine de L'I.A. Dans cet article, Turing explore le sujet et propose une expérience plus connue sous le nom de « Test de Turing » dans le but de trouver la définition standard pour qualifier une machine « consciente ». Ce test consiste à évaluer la capacité du programme à imiter le dialogue humain. L'I.A ne sera cependant considérée comme domaine de recherche que 6 ans plus tard, pendant l'été 1956, à l'occasion des conférences de Dartmouth, qui réunissaient les plus grands scientifiques, dont McCarthy, Newell, Shannon, ou encore Minsky qui se proposaient de réaliser des programmes d'ordinateurs doués d'intelligence. C'est à cette occasion que l'expression « Artificial Intelligence » fut créée par John McCarthy. Page 4 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Les années 60 marquent un réel démarrage dans le domaine, avec des progrès techniques et des résultats significatifs. Les années 70 voient le fondement des bases en ce qui concerne la représentation de la connaissance, le raisonnement et la robotique. Les années 80 quand à elles sont marquées par l'arrivée de l'intelligence artificielle dans la vie économique. Au début des années 90, les progrès ont repris avec une généralisation de l'informatique de bureau, des réseaux de télécommunications et de composants de plus en plus performants, ce qui développa la demande de solutions par intelligences artificielles. De nouvelles techniques de programmation se sont développées grâce à l'intelligence artificielle. On notera notamment une grande amélioration des algorithmes. On s'inspire particulièrement, dans le but de simuler l'intelligence, du fonctionnement des neurones dans le cerveau humain. Aujourd'hui, l'intelligence artificielle est en expansion constante et prend une place importante dans la culture populaire, plus particulièrement dans les œuvres de sciencefiction. Cependant le terme « intelligence artificielle » est délicat à définir de nos jours, il est difficile de définir précisément l'I.A. Tout le monde a son propre avis, sa propre vision. Et étant donné la multitude de domaines d'applications, définir exactement l'I.A est d'autant plus difficile. 3) Les différents types d'intelligence artificielle. Il existe deux principaux types d'intelligence artificielle, se nommant respectivement intelligence artificielle « forte » et intelligence artificielle « faible ». L'intelligence artificielle forte fait allusion à une machine qui serait capable de reproduire le comportement humain, mais aussi d'éprouver une réelle conscience de soi, ainsi que de vrai sentiments et une compréhension de ses propres raisonnements. Cette intelligence artificielle a servi de moteur dans le domaine, mais a aussi suscité des débats. Étant donné que la conscience a un support biologique, donc matériel, la majorité des scientifique ne voient pas d'obstacle a ce qu'un jour on voie une intelligence consciente sur un support matériel autre qu'un support biologique. Même si de nos jours il n'existe pas d'ordinateurs ou de robots aussi intelligents que l'être humain bien que des projets soient en cours chez IBM, les scientifiques pensent que ce n'est pas tant un problème d'outils mais de conception. Il n'y aurait aucun obstacle mis à part l'aptitude humaine à concevoir un programme approprié. L'intelligence artificielle forte permet notamment de modéliser des idées abstraites. Le principal débat sur l'intelligence artificielle forte est celui de l'existence ou non d'une intelligence artificielle consciente. Il y a par exemple les personnes, principalement les philosophes et les religieux, qui pensent que c'est impossible car la conscience serait propre aux organismes vivants, serait liée a des systèmes biologiques. Et d' autres pensent que c'est possible via des ordinateurs manipulant des symboles, permettant de reproduire des réseaux quasi similaire aux réseaux de neurones humain. Page 5 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau L'intelligence artificielle dite « faible » est axée sur la recherche de construction de systèmes de plus en plus autonomes, utilisant des algorithmes capables de résoudre des problèmes d'une nature précise. Mais contrairement à l'intelligence artificielle forte, l'intelligence artificielle faible ne fait que simuler l'intelligence, elle semble agir comme si elle était intelligente. On peut citer pour exemples les programmes qui tentent de passer le test de Turing. Ces programmes imitent grossièrement le comportement d'un humain face à un autre humain dans un dialogue. Ces programmes semblent intelligents mais ne le sont pas. Il s'agit surtout de reconstituer l'intelligence humaine. Elle sera néanmoins l'investigatrice des grandes avancées technologiques dans des domaines, tel que « l'aide a la décision » dans les années 1980. II. Le Rubik’s Cube et le robot 1) Le Rubik's Cube Composé de 6 côtés et de 54 étiquettes de couleurs différentes , ce puzzle est l'idée originale du professeur Rubik, conférencier en architecture hongrois. Un des principaux problèmes rencontrés à l'époque, qui a freiné la diffusion du cube en Hongrie, fut de trouver un fabricant capable de le produire en série tout en respectant ses particularités internes mais aussi il aura fallu attendre trois ans après sa conception en 1974 pour qu'il puisse être commercialisé à cause d'un retard d'obtention de brevet. En 1978 et 1979, la popularité du cube magique fait l'effet d'une traînée de poudre en Hongrie, attirant même l'attention des pays occidentaux, où il suscite l'intérêt des mathématiciens et des universitaires. Grâce aux efforts de deux grands hommes : le Dr Tibor Laczi et Tom Kremer, la magie du cube fait enfin ses débuts internationaux en 1980 aux foires du jouet de Londres, New York, Paris et Nuremberg. Environ 100 millions de cubes sont vendus dans le monde entre 1980 et 1982. Renommé, le Rubik's Cube a tourmenté des millions d'adeptes frustrés et envoûtés, et autant de passionnés de par le monde depuis plus de 20 ans. 2) Pourquoi avoir choisi le Rubik's Cube ? Le choix d'un tel support pour notre étude d'approche sur l'intelligence artificielle vient en premier lieu de son grand nombre de combinaisons possibles, principal intérêt de ce cube. En effet le puzzle possède quelques 43 252 003 274 489 856 000 configurations différentes mais seulement une d'entre elles correspond au cube résolu ! Autant dire qu'il est impossible de résoudre le Rubik's Cube par hasard, à moins de faire preuve de logique ou de connaître des algorithmes de résolution. Il est aussi connu de par le monde pour sa complexité. Une personne sans expérience ne peut pas résoudre le cube du fait d'une difficulté à cerner toute la dimension du puzzle dans l’espace. Il faut un certain temps d'adaptation et faire preuve d'instinct Des expériences sont nécessaires avant de s'approprier le Cube. Page 6 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Nous trouvions le sujet intéressant à traiter avec un Rubik's Cube, jouet aux premiers abords, il possède néanmoins une partie plus scientifique et théorique. 3) Les Lego Mindstorms et TiltedTwister Les Lego Mindstorms sont un projet du groupe Lego basé sur la brique «RCX» (Robotics Command System). Les Lego Mindstorms sont aussi un outil éducatif, ceci est originellement dû à un partenariat entre Lego et le Massachusetts Institute of Technology qui a collaboré au développement du projet. 4) Les Legos Mindstorms NXT 2.0 Apparu en 2006, la seconde génération de Lego Mindstorms appelée Lego Mindstorms™ NXT basés sur une nouvelle brique programmable. La particularité de ce robot est qu'il est accessible à tous et que sa programmation est assez aisée. Il existe plusieurs langages de programmation : Le NXC (Not eXactly C), le NQC (Not Quite C) ou encore l’usage d’un langage graphique développé par Lego pour des applications basiques. Les principales modifications sont l'usage d'un processeur 32 bits de type ARM ainsi que l'ajout de nouveaux capteurs sonores, de couleurs et ultra-soniques. De plus, il est désormais possible d'utiliser la technologie Bluetooth pour contrôler le robot (avec un téléphone portable par exemple). Le principe de fonctionnement est le suivant: le programme contenu dans la brique NXT prend en compte l'état des différents capteurs (capteur de toucher, capteur de couleurs…) qui lui sont connectés pour effectuer les tâches demandées et transmet alors des ordres à la partie opérative constituée de plusieurs servomoteurs. En tout il est possible de connecter trois servomoteurs et quatre capteurs à la brique lego. III. L’algorithme de résolution 1) Base de l’algorithme Pour concevoir notre solveur, il a fallu baser l’algorithme de résolution sur une méthode déjà existante, créer nous même une méthode de résolution étant un projet bien trop complexe. Nous avions le choix entre plusieurs méthodes, de nombreuses pouvant être trouvées sur Internet mais notre choix s’est effectué entre une méthode de résolution couche par couche (c'est-à-dire, une face, sa couronne, la deuxième couronne et la dernière face), et des méthodes plus complexes mais bien plus efficaces dites de « speedcubing », celles-ci permettant de résoudre en 40 mouvements en moyenne le cube contrairement à environ 100 pour l’autre. Certes les méthodes de speedcubing permettent d’obtenir une Page 7 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau combinaison menant rapidement à la solution du cube mais l’inconvénient de ces méthodes est qu’elles sont relativement lourdes à mettre en place, le nombre de cas étant multiplié. Le robot ne disposant pas d’une architecture permettant un calcul rapide de la solution et ces méthodes étant relativement complexes à maîtriser parfaitement, nous nous sommes orientés vers la méthode de résolution la plus simple, celle du couche par couche, nous permettant ainsi d’élaborer l’algorithme en langage informatique, étant donné que nous n’avons pas de grandes connaissances en algorithmique. 2) Réflexion menée et outils utilisés Notre algorithme de résolution devait prendre en compte les caractéristiques suivantes : - Prendre en compte toutes les possibilités - Trouver la solution en un minimum de temps - Trouver une solution nécessitant le moins de mouvements Prendre en compte toutes les possibilités est une évidence. Pour que notre programme soit une réelle Intelligence Artificielle, il fallait que peu importe le cube il le résolve. Trouver la solution en minimum de temps n’est pas un problème avec les microprocesseurs et la mémoire vive de nos ordinateurs actuels mais avec les caractéristiques de la brique NXT 2.0, il fallait prendre en compte cela car une résolution prendre en moyenne 40 secondes avec le programme du créateur du robot. Trouver une solution nécessitant le moins de mouvements est un problème assez conséquent, compte tenu de la caractéristique précédente car trouver la solution la plus efficace le plus rapidement est un problème, la recherche de la solution idéale demandant un certain temps. Plusieurs solutions peuvent être apportées pour prendre en compte ces caractéristiques. De plus, mais cela ne concerne pas tant l’algorithme de résolution, le programme final devait être le plus léger possible, celui-ci prenant en compte d’autres fonctions pour la résolution du cube par le robot et la capacité de mémoire de ce dernier étant assez réduite. Ses solutions seront expliquées en partie IV. Pour répondre à ces exigences et réaliser notre solveur, nous avons premièrement travaillé sur papier en essayant par des diagrammes, de fragments de code C, de visualiser comment nous pourrions traduire cet alogrithme dans un langage comme le C. La manipulation du Rubik’s Cube de nombreuses fois nous a aidé pour comprendre complètement la logique de l’objet et de la méthode de résolution choisie. Enfin, nous avons utilisé Code::Blocks, un environnement de développement intégré libre, pour programmer notre solveur en C puis BricxCC, un autre EDI libre, afin de traduire et de compiler notre programme en NXC, un langage compréhensible par le NXT 2.0. IV. Réalisation du TPE Page 8 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau 1) Organisation Les deux diagrammes de Gantt suivant décrivent le planning initial prévu et le délai réel que nous avons pris pour réaliser ce TPE. Planning Initial Délai réel On peut constater que l’on prévoyait beaucoup moins de temps sur le programme et plus de tests sur le robot afin de corriger les problèmes que nous allions surement rencontrer. Enfin le projet a pris deux semaines de retard sur la fin initiale, ces deux semaines étant consacrées à la reconversion du solveur en une application exécutable avec interface graphique. La répartition des tâches est restée à peu près identique à celle prévue. 2) Solutions apportées et problèmes rencontrés a) Construction du robot Page 9 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Lors de la construction du robot, nous avons recontrés plusieurs problèmes, n’ayant pas le même kit Lego que celui qui à servi à la construction du robot initial. Nous avons tout d’abord solutionné les problèmes occasionnés par les pièces manquantes pour la construction de la structure du robot, du bras retourneur, du support du capteur couleur RGB et de celui de toucher en les remplaçant par d’autres pièces disponibles ou en modifiant ou en créant d’autres assemblages. Cependant, au fil des modifications, il nous manquait des pièces bien particulières et donc nous avons dû chercher dans nos propres Lego et demander également à nos camarades de classe s’ils n’avaient pas les pièces qui nous intéressaient. Nous remercions d’ailleurs ceux qui nous ont aidé. La plus grosse modification a eu lieu au niveau de la base rotative. N’ayant pas les pignons utilisés, nous les avons remplacés par deux pignons identiques, l’un étant sur le servo-moteur, l’autre sous la base supportant le cube. Nous avons également dû modifier la structure de la base et de son support sur la structure du robot car la stabilité n’était pas la même, le pignon de la base et l’axe le guidant étant moins stable que les deux grands pignons imbriqués que l’on peut voir dans le plan du robot initial en page 12, fourni dans le dossier Annexe. Nous avons obtenu un résultat plutôt satisfaisant et avons modifié en conséquence les valeurs angulaires de rotation du servo-moteur entraînant la base dans le programme du créateur du robot. b) Programmation Pour répondre aux exigences formulées en pré-production, nous avons adopté un type de raisonnement au cas par cas en prenant en compte toutes les positions possibles à un moment précis de la résolution. Ces cas étaient relativement nombreux au début mais cela s’est amenuisé vers la fin. Pour trouver la solution en un minimum de temps, nous avons essayé d’alléger au maximum le code, ce qui contribua également à la légerté du programme. Nous avons ainsi adopté des techniques de programmation efficaces, rapides et optimisées. Trouver la meilleure solution est la caractéristique qui nous a le plus posé problème étant donné que plusieurs solutions sont possibles. Dans notre solveur, nous commençons toujours par résoudre la face blanche en premier mais peut-être qu’en partant d’une autre face, la résolution était plus rapide. Cependant, cela demandait une étude de tous les cas de résolution possible et donc pas spécialement une programmation lourde mais surtout un temps considérable. Nous avons donc choisi d’optimiser les formules en les améliorant légèrement. La programmation nous a également apporté beaucoup de problèmes et c’est ici qu’ils ont duré le plus longtemps. Les erreurs étaient diverses : - Erreurs basiques ( « ; », erreurs de syntaxe…), rapide à corriger - Formule de résolution inexactes, plus difficile à corriger étant donné la difficulté d’identifier la source parfois - Erreurs de segmentation, la recherche de l’erreur et la compréhension de celle-ci est sans doute ce qui fait d’elle la plus dure à résoudre. Dans certains cas, le recodage complet de la fonction a été la solution la plus rapide Page 10 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Le debugger intégré à Code::Blocks nous a permis de résoudre rapidement de nombreuses erreurs et de les corriger rapidement. Cela nous a demandé beaucoup de temps, de la logique et surtout une bonne maîtrise du langage afin de savoir comment cette erreur a pu se produire et l’identifier encore plus rapidement. c) Robot – Solveur Lorsque nous avons voulu adapter notre solveur pour le robot, nous avons d’abord décidé de tester le robot avec le programme créé initialement pour le robot. Il nous a fallu corriger quelques erreurs de valeur angulaire pour la rotation de la base par exemple. La phase de scan du cube se passait très bien lors des tests mais pour une raison que nous n’avons toujours pas comprise, la résolution du cube ne fonctionnait pas alors que ce n’était pourtant pas notre solveur. Nous avons donc décidé de le remplacer par le notre mais en voyant toutes les modifications qu’il allait falloir faire et étudier toute la documentation du NXC dans le peu de temps qu’il nous restait, nous avons décidé d’abandonner la réalisation du robot et de développer une interface graphique pour le solveur à la vue du temps que nous avions mis pour réaliser le TPE jusqu’à maintenant. d) Interface graphique Le développement de l’interface graphique s’est fait avec la SDL, une bibliothèque C permettant la création basique de fenêtre. Peu de problèmes ont été rencontrés lors de la programmation de cette interface, la maîtrise du langage aidant pour programmer juste et rapidement. 3) Résultats obtenus Voici une photo de notre robot construit : Page 11 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau L’application finale du nom SRC (Solveur Rubik’s Cube) en version 1.0 sur licence GNU/GPL est fournie dans le dossier numérique de notre TPE. Dans l’optique de la continuité de ce TPE, la création d’un site web hébergeant notre projet est envisagée. Des amélioration sont possibles pour ce solveur, notamment en codant d’autres méthodes, en permettant le choix du type de résolution par l’utilisateur ou encore l’animation 3D du cube en C++ avec Qt. La résolution des autres cubes de la famille Rubik’s peut être également envisagée. Conclusion Nous avons pu voir que la conception d’une intelligence artificielle, faible dans ce cas et raisonnant au cas par cas, est une tâche demandant une bonne capacitée d’abstraction car tout cela nous le faisons automatiquement. De plus, il faut bien faire attention à ne pas oublié de possibilité, auquel cas le système pourrait ne pas fonctionner. Nous avons également constaté que l’élaboration d’une Intelligence Artificielle plus complexe, notamment une forte, demandait surement beaucoup de ressources et que nous ne sommes pas en mesure de le faire. Page 12 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Enfin, nous savons qu’une Intelligence Artificielle la plus basique peut résoudre tous les problèmes du moment qu’on lui apprend comment le résoudre et quels cas elle peut rencontrer au minimum. Page 13 TPE 2010 Florentin Delaine – Joseph Gennetay – Jason Loyau Ressources documentaires - siteduzero.com : Cours de C et Forum pour recherche de solutions à nos problèmes Divers sites d’informatique (developpez.com, commencamarche.com…) pour la résolution de nos problèmes forum.nxtasy.org : solutions pour robots basés sur les Lego Mindstorms automatesintelligents.com : Ressources sur l’intelligence artificielle tiltedtwister.com Page 14