Passt der Pseudocode zu dem Algorithmus (n-step SARSA)?
Vielleicht sagt n-step SARSA ja dem einen oder anderem was, falls nicht, hier die Kurzfassung: Es geht um Reinforcement Learning. Pro Zeitschritt kann man eine Action nehmen und bekommt dafür einen Reward. Bei n-step SARSA summiert die Rewards für n Schritte auf und berechnet dann "wie gut" der aktuelle Stand so ist indem man den aufsummierten Reward mit dem zu noch zu erwartenden Reward (bis man am Ziel ist) addiert.
So sieht anscheinend der Code dazu aus:
Hier mal ein Beispiel:
Man bekommt immer 0 Reward außer wenn man im Ziel (G) ankommt. Weil man über 10 Schritte aufsummiert hat, wird die Info 10 Schritte nach hinten "übermittelt". Macht total Sinn. Was ich aber an dem Code nicht check ist der r > 0 check.
Angenommen n = 10, dann passiert das erste update bei r = 9-10+1 = 0
Also t = 9, in dem Bild aber schon bei t = 7 (was meiner Meinung nach auch richtig ist)
Laut code wird ja V(S_r) angepasst, warum aber nicht V(S_t)? Ich hab dann ja ausgehen von t n Rewards gesammelt, sodass ich dann den Stand zum Zeitpunkt t anpassen sollte?
Und wenn man jetzt z.B. einen schnelleren Weg zum Ziel findet, von mir aus in 6 Schritte, würde r = 5 - 10 + 1 = -4 sein und macht nie ein Update. Das kann nicht stimmen, der Wer müsste dann einfach die Summe der Rewards von t=0 bis t=5 sein (Dafür ist auch der r+n < T check).
Bin ich irgendwie lost grad oder stimmt da echt was nicht?
2 Antworten
Vielleicht sagt n-step SARSA ja dem einen oder anderem was
Bisher nicht.
Wenn ich es richtig verstehe, dann soll ja n Schritte Lookahead gemacht werden. Das wird hier so realisirt, daß ich wenn ich 10 Schritte weiter bin V von vor 10 Schritten aktualisiere. D.h. ab t=9 (10. Schritt) aktulisiere ich Rückliegendes. t=9 aktualisiert Tau 0. (Allerdings ist G noch 0)
Für t=16 behandle Ich R_17 und S_17, S_17 ist Terminal und T=17. Beachte, die Schleife läuft also bis Tau=16 (Das wird für t=25 erreicht). Jetzt, bei t=16 ist G das erste mal ungleich 0. Da Tau 7 ist, aktualisiere ich eben auch V(S_Tau)) indem ich es ein wenig Richtugn G schiebe. In den nächsten Schritten passiert das gleiche für Tau=8, Tau=9 ... bis Tau=16 - Das sind die markierten Felder im Bild ganz rechts.
Nice, ich hab deine Frage überhaupt nicht verstanden, weil du r statt τ verwendet hast. Ich dachte, du meinst irgendwelche Rewards.
Schau dir noch einmal die Abbruchbedingung des Loops an. Es wird immer so lange geloopt, bis τ den terminal state zum Zeitpunkt T erreicht. Die Zeile verhindert nur, dass States zu negativen Timesteps geupdatet werden - weil sie eben sinnlos sind, wenn man bei 0 anfängt.
Ja macht Sinn. Ich dachte irgendwie dass der Algorithmus aufhört nach t = 17 wenn man im Ziel ist, aber man lässt das noch n Schritte laufen
Danke :)