Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws2021:protokoll

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
ws2021:protokoll [2021/04/09 15:11]
kyrill.ho angelegt
ws2021:protokoll [2021/04/13 15:17] (aktuell)
kyrill.ho
Zeile 15: Zeile 15:
  
 == Tag 3 - 07.01.2021 == == Tag 3 - 07.01.2021 ==
-Programmierung des Spiels abgeschlossen. Somit können jetzt schon 2 Spieler an einem Computer spielen.+Programmierung des Spiels ​in [[https://​www.pygame.org/​wiki/​about|PyGame]]  ​abgeschlossen. Wir haben Linien programmiert,​ die beim anklicken, abhängig vom Spieler, Grün oder Violett gefärbt wird. Felder die gefärbt werden sobald sie "​geschlossen"​ wurden, auch in den entsprechenden Farben. Außerdem haben wir den Ablauf des Spiels programmiert gemeinsam mit einer Punktetafel,​ welche die Punkte live mitzählt. All das passiert in einem separaten PyGame-Fenster siehe Video unten. Somit können jetzt schon 2 Spieler an einem Computer spielen.
 {{:​ws2021:​kaesekaestchen_2spieler.zip|Hier}} gibts den Code dafür. Im Untenstehenden Video sieht man die Visualisierung des Spiels.(Beide Spieler wurden hierbei von einer Person gespielt) \\  {{:​ws2021:​kaesekaestchen_2spieler.zip|Hier}} gibts den Code dafür. Im Untenstehenden Video sieht man die Visualisierung des Spiels.(Beide Spieler wurden hierbei von einer Person gespielt) \\ 
  
Zeile 26: Zeile 26:
  
 == Tag 4 - 14.01.2021 == == Tag 4 - 14.01.2021 ==
-Obenstehende Grafiken wurden verworfen. ​Code wurde verändert um für das Machine Learning besser zu funktionieren. Wir werden versuchen mit Neat(einer Python-Bibliothek für neuronale Netze) dem Computer Käsekästchen beizubringen. Neuronale Netze bestehen grundlegend aus 3 verschiedenen Ebenen. Input-Layer,​ Hidden-Layers und Output-Layer. \\+Code wurde verändert um für das Machine Learning besser zu funktionieren. Wir werden versuchen mit Neat(einer Python-Bibliothek für neuronale Netze) dem Computer Käsekästchen beizubringen. Neuronale Netze bestehen grundlegend aus 3 verschiedenen Ebenen. Input-Layer,​ Hidden-Layers und Output-Layer. \\
 {{ :​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 48: Zeile 48:
  
 == Tag 6 - 28.01.2021 == == Tag 6 - 28.01.2021 ==
-Umprogrammieren des Spiels in Arrays, damit die KI nicht mit der Visuellen Darstellung arbeiten muss.(Verringert die Laufzeit) \\ +Umprogrammieren des Spiels in Arrays, damit die KI nicht mit der Visuellen Darstellung arbeiten muss.(Verringert die Laufzeit, da dann die KI nicht ca. 200 spiele gleichzeitig auf dem Bildschirm anzeigt, sondern "​nur"​ Arrays im Hintergrund berechnet, welche viel weniger Leistung von der CPU ziehen) \\ 
 Auf der linken Seite sind die Arrays, der Übersicht halber, übereinander zu sehen. [0] steht für False, also dass eine Linie noch nicht gesetzt ist. True bedeutet, dass eine Linie gesetzt ist, ganz gleich von welchem Spieler(Da dies für das Spiel irrelevant ist). Rechts sieht man das, zu dem Array zugehörige,​ Spielfeld. Auf der linken Seite sind die Arrays, der Übersicht halber, übereinander zu sehen. [0] steht für False, also dass eine Linie noch nicht gesetzt ist. True bedeutet, dass eine Linie gesetzt ist, ganz gleich von welchem Spieler(Da dies für das Spiel irrelevant ist). Rechts sieht man das, zu dem Array zugehörige,​ Spielfeld.
 {{ :​ws2021:​arrays_kaese.png?​500 | Darstellung in Arrays}} {{ :​ws2021:​arrays_kaese.png?​500 | Darstellung in Arrays}}
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.
  
ws2021/protokoll.1617973862.txt.gz · Zuletzt geändert: 2021/04/09 15:11 von kyrill.ho