b belajar.myudak

Update Q-learning

Implementasikan satu update Q-learning untuk transisi (s,a,r,s′,done)(s, a, r, s', \text{done}):

Q(s,a)←Q(s,a)+α[r+γmax⁡a′Q(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha\Bigl[r + \gamma \max_{a'} Q(s', a') - Q(s,a)\Bigr]

Jika done, targetnya rr saja. Kembalikan salinan tabel yang sudah diperbarui.

Q = [[0, 0], [2, 4]], s=0, a=0, r=0, s2=1, α=0.5, γ=0.9  →  Q[0][0] = 0.5 · 0.9 · 4 = 1.8

Off-policy

Target Q-learning memakai max⁡a′Q(s′,a′)\max_{a'} Q(s', a'): nilai aksi terbaik di state berikutnya, walaupun agen mungkin akan mengambil aksi acak (eksplorasi) di sana. Jadi Q-learning mempelajari nilai kebijakan serakah sambil berperilaku dengan kebijakan lain. Inilah yang disebut off-policy.

Akibatnya, Q-learning bisa belajar dari data apa pun: pengalaman lama, pengalaman agen lain, atau demonstrasi manusia. DQN (yang bermain Atari) adalah Q-learning dengan jaringan saraf menggantikan tabel, ditambah replay buffer berisi pengalaman lama.

Di lab GridWorld, lihat panah (argmax Q) terbentuk mundur dari tujuan.

Penjelasan

Yang diminta. Tabel Q baru dengan satu sel yang berubah.

Langkah di kode:

  1. Q = [row[:] for row in Q]: salin setiap baris. Q[:] saja tidak cukup karena barisnya masih dibagi bersama.
  2. target = r jika done, selain itu r + gamma * max(Q[s2]).
  3. Q[s][a] += alpha * (target - Q[s][a]).

Cek case 2. max⁡Q[1]=4\max Q[1] = 4, target =0+0.9⋅4=3.6= 0 + 0.9 \cdot 4 = 3.6, sehingga Q[0][0]=0+0.5⋅3.6=1.8Q[0][0] = 0 + 0.5 \cdot 3.6 = 1.8. Nilai baik di state 1 “bocor” mundur ke aksi yang menuju ke sana.

Case done. Target =−1= -1; nilai state 1 diabaikan karena tidak ada masa depan setelah episode berakhir.

Yang dikembalikan: list of list float.

Topik
rlq-learningtabel
Petunjuk 1

Target = r + γ · max_a' Q[s2][a'], atau cukup r jika done.

Petunjuk 2

Hanya satu sel yang berubah: Q[s][a] += α · (target − Q[s][a]). Salin tabelnya dulu.

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.