b belajar.myudak

Reward shaping berbasis potensial

Tambahkan reward shaping berbasis potensial ke reward asli:

r′=r+γ Φ(s′) (1−done)−Φ(s)r' = r + \gamma\,\Phi(s')\,(1 - \text{done}) - \Phi(s)

Φ\Phi adalah fungsi “seberapa menjanjikan” sebuah state, misalnya minus jarak ke target. Semua argumen kecuali γ\gamma berbentuk (N,).

Φ(s) = −5 → Φ(s') = −4 (mendekat 1 m), r = 0, γ = 1  →  +1
Φ(s) = −4 → Φ(s') = −5 (menjauh),      r = 0, γ = 1  →  −1

Reward yang jarang

Jika reward hanya diberikan saat tujuan tercapai, agen yang acak hampir tidak pernah menerimanya, sehingga tidak ada yang bisa dipelajari. Menambah petunjuk (“semakin dekat semakin baik”) mempercepat belajar, tetapi berbahaya: agen bisa mengoptimalkan petunjuknya, bukan tujuannya (reward hacking). Misalnya, ia berputar-putar di dekat target untuk mengumpulkan bonus “mendekat” berkali-kali.

Kenapa bentuk potensial aman

Jika bonusnya berbentuk selisih potensial γΦ(s′)−Φ(s)\gamma\Phi(s') - \Phi(s), jumlahnya sepanjang episode saling menghapus (teleskopik): hanya potensial awal yang tersisa. Akibatnya kebijakan optimal tidak berubah (Ng, Harada & Russell, 1999). Berputar-putar tidak menguntungkan, karena setiap kali mendekat, sebelumnya agen sudah dihukum saat menjauh.

Bandingkan dengan reward dekat di lab Bola di pelat: itu bukan potensial (reward per langkah, bukan selisih), dan lihat apa efeknya di preset “bola tenang”.

Penjelasan

Yang diminta. Array (N,).

Langkah di kode: satu baris yang di-vektorkan: r + gamma * phi_s2 * (1 - done) - phi_s.

Cek case 1 dan 2. Mendekat 1 m memberi +1, menjauh 1 m memberi −1. Bolak-balik total 0: tidak ada untung dari berputar-putar.

Case done. Di case 3, env pertama selesai, sehingga Φ(s′)\Phi(s') diabaikan: r′=1+0−(−1)=2r' = 1 + 0 - (-1) = 2. Agen mendapat kembali “utang” potensial awalnya saat episode berakhir.

Yang dikembalikan: array (N,).

Topik
rlreward shapingdesain reward
Petunjuk 1

F = γ·Φ(s') − Φ(s): bonus jika pindah ke state berpotensi lebih tinggi, penalti jika turun.

Petunjuk 2

Jika done, Φ(s') dianggap 0. Kalikan dengan (1 − done).

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.