Bandit multi-tangan

Reinforcement Learning dengan Gymnasium di Python

Fouad Trad

Machine Learning Engineer

Bandit multi-tangan

 

  • Penjudi menghadapi mesin slot
  • Tantangan → memaksimalkan kemenangan
  • Solusi → eksplorasi vs eksploitasi

Gambar yang menunjukkan seorang pria menghadap deretan mesin slot

Reinforcement Learning dengan Gymnasium di Python

Mesin slot

Gambar yang menunjukkan 4 mesin slot dengan probabilitas menang berbeda: 45%, 35%, 85%, dan 62%, yang tidak diketahui pengguna.

  • Reward dari suatu lengan adalah 0 atau 1
  • Tujuan agen → mengumpulkan reward maksimum
Reinforcement Learning dengan Gymnasium di Python

Menyelesaikan masalah

 

  • Epsilon-greedy dengan peluruhan
  • Epsilon → pilih mesin acak

Diagram yang menunjukkan bahwa dengan probabilitas epsilon, agen mengeksplorasi dengan memilih mesin secara acak.

Reinforcement Learning dengan Gymnasium di Python

Menyelesaikan masalah

 

  • Epsilon-greedy dengan peluruhan
  • Epsilon → pilih mesin acak
  • 1 - epsilon → pilih mesin terbaik sejauh ini
  • Epsilon menurun seiring waktu

Diagram yang menunjukkan bahwa dengan probabilitas epsilon, agen mengeksplorasi dengan memilih mesin acak dan dengan probabilitas 1 - epsilon agen mengeksploitasi dengan memilih mesin terbaik yang diketahui.

Reinforcement Learning dengan Gymnasium di Python

Inisialisasi

n_bandits = 4  
true_bandit_probs = np.random.rand(n_bandits)

n_iterations = 100000 epsilon = 1.0 min_epsilon = 0.01 epsilon_decay = 0.999
counts = np.zeros(n_bandits) # Berapa kali tiap bandit dimainkan
values = np.zeros(n_bandits) # Perkiraan probabilitas menang tiap bandit
rewards = np.zeros(n_iterations) # Riwayat reward
selected_arms = np.zeros(n_iterations, dtype=int) # Riwayat pilihan lengan
Reinforcement Learning dengan Gymnasium di Python

Loop interaksi

for i in range(n_iterations):
    arm = epsilon_greedy()

reward = np.random.rand() < true_bandit_probs[arm]
rewards[i] = reward selected_arms[i] = arm counts[arm] += 1
values[arm] += (reward - values[arm]) / counts[arm]
epsilon = max(min_epsilon, epsilon * epsilon_decay)
Reinforcement Learning dengan Gymnasium di Python

Menganalisis pilihan

selections_percentage = np.zeros((n_iterations, n_bandits))


Diagram yang menunjukkan langkah pertama proses: sebuah array sampel berukuran (iterations, n_bandits) berisi nol.

Reinforcement Learning dengan Gymnasium di Python

Menganalisis pilihan

selections_percentage = np.zeros((n_iterations, n_bandits))

for i in range(n_iterations): selections_percentage[i, selected_arms[i]] = 1

Diagram yang menunjukkan langkah kedua: menandai lengan terpilih di tiap iterasi dengan nilai 1 dalam array.

Reinforcement Learning dengan Gymnasium di Python

Menganalisis pilihan

selections_percentage = np.zeros((n_iterations, n_bandits))

for i in range(n_iterations): selections_percentage[i, selected_arms[i]] = 1
selections_percentage = np.cumsum(selections_percentage, axis=0) / np.arange(1, n_iterations + 1).reshape(-1, 1)

Diagram yang menunjukkan langkah terakhir: jumlah kumulatif bandit terpilih dihitung, lalu dibagi nomor iterasi untuk memperoleh persentase pemilihan tiap lengan di tiap iterasi.

Reinforcement Learning dengan Gymnasium di Python

Menganalisis pilihan

  Gambar yang menunjukkan kurva selections_percentage untuk tiap bandit, memperlihatkan bahwa seiring iterasi, agen cenderung lebih sering memilih bandit #2.

for arm in range(n_bandits):
    plt.plot(selections_percentage[:, arm], label=f'Bandit #{arm+1}')
plt.xscale('log')
plt.title('Bandit Action Choices Over Time')
plt.xlabel('Episode Number')
plt.ylabel('Percentage of Bandit Selections (%)')
plt.legend()
plt.show()

for i, prob in enumerate(true_bandit_probs, 1): print(f"Bandit #{i} -> {prob:.2f}")
Bandit #1 -> 0.37
Bandit #2 -> 0.95
Bandit #3 -> 0.73
Bandit #4 -> 0.60
  • Agen belajar memilih bandit dengan probabilitas tertinggi
Reinforcement Learning dengan Gymnasium di Python

Ayo berlatih!

Reinforcement Learning dengan Gymnasium di Python

Preparing Video For Download...