Python et l'intelligence artificielle
Présentation
1. Historique
Pour présenter rapidement l’histoire de l’intelligence artificielle (IA), on peut faire ressortir trois grandes périodes :
-
1950-1980 : les développeurs d’algorithmes d’IA se concentrent sur l’écriture de règles permettant à un ordinateur de prendre une décision. Ils essayent alors de traduire un schéma de réflexion en programme. L’ordinateur est utilisé comme un automate déroulant des règles préétablies afin d’aboutir à une décision. L’apogée de cette période correspond au boom des systèmes experts dans les années 1980 où on expliquait qu’un ordinateur pourrait bientôt offrir un même niveau de diagnostic qu’un médecin… Ce type de système peut cependant fonctionner correctement si la réflexion s’apparente à une forme de déduction logique. Vous trouvez encore des systèmes de ce type aujourd’hui, par exemple dans les critères d’attribution d’un prêt immobilier sur un site web : si l’emprunteur est en CDI depuis au moins 20 mois et si son apport est supérieur à 20 % du montant d’achat, alors un accord de principe est conclu. Cependant, à aucun moment l’ordinateur n’a de plus-value dans la partie intelligence. À ce niveau, il a un rôle passif, il exécute simplement les tests proposés et retourne un résultat.
-
1980-2015 : cette fois, l’ordinateur essaye d’apprendre par lui-même à partir de données servant de référence....
Le problème de la classification d’images
1. Présentation
La classification d’images est un domaine qui a fait un bon faramineux au niveau des performances ces dernières années. On peut considérer aujourd’hui qu’un ordinateur sait reconnaître un objet si les conditions d’éclairage sont bonnes, si la prise de vue est bien cadrée et s’il n’y a pas d’éléments perturbants dans la scène, comme du brouillard ou une main qui viendrait occulter une partie du sujet. De tels résultats étaient encore impensables en l’an 2000.
Même si les applications restent encore timides, cela ouvre la voie pour des technologies encore balbutiantes, comme la conduite autonome. Si grâce au GPS, il est facile pour un ordinateur de choisir la bonne direction, il reste encore difficile pour une voiture autonome de conduire en pleine ville. Dans les années 1990, il nous semblait impossible que les ordinateurs puissent transcrire la parole humaine un jour et encore moins qu’ils arrivent à distinguer un chat d’un chien. Finalement, 25 ans plus tard seulement, ils font cela quasiment sans difficulté. Alors, il ne faut jamais dire jamais ! Surtout pas en informatique !
2. Image et données
Une image est représentée par une grille de pixels. Chaque pixel code une couleur sous la forme d’un triplé de trois valeurs : rouge, vert et bleu. Suivant les librairies d’image, les plages de valeurs sont dans l’intervalle [0,1] ou [0,255], ces représentations sont équivalentes. Ce qui est intéressant pour nous, c’est que toute image est intrinsèquement...
L’intelligence artificielle pour les jeux
Il n’y a pas que les réseaux de neurones ! Dans le domaine du jeu vidéo, il existe d’autres problèmes, comme les calculs des déplacements des personnages ou la gestion de l’IA d’un jeu de stratégie, pour lesquels les meilleurs algorithmes ne sont pas forcément des algorithmes à base de réseau de neurones.
Nous allons reprendre le projet de jeu du morpion (voir le chapitre Les fonctions) et cette fois, nous allons lui donner une IA hors pair qui sera imbattable. C’est impressionnant !
1. Les fonctions disponibles
Vous pouvez trouver la source du projet à compléter en téléchargement sur le site de l’éditeur sous le nom de fichier : IA et Jeu MorpionBase.py.
Le corrigé du projet est aussi disponible en téléchargement sous le nom de fichier : Pygame Morpion & Super IA.py.
Téléchargez et ouvrez le fichier MorpionBase.py de ce chapitre. Nous avons une version fonctionnelle du jeu avec une IA qui joue au hasard sur le terrain. Nous allons reprendre des fonctions qui seront utiles pour notre IA haut de gamme. La première fonction est celle qui détecte si un des deux joueurs a gagné :
def DetecteGagne(G):
for j in [1,2] :
for x in range(3):
if G[x][0] == G[x][1] == G[x][2] == j : return j
for y in range(3):
if G[0][y] == G[1][y] == G[2][y] == j : return j
if G[0][0] == G[1][1] == G[2][2] == j : return j
if G[0][2] == G[1][1] == G[2][0] == j : return...