[C#]Neuro-Evolution

    • C#
    • .NET 4.5

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von φConst.

      [C#]Neuro-Evolution

      Hallo,

      genetische Algorithmen funktionieren nach dem Prinzip des "Survival of the fittest".
      Dabei wird in jeder Generation dasjenige Individuum _ selektiert, das die beste Fitness für ein gegebenes Problem hat.

      So wird das jede Generation kontinuiert, bis eine relativ optimale Lösung für ein Problem gefunden wurde.

      Dabei verwendet dieses Projekt die sogenannte neuronale Evolution.
      Jedes Gewicht und jeder Bias ist binär kodiert, das quasi als DNA fungiert.

      Diese DNA kann dann entsprechend mutiert werden (wodurch Diversität gewährleistet wird, um das globale Minimum einer Fehlerfunktion zu finden), und an die Nachkommen weitergegeben werden.
      Jede Generation besteht aus 150 Individuen mit relativ gleichen, aber an sich individuellen Verhaltensweisen.

      Als Beispiel dient folgende Problemstellung:

      Gegeben sei ein Ziel (ein Punkt) das mittels der Maus des Spielers hin und her bewegt werden kann.
      Ziel ist es, das die Individuen diesen Punkt erreichen, wenn möglich muss der Abstand 1 oder kleiner betragen.

      Die Fitness wird eben auch durch den Abstand zum Ziel festgelegt: Je kleiner (also näher das Individuum an das Ziel), desto fitter.
      Der Fitteste wird dann selektiert, welcher sich reproduziert und leicht veränderte Nachfahren (kleine Mutationen in der Genetik, 10 Prozent Wahrscheinlichkeit das ein Bit eines DNA-Stranges sich verändert) zurückgibt.

      Der Vorgang wird iteriert, bis eben ein Optimum erreicht wurde.


      Repository: github.com/NET-D3v3l0p3r/SharpAI

      Viel Spaß damit.
      DotNETWork (Generische Tcp-Klasse, verschlüsselt!)
      MonogameMinecraftClone (Minecraft-Klon)
      NeuroEvolution (Implementation zweier Lernmethoden für neuronale Netze)

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „φConst“ ()

      Weiterführendes:

      Der Nutzer @exc-jdbi machte mich auf zwei weitere Verfahren aufmerksam:

      de.wikipedia.org/wiki/Downhill-Simplex-Verfahren
      de.wikipedia.org/wiki/Simulated_Annealing

      Insbesondere das "simulated Annealing" Verfahren fand ich persönlich sehr interessant und klug.
      Wer Näheres dazu erfahren möchte, kann sich das Video angucken:


      Und hier ein konkreter Anwendungsfall:


      Grüße.
      DotNETWork (Generische Tcp-Klasse, verschlüsselt!)
      MonogameMinecraftClone (Minecraft-Klon)
      NeuroEvolution (Implementation zweier Lernmethoden für neuronale Netze)
      Update:

      Weil es ein interessantes Thema ist, wurde nun auch Lernen mittels Backpropagation implementiert, die neue Git:
      github.com/NET-D3v3l0p3r/SharpAI

      Zurzeit beeinflusst backpropagation die Genetik eines neuralen Netzes nicht.
      Nächstes Update wird das _ ergänzt.

      In der Main-Klasse wird das Backpropagation demonstriert.
      Ziel ist ein quasi AND-Gatter, das heißt, wenn beides der Bits identisch sind, soll die Ausgabe 1 sein.

      Dem neuralen Netz können beliebig weitere Schichten hinzugefügt werden.
      Auch sind die Aktivierungsfunktionen beliebig austauschbar.

      Desweiteren existiert eine Form, in der das sogenannte Travelling-Salesman-Problem mittels eines genetischen Algorithmus' _ gelöst wird.

      Um die Form zu starten einfach (generalisierte Form)

      Form frm = new Form();
      Application.Run(frm);

      in die Main-Methode einsetzen...

      Backpropagation gelernt mit:
      DotNETWork (Generische Tcp-Klasse, verschlüsselt!)
      MonogameMinecraftClone (Minecraft-Klon)
      NeuroEvolution (Implementation zweier Lernmethoden für neuronale Netze)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „φConst“ ()