b belajar.myudak

Generalized advantage estimation (GAE)

Hitung advantage dengan GAE untuk satu rollout:

δt=rt+γV(st+1)(1−dt)−V(st),At=δt+γλ(1−dt)At+1\delta_t = r_t + \gamma V(s_{t+1})(1-d_t) - V(s_t), \qquad A_t = \delta_t + \gamma\lambda(1-d_t)A_{t+1}

V(sT)V(s_T) untuk langkah setelah rollout adalah last_value. Jika dones[t], tidak ada bootstrap dan rantainya terputus.

rewards=[1,1], values=[0,0], tidak ada done, last_value=0, γ=1:
λ = 1 → [2, 1]  (Monte-Carlo)      λ = 0 → [1, 1]  (TD satu langkah)

Advantage

Advantage A(s,a)A(s, a) menjawab: “seberapa lebih baik aksi ini dibanding yang biasanya terjadi di state ini?”. Positif berarti naikkan peluangnya, negatif berarti turunkan.

λ: tombol bias–varians

  • λ=0\lambda = 0: At=δtA_t = \delta_t. Hanya satu langkah reward nyata, sisanya perkiraan VV. Varians kecil, tetapi bias jika VV masih salah.
  • λ=1\lambda = 1: At=Gt−V(st)A_t = G_t - V(s_t). Seluruh return nyata. Tidak bias, tetapi sangat berisik.
  • λ≈0.95\lambda \approx 0.95 (default PPO): kompromi yang bekerja baik hampir di mana-mana.

Fungsi gae di minirl/agents.py adalah versi vektor dari soal ini: sama persis, hanya untuk banyak env sekaligus.

Penjelasan

Yang diminta. Array advantage (T,).

Langkah di kode (dari belakang, next_value = last_value, next_adv = 0):

  1. not_done = 1 - dones[t].
  2. delta = r[t] + gamma * next_value * not_done - values[t]: TD error satu langkah.
  3. next_adv = delta + gamma * lam * not_done * next_adv: tambahkan advantage langkah berikutnya, didiskon γλ\gamma\lambda, kecuali episode berakhir.
  4. Simpan, lalu next_value = values[t].

Case 1: episode berakhir. last_value = 9 diabaikan karena done, jadi A=1−0.5=0.5A = 1 - 0.5 = 0.5.

Case 2 vs 3. Dengan λ=1\lambda = 1 hasilnya [2,1][2, 1], yaitu return penuh dikurangi VV. Dengan λ=0\lambda = 0 hasilnya [1,1][1, 1]: setiap langkah hanya melihat reward-nya sendiri ditambah VV berikutnya (yang di sini 0).

Yang dikembalikan: array (T,).

Topik
rlactor-criticgaeppo
Petunjuk 1

Hitung TD error δ_t = r_t + γ V(s_{t+1}) (1 − done_t) − V(s_t). Untuk langkah terakhir, V(s_{t+1}) = last_value.

Petunjuk 2

A_t = δ_t + γλ (1 − done_t) A_{t+1}, dihitung dari belakang.

Python 3.14 · NumPy

Pengaturan editor

Ukuran font
Ukuran huruf di editor.
Ukuran tab
Lebar indentasi. Otomatis: 2 spasi untuk TypeScript, 4 untuk Python.
Key bindings
Ganti ke mode Vim.
Nomor baris relatif
Nomor baris dihitung dari posisi kursor (berguna untuk gerakan Vim).
Word wrap
Baris panjang dilipat agar muat di lebar editor.
IntelliSense
Saran kode otomatis saat mengetik (Ctrl+Spasi tetap bisa dipakai saat mati).

Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.