Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws2021:protokoll [2021/04/11 14:15] kyrill.ho |
ws2021:protokoll [2021/04/13 15:17] (aktuell) kyrill.ho |
||
---|---|---|---|
Zeile 29: | Zeile 29: | ||
{{ :ws2021:nearal_networks.png?370 | Neuronales Netzwerk}} \\ | {{ :ws2021:nearal_networks.png?370 | Neuronales Netzwerk}} \\ | ||
- | Input sind Eingaben, Output ist die Ausgabe bzw. das Ergebnis. Der eigentlich wichtige Teil sind die Hidden-Layers, wo auch das eigentliche Verarbeiten abläuft. Hierfür wird mit verschiedenen Parametern gearbeitet, um am Ende präzise eine Entscheidung zu treffen. Diese Funktion (Die "Blackbox") übernimmt in unserem Beispiel zu einem großen Teil die Pythonbibliothek Neat. Neat funktioniert als Evolutionäres Neuronales Netz und entwickelt sich von Generation zu Generation weiter, vergrößert oder verkleinert die Menge an Neuronen oder stellt Parameter anders ein. Der Benutzer muss "nur" den Code passend für Neat umschreiben und in einer Konfigurationsdatei einige Parameter richtig einstellen. Den Rest macht Neat dann von allein. Somit ist es auch für uns als Anfänger relativ gut möglich einen Machine Learning Algorithmus zu erstellen.\\ | + | Input sind Eingaben, Output ist die Ausgabe bzw. das Ergebnis. Der eigentlich wichtige Teil sind die Hidden-Layers, wo auch das eigentliche Verarbeiten abläuft. Hierfür wird mit verschiedenen Parametern gearbeitet, um am Ende eine Entscheidung zu treffen. Diese Funktion (Die "Blackbox") übernimmt in unserem Beispiel zu einem großen Teil die Pythonbibliothek Neat. Neat funktioniert als Evolutionäres Neuronales Netz und entwickelt sich von Generation zu Generation weiter, vergrößert oder verkleinert die Menge an Neuronen oder stellt Parameter anders ein. Der Benutzer muss "nur" den Code passend für Neat umschreiben und in einer Konfigurationsdatei einige Parameter richtig einstellen. Den Rest macht Neat dann von allein. Somit ist es auch für uns als Anfänger relativ gut möglich einen Machine Learning Algorithmus zu erstellen.\\ |
{{ :ws2021:blackbox.png?450 | Neat-Blackbox}}\\ | {{ :ws2021:blackbox.png?450 | Neat-Blackbox}}\\ | ||
Zeile 61: | Zeile 61: | ||
Mit dieser Config-Datei können wir uns nun des Codes annehmen. \\ | Mit dieser Config-Datei können wir uns nun des Codes annehmen. \\ | ||
- | Dafür müssen zuerst Variablen für Genome und Netze erstellt werden in welchen dann Neat die für die KI wichtigen Genome (Infos zum Spielverhalten) und Neuronale Netze zwischenspeichert. \\ | + | Dafür müssen zuerst Variablen für Genome und Netze erstellt werden. Das Netz ist der Grundaufbau von unserem Neuronalem Netzwerk(siehe Tag 4) und die Genome sind die Parameter und Einstellungen der einzelnen Neuronen und derer Verbidungen. \\ |
- | + | ||
- | {{ :ws2021:ki1implement.png?200 | Implementierung in den Code}} \\ | + | |
Des Weiteren muss dieses Codefragment immer enthalten sein. Es bringt die oben genannten Einstellungen in unseren Code hinein. \\ | Des Weiteren muss dieses Codefragment immer enthalten sein. Es bringt die oben genannten Einstellungen in unseren Code hinein. \\ | ||
- | {{ :ws2021:start_neural_network.png?200 | Neat-Startfunktion}} \\ | + | <code python> |
+ | def start_NeuralNetwork(config_path): | ||
+ | config = neat.config.Config(neat.DefaultGenome, neat.DefaultReproduction, | ||
+ | neat.DefaultSpeciesSet, neat.DefaultStagnation, | ||
+ | config_path) | ||
+ | p = neat.Population(config) | ||
+ | |||
+ | p.add_reporter(neat.StdOutReporter(True)) | ||
+ | stats = neat.StatisticsReporter() | ||
+ | p.add_reporter(stats) | ||
+ | return p | ||
+ | </code> \\ | ||
Zuletzt muss noch die ''run(n)'' Funktion definiert und aufgerufen werden, in der mit n die Anzahl der Generationen definiert wird. Also wie oft soll das Programm durchlaufen.\\ | Zuletzt muss noch die ''run(n)'' Funktion definiert und aufgerufen werden, in der mit n die Anzahl der Generationen definiert wird. Also wie oft soll das Programm durchlaufen.\\ | ||
Zeile 79: | Zeile 88: | ||
== Tag 8 - 11.02.2021 == | == Tag 8 - 11.02.2021 == | ||
- | Nach der Implementierung der KI mussten noch einige Fehler behoben werden... Einiges hat nicht ganz so funktioniert wie es sollte. Also mussten wir Debuggen.{{:ws2021:kaesekizurerklaerung.zip|Hier}} findet ihr den fertigen Code mit einigen Erklärungen dazu. | + | Nach der Implementierung der KI mussten noch einige Fehler behoben werden... Einiges hat nicht ganz so funktioniert wie es sollte. Zum Beispiel fehlten an einigen Stellen Variablen oder Teile des Codes wurden gar nicht ausgeführt. Dafür sind Debug-Meldungen(Printausgaben wenn bestimmte Sachen passieren) sehr nützlich. Damit kann man genau sehen ob ein bestimmter Teil eines Programmes ausgeführt wird und wo etwas nicht so wie geplant funktioniert. Also mussten wir Debuggen.{{:ws2021:kaesekizurerklaerung.zip|Hier}} findet ihr den fertigen Code mit einigen Erklärungen dazu. |
== Tag 9 - 18.02.2021 == | == Tag 9 - 18.02.2021 == | ||
- | Fertigstellung einer KI welche gegen den Menschen spielen kann. Wir haben das Programm mit verschiedenen anzahlen an Generationen durchlaufenlassen und die daraus entstehenden KI`s getestet. Die KI , welche das Spiel über 100 Generationen gelernt hat, ist in der Lage das Spiel zu gewinnen, allerdings nur wenn der menschliche Spieler sich sehr wenig Mühe gibt. Der Code für das erstellen der KI und das einmalige Spiel gegen sie ist {{:ws2021:ki_generator.zip|Hier}} zu finden. In Codezeile 906 kann man die Anzahl der Generationen, welche Neat durchspielen soll einstellen. Die generierte Künstliche Intelligenz wird dann in einer PKL-Datei gespeichert und kann zu einem Späteren Zeitpunkt mit {{:ws2021:kase_load_ki_test.zip| folgender Datei }} eingelesen und gegen sie gespielt werden. | + | Fertigstellung einer KI welche gegen den Menschen spielen kann. Wir haben das Programm mit verschiedenen anzahlen an Generationen durchlaufenlassen und die daraus entstehenden KI`s getestet. Die KI , welche das Spiel über 100 Generationen(225 Spiele, siehe Tag 7 Erklärung der Threads) gelernt hat, ist in der Lage das Spiel zu gewinnen, allerdings nur wenn der menschliche Spieler sich sehr wenig Mühe gibt. Der Code für das erstellen der KI und das einmalige Spiel gegen sie ist {{:ws2021:ki_generator.zip|Hier}} zu finden. In Codezeile 906 kann man die Anzahl der Generationen, welche Neat durchspielen soll einstellen. Die generierte Künstliche Intelligenz wird dann in einer PKL-Datei gespeichert und kann zu einem Späteren Zeitpunkt mit {{:ws2021:kase_load_ki_test.zip| folgender Datei }} eingelesen und gegen sie gespielt werden. |
Als Beispiel finden Sie {{:ws2021:beispielkis.zip| Hier }} die KIs für 3 und 100 Generationen. Einen Durchlauf mit 1000 Generationen wird gerade berechnet und könnte demnächst folgen. | Als Beispiel finden Sie {{:ws2021:beispielkis.zip| Hier }} die KIs für 3 und 100 Generationen. Einen Durchlauf mit 1000 Generationen wird gerade berechnet und könnte demnächst folgen. | ||