Salut à tous,
Depuis quelque temps je m'intéresse à l'intelligence artificielle, et en particulier au réseau de neurones. Pour m'entrainer, j'ai créé un environnement où des mangeurs (équivalent à des poissons) doivent manger de la nourriture. Le monde est en 2D, il n'est pas infini (taille réglable). Chaque mangeur disposent d'un cerveau : son réseau de neurones. Mon mangeur se déplace dans la direction d'un angle en radians. Comme entrée au réseau de neurone, je met la position x
et la position y
du fruit le plus proche, ensuite je met le radian actuel de la bête. Ensuite j'ai deux couches cachées composées à chaque fois de 3 neurones. Pour ma sortie, j'ai aussi 3 neurones. Une indiquant si je dois tourner à droite, une autre qui indique si je dois tourner à gauche et enfin la dernière qui m'indique si je peux avancer. Quand je tourne à droite j'enlève $\frac\pi{3}$ à l'angle du mangeur et quand je tourne à droite j'ajoute $\frac\pi{3}$ à l'angle du mangeur.
Pour déterminer les poids, j'utilise un algorithme génétique. A chaque fois qu'un mangeur mange un fruit, son score augment de 1. Ansi je sélectionne que les 50% meilleurs mangeurs. Puis je les fait reproduire, je mélange les poids de la maman et du papa. J'ai une chance sur deux que l'allèle du papa soit pris, du coup une chance sur deux que l'allèle de la maman soit pris. Après s'applique la mutation. Pour accélérer l'algorithme, j'ai respecté le pattern MVC. Ainsi je peux faire 50 générations en 1 minutes.
Le problème est que malgré 50 générations, le meilleur score soit 1. Soit les mangeurs restent où ils sont. Soit elle avance, et ne font que ça…
J'ai testé beaucoup de choses comme la configuration, à la place de mettre la position du fruit la plus proche j'ai mis sa distance. J'ai testé aussi plein de nombre comme pour le nombre d'individu dans la population, la pourcentage de mutation, les poids…
Bref rien ne marche… J'aimerais un peu de vos lumières