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
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!