PPO lernt ständig, in einer Grid-Weltumgebung nichts zu tunPython

Python-Programme
Guest
 PPO lernt ständig, in einer Grid-Weltumgebung nichts zu tun

Post by Guest »

Ich versuche derzeit, eine benutzerdefinierte Grid-World-Umgebung mit PPO zu lösen. Das Raster ist 5x5 groß und eine der Zellen ist das Depot, in dem der Agent startet. Im Laufe der Zeit erscheinen Elemente stochastisch im Raster und bleiben dort 15 Zeitschritte lang, bevor sie wieder verschwinden. Ziel des Agenten ist es, möglichst viele Gegenstände einzusammeln und ins Depot zu bringen. Der Agent verfügt über eine Kapazität von eins (d. h. er kann jeweils nur einen Gegenstand tragen) und kann sich zwischen den Aktionen nach oben, unten, rechts, links oder Nichtstun entscheiden (beachten Sie, dass das Abholen oder Abgeben nicht möglich ist). separate Aktionen, da diese Dinge automatisch passieren, wenn man sich auf einer Artikelzelle oder im Depot befindet). Für eine erfolgreiche Gegenstandsabholung und -abgabe erhält er eine Gesamtbelohnung von +15 (aufgeteilt in +7,5 für das Abholen und +7,5 für die Abgabe eines Gegenstands). Jeder Schritt ohne Abholung oder Rückgabe ergibt -1, es sei denn, die ausgewählte Aktion besteht darin, nichts zu tun. In diesem Fall erhält der Agent eine Belohnung von 0.
Ich habe mich für die Darstellung von Metriken wie „Agent oder“ entschieden Artikelpositionen mit einem Vektor der Größe 25 (d. h. ein Eintrag für jede Zelle, der 1 oder eine andere relevante Zahl ist, wenn ein Artikel/Agent vorhanden ist, andernfalls 0). Daher besteht mein Beobachtungsraum aus Folgendem: freie Kapazität, Agentenposition, Gegenstandspositionen, verbleibende Zeit, Zielort, Manhattan-Entfernungen zu Gegenständen und Ziel, verbleibende Zeit und Entfernung zum nächstgelegenen Gegenstand, Entfernung vom nächstgelegenen Gegenstand zum Ziel, Abstand zu Wänden.
Das Akteur- und Kritikernetzwerk besteht beide aus 4 verborgenen Schichten mit 128 Neuronen und ReLU-Aktivierungsfunktion. Was meine Hyperparameter betrifft, habe ich sie wie folgt ausgewählt:

Code: Select all

learning_rate: 0.0001
gamma: 0.99
lam: 0.95
clip_ratio: 0.2
value_coef: 0.5
entropy_coef: 0.5
num_trajectories: 5
num_epochs: 4
num_minibatches: 4
max_grad_norm: 0.5
Wenn dies ausgeführt wird, ist PPO nicht in der Lage, irgendeine verwendbare Richtlinie zu erlernen und unternimmt letztendlich einfach nichts. Obwohl dies eine vernünftige zu erlernende Strategie ist, da dies zumindest keine negative Gesamtbelohnung ergibt, ist sie eindeutig nicht erwünscht/optimal.
Da dies ein wenig einem lokalen Optimum ähnelt, bleibt PPO hängen Ich dachte, es könnte eine Hyperparameter-/Erkundungssache sein. Daher habe ich den Entropiekoeffizienten erhöht, um die Erkundung zu steigern, und gleichzeitig die Anzahl der Trajektorien pro Richtlinien-Rollout erhöht, damit der Agent mehr Erfahrung bei der Aktualisierung der Netzwerke zur Verfügung hat. Allerdings schien nichts, was ich versuchte, zu funktionieren. Ich habe sogar einen WandB-Sweep durchgeführt und keiner der 100 Läufe dieses Sweeps hat eine Gesamtbelohnung über 0 erzielt. Nachdem ich das beobachtet hatte, dachte ich, dass es einen Fehler im Code geben muss, weshalb ich das durchgegangen bin Code immer wieder wiederholen, um herauszufinden, was schief gelaufen ist. Ich konnte jedoch keinen Fehler in der Implementierung entdecken (was nicht heißen soll, dass es einen gibt, ich habe nur nach x-maligem Durchgehen des Codes keinen Fehler gefunden).
Tut Hat jemand eine Ahnung, was PPO davon abhält, eine gute Strategie zu erlernen? Offensichtlich hat der Agent Probleme, die Aktionen des Abholens und Abgebens eines Artikels miteinander zu verbinden. Allerdings verstehe ich nicht, warum das so ist, da es für den Agenten aufgrund der geteilten Belohnung für das Abholen und Bringen ziemlich einfach sein sollte, herauszufinden, dass er mit freier Kapazität zu jeder Artikelzelle gehen sollte und mit voller Kapazität er sollte zum Depot gehen.
Bei Bedarf oder Interesse können Sie den gesamten Code über Pastebin hier finden: https://pastebin.com/zuRprVWR.
Ich hoffe, dass jemand einen Tipp hat, was ich sonst noch tun kann Versuchen Sie, dieses Problem zu lösen. Glauben Sie, dass das Problem tatsächlich auf einen Implementierungs-/Logikfehler zurückzuführen ist, oder liegt da noch etwas anderes vor? Oder ist PPO einfach nicht in der Lage, dieses Problem zu lösen, und ein anderer Algorithmus wäre möglicherweise die bessere Wahl?
Ich bin für jeden Einblick dankbar!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post