b belajar.myudak

Memilih aksi ε-greedy

Implementasikan pemilihan aksi ε-greedy. Supaya bisa diuji, angka acaknya sudah diambil dan diberikan sebagai argumen: u (seragam di [0,1)[0, 1)) dan random_action.

  • Jika u < epsilon: eksplorasi, kembalikan random_action.
  • Selain itu: eksploitasi, kembalikan indeks QQ terbesar. Jika seri, indeks terkecil.
Q = [0.1, 0.5, 0.2], ε = 0.1, u = 0.5   →  1   (eksploitasi)
Q = [0.1, 0.5, 0.2], ε = 0.1, u = 0.05  →  2   (eksplorasi: random_action)

Dilema eksplorasi vs eksploitasi

Agen yang selalu memilih aksi terbaik menurut perkiraannya bisa terjebak: jika perkiraan awal aksi terbaik kebetulan rendah, aksi itu tidak pernah dicoba lagi. ε-greedy adalah solusi paling sederhana: sesekali (peluang ε\varepsilon) coba aksi acak.

Biasanya ε\varepsilon dimulai besar (misalnya 1.0) lalu diturunkan pelan-pelan: banyak menjelajah di awal, lebih banyak memanfaatkan pengetahuan di akhir. Lihat grafik ε di lab GridWorld.

Kenapa angka acaknya jadi argumen

Fungsi yang memanggil random() di dalamnya sulit diuji. Memisahkan “mengambil angka acak” dari “logika keputusan” adalah pola umum di kode RL, dan juga membuat eksperimen bisa diulang dengan seed yang sama.

Penjelasan

Yang diminta. Satu indeks aksi.

Langkah di kode:

  1. if u < epsilon: return random_action. Dengan uu seragam di [0,1)[0,1), cabang ini terjadi tepat dengan peluang ε\varepsilon.
  2. Selain itu, cari argmax. Loop dengan > (bukan >=) menjaga indeks terkecil saat seri. Q.index(max(Q)) memberi hasil yang sama.

Case seri. Q = [1, 1, 0] dengan ε=0\varepsilon = 0: aksi 0 dan 1 sama-sama terbaik, jadi jawabannya 0.

Case ε=1\varepsilon = 1. Selalu eksplorasi, karena u selalu < 1.

Yang dikembalikan: int.

Topik
rleksplorasibandit
Petunjuk 1

Bandingkan u dengan epsilon dulu. Angka acaknya sudah diberikan, jadi hasilnya bisa diuji.

Petunjuk 2

Untuk eksploitasi, cari argmax manual atau pakai Q.index(max(Q)), yang otomatis memilih indeks terkecil saat seri.

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.