Bölüm 5 · Deneyerek öğrenen ve öneren sistemler · Ders 24
Q-öğrenme: şarj istasyonunu bulan robot
Deneyerek öğrenen tek satırlık kural
Veri. Bir depo robotu 5 × 11 hücrelik bir zeminde, raflar (#) arasında başlangıçtan (S) şarj istasyonuna (G) gitmeli. Haritası yok; her adım ona 1 puan kaybettirir, rafa çarpınca yerinde kalır. Hafızası Q adlı bir tablo: her hücre ve dört hamle için bir puan, toplam 220 puan, hepsi sıfırdan başlar. En kısa yol 18 adım.
import numpy as npL = ["S..#.......", # S başlangıç, G şarj, # raf".#.#.###.#.",".#...#...#.",".####.#.##.","......#...G"]H, W = len(L), len(L[0])Q = np.zeros((H, W, 4)) # 5·11·4 = 220 puan, hepsi 0M = [(-1, 0), (1, 0), (0, -1), (0, 1)] # yukarı, aşağı, sol, sağrng = np.random.default_rng(14)history = {k: [] for k in ('game', 'steps', 'return', 'return_ma', 'bumps', 'shortest', 'q_start', 'untried')} # bölüm geçmişifor game in range(1, 61):r, c, steps, bumps = 0, 0, 0, 0 # S hücresinden başlawhile L[r][c] != "G":best = np.flatnonzero(Q[r, c] == Q[r, c].max()) # en iyi puanlı hamlelera = rng.choice(best) # eşitlikte rastgelenr, nc = r + M[a][0], c + M[a][1]if not (0<=nr<H and 0<=nc<W) or L[nr][nc]=="#":nr, nc, bumps = r, c, bumps + 1 # çarptı, yerinde kalırtarget = 0 if L[nr][nc] == "G" else Q[nr, nc].max()Q[r, c, a] = target - 1 # öğrenmenin tamamır, c, steps = nr, nc, steps + 1for k, v in zip(history, (game, steps, -steps, np.mean(history['return'][-9:] + [-steps]), bumps, steps == 18, -Q[0, 0].max(), (Q == 0).mean())): history[k].append(float(v)) # getiri = −adım; 10 oyunluk ortalama; en kısa yol 18if game in (1, 2, 10, 37, 60):print(game, steps, bumps) # oyun, adım, çarpmaprint('son 10 oyun ortalama getiri:', history['return_ma'][-1], '· en kısa yol oranı:', np.mean(history['shortest'][-10:])) # son ölçümlerprint('başlangıçtan tahmini adım:', history['q_start'][-1], '· denenmemiş Q payı:', round(history['untried'][-1], 3))import csvwith open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yazcsv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir oyuntry:import matplotlib.pyplot as plt # varsa grafik çizfig, (a, b) = plt.subplots(1, 2, figsize=(9, 3.5))a.plot(history['game'], history['return'], label='return'); a.plot(history['game'], history['return_ma'], label='10-game mean'); a.legend()b.imshow(Q.max(axis=2), cmap='viridis'); b.set_title('max Q'); plt.show() # Q tablosu ısı haritasıexcept ImportError:print('matplotlib yok: grafik atlandı')
Eğitim paneli
Eğitim çalıştırılıyor…
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Sıfır, alınabilecek en iyi puandır (her adım −1). Bu yüzden hiç denenmemiş her hamle mükemmel görünür ve robot hepsini dener.
- Her hücrede puanı en yüksek hamleyi seçer; eşitlikte rastgele. Rafa çarparsa yerinde kalır.
- Tek öğrenme satırı: yapılan hamlenin puanı = varılan hücrenin en iyi puanı − 1. Şarja varan son hamle −1 alır: "bir adım kaldı".
- Bu bilgi oyun oyun geriye, şarjdan başlangıca doğru akar; sonunda başlangıç hücresi "18 adım" der ve robot hep en kısa yolu izler.
- Şunu dene: depo planını 1 yap. Eski tablo, öğrenme kapalıyken yeni rafa takılır; aynı satırlar yeni planı sıfırdan öğrenir.
Neden önemli
Q-öğrenme, pekiştirmeli öğrenmenin temelidir: doğru cevap verilmez, yalnızca ödül ya da ceza gelir. Tablonun yerine bir sinir ağı koyunca (DQN) aynı fikir Atari oyunlarını ve robot kollarının kavrama hareketlerini öğrenmiştir. Depo ve servis robotlarında rota ve görev seçimi, drone iniş kontrolü bu ailenin uygulamalarıdır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →