Memilih aksi ε-greedy
Implementasikan pemilihan aksi ε-greedy. Supaya bisa diuji, angka acaknya sudah diambil dan diberikan sebagai argumen: u (seragam di [0,1)) dan random_action.
- Jika
u < epsilon: eksplorasi, kembalikanrandom_action. - Selain itu: eksploitasi, kembalikan indeks Q 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 ε) coba aksi acak.
Biasanya ε 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:
if u < epsilon: return random_action. Dengan u seragam di [0,1), cabang ini terjadi tepat dengan peluang ε.- 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: aksi 0 dan 1 sama-sama terbaik, jadi jawabannya 0.
Case ε=1. Selalu eksplorasi, karena u selalu < 1.
Yang dikembalikan: int.
Topik
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.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.