- init() – Hier werden die Parameter gesetzt, mit denen die Umgebung arbeitet, z.B. die Dimensionen der Ein- und Ausgänge.
- reset() – Wie der Name schon sagt, wird mit dieser Funktion die gesamte Simulation zurückgesetzt.
- step() – Diese Funktion wird aufgerufen, wenn ein Simulationsschritt ausgeführt werden soll.
- seed() – Diese Funktion wird für die Neuparametrisierung des Zufallsgenerators verwendet.
- render() – Diese Funktion erzeugt eine grafische Abbildung der Umgebung.
Von diesen Funktionen sind aber nur init(), step() und reset() für einen Lernprozess notwendig. Die anderen Funktionen müssen nicht verwendet werden. Eine Simulation wird unabhängig von ihrer Visualisierung (die render()-Funktion) durchgeführt. Wichtig sind noch die Eingangs- und Ausgangsvariablen für die Step-Funktion. Eingang ist die auszuführende Aktion und Ausgänge sind: der geänderte Zustand der Umgebung, die Belohnung und, falls das Problem eine endliche Zeithorizont hat, die Erreichung des Zielzustandes.
Dateistruktur mit Namen und Referenz
Eine selbstgeschriebene OpenAI-Gym-Umgebung muss, wie bereits erwähnt, eine gewisse Dateistruktur besitzen. Die sogenannte PIP-Package-Struktur beinhaltet eine Namens- und Referenzierungskonvention, die einfach zu generieren ist. Eine OpenAI-Gym-Umgebung, die eine Simulink-Simulation beinhaltet, soll innerhalb der Methoden mit Matlab über die Matlab Python Interface oder mit kompilierten Simulink-Modellen über deren Schnittstelle kommunizieren. So werden komplexe Simulink-Modelle zu OpenAI-Gym-Umgebungen. Ein OpenAI-Gym-Umgebungsgenerator soll die zur Verfügung stehenden Informationen aus dem Simulink-Modell auslesen und damit den Quellcode, basierend auf einem Template, generieren. Das Template besteht aus Python-Quellcode, bei dem an den Stellen, an denen Änderungen notwendig sind einfach erkennbare Platzhalter stehen, die mit aus den Simulink-Modell ausgelesenen Informationen befüllt werden. Der Generator entpackt die Simulink-Datei (.slx) und kann aus der resultierenden XML-Datei die wichtigen Informationen herauslesen. Dazu gehören die Ein- und Ausgänge (Inputs und Outputs) sowie die zusätzlich benötigten Informationen. Dies wird dann in der OpenAI-Gym-Dateistruktur abgespeichert und kann als gewöhnliche Umgebung verwendet werden.
- Eingänge: Die Agenten der RL-Algorithmen müssen bestimmte Aktionen ausführen können. Bei dem Beispiel eines invertierten Pendels wären die Aktionen das Hin- und Herfahren des unteren Wagens. Diese Aktionen werden vom Agenten an die Umgebung weitergegeben. Der Wrapper gibt diese Aktionen an Simulink weiter. Da die die Python-Interface die Simulink Input-Blöcke in der aktuellen Matlab-Version nicht mit Werte befüllen kann, werden diese temporär ersetzt.
- Ausgänge: Nachdem die Eingänge gesetzt wurden, simuliert das Modell nun einen Zeitschritt und die Output-Blöcke der Simulink-Simulation werden mit neuen Werte gesetzt. Dieser Output wird von dem Wrapper abgegriffen und wieder zurück an den RL-Algorithmus gesendet.
Zusätzlich benötigte Informationen: Ergänzend zu den Ein- und Ausgängen benötigt eine Umgebung die Belohnungsfunktion. Sie kann zusätzlich zum Modell im Simulink implementiert werden und die Belohnung wird vom Wrapper abgegriffen bzw. weitergeleitet.
Matlab-Python-Schnittstelle
Nachdem die wichtigen Informationen aus der XML-Datei entnommen wurden und der Umgebungs-Quellcode in Python generiert wurde, muss die Verbindung zwischen Python und Matlab erzeugt werden. Mit der Matlab Python Interface kann die Simulation gestartet, pausiert und fortgeführt werden. Bei einem Simulationsschritt ist es möglich, die (umgewandelten) Inputs zu schreiben und die Outputs zu lesen. In die aktuelle Matlab-Version einen Simulationsschritt zu integrieren ist nur durch Umwege (mit eingebautem Stop/Pause-Block) möglich.
Verwendung des Umgebungsgenerators
Um den Simulink-OpenAI-Gym-Umgebungsgenerator zu verwenden, muss die Generatorfunktion mit dem Pfad der Simulink-Datei ausgeführt werden. Danach erstellt der Generator die Python-Quellcodedateien und die Dateistruktur. Sobald dies abgeschlossen ist, ist die Umgebung durch die PIP-Anwendung als OpenAI-Gym-Umgebung registriert und verwendbar. Selbstverständlich muss Matlab installiert sein, um die Umgebung verwenden zu können. Dies hat auch den Vorteil, dass es im Gegensatz zur Verwendung von vorkompilierten Modellen einfache Experimente in der bekannten Simulink-Umgebung erlaubt.