Wie ich in früheren Fragen erwähnt habe, schreibe ich eine Labyrinth-Lösung, die mir hilft, mehr theoretische CS-Themen zu lernen. Nach einigen Schwierigkeiten habe ich einen genetischen Algorithmus, der eine Reihe von Regeln entwickeln kann (behandelt mit booleschen Werten) ) um eine gute Lösung durch ein Labyrinth zu finden.
Abgesehen davon ist die GA alleine in Ordnung, aber ich würde es gerne mit einem Neuronalen Netzwerk verbessern, obwohl ich keine wirklichen Kenntnisse über Neuronale Netze habe (keine formale theoretische CS-Ausbildung). Nachdem ich ein wenig über das Thema gelesen hatte, fand ich heraus, dass ein neurales Netzwerk verwendet werden könnte, um ein Genom zu trainieren, um die Ergebnisse zu verbessern. Nehmen wir an, ich habe ein Genom (eine Gruppe von Genen), wie zum Beispiel
%Vor%Wie könnte ich ein neuronales Netzwerk (ich nehme MLP an?) dazu nutzen, mein Genom zu trainieren und zu verbessern?
Zusätzlich dazu, da ich nichts über neuronale Netzwerke weiß, habe ich mich bemüht, irgendeine Form von Reinforcement Learning zu implementieren, indem ich meine Labyrinth-Matrix (zweidimensionales Array) benutze, obwohl ich ein bisschen festhalte, was der folgende Algorithmus will von mir:
(aus Ссылка )
%Vor%Das große Problem für mich ist, eine Belohnungsmatrix R zu implementieren und was genau eine Q-Matrix ist, und den Q-Wert zu erhalten. Ich benutze ein multi-dimensionales Array für meine Labyrinth- und Enum-Zustände für jede Bewegung. Wie würde dies in einem Q-Learning-Algorithmus verwendet werden?
Wenn jemand helfen könnte, indem er erklärt, was ich tun müsste, um das Folgende zu implementieren, vorzugsweise in Java, obwohl C # auch nett wäre, vielleicht mit einigen Quellcode-Beispielen, würde es geschätzt werden.
Wie in einigen Kommentaren erwähnt, beinhaltet Ihre Frage in der Tat eine große Menge an Hintergrundwissen und Themen, die bei stackoverflow kaum eloquent behandelt werden können. Was wir hier jedoch versuchen können, ist Vorschläge zu machen, um Ihr Problem zu umgehen.
Zunächst einmal: Was macht Ihre GA? Ich sehe eine Reihe von Binärwerten; was sind Sie? Ich sehe sie als entweder:
Lassen Sie mich ein Beispiel geben: In unserem Gehirn gibt es 10 ^ 13h Neuronen. Aber wir haben nur etwa 10 ^ 9 Gene (ja, es ist kein genauer Wert, bloß mit mir für eine Sekunde). Was sagt uns das? Dass unser Genotyp nicht jedes Neuron codiert. Unser Genom kodiert die Proteine, die dann die Bestandteile unseres Körpers bilden.
Daher arbeitet die Evolution direkt am Genotyp, indem sie Merkmale des Phänotyps auswählt. Wenn ich an jeder Hand 6 Finger hätte und wenn dies mich zu einem besseren Programmierer machen würde, würde ich mehr Kinder bekommen, weil ich erfolgreicher im Leben bin, nun, mein Genotyp würde dann von der Evolution ausgewählt, weil er das Fähigkeit , mir einen besseren Körper zu geben (ja, da gibt es ein Wortspiel angesichts des durchschnittlichen Geekiness-zu-Reproduzierbarkeit-Verhältnisses der meisten Menschen hier).
Denken Sie jetzt an Ihre GA: Was wollen Sie erreichen? Sind Sie sicher, dass sich entwickelnde Regeln helfen würden? Mit anderen Worten - wie würde Sie in einem Labyrinth durchführen? Was ist die erfolgreichste Sache, die Ihnen helfen kann: einen anderen Körper zu haben oder sich den richtigen Weg zu merken? Vielleicht möchten Sie Ihren Genotyp noch einmal überdenken und ihn zu Gedächtnisfähigkeiten kodieren lassen. Vielleicht kodieren Sie im Genotyp, wie viele Daten gespeichert werden können und wie schnell Ihre Agenten darauf zugreifen können - messen Sie dann die Fitness in Bezug darauf, wie schnell sie aus dem Labyrinth herauskommen. Ein anderer (schwächerer) Ansatz könnte darin bestehen, die Regeln zu verschlüsseln, nach denen Ihr Agent entscheidet, wohin er gehen soll. Die Take-Home-Nachricht ist, Funktionen zu kodieren, die, einmal ausgedrückt, durch Fitness ausgewählt werden können.
Nun zum Problem des neuronalen Netzwerks. Eine Sache zu erinnern ist, dass NN Filter sind. Sie erhalten eine Eingabe. Operationen ausführen und eine Ausgabe zurückgeben. Was ist das Ergebnis? Vielleicht müssen Sie nur eine wahre / falsche Bedingung unterscheiden; Wenn Sie zum Beispiel eine Labyrinthkarte einem NN zuführen, kann es Ihnen sagen, ob Sie aus dem Labyrinth herauskommen oder nicht. Wie würdest du so etwas tun? Sie müssen die Daten encodieren .
Dies ist der entscheidende Punkt bei NNs: Ihre Eingabedaten müssen korrekt codiert sein. Normalerweise normalisieren Leute es, vielleicht skalieren Sie es, vielleicht können Sie eine Sigma-Funktion darauf anwenden, um Werte zu vermeiden, die zu groß oder zu klein sind; das sind Details, die sich mit Fehlermaßnahmen und Leistung befassen. Was Sie jetzt verstehen müssen, ist, was ein NN ist und wofür Sie es nicht verwenden können.
Zu Ihrem Problem jetzt. Sie haben erwähnt, dass Sie auch NNs verwenden möchten: Was ist mit
?Umformuliert wie folgt:
Es gibt eine ausgezeichnete Lesung zu diesem Thema hier: Inman Harvey Mikrobielle GA .
Ich hoffe, ich habe Ihnen einen Einblick in solche Fragen gegeben. NNs und GA sind keine Wunderwaffe, um alle Probleme zu lösen. In einigen können sie sehr viel bewirken, in anderen sind sie nur das falsche Werkzeug. Es ist (immer noch!) An uns, den Besten zu bekommen, und dazu müssen wir sie gut verstehen.
Viel Spaß dabei! Es ist toll, solche Dinge zu wissen, macht den Alltag ein bisschen unterhaltsamer:)
Es gibt wahrscheinlich kein "Labyrinth-Gen" zu finden,
genetische Algorithmen versuchen, einen Vektor von Eigenschaften und ein "Filtersystem" einzurichten, um durch irgendeine Art von "Überleben des geeignetsten" Algorithmus zu entscheiden, welcher Satz von Eigenschaften den besten Job machen würde.
Der einfachste Weg, einen Ausweg aus einem Labyrinth zu finden, ist, sich immer nach links (oder rechts) entlang einer Wand zu bewegen.
Der Q-Algorithmus scheint ein Problem mit lokalen Maxima zu haben. Dies war eine Problemumgehung, da ich mich daran erinnere, indem ich kickte (zufälliges Hinzufügen) Werte zur Matrix), wenn sich die Ergebnisse nicht verbessert haben.
EDIT: Wie oben erwähnt, passt ein Backtracking-Algorithmus besser zu dieser Aufgabe als GA oder NN. Wie man beide Algorithmen kombiniert, wird hier beschrieben NeuroGen beschreibt, wie GA zum Training eines NN verwendet wird.
Tags und Links java neural-network computer-science artificial-intelligence theory