Return-to-go untuk banyak episode
Buffer pengalaman berisi beberapa episode yang disambung. dones[t] = 1 berarti episode berakhir setelah langkah t. Hitung Gt untuk setiap langkah, tanpa menjumlahkan reward dari episode berikutnya.
rewards = [1, 1, 1, 1], dones = [0, 1, 0, 1], γ = 0.5 → [1.5, 1, 1.5, 1]
Episode terakhir boleh terpotong (tanpa done di akhir); anggap reward setelahnya 0.
Di dalam REINFORCE
REINFORCE memperbarui kebijakan dengan
∇J≈N1t∑∇logπ(at∣st)GtSetiap aksi dinilai dengan return-to-go: reward yang datang setelah aksi itu, bukan sebelumnya. Aksi tidak bisa memengaruhi masa lalu, jadi reward masa lalu hanya menambah noise.
Dalam praktik, kita mengumpulkan banyak episode dari beberapa salinan lingkungan sekaligus, lalu menyambungnya. Bug klasik adalah lupa me-reset di batas episode: aksi terakhir episode yang gagal tiba-tiba mendapat kredit dari episode berikutnya yang sukses.
Penjelasan
Yang diminta. List Gt sepanjang rewards.
Langkah di kode: mundur dari t = T-1. Jika dones[t], set g = 0 (langkah t adalah akhir episode, jadi tidak ada reward sesudahnya). Lalu g = rewards[t] + gamma * g.
Kenapa reset sebelum menambah. rewards[t] milik episode yang berakhir di t, jadi tetap dihitung. Yang dibuang adalah g lama, yaitu return episode berikutnya.
Cek case 1. Episode 1 = langkah 0–1: G1=1, G0=1+0.5=1.5. Episode 2 = langkah 2–3, polanya sama.
Yang dikembalikan: list float.
Topik
Petunjuk 1
Seperti return berdiskon biasa, dihitung dari belakang.
Petunjuk 2
Saat dones[t] = 1, reset akumulasi ke 0 SEBELUM menambahkan rewards[t].
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.