Okullar için Robotik ve Mühendislik · anaokulundan liseye

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.

220 puan, hepsi 0: her hamle mükemmel görünüyoren kısa yol 18 adım
1 / 78
q_ogrenme.pypython
  1. import numpy as np
  2. L = ["S..#.......", # S başlangıç, G şarj, # raf
  3. ".#.#.###.#.",
  4. ".#...#...#.",
  5. ".####.#.##.",
  6. "......#...G"]
  7. H, W = len(L), len(L[0])
  8. Q = np.zeros((H, W, 4)) # 5·11·4 = 220 puan, hepsi 0
  9. M = [(-1, 0), (1, 0), (0, -1), (0, 1)] # yukarı, aşağı, sol, sağ
  10. rng = np.random.default_rng(14)
  11. history = {k: [] for k in ('game', 'steps', 'return', 'return_ma', 'bumps', 'shortest', 'q_start', 'untried')} # bölüm geçmişi
  12. for game in range(1, 61):
  13. r, c, steps, bumps = 0, 0, 0, 0 # S hücresinden başla
  14. while L[r][c] != "G":
  15. best = np.flatnonzero(Q[r, c] == Q[r, c].max()) # en iyi puanlı hamleler
  16. a = rng.choice(best) # eşitlikte rastgele
  17. nr, nc = r + M[a][0], c + M[a][1]
  18. if not (0<=nr<H and 0<=nc<W) or L[nr][nc]=="#":
  19. nr, nc, bumps = r, c, bumps + 1 # çarptı, yerinde kalır
  20. target = 0 if L[nr][nc] == "G" else Q[nr, nc].max()
  21. Q[r, c, a] = target - 1 # öğrenmenin tamamı
  22. r, c, steps = nr, nc, steps + 1
  23. for 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 18
  24. if game in (1, 2, 10, 37, 60):
  25. print(game, steps, bumps) # oyun, adım, çarpma
  26. print('son 10 oyun ortalama getiri:', history['return_ma'][-1], '· en kısa yol oranı:', np.mean(history['shortest'][-10:])) # son ölçümler
  27. print('başlangıçtan tahmini adım:', history['q_start'][-1], '· denenmemiş Q payı:', round(history['untried'][-1], 3))
  28. import csv
  29. with open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yaz
  30. csv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir oyun
  31. try:
  32. import matplotlib.pyplot as plt # varsa grafik çiz
  33. fig, (a, b) = plt.subplots(1, 2, figsize=(9, 3.5))
  34. a.plot(history['game'], history['return'], label='return'); a.plot(history['game'], history['return_ma'], label='10-game mean'); a.legend()
  35. b.imshow(Q.max(axis=2), cmap='viridis'); b.set_title('max Q'); plt.show() # Q tablosu ısı haritası
  36. except ImportError:
  37. 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.

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.

q_ogrenme.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. 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.
  2. Her hücrede puanı en yüksek hamleyi seçer; eşitlikte rastgele. Rafa çarparsa yerinde kalır.
  3. 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ı".
  4. 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.
  5. Ş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 →
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç