Aller directement au contenu
  • Catégories
  • Récent
  • Mots-clés
  • Populaire
  • Web
  • Utilisateurs
  • Groupes
Habillages
  • Clair
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Sombre
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Défaut (Aucun habillage)
  • Aucun habillage
Réduire
Melinyel

Melinyel

  1. Accueil
  2. Programmation
  3. Projets des membres
  4. [Java - OpenSource] Neural Networks - Les cerveaux virtuels

[Java - OpenSource] Neural Networks - Les cerveaux virtuels

Planifié Épinglé Verrouillé Déplacé Projets des membres
4 Messages 3 Publieurs 2.4k Vues
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • AlexMogA Hors-ligne
    AlexMogA Hors-ligne
    AlexMog
    Modérateur spécialisé
    a écrit sur dernière édition par
    #1

    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.

    Multiplayer GameDev @ Unexpected

    Mon CV

    1 réponse Dernière réponse
    3
    • SoulalexS Hors-ligne
      SoulalexS Hors-ligne
      Soulalex
      a écrit sur dernière édition par
      #2

      Tu n'en finiras jamais de m'épater 🙂

      J'aimerai bien tester mais comment fait-on pour complier le client ?

      Soulalex, Administrateur de Melinyel
      + E-Mail : [[email protected]](mailto:[email protected] "Lien vers un courriel")
      + GitHub : [https://github.com/Soualex](https://github.com/Soualex "Lien externe")

      1 réponse Dernière réponse
      0
      • AlexMogA Hors-ligne
        AlexMogA Hors-ligne
        AlexMog
        Modérateur spécialisé
        a écrit sur dernière édition par
        #3

        Tu n'en finiras jamais de m'épater 🙂

        J'aimerai bien tester mais comment fait-on pour complier le client ?

        Merci :).

        J'ai mis un petit tuto dans le readme du projet ^^

        HF.

        Multiplayer GameDev @ Unexpected

        Mon CV

        1 réponse Dernière réponse
        0
        • vfrzV Hors-ligne
          vfrzV Hors-ligne
          vfrz
          a écrit sur dernière édition par
          #4

          Bravo :)

          hbY2yJ9.gif7CNtQh6.gif

          1 réponse Dernière réponse
          0

          Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

          Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

          Grâce à votre participation, ce message peut devenir encore meilleur 💗

          S'inscrire Se connecter
          Répondre
          • Répondre à l'aide d'un nouveau sujet
          Se connecter pour répondre
          • Du plus ancien au plus récent
          • Du plus récent au plus ancien
          • Les plus votés


          • Se connecter

          • Connectez-vous ou inscrivez-vous pour faire une recherche.
          Powered by NodeBB Contributors
          • Premier message
            Dernier message
          0
          • Catégories
          • Récent
          • Mots-clés
          • Populaire
          • Web
          • Utilisateurs
          • Groupes