Hallo und willkommen zu dieser Geschichte, fast der letzte Titel dieses Moduls.
Ich werde nur den Hauptcode erklären, der das Ganze ausführt, bevor wir die aufregenden Ergebnisse erhalten
und die Videos ansehen.
Das ist also der Hauptcode und wie Sie sehen können, ist das ziemlich kurz.
Wir beginnen mit dem Import der Bibliotheken und Module sowie der verschiedenen Klassen und Funktionen,
die wir wie Altikriti aus unserer Modelldatei erstellt haben.
Die Zugfunktion aus der Zugdatei und die Testfunktion aus der Testdatei. Natürlich importieren
wir unseren Optimierer.
Dann beginnen wir mit dem ersten Abschnitt, in dem wir alle Parameter in eine Klasse aufnehmen.
Und das ist das vielleicht.
Denken Sie daran, dass dies ein BRAMs-Objekt ist, das wir aus dieser Harams-Klasse erstellt haben.
Jedes Mal, wenn wir einen Parameter wie die Lernrate haben, sind wir nicht ohne.
Lass uns sie schnell durchgehen.
Dieser erste oder hier ist die Lernrate.
Wie Sie sehen, wählen wir ein kleines und Sie bewerten den zweiten Parameter als Parameter.
Wieder nehmen wir es als 0 an. 39 Für einen OneTel-Parameter wird ein Satz von 1 16 Schritten von 20 Schritten und einer maximalen Länge
von 10000 verwendet.
Wir haben darüber gesprochen, dass dies der Parameter ist, den wir einstellen, um sicherzustellen, dass der Agent nicht auf unbestimmte Zeit in einem
Zustand der Umgebung hängen bleibt, sodass das Spiel gestoppt wird.
Wenn die Episodenlänge diese maximale Länge überschreitet, erhalten wir natürlich den Namen unserer
Umgebung.
Aufbrechen ist Null.
Übrigens können Sie auch in anderen Umgebungen spielen, indem Sie hier den Namen der Umgebung
ändern.
Wenn Sie also zu einigen anderen Breakout-Versionen oder sogar zu einigen anderen Atari-Spielen gut spielen möchten, können Sie
diesen Bruch hier einfach durch einige andere Spiele ersetzen.
Aber ich kann Ihnen sagen, dass Breakout-Videos bereits sehr herausfordernd sind.
Alles klar also alle Parameter hier.
Und dann gibt es den Hauptcode für den Hauptlauf.
Und hier sehen wir, was wir in dieser ersten Zeile machen.
Wir setzen einen Thread pro Kern.
In der zweiten Zeile werden dann alle Renderer aufgerufen, indem Sie ein neues
Objekt der Paramjit-Klasse erstellen, das alle diese Parameter hier initialisiert, da diesem BRAMs-Objekt Variablen zugeordnet
sind.
Dann setzen wir den Samen.
Dann erhalten wir unsere Umgebung mithilfe des Create-Baums und funktionieren mit dem Namen unserer Umgebung, der aus dem
Nichts herausbricht.
Sie sehen Zellen, deren Name und daher der Parameter und der Name ziemlich Null ist.
Das wird uns die Umgebung des Ausbruchs bringen.
Übrigens ist dies nicht die übliche Art, eine Umgebung zu schaffen, aber Sie wissen, wie Sie den
gesamten Prozess verbessern und die Leistung verbessern können.
Nun, wir verwenden dies, um tatsächlich eine optimierte Umgebung zu erstellen, und dies tun wir. Das Universum ist ein Paket,
in dem alle Pakete enthalten sind, die Sie in einer offenen Engine installiert haben.
Dank Universe erhalten wir eine optimierte Umgebung.
Darum geht es hier.
Dann erhalten wir unser gemeinsames Modell, indem wir ein Objekt der aktiven Kritikerklasse erstellen.
Daher ist es wichtig zu verstehen, dass dieses gemeinsame Modell das von den verschiedenen Agenten gemeinsam genutzte Modell
ist.
Wir haben also unterschiedliche Fäden in verschiedenen Bahnen.
Apropos Bedrohungen in der nächsten Zeile, in denen das Modell gemeinsam genutzt wird, um Speicher zu teilen, speichern wir das Modell
im gemeinsam genutzten Speicher des Computers, sodass alle Threads darauf zugreifen können, auch wenn sie sich in
einem anderen Verlauf befinden.
Also machen wir das hier.
Um dies zu ermöglichen, wird unser Optimierer mit den Parametern unseres gemeinsamen Modells und mit einer Lernrate
von einem oder einem Punkt verknüpft.
Es ist auch wichtig zu verstehen, dass der Optimierer auch gemeinsam genutzt wird, da er auf
das gemeinsam genutzte Modell einwirkt und sagt, dass die nächste Zeile, die den gemeinsam genutzten Speicher optimiert, den Optimierer im gemeinsam
genutzten Speicher speichert, sodass alle Agenten Zugriff darauf haben, um zu optimieren das Model.
Anschließend initialisieren wir unsere Prozesse, sodass der Testprozess das gemeinsam genutzte Modell nicht aktualisiert, sondern lediglich verwendet, um es
in einem Teil auszuprobieren, die Partitur auszudrucken und die Videos aufzuzeichnen.
Genau das wird also mit Target gleich Test gemacht.
Das ist der Testprozess, und dieser Prozess ist hier von der Folter dieser Multi-Vorverarbeitung ausgeschlossen.
Also hier und was es tut ist, dass es grundsätzlich eine Funktion in einem unabhängigen Thread ausführt.
Wenn wir also einen Neustart durchführen, beginnen wir einen neuen Prozess, der zu dieser Zeit das erste Jahr war.
Und mit diesem Prozess zum Hinzufügen von P fügen wir den Prozess in die Liste der Prozesse ein.
In dieser Schleife führen wir schließlich eine Schleife aus, um alle anderen Prozesse auszuführen, die durch Aktualisierung des
gemeinsam genutzten Modells trainiert werden.
Und genau das passiert in den letzten Codezeilen hier.
Wenn Sie also nicht näher darauf eingehen wollen, ist es wichtig zu verstehen, dass dies die
Prozesse optimal abläuft. Daher sollten wir alle gut darin sein, diesen Code auszuführen und ein trainiertes
Modell zu haben und eventuell zu beobachten die Ergebnisse.
Ich kann es also kaum erwarten.
Das wird ziemlich aufregend.
Ich werde jetzt versuchen, Leute zu finden, damit wir alle gemeinsam zuschauen können.
Und so bis zum nächsten Mal I.