---
title: 'Ajan, Ortam ve Ödül'
source: 'https://academia.sh/tr/kurslar/pekistirmeli-ve-oneri/ajan-ortam-ve-odul'
course: 'Pekiştirmeli Öğrenme ve Öneri Sistemleri'
language: tr
updated: '2026-08-17T18:10:17+00:00'
license: 'CC BY-SA 4.0'
---

# Ajan, Ortam ve Ödül

Kararın kendi verisini ürettiği bir düzende üç sayının okunması: saha ziyareti kurgusunda hiç ekip çıkarmayan politika 0,000 getiri alıyor, taban çizgisi olan rastgele eylem 10,432, gecikmesi en büyük aboneye giden el kuralı 20,621. Üçüncü sayı toplanan veridir: rastgele politika 243 durumun 234'ünü ve 1.458 durum-eylem çiftinin 1.251'ini görüyor, daha iyi getiri alan kural yalnız 103 durumu ve 103 çifti görüyor. Aynı dönemde altı eylemin vereceği ödül -2, -2, 1, -2, 1 ve 0 iken ajan bunlardan yalnız birini öğreniyor; denetimli öğrenmenin etiketi yerine geçen şey budur.

Önceki kurs otuz sekiz dersin sonunda tek bir düzeni sürdürdü: modele bir girdi verildi, model
bir çıktı üretti, çıktının doğruluğu ya elde bulunan bir etiketten ya da çıktıyı tarif eden bir
ölçütten okundu. Girdi modelin kararından bağımsızdı. Model ne söylerse söylesin sıradaki satır,
sıradaki cümle, sıradaki görüntü değişmiyordu; küme baştan oradaydı ve orada kalıyordu.

Bu kurs o düzenin dışına çıkar. Burada kararın sonucu ancak karar verildikten **sonra** görünür,
ve kararın kendisi bir sonraki girdiyi **değiştirir**. Bir aboneyi ziyaret etmek onun durumunu
açığa çıkarır, aynı zamanda o durumu ortadan kaldırır; ziyaret edilmeyen abone kötüleşmeye devam
eder. Böyle bir düzende "başarım" sayısı, sayının hangi veri üzerinde ölçüldüğü yazılmadan
okunamaz, çünkü **veriyi politikanın kendisi toplamıştır**. Bu dersin işi döngüyü kurmak ve
kursun üç sayısını yerine oturtmaktır: taban çizgisi, yöntemin sayısı, toplanan veri.

- **PO1. Kurgu saha ziyareti planlamasıdır ve üretilmiştir.** Bölgesel ölçüm ağı kurgusunun bir
  bölgesinde beş abone (A1–A5) bulunur. Hiçbir sayı gerçek bir kayıttan gelmez; hepsi tohum
  20260218 ile ders içinde üretilir.
- **PO2. Her dönem tek ekip çıkar.** Eylem kümesi altı ögelidir: beş aboneden birini ziyaret etmek
  ya da ekibi hiç çıkarmamak.
- **PO3. Abonenin saha durumu gizlidir ve üç kademelidir** — temiz, şüpheli, arızalı. Ziyaret bu
  kademeyi **açığa çıkarır** ve arıza onarıldığı için sıfırlar.
- **PO4. Ziyaret edilmeyen abone kötüleşir.** Her dönem, abonesine özgü bir olasılıkla bir kademe
  yükselir; olasılıklar A1'den A5'e 0,30, 0,05, 0,60, 0,15 ve 0,45'tir.
- **PO5. Ajanın gördüğü durum gecikme sınıfıdır.** Her abone için son ziyaretten bu yana geçen
  dönem sayısı üç kovaya bölünür: 0–2, 3–5, 6 ve üzeri. Durum uzayı $3^5 = 243$ ögedir.
- **PO6. Ödül ziyaretin bulduğudur.** Bulunan kademenin karşılığı sırasıyla 0, 3 ve 9'dur ve her
  ziyaret 2 birim maliyet götürür. Ekip çıkmazsa ödül tam olarak 0'dır.
- **PO7. Bölüm 30 dönemdir ve indirim katsayısı 0,9'dur.** Getiri, bölümdeki ödüllerin indirimli
  toplamıdır; yakın dönemin ödülü uzak dönemin ödülünden ağır basar.
- **PO8. Taban çizgisi rastgele eylemdir.** Hiç ekip çıkarmamak da ölçülür ama taban olamaz:
  getirisi tanım gereği sıfırdır ve sıfır, eylem seçmenin değil ölçünün başlangıç noktasıdır.
- **PO9. Ölçü 300 bölümün ortalama getirisidir** ve yönü büyük iyidir. Bölüm tohumları sabittir,
  bütün politikalar aynı 300 başlangıcı görür.

## Ortam, Eylem ve Ödül Döngüsü

```python
# ortam.py — KURGUDUR. Saha ziyareti planlamasi: bir bolgedeki bes abone ve
# her donem cikan tek ekip. Butun sayilar uretilmistir, bir kayittan gelmez.
import statistics

TOHUM, M32 = 20260218, 0xFFFFFFFF
ABONE, KAZANC, MALIYET = 5, (0, 3, 9), 2
KOTULESME = (0.30, 0.05, 0.60, 0.15, 0.45)
ETIKET = ("A1", "A2", "A3", "A4", "A5", "cikma")
EYLEM, UFUK, INDIRIM = ABONE + 1, 30, 0.9


def uretec(t):
    """Kendi yazilmis uretec; tohum sabit oldugu icin cikti her kosumda ayni."""
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


class Ortam:
    """Saha durumu d gizlidir; ajanin gordugu durum gecikme sinifidir."""

    def __init__(self, tohum):
        self.r = uretec(tohum)
        self.d, self.g = [0] * ABONE, [0] * ABONE
        for i in range(ABONE):
            self.g[i] = int(self.r() * 6)
            for _ in range(self.g[i]):
                if self.d[i] < 2 and self.r() < KOTULESME[i]:
                    self.d[i] += 1

    def durum(self):
        return tuple(min(2, x // 3) for x in self.g)

    def adim(self, a):
        odul = 0.0
        if a < ABONE:
            odul = KAZANC[self.d[a]] - MALIYET
            self.d[a] = 0
            self.g[a] = 0
        for i in range(ABONE):
            if i != a:
                self.g[i] += 1
                if self.d[i] < 2 and self.r() < KOTULESME[i]:
                    self.d[i] += 1
        return self.durum(), odul


def bolum(politika, tohum, iz=None):
    o = Ortam(tohum)
    s, G, c = o.durum(), 0.0, 1.0
    for _ in range(UFUK):
        a = politika(s, o)
        s2, r = o.adim(a)
        if iz is not None:
            iz.append((s, a, r, s2))
        G, c, s = G + c * r, c * INDIRIM, s2
    return G


def kosum(politika, n=300, iz=None):
    return [bolum(politika, TOHUM + 1000 * k, iz) for k in range(n)]


def rastgele_politika(tohum):
    r = uretec(tohum)
    return lambda s, o: int(r() * EYLEM)


o = Ortam(TOHUM)
r = uretec(TOHUM + 7)
print("donem  durum            eylem   odul  getiriye katki")
G, c = 0.0, 1.0
for t in range(8):
    s, a = o.durum(), int(r() * EYLEM)
    _, odul = o.adim(a)
    G, k = G + c * odul, c * odul
    print(f"{t:>4}   {str(s):<17}{ETIKET[a]:<6}{odul:>6.1f}{k:>13.3f}")
    c *= INDIRIM
print(f"sekiz donemin getirisi {G:.3f}")
```

```
donem  durum            eylem   odul  getiriye katki
   0   (1, 0, 0, 1, 0)  A5       1.0        1.000
   1   (2, 0, 0, 1, 0)  A3       7.0        6.300
   2   (2, 0, 0, 2, 0)  A1      -2.0       -1.620
   3   (0, 1, 0, 2, 0)  A2      -2.0       -1.458
   4   (0, 0, 0, 2, 1)  A3       7.0        4.593
   5   (0, 0, 0, 2, 1)  A5       7.0        4.133
   6   (1, 0, 0, 2, 0)  A4       1.0        0.531
   7   (1, 1, 0, 0, 0)  A3       7.0        3.348
sekiz donemin getirisi 16.828
```

Sekiz satır döngünün tamamını taşıyor. **Ajan** ekibi yönlendiren taraftır, **ortam** aboneleri ve
onların kötüleşmesini tutan taraf. Ajan bir **durum** görür, bir **eylem** seçer, ortam bir **ödül**
döndürür ve yeni bir duruma **geçer**. Üçüncü dönemde A1 ziyaret ediliyor ve ödül $-2$ çıkıyor:
ekip gitmiş, abone temiz bulunmuş, maliyet boşa yazılmış. Yedinci dönemde A3 ziyaret ediliyor ve
ödül 7 oluyor, çünkü arıza kademesi bulunmuş ve onarılmış.

Ödül tek adımlıktır ve ajanın istediği şey tek adım değildir. **Getiri**, bölüm boyunca alınan
ödüllerin indirimli toplamıdır: $G = \sum_{t} \gamma^{t} r_t$, burada $\gamma = 0{,}9$. Sağdaki
sütun aynı 7'nin dördüncü dönemde 4,593, yedinci dönemde 3,348 olarak sayıldığını gösteriyor.
İndirim katsayısı bir tercihtir ve tercihi ölçü hâline getirir: aynı kazanç ne kadar geç gelirse o
kadar az sayılır. Sekiz dönemin getirisi 16,828.

Üçüncü dönemin bir ayrıntısı ilerideki dersin konusudur. Durum $(2, 0, 0, 2, 0)$ iken A1'in gecikme
sınıfı 2'dir, yani en az altı dönemdir ziyaret edilmemiştir, ama bulunan kademe temizdir ve ödül
$-2$'dir. Gecikme sınıfı abonenin gerçek kademesini söylemez, yalnız onunla ilişkilidir.

## Taban Çizgisi ve Politikanın Sayısı

```python
# politika.py — Ayni ortam, ayni 300 bolum tohumu, ayni ufuk; degisen politika.


def bos_politika(s, o):
    """Ekip hic cikmaz: getirisi tanim geregi sifirdir."""
    return ABONE


def kural_politika(s, o):
    """Gecikme sinifi en buyuk aboneyi ziyaret et; hepsi 0 ise ekip cikarma."""
    en = max(s)
    return ABONE if en == 0 else s.index(en)


print(f"{'politika':<26}{'getiri':>9}{'en dusuk':>10}{'en yuksek':>11}")
for ad, pol in (("hic ekip cikarma", bos_politika),
                ("rastgele eylem", rastgele_politika(TOHUM + 7)),
                ("gecikmesi en buyuge git", kural_politika)):
    g = kosum(pol)
    print(f"{ad:<26}{statistics.mean(g):>9.3f}{min(g):>10.3f}{max(g):>11.3f}")
```

```
politika                     getiri  en dusuk  en yuksek
hic ekip cikarma              0.000     0.000      0.000
rastgele eylem               10.432    -6.887     31.159
gecikmesi en buyuge git      20.621     2.370     41.179
```

**Politika**, durumdan eyleme giden kuraldır. Üç politika aynı 300 başlangıcı görüyor ve üç ayrı
sayı veriyor. İlki hiç ekip çıkarmaz: her dönemde ödülü 0'dır, dolayısıyla getirisi de tam olarak
0'dır, en düşük ve en yüksek bölümü bile 0'dır. İkincisi altı eylemden birini ayrım gözetmeden
seçer ve 10,432 alır. Üçüncüsü tek satırlık bir el kuralıdır — hiçbir şey öğrenmez, yalnız durumu
okur — ve 20,621 alır.

Taban çizgisi olarak **rastgele eylem** seçilir. Hiç ekip çıkarmamak daha düşük bir sayı verse de
taban olamaz, çünkü getirisi ölçünün sıfır noktasıdır: bir politikanın onu geçmesi, o politikanın
eylem seçmeyi öğrendiğini değil, yalnız hareket etmenin bu kurguda hareketsizlikten iyi olduğunu
söyler. Rastgele eylem ise **eylem seçen ama seçimini hiçbir bilgiye dayandırmayan** yordamdır ve
karşılaştırmayı anlamlı kılan budur. İki taban da basılır, çünkü aralarındaki 10,432'lik açıklık
kurgunun kendisinin ne kadar cömert olduğunu ölçer.

Kuralın rastgele eylemi 10,189 aşması nereden gelir. Rastgele politika beş aboneyi eşit görür,
oysa A2 dönem başına 0,05 olasılıkla kötüleşir; ona yapılan ziyaret çoğunlukla $-2$ yazar. Kural,
gecikmesi büyük aboneye giderek boşa ziyareti azaltır. En düşük bölüm sayıları da bunu gösteriyor:
rastgele politikanın en kötü bölümü $-6,887$ iken kuralın en kötüsü $+2,370$'tir.

En yüksek bölüm sayıları ise tersini söylüyor ve okunmayı hak ediyor. Rastgele politika bir
bölümde 31,159'a kadar çıkabiliyor; kuralın en iyi bölümü 41,179. İki dağılım örtüşüyor, yani tek
bir bölüme bakan biri rastgele politikayı kuraldan iyi görebilirdi. Ortalama 300 bölüm üzerinden
alınmasının nedeni budur: bölüm getirisi hem başlangıç durumundan hem de kötüleşmenin çekilişinden
etkilenir, ve iki politikayı ayıran şey tek bölümde değil ortalamada görünür.

## Toplanan Veri

```python
# veri.py — Ucuncu sayi: politika kendi verisini topladigi icin durum uzayinin
# ne kadarini gordugu politikanin kendisine baglidir.
from collections import Counter

gorulen = {}
for ad, pol in (("rastgele eylem", rastgele_politika(TOHUM + 7)),
                ("gecikmesi en buyuge git", kural_politika)):
    iz = []
    kosum(pol, 300, iz)
    say = Counter(x[0] for x in iz)
    gorulen[ad] = set(say)
    cift = {(x[0], x[1]) for x in iz}
    pay = sum(n for _, n in say.most_common(3)) / len(iz)
    print(f"{ad:<26} durum {len(say):>4}/243  cift {len(cift):>5}/1458  "
          f"adim {len(iz)}  ilk uc durumun payi {pay:.4f}")

R, K = gorulen["rastgele eylem"], gorulen["gecikmesi en buyuge git"]
print(f"rastgelenin gorup kuralin gormedigi durum {len(R - K)}, "
      f"tersi {len(K - R)}, ikisinin de gormedigi {243 - len(R | K)}")

print("\nayni donemde alti eylemin verecegi odul (yalniz kurgu sahibi gorebilir):")
for a in range(EYLEM):
    o2 = Ortam(TOHUM)
    s0 = o2.durum()
    print(f"  {ETIKET[a]:<7}{o2.adim(a)[1]:>6.1f}")
print(f"baslangic durumu {s0}; ajanin gordugu bu alti satirdan yalniz biri")
```

```
rastgele eylem             durum  234/243  cift  1251/1458  adim 9000  ilk uc durumun payi 0.0319
gecikmesi en buyuge git    durum  103/243  cift   103/1458  adim 9000  ilk uc durumun payi 0.3327
rastgelenin gorup kuralin gormedigi durum 131, tersi 0, ikisinin de gormedigi 9

ayni donemde alti eylemin verecegi odul (yalniz kurgu sahibi gorebilir):
  A1       -2.0
  A2       -2.0
  A3        1.0
  A4       -2.0
  A5        1.0
  cikma     0.0
baslangic durumu (1, 0, 0, 1, 0); ajanin gordugu bu alti satirdan yalniz biri
```

Üst iki satır bu kursun ayırt edici sayısıdır. İki politika **aynı** bütçeyi harcıyor: 300 bölüm,
bölüm başına 30 dönem, toplam 9.000 adım. Topladıkları veri aynı değil. Rastgele politika 243
durumun 234'ünü ve 1.458 durum-eylem çiftinin 1.251'ini görüyor. Getirisi iki katı olan kural ise
yalnız 103 durum ve 103 çift görüyor — 140 durum ve 1.355 çift hakkında elinde tek bir gözlem yok.

İki sayının eşit olması kuralın belirleyici olmasındandır: gördüğü her durumda tek bir eylem
seçer, dolayısıyla o durumdaki öteki beş eylemin ne vereceğini hiçbir zaman öğrenmez. Daha iyi
getiri alan politika daha dar bir veri topluyor. Bu, kursun kuralının doğrudan sonucudur:
**topladığı veriyi yazmayan sistem ölçülmemiş sayılır**, çünkü 20,621 sayısı 103 durumluk bir
kesitte geçerlidir ve o kesitin dışında politikanın ne yapacağı ölçülmemiştir.

Sağdaki sütun aynı daralmayı yoğunluk üzerinden okuyor. Rastgele politikanın en çok uğradığı üç
durum 9.000 adımın yalnız 0,0319'unu tutar, yani ziyaretler durum uzayına neredeyse düz yayılır.
Kuralın en çok uğradığı üç durum ise adımların 0,3327'sini tutar: her üç adımdan biri aynı üç
durumdan birinde geçer. Üçüncü satır ilişkiyi kapatıyor. Kuralın gördüğü 103 durumun tamamını
rastgele politika da görmüştür, tersi ise 131 durumda yanlıştır — yani daha iyi politikanın veri
kümesi, tabanın veri kümesinin **öz altkümesidir**. Dokuz durumu ikisi de hiç görmedi.

Bu üçüncü sayının önceki altı kursta karşılığı yoktu. Orada küme ne yapılırsa yapılsın aynıydı;
bir modelin taban çizgisini geçmesi, üzerinde ölçüldüğü kümeyi değiştirmiyordu. Burada politika
değiştiği anda küme de değişiyor, dolayısıyla iki politikanın getirisi karşılaştırılırken iki ayrı
veri kümesi de karşılaştırılmış oluyor. İleride bir politikanın **öğrenilmesi** gerektiğinde bu
daralma doğrudan bir sorun hâline gelir: 1.355 çift hakkında hiç gözlemi olmayan bir yordam, o
çiftlerden birinin daha iyi olup olmadığını hiçbir zaman öğrenemez.

Alt blok denetimli öğrenmeden farkı tek bir oranla veriyor. Başlangıç durumu $(1, 0, 0, 1, 0)$ iken
altı eylemin vereceği ödüller $-2$, $-2$, $1$, $-2$, $1$ ve $0$'dır. Bu altı satır yalnızca kurgu
sahibi ortamı altı kez aynı tohumdan kurabildiği için basılabiliyor; ajan bir eylem seçer ve
**yalnız bir satırı** öğrenir, ötekiler kapanır. Denetimli öğrenmede her örnek doğru cevabını
yanında getirirdi; burada her adımda altı sonuçtan biri, yani **altıda biri** görünür, üstelik
seçilmeyen beş eylemin sonucu sonradan da sorulamaz çünkü ortam artık başka bir durumdadır.

## Özet

- Ajan durumu görür, eylem seçer, ortam ödül döndürür ve yeni duruma geçer; getiri bölümdeki
  ödüllerin indirim katsayısı 0,9 ile indirimli toplamıdır ve örnek sekiz dönemde 16,828'dir.
- Hiç ekip çıkarmayan politikanın getirisi tanım gereği 0,000'dır; taban çizgisi bu değil,
  eylem seçen ama seçimini hiçbir bilgiye dayandırmayan **rastgele eylem** politikasıdır: 10,432.
- Durumu okuyan tek satırlık el kuralı 20,621 alır; farkın kaynağı, kötüleşme olasılığı 0,05 olan
  aboneye yapılan boşa ziyaretlerin azalmasıdır.
- Aynı 9.000 adımlık bütçede rastgele politika 243 durumun 234'ünü, kural yalnız 103'ünü görür;
  belirleyici olduğu için kuralın gördüğü durum-eylem çifti sayısı da 103'te kalır.
- Kuralın veri kümesi tabanınkinin öz altkümesidir: rastgele politikanın gördüğü 131 durumu kural
  hiç görmez, tersi hiç olmaz, ve kuralın adımlarının 0,3327'si yalnız üç durumda geçer.
- Ajan her adımda altı eylemden yalnız birinin sonucunu öğrenir; seçilmeyen beş eylemin ödülü
  sonradan da sorulamaz, çünkü ortam bu arada değişmiştir.

## Sonraki Adım

Bu derste durum, eylem, geçiş ve ödül adlarıyla kullanıldı ama hiçbiri tanımlanmadı. Tanımın
gerektirdiği tek şey ise sayıların hepsini birden taşıyor: ortamın bir sonraki duruma nasıl
geçeceği ve hangi ödülü vereceği, **yalnız o anki duruma ve seçilen eyleme** bağlı olmalıdır. Bu
derste basılan bir satır bu koşulu şimdiden zorluyordu: A1'in gecikme sınıfı 2 iken bulunan kademe
temizdi ve ödül $-2$ oldu, oysa başka bir bölümde aynı sınıf 7 verebilirdi. Sonraki ders kurulumu
biçimsel bir beşliye oturtur, koşulun ne söylediğini yazar ve **koşul bozulduğunda ne kaybedildiğini
sayar**: aynı el kuralı, duruma bir geçmiş alanı eklendiğinde kaç puan daha fazla getiri alıyor.
