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