Aller au contenu

[Java - OpenSource] Neural Networks - Les cerveaux virtuels


AlexMog
 Share

Recommended Posts

Bonjour à tous,

Dernièrement, j'étudie dans mon université les réseaux neuraux, aussi appelés Neural Networks. Affin de mieux comprendre mes cours, j'ai décidé de faire un  projet permettant de visualiser l'évolution d'un cerveau virtuel dans un environnement de survie. Bref, un petit projet, mais très sympathique à regarder!

 

I - Qu'est-ce que le Neural Networks?

Je vais faire court et concis, mon but n'étant pas de faire un cours sur les réseaux neuraux ici.

Un réseau neural a pour but de virtualiser des réseaux de neurones, et donc, en finalité, un cerveau.

Le but, c'est de s'axer sur la biologie neuronale pour l'appliquer à l'informatique. Et, justement, ça tombe bien, puisque les neurones sont très proches des systèmes électroniques!

Un neurone est constitué d'entrées (appelées Inputs) dont les valeurs varient entre 0 et 1, et de sorties, qui elles aussi, varient entre 0 et 1.

Il existe 3 "couches" de neurones dans chaque NN (Neural Network).  Une couche d'entrée (appelée "Input"), une couche de logique (appelée "Hidden Layer") et une couche de sortie (appelée "Output").

Chaque neurones est composé de plusieurs attributs, et c'est ces attributs qui varient pour fournir un nouveau "cerveau". Bref, je n'en parlerais pas ici, google "Neural Networks" devrait répondre à vos questions!

Pour leur permettre d'"apprendre", j'utilise un algorithme d'évolution génétique, qui sélectionne les individus les plus aptes à survivre.

 

Bref, un gros bordel.

 

II - Le projet

Donc, comme dis plus haut, le projet a pour but de simuler de petites intelligences artificielles.

Voici les attributs de ces IA:

  • Elles possèdent 20 entrées (inputs)
    • L'input 0 leur permet d'avoir leur vie
    • Les inputs 1, 2 et 3 leur  permet de connaitre leur couleur (r, g, b )
    • Les inputs 3+ sont utilisées pour définit une entité. Ainsi, n correspond au nombre d'entités proches, et l'IA peut voir jusqu'à 4 entités.
      • 3 * n est utilisé pour la distance d'une entité par rapport au senseur de l'IA (on reviendra sur le senseur plus tard)
      • 3 * n + 1, 3 * n + 2, 3 * n + 3 sont utilisés pour récupérer la couleur de l'entité visualisée
  • Elles possèdent 200 neurones logiques (Hiddent Layer) (pour vous donner une idée, un ver de terre a 302 neurones, et c'est le premier "cerveau complet" que les humains ont réussi à virtualiser sur ordinateur. CF: http://www.artificialbrains.com/openworm )
  • Elles possèdent 7 sorties (Output)
    • L'output 0 et 1 sont utilisés pour définir l'angle d'orientation de l'IA
    • L'output 2 est utilisée pour définir la vitesse de l'IA
    • L'output 3, 4 et 5 sont utilisées pour la couleur de l'IA (r, g, b )
    • L'output 6 est utilisée pour définir les dégâts que fait l'IA aux autres IA (n'est effectif que pour les carnivores)

Le jeu possède des règles:

Seules les herbivores peuvent voir la nourriture "herbe" (points blancs dans le projet)

Les herbivores ne peuvent pas attaquer.

Les carnivores peuvent se nourrir de n'importe quelle autre entité. Chaque carnivore peut voir toutes les autres entités, sauf l'herbe.

Chaque IA a deux Senseurs qui correspondes aux yeux/antennes. Chaque senseur peut repérer les 2 entités les plus proches.

Les IA perdent de la vie tous les ticks, et doivent donc récupérer cette vie en mangeant.

Chaque IA a un age maximal, l'age est incrémenté à chaque tick de 1.

Chaque IA peut donner naissance à une nouvelle génération, pour ce faire, elle doit avoir un certain age. Pour donner naissance, on utilise un algorithme de cross generation (génétique). On prend un nombre aléatoires de gènes du parent A, et un nombre aléatoire de gènes du parent B. Le parent A est celui qui a l'age de donner naissance, le parent B est le plus vieux parent (l'"élite") qui est encore vivant. Ceci permet d'avoir des IA qui évoluent constamment.

 

Enfin, le but du projet est de voir l'évolution des IA à long terme, c'est pour ça que j'utilise un serveur-client, le serveur tourne 24/24 7/7, et on peut voir l'avancement grâce au client.

 

III - Sources du projet

Les sources du projet sont disponibles sur Github à cette adresse: https://github.com/AlexMog/NeuralNetworksClientServer

Les sources sont sous licence MIT, dont n'hésitez pas à les utiliser comme bon vous semble, il faut juste laisser le copyright quelque part.

Bien sur, le client est pré-configuré pour se connecter au serveur qui est déjà lancé, si vous souhaitez voir l'évolution des IA :).

 

Je complèterais le readme du Github plus tard.

 

Have Fun :)

 

Cordialement,

AlexMog.

  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

 Share

×
×
  • Créer...