Top
2018 - 2019

algorithme Genetique et Réseaux de neurones

J'ai toujours été intrigué par le theme de l'intelligence artificielle. C'est en 2018 que j'ai décidé de coder une IA qui serait capable d'apprendre à conduire dans un environnement virtuel. Ici les IA ont été codées dans le moteur graphique Unity 3D en language C#.

J'ai ainsi découvert l'existence des algorithmes génétiques et appris à m'en servir pour entrainer des réseaux de neurones à effectuer les taches suivantes.

"Apprendre" à tirer à l'arc
"Apprendre" à conduire


Algorithme génétique

Algorithme

génétique

J'ai d'abord codé mon premier algorithme génétique en Python. L'objectif était de résoudre le problème du voyageur de commerce : Déterminer le chemin le plus court qui visite chaque ville une seule fois et qui termine dans la ville de départ.

Image de robot

• Le bloc (A) représente l'avancement de l'algorithme à différents moments clefs. On commence d’abord par créer un nuage de points : 15 points disposés aléatoirement sur une grille de 10x10 pixels. L'algorithme génétique commence par la création d'une population de départ, ici une population de 100 trajets.

• Le bloc (B) correspond à la description de ces trajets. Ils sont tous caractérisés par une liste de points dont l'ordre est donné de manière aléatoire . Cette liste de points correspond à l'ADN d'un trajet. Pour coller à la théorie de l'évolution de Charles Darwin, il faut maintenant procéder à une sélection naturelle. Pour cela, on classe les trajets en fonction de leur longueur. Plus le trajet est court, plus celui-ci sera haut dans le classement. Maintenant que toute notre population de départ est classée, on sélectionne les 25 meilleurs trajets. Pour plus de diversité, et encore une fois en s’inspirant de la nature, on sélectionne également 25 chanceux. Ces 25+25 sélectionnés vont maintenant pouvoir se «reproduire».

• Le bloc (C) représente la reproduction qui consiste à choisir deux «sélectionnés» (un père et une mère) et de mélanger leur ADN pour donner 4 nouveaux trajets (4 enfants). L'objectif est de conserver une population constante (ici de 100). On ajoute finalement une légère mutation à l'ADN des "enfants".

Ce processus de sélection/reproduction/mutation est répèté jusqu'à ce qu'il n'y ait plus de progression.




IA 1

Apprendre à

tirer à l'arc

Captures d'écran du projet sur Unity 3D :

L'objectif était d'apprendre le tir à l'arc à une IA.
Je voulais qu'elle atteigne toujours sa cible de 10m à 80m. Peu importe la force et la direction du vent.

Environnement

Modélisation et controle du robot archer

Image environnement archer

Modélisation de l'environnement dans Unity

Le robot est muni d'un Réseau de neurones semblable à celui-ci : Neural Network
Description des entrées :
x1 : correspond à la position suivant l'axe x de la cible
x2 : correspond à la position suivant l'axe y de la cible
x3 : correspond à la force du vent suivant l'axe x
x4 : correspond à la force du vent suivant l'axe y

Description des sorties :
y1 : Rotation verticale de l'arc
y2 : Rotation Horizontale de l'arc
y3 : Puissance du tire

Nous allons entrainer ce réseau de neurones en suivant le même principe que celui présenté dans la rubrique algorithmes génétiques.


Résultats

Image environnement archer

Première génération.
Les tirs sont totalement aléatoires

Image environnement archer

Après 5 générations
On observe une concentration des tirs

Image environnement archer

Après 25 générations
Certains réseaux de neurones obtiennent des résultats satisfaisant et atteignent la cible.

L'expérience à ensuite étée réalisée avec des cibles positionnées aléatoirement. Les résultats ne sont pas encore suffisamment concluant. La puissance de calcul dont je dispose n'est pas suffisante pour une progression efficace sur ce projet. De plus il semblerait qu'un algorithme genetique n'etait pas la meilleur solution.




IA 2

Apprendre à

conduire

Extrait d'une présentation du projet :

L'objectif était d'apprendre à une IA à completer un circuit le plus rapidement possible sans percuter l'environnement. Je voulais voir s'il etait envisageable d'utiliser une IA pour trouver la trajectoire optimale.


Environnement

Image de l'environnement

J'ai d'abord codé dans Unity une scène dans laquelle il est possible de dessiner le circuit que l'on veut. Le circuit doit au minimum comporter :

• un point de départ
• des murs qui forment un circuit fermé
• des CheckPoints (le dernier CheckPoint correspond à l'arrivée)



Réseau de neurones

Image de roue omnidirectionnelle

J'ai ensuite codé une 2ème scène dans laquelle on peut créer son véhicule mais surtout dimensionner le réseau de neurones (RN) associé. On peut choisir :
• le nombre d'inputs (1 - 6). Ce sont les capteurs de distance du véhicule
• le nombre de couches cachées (0 - 3). Ce sont des couches de neurones entre l'entrée et la sortie du RN
• le nombre de neurones par couche cachée (1 - 5)



Algorithme génétique

Image de roue omnidirectionnelle

Il est maintenant temps de coder la partie "apprentissage" en utilisant un algorithme génétique:

• Notre population de départ est composée de 100 voitures munies de leur réseau de neurones. Elles sont toutes envoyées sur le circuit où elles essayent d'aller le plus loin possible. Une fois qu'elles ont toutes, soit complété le circuit, soit percuté un mur, elles sont classées par leur score. (le score est calculé en fonction du temps et de la distance parcourue).

• Nous pouvons maintenant procéder à la sélection, la reproduction et la mutation en suivant le même principe que celui présenté dans la rubrique algorithmes génétiques

(Ps: sur la photo au centre de la diapositive, les traits rouges correspondent aux capteurs des voitures)



Résultats

Image de roue omnidirectionnelle

Nous pouvons observer ci-dessus l'évolution de l'IA après 100 générations.
Une grande partie des voitures arrivent au bout du circuit et certaines bien plus rapidement que d'autres.

Observations : Il est possible de sauvegarder les valeurs du RN de la meilleure voiture.
Lorsque l'on pose cette voiture dans un nouveau circuit qui lui est totalement inconnu, elle arrive sans aucun problème au bout de celui-ci. D'un certaine façon la voiture à "appris" à conduire.