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?

Bild zu Frage
Mathematik, programmieren, Code, Algorithmus, Pseudocode
Ternärer Baum als Pseudocode?

In dieser Aufgabe betrachten wir gewurzelte ternäre Bäume. Jeder Knoten v kann also ein linkes Kind v.L, ein mittleres Kind v.M und/oder ein rechtes Kind v.R haben. Wir möchten nun herausfinden, wie viele Knoten im Baum sind.Gebe jeweils einen rekursiven Algorithmus in Pseudocode an, der durch den Aufruf count(v0) die Anzahl n der Knoten im Baum mit Wurzel v0 bestimmt. Begründe die Korrektheit der Algorithmen.

a) Gehe für den Entwurf deines Algorithmus zuerst davon aus, dass der Baum vollständig ist, also jeder Knoten entweder genau drei Kinder oder gar kein Kind besitzt und für jedes Blatt der Weg von der Wurzel die gleiche Länge hat. Stelle eine Rekursionsgleichung für die Laufzeit auf und löse diese mithilfe des Master-Theorems. Der Algorithmus soll eine Laufzeit von o(n)haben.

b) Wie verändern sich Algorithmus und Laufzeit, wenn Sie allgemeine ternäre Bäume betrachten?

________________________________________________________

Es geht um Pseudo-Code. In der Vorlesung benutzen wir C (obwohl wir C eigentlich erst nächstes Semester lernen), also wir lassen immer Klammern auf und schließen diese erst in der nächsten oder ubernächsten Zeile und erhöhen Variablen durch i++.

Ich habe mir überlegt, weil das ganze ein ternärer Baum sein soll und die Länge gezählt wird:

var counter = 0
    for b = 0; b ≤ n; b++) {
        for (l = 1, l++) {
             l = l + 1
}
        for (m = m, m++) {
             m = m + 1
}
        for (r = r, r++) {
             r = r + 1
}
        counter = counter + 1
}

wobei b die, ich nenn's jetzt einfach mal "Oberschleife" ,für den Baum an sich ist und l, m und r jeweils Unterschleifen, wobei l = links, m = mitte, r = rechts. Glaube aber, dass ich's mir hiermit zu einfach mache.

Zudem muss das Ganze ja noch als rekursive Funktion geschrieben werden, also der Form T (n) = a * T (n/b) + f(n), wobei b in diesem Fall = 3 ist, weil es ja ein ternärer Baum ist. Aber was ist a? Man könnte ja theoretisch unendlich viele Kinderknoten haben? Oder versteh ich da was falsch?

Schule, Mathematik, Knoten, Baum, Informatik, Pseudocode, Algorithmen und Datenstrukturen

Meistgelesene Fragen zum Thema Pseudocode