Agent
- Makine Öğrenmesi kursu
- Uzman
- Ders 36/44
- 5 dk
Agent, ortamla etkileşimerek eylem seçer.
Ajan
Ajan, gözlemi alıp eylem seçen ve deneyimden öğrenen parçadır. En basit ajan rastgele davranır; bu, her yöntemin geçmesi gereken taban çizgisidir:
class RastgeleAjan:
def __init__(self, rng):
self.rng = rng
def sec(self, durum):
return int(self.rng.integers(2))Ajanın performansı tek bölümle değil, çok sayıda bölümün ortalama toplam ödülüyle ölçülür; çünkü ortam ya da ajan rastgele olabilir.
Bölüm sınırı
Rastgele bir ajan hedefe hiç ulaşamayabilir; bu yüzden bölümlere bir adım sınırı konur (Gymnasium'da truncated). Sınıra ulaşan bölüm "başarısız" sayılır:
def bolum(ajan, sinir=50):
durum, toplam = 0, 0.0
for t in range(sinir):
durum, odul, bitti = adim(durum, ajan.sec(durum))
toplam += odul
if bitti:
return toplam, t + 1
return toplam, sinirOrtalama bölüm uzunluğu da yararlı bir ölçüdür: iyi bir ajan koridoru 4 adımda geçer.
Uygulama Rastgele ve sabit ajan
Verilen bolum fonksiyonuyla RastgeleAjan ve hep sağa giden SagAjan'ı 1000 bölüm çalıştır. Her biri için ortalama toplam ödülü ve ortalama bölüm uzunluğunu round(..., 2) ile aynı satırda yazdır.
Başlangıç kodu
import numpy as np
N = 5 # durumlar 0..4, hedef 4
SOL, SAG = 0, 1
def adim(durum, eylem):
yeni = max(0, durum - 1) if eylem == SOL else durum + 1
if yeni == N - 1:
return yeni, 1.0, True
return yeni, -0.1, False
def bolum(ajan, sinir=50):
durum, toplam = 0, 0.0
for t in range(sinir):
durum, odul, bitti = adim(durum, ajan.sec(durum))
toplam += odul
if bitti:
return toplam, t + 1
return toplam, sinir
rng = np.random.default_rng(0)
# buraya yazÖrnek çözüm
import numpy as np
N = 5 # durumlar 0..4, hedef 4
SOL, SAG = 0, 1
def adim(durum, eylem):
yeni = max(0, durum - 1) if eylem == SOL else durum + 1
if yeni == N - 1:
return yeni, 1.0, True
return yeni, -0.1, False
def bolum(ajan, sinir=50):
durum, toplam = 0, 0.0
for t in range(sinir):
durum, odul, bitti = adim(durum, ajan.sec(durum))
toplam += odul
if bitti:
return toplam, t + 1
return toplam, sinir
rng = np.random.default_rng(0)
class RastgeleAjan:
def sec(self, durum):
return int(rng.integers(2))
class SagAjan:
def sec(self, durum):
return SAG
for ajan in [RastgeleAjan(), SagAjan()]:
s = np.array([bolum(ajan) for _ in range(1000)])
print(round(s[:, 0].mean(), 2), round(s[:, 1].mean(), 2))Beklenen çıktı
-0.89 19.42 0.7 4.0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir ajanın performansı neden çok sayıda bölümün ortalamasıyla ölçülür?
- Ajan ya da ortam rastgele olabildiği için tek bölüm yanıltıcıdır Doğru cevap
- Ödül yalnızca sonda verilir
- Ortalama her zaman sıfırdır
- Bölümler birbirine bağlıdır
Açıklama: Varyansı azaltmak için çok bölüm ortalanır.
2 Rastgele bir eylem seç.
return int(self.rng.____(2))
return int(self.rng.integers(2))
Açıklama: integers(2), 0 ya da 1 döndürür.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
rastgele ajan |
Taban çizgisi |
adım sınırı |
Kesilmiş bölüm |
ortalama ödül |
Performans ölçüsü |
4 adım |
En iyi koridor süresi |