CodeBlanks Logo Icon CodeBlanks

Agent

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, sinir

Ortalama 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

model.py
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

model.py
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ç.

Soru
return int(self.rng.____(2))
Cevap
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

Uzman bölümündeki tüm dersler