Minimaks ve Alfa-Beta Budaması
Giriş
Oyunla Başlangıç: YZ'ye Karşı XOX
Bir kareye tıklanınca insan oyuncunun taşı konur. YZ oynamadan önce her boş kareye o kareyi seçerse oyunun sonunda ne alacağını yazar (+ kazanır, 0 berabere, − kaybeder); turuncu kare YZ'nin seçimidir. Hamleyi YZ oynasın düğmesi yapar.
Giriş
Öğrenme Çıktıları
Konumu düğüm, hamleyi kenar olarak çizmek; MAX ve MIN katmanlarını, yaprakları ve faydayı tanımak; ağaç boyutunu bd ile kestirmek.
Değerleri yapraktan köke elle yükseltmek; kökün seçtiği hamleyi ve nedenini söylemek; kodu satır satır izlemek.
Nim'de minimaksın P/N konumlarıyla ve XOR kuralıyla aynı sonucu verdiğini; XOX'ta derinlik cezasının neden gerektiğini göstermek.
α ve β'yı tanımlamak, her düğümde [α, β] aralığını izlemek, α ≥ β olduğunda budanan dalları bulmak ve sonucun değişmediğini açıklamak.
En iyi ve en kötü sıralamada değerlendirilen yaprak sayısını (bd/2 ile bd) karşılaştırmak.
Dörtlü Bağla için değerlendirme fonksiyonu yazmak; ufuk etkisini, yinelemeli derinleştirmeyi ve geçiş tablosunu açıklamak.
Oyun Ağacı
Oyun Ağacı: Konumlar ve Hamleler
- Düğüm bir konumdur (tahta ve sıradaki oyuncu); kenar bir hamledir. Kök şimdiki konumdur.
- İki oyuncu sırayla oynar, şans yoktur, iki taraf da tahtayı görür: mükemmel bilgili, sıfır toplamlı oyun.
- Kökte sırası olan oyuncuya MAX denir (▲): değeri büyütmek ister. Rakibi MIN'dir (▽): değeri küçültmek ister.
- Katmanlar sırayla MAX ve MIN olur; bir katman inmek bir yarım hamle (bir oyuncunun bir hamlesi) demektir.
- Aynı konuma farklı sıralarla gelinebilir; ağaçta bu konum birden çok düğüm olarak görünür.
Oyun Ağacı
Yapraklar ve Fayda
- Yaprak (oyun sonu): kazanan belli ya da tahta dolu; çocuğu yoktur.
- Her yaprağın bir faydası vardır. XOX'ta MAX'ın (X) gözünden: X kazanırsa +1, berabere 0, O kazanırsa −1.
- Oyun sıfır toplamlıdır: O'nun faydası X'inkinin eksisidir (uO = −uX). Bu yüzden ağaçta tek bir sayı yeter.
- İç düğümlerin değeri henüz bilinmez; minimaks onları yapraklardan hesaplar.
Oyun Ağacı
Dallanma Etkeni ve Derinlik
- Dallanma etkeni b: bir konumdaki yasal hamle sayısı (ortalama ya da en çok). Derinlik d: oyunun yarım hamle cinsinden uzunluğu.
- Her düğümün b çocuğu varsa d derinlikte bd yaprak olur: ağaç boyutu ≈ bd. Derinlik bir artınca iş b katına çıkar.
| Oyun | b | d (yarım hamle) | Ağaç ya da konum sayısı |
|---|---|---|---|
| XOX | ≤ 9 | ≤ 9 | 9! = 362.880 üst sınır; gerçekte 255.168 oyun, 549.946 düğüm |
| Dörtlü Bağla | ≤ 7 | ≤ 42 | 4.531.985.219.092 ≈ 4,5·1012 yasal konum (Tromp) |
| Satranç | ≈ 35 | ≈ 80 | 3580 ≈ 10123; Shannon'un (1950) kaba tahmini ≈ 10120 oyun |
| Go (19×19) | ≈ 250 | ≈ 150 | ≈ 2,1·10170 yasal konum (Tromp ve Farnebäck, 2016) |
Minimaks
Minimaks Değeri
Bir s konumunun minimaks değeri, iki taraf da en iyi oynarsa MAX'ın oyunun sonunda alacağı faydadır:
minimaks(s) = fayda(s) s oyun sonuysa max minimaks(sonuç(s, a)) sıra MAX'taysa a min minimaks(sonuç(s, a)) sıra MIN'deyse a
- Tanım özyinelemelidir: arama derinlik öncelikli iner, değerler yapraktan köke yükselir.
- Kökte MAX, değeri en büyük çocuğa giden hamleyi seçer.
- Zaman: her düğüm bir kez → O(bd).
- Bellek: yalnız kökten o anki düğüme giden yol ve kardeş bilgisi → O(b·d).
- Rakip hatasız oynarsa minimaks hamlesi en iyisidir; rakip hata yaparsa MAX en az minimaks değerini alır.
Minimaks
Kökün Değeri Ne Olur?
Üç katmanlı ağaçta kök MAX, ikinci katman MIN, üçüncü katman MAX. Kökün değeri kaçtır ve MAX hangi hamleyi seçer?
Minimaks
Minimaks Adım Adım
Turuncu: şu an işlenen düğüm · kırmızı çerçeve: yığındaki düğümler · gri sayı: henüz kesinleşmemiş değer · kalın kenar: kökün seçtiği hamle.
Minimaks
Kod İzleme: Minimaks Fonksiyonu
from math import inf T = {"A": ["B", "C", "D"], "B": [3, 5], "C": [2, 9], "D": [6, 4]} def minimaks(n, maks): if isinstance(n, int): # yaprak return n deger = -inf if maks else inf for c in T[n]: v = minimaks(c, not maks) if maks: deger = max(deger, v) else: deger = min(deger, v) return deger print(minimaks("A", True))
İlk çağrı: kök A bir MAX düğümü, deger = -inf.
minimaks("B") çağrılır: MIN, deger = inf.
minimaks(3) bir yaprak: 3 döner. min ile deger = 3.
minimaks(5) bir yaprak: 5 döner. min ile deger = 3; B bitti, 3 döner.
B çağrısı 3 döndürdü. max ile deger = 3.
minimaks("C") çağrılır: MIN, deger = inf.
minimaks(2) bir yaprak: 2 döner. min ile deger = 2.
minimaks(9) bir yaprak: 9 döner. min ile deger = 2; C bitti, 2 döner.
C çağrısı 2 döndürdü. max ile deger = 3.
minimaks("D") çağrılır: MIN, deger = inf.
minimaks(6) bir yaprak: 6 döner. min ile deger = 6.
minimaks(4) bir yaprak: 4 döner. min ile deger = 4; D bitti, 4 döner.
D çağrısı 4 döndürdü. max ile deger = 4; A bitti, 4 döner.
Kökün değeri 4: A, D'ye giden hamleyi seçer. 6 yaprağın hepsi okundu.
Minimaks
Minimaks, Geriye Doğru Çıkarım ve Maksimin
- Minimaks, geriye doğru çıkarımın iki kişilik, sıfır toplamlı özel hâlidir: genel oyunda her düğümde sıradaki oyuncu kendi kazancını büyütür; sıfır toplamda B'nin kazancı A'nınkinin eksisi olduğundan “B büyütür” = “A'nınkini küçültür”.
- Maksimin: MAX'ın garanti edebileceği en iyi değer, maxs mint u(s, t). Minimaks: MIN'in MAX'ı tutabileceği en düşük değer, mint maxs u(s, t).
- Mükemmel bilgili sonlu oyunda ikisi eşittir ve saf stratejiler yeter (Zermelo, 1913; Kuhn, 1953). Ağaçtaki minimaks değeri bu ortak değerdir.
Yazı-Tura'da (eşleşirse A +1, eşleşmezse −1) saf stratejilerde maksimin −1, minimaks +1'dir: aralık kapanmaz.
von Neumann (1928): karışık stratejilere izin verilince her sonlu iki kişilik sıfır toplamlı oyunda maksimin = minimaks (minimaks teoremi). Yazı-Tura'da ortak değer 0'dır.
Minimaks
Minimaksın Varsayımı: Hatasız Rakip
MAX, rakip ne yaparsa yapsın en az minimaks değerini alır. Rakip hata yaparsa daha fazlasını alabilir, daha azını asla.
Zayıf bir rakibe karşı en çok kazancı getiren hamleyi bulmaz: değeri eşit iki hamleden rakibe tuzak kuranı ayırt etmez.
Tavla gibi zarlı oyunlarda ağaca şans düğümleri eklenir ve orada ortalama alınır (expectiminimaks); budama zorlaşır.
Nim
Nim'in Oyun Ağacı
Sırası gelen tek bir yığından en az bir jeton alır, son jetonu alan kazanır. Düğümde yığın boyları; +1: A (ilk oynayan) kazanır. Nim oyunu →
Nim
P ve N Konumları = Minimaks Değeri
- N konumu: sıradaki oyuncu kazanır. P konumu: bir önceki oyuncu (sıradaki değil) kazanır.
- Kurallar: hamlesi olmayan konum P'dir; bir konum N'dir ⇔ en az bir hamle P'ye gider; P'dir ⇔ her hamle N'ye gider.
- Değer sıradaki oyuncunun gözünden yazılırsa (+1 kazanır, −1 kaybeder):
değer(s) = maxa −değer(sonuç(s, a)). Bu, minimaksın tek fonksiyonla yazılışıdır (negamaks). - “En az bir çocuk −1 ise +1” kuralı, N tanımının ta kendisidir: N ⇔ +1, P ⇔ −1.
| Konum | Sıradakine değer | Tür |
|---|---|---|
| (0, 0) | −1 | P |
| (1, 0) | +1 | N |
| (1, 1) | −1 | P |
| (2, 0) | +1 | N |
| (1, 2) | +1 | N |
| (2, 2) | −1 | P |
| (1, 2, 3) | −1 | P |
Nim
Minimaks ve Bouton'un XOR Kuralı
Bouton (1901): konum P'dir ⇔ yığınların nim toplamı (XOR) 0'dır. Kazandıran hamle XOR'u 0 yapan hamledir. Minimaksın tam ağaçta bulduğu hamleyle karşılaştırma:
| Konum | XOR | Minimaksın kazandıran hamlesi | XOR'u 0 yapan hamle | Tam ağaç |
|---|---|---|---|---|
| (1, 2) | 3 | → (1, 1) | → (1, 1) ✓ | 12 düğüm |
| (1, 3) | 2 | → (1, 1) | → (1, 1) ✓ | 28 düğüm |
| (2, 3) | 1 | → (2, 2) | → (2, 2) ✓ | 86 düğüm |
| (1, 2, 3) | 0 | yok: P konumu | yok ✓ | 447 düğüm |
| (3, 4, 5) | 2 | → (1, 4, 5) | → (1, 4, 5) ✓ | 1.038.768 düğüm |
XOX'ta Minimaks
XOX'ta Değer Ölçeği ve Derinlik Cezası
- ±1 ölçeğinde hızlı kazanç ile yavaş kazanç aynı değeri alır. Sağdaki konumda X sol altla hemen kazanır, merkezle iki hamle sonra kazanır: ikisi de +1.
- Eşitlikte ilk denenen kare seçilir; merkez önce denenirse YZ hazır kazancı bırakıp oyunu uzatır. Kaybederken de en çabuk kaybedeni seçebilir.
- Derinlik cezası: d kökten itibaren hamle sayısıysa
X kazanırsa +(10 − d) O kazanırsa −(10 − d) berabere 0
Hızlı kazanç ve geç kayıp tercih edilir: +9 > +7, −6 > −8.
XOX'ta Minimaks
XOX Laboratuvarı
Bir kareye tıklanınca boş → X → O → boş döner; böylece istenen konum kurulur. Sayılar X'in gözünden minimaks değeri: MAX (X) en büyüğü, MIN (O) en küçüğü seçer; turuncu kare seçimdir. Gerekçe değerlerden sonra kurallarla açıklanır.
XOX'ta Minimaks
Hamlenin Gerekçesi
- Seçimi yalnız değerler yapar; gerekçe, seçilen hamlenin ne işe yaradığını sırayla sorarak söylenir:
- 1) Üçlüyü tamamlıyor mu? → kazanır. 2) Rakibin tek hamlelik tehdidini kapatıyor mu? → engeller.
- 3) Aynı anda iki tehdit kuruyor mu? → çatal kurar. 4) Yoksa değerin işareti: kazanmayı zorlar / berabere tutar / kaybı geciktirir.
“Önce kazan, sonra engelle, sonra çatal kur” gibi kurallarla da iyi bir XOX oyuncusu yazılabilir. Minimaks bu kuralların hiçbirini bilmez; hepsini ağacı arayarak kendisi bulur. Aynı program Dörtlü Bağla'da da çalışır, kurallar çalışmaz.
XOX'ta Minimaks
Orta Oyun Konumunun Tam Ağacı
XOX'ta Minimaks
Boş Tahtanın Değeri: Beraberlik
- Boş tahtadan tam minimaks araması 549.946 düğüm ziyaret eder; bunların 255.168'i yaprak, yani farklı oyunlardır.
- X'in dokuz ilk hamlesinin hepsinin değeri 0: hiçbir açılış kazancı zorlamaz, iki taraf da hatasız oynarsa oyun berabere biter.
- Değerler eşit olduğundan seçimi sıralama belirler; laboratuvardaki YZ eşitlikte merkez, köşeler, kenarlar sırasını kullanır.
- O'nun işi daha zordur: X köşeyle açarsa O'nun tek berabere tutan cevabı merkezdir; diğer yedi cevabın her biri kaybettirir.
- Aynı konumlar tekrar tekrar aranır: farklı konum sayısı yalnız 5.478'dir.
Alfa-Beta Budaması
Bazı Dalları Okumaya Gerek Yok
- A (MAX) ilk çocuğu B'den 3'ü garanti etti: B = min(3, 12, 8) = 3.
- C'nin ilk yaprağı 2. C bir MIN düğümü olduğundan değeri en fazla 2 olur.
- A, 3 varken en fazla 2 veren C'yi asla seçmez: C'nin kalan yaprakları (4 ve 6) ne olursa olsun kökün değeri değişmez.
- Bu iki yaprak hiç okunmaz: budanır. Satrançta bir “yaprak” derin bir alt ağaçtır; budama milyonlarca düğümü kurtarır.
Alfa-Beta Budaması
α ve β
Kökten bu düğüme giden yol üzerinde MAX'ın şimdiden garanti ettiği en iyi değer. Başta −∞. Yalnız MAX düğümlerinde büyür: α = max(α, değer).
Aynı yol üzerinde MIN'in şimdiden garanti ettiği en iyi (en küçük) değer. Başta +∞. Yalnız MIN düğümlerinde küçülür: β = min(β, değer).
- Her düğüm [α, β] aralığını ebeveyninden alır ve çocuklarına aynen aktarır; ebeveyne geri dönen yalnız değerdir.
- Bir düğümün değeri bu aralığın dışına düşerse sonucu etkilemez: α'dan küçükse MAX onu seçmez, β'dan büyükse MIN onu seçmez.
- Aralık boşalırsa (α ≥ β) düğümün kalan çocuklarına bakmaya gerek kalmaz.
Alfa-Beta Budaması
Budama Koşulu: α ≥ β
Kök MIN, B'den 6'yı garanti etti (β = 6). C bir MAX düğümü; ilk yaprağı 7 → α = 7 ≥ β = 6. C en az 7 verir, MIN C'yi seçmez: yaprak 4 budanır.
| MIN düğümünde | MAX düğümünde | |
|---|---|---|
| Güncellenen | β = min(β, değer) | α = max(α, değer) |
| Budama | β ≤ α olunca | α ≥ β olunca |
| Anlamı | bu düğüm en fazla β verir; yukarıdaki MAX α'yı zaten garanti ediyor | bu düğüm en az α verir; yukarıdaki MIN β'yı zaten garanti ediyor |
| Döndürülen | bir üst sınır (gerçek değer ≤ β) | bir alt sınır (gerçek değer ≥ α) |
İki durum aynı koşuldur: α ≥ β. Bazı kitaplar MIN düğümündekine α kesmesi, MAX düğümündekine β kesmesi der.
Alfa-Beta Budaması
Budama Sonucu Neden Değiştirmez?
- Alfa-beta, [α, β] aralığıyla çağrıldığında şunu sağlar (v gerçek minimaks değeri, r döndürülen değer):
| α < v < β ise | r = v (kesin değer) |
| v ≤ α ise | r ≤ α (yalnız “yeterince kötü” olduğu bilinir) |
| v ≥ β ise | r ≥ β (yalnız “yeterince iyi” olduğu bilinir) |
- Kök (−∞, +∞) aralığıyla çağrılır; v bu aralığın her zaman içindedir, bu yüzden kökün değeri kesindir.
- Budanan bir dalın gerçek değeri ne olursa olsun, ebeveynin max ya da min işleminin sonucunu değiştiremez: MAX için ≤ α olan bir değer α'yı geçemez, MIN için ≥ β olan bir değer β'nın altına inemez.
- İç düğümlerde döndürülen sayı bir sınır olabilir; kökte seçilen hamle yine minimaksın seçtiği hamledir.
Alfa-Beta Budaması
Alfa-Beta Adım Adım
Düğümün solunda [α, β] aralığı, sağında değeri · kesik çizgi ve soluk düğüm: budanan dal · sayaç: değerlendirilen yaprak.
Alfa-Beta Budaması
Minimaks ve Alfa-Beta: Aynı Ağaç
| Ağaç | Minimaks | Alfa-beta | Kök değeri | Budanan ya da sıra |
|---|---|---|---|---|
| Adımlayıcıdaki ağaç (12 yaprak) | 12 yaprak | 7 yaprak | 6 ve 6 | F'nin 4'ü; H ve J'nin tamamı |
| Kod izlemedeki ağaç (6 yaprak) | 6 yaprak | 5 yaprak | 4 ve 4 | C'nin 9'u |
| Elle çözülecek ağaç (8 yaprak) | 8 yaprak | 5 yaprak | 7 ve 7 | E'nin 1'i; G'nin tamamı |
| XOX, boş tahta (tam arama) | 549.946 düğüm | 7.865 düğüm | 0 ve 0 | merkez, köşeler, kenarlar sırasıyla |
| Dörtlü Bağla, başlangıç, derinlik 7 | 960.793 düğüm | 5.086 düğüm | +8 ve +8 | ortadan dışa sırayla |
Alfa-Beta Budaması
Kod İzleme: Alfa-Beta Fonksiyonu
from math import inf T = {"A": ["B", "C", "D"], "B": [3, 5], "C": [2, 9], "D": [6, 4]} def alfabeta(n, a, b, maks): if isinstance(n, int): # yaprak return n deger = -inf if maks else inf for c in T[n]: v = alfabeta(c, a, b, not maks) if maks: deger = max(deger, v); a = max(a, deger) else: deger = min(deger, v); b = min(b, deger) if a >= b: break # budama return deger print(alfabeta("A", -inf, inf, True))
İlk çağrı: kök A bir MAX düğümü, deger = -inf, a = -inf, b = inf.
alfabeta("B") çağrılır: MIN, deger = inf; a ve b üst çağrıdan gelir: [-inf, inf].
alfabeta(3) bir yaprak: 3 döner. min ile deger = 3, b = 3; a < b, devam.
alfabeta(5) bir yaprak: 5 döner. min ile deger = 3, b = 3; a < b, devam; B bitti, 3 döner.
B çağrısı 3 döndürdü. max ile deger = 3, a = 3; a < b, devam.
alfabeta("C") çağrılır: MIN, deger = inf; a ve b üst çağrıdan gelir: [3, inf].
alfabeta(2) bir yaprak: 2 döner. min ile deger = 2, b = 2; a ≥ b.
a = 3 ≥ b = 2: break. C en fazla 2 verir, A zaten 3 buldu; yaprak 9 hiç okunmaz.
C çağrısı 2 döndürdü. max ile deger = 3, a = 3; a < b, devam.
alfabeta("D") çağrılır: MIN, deger = inf; a ve b üst çağrıdan gelir: [3, inf].
alfabeta(6) bir yaprak: 6 döner. min ile deger = 6, b = 6; a < b, devam.
alfabeta(4) bir yaprak: 4 döner. min ile deger = 4, b = 4; a < b, devam; D bitti, 4 döner.
D çağrısı 4 döndürdü. max ile deger = 4, a = 4; a < b, devam; A bitti, 4 döner.
Kökün değeri 4: A, D'ye giden hamleyi seçer. 6 yaprağın 5'i okundu, yaprak 9 budandı.
Alfa-Beta Budaması
Elle Alfa-Beta: Soru
Minimaksla kökün değeri kaçtır? MAX hangi hamleyi seçer?
Çocuklar soldan sağa aranırken her iç düğüme hangi [α, β] aralığı gelir?
Hangi yapraklar hiç okunmaz? Kaç yaprak değerlendirilir?
Alfa-Beta Budaması
Elle Alfa-Beta: Çözüm
B'ye [−∞, +∞] gelir. D (MAX) 3'ü ve 7'yi okur: D = 7. B (MIN) β = 7 olur.
E'ye [−∞, 7] gelir. İlk yaprak 9 → α = 9 ≥ β = 7: E en az 9 verir, B onu seçmez; yaprak 1 budanır. B = min(7, 9) = 7.
Kökte α = 7. C'ye [7, +∞] gelir, F'ye de aynı aralık. F (MAX) 4'ü ve 2'yi okur: F = 4 (α 7 olarak kalır).
C'de β = min(+∞, 4) = 4 ≤ α = 7: C en fazla 4 verir, kök onu seçmez. G'nin tamamı (6 ve 8) budanır.
Kök = max(7, 4) = 7: MAX, B'yi seçer. 8 yapraktan 5'i okundu, 3'ü budandı. Minimaksla aynı sonuç.
Hamle Sıralaması
Hamle Sıralaması
- Alfa-betanın ne kadar budayacağı çocukların hangi sırayla denendiğine bağlıdır; kök değeri sıraya bağlı değildir.
- En iyi sıra (MAX'ta en büyük, MIN'de en küçük çocuk önce): değerlendirilen yaprak b⌈d/2⌉ + b⌊d/2⌋ − 1 ≈ bd/2 (Knuth ve Moore, 1975).
- En kötü sıra: hiç budama olmaz, bd yaprağın hepsi okunur.
- Sonuç: aynı sürede yaklaşık iki kat derinlik; etkin dallanma etkeni b'den √b'ye iner.
- İyi sıra nereden gelir? Oyun bilgisi (Dörtlü Bağla'da orta sütun, XOX'ta merkez ve köşeler, satrançta önce taş alan hamleler) ve bir önceki aramanın en iyi hamlesi.
| d | 35d | En iyi sıra |
|---|---|---|
| 2 | 1.225 | 69 |
| 4 | 1.500.625 | 2.449 |
| 6 | 1.838.265.625 | 85.749 |
| 8 | ≈ 2,25·1012 | 3.001.249 |
b = 35 (satranç ortalaması) için okunan yaprak sayısı.
Hamle Sıralaması
Sıralama Laboratuvarı
Derinlik 3, dallanma 3: 27 yaprak. Düğme yalnız çocukların sırasını değiştirir (ağaç aynı ağaçtır); alfa-beta her seferinde baştan çalışır. Soluk yapraklar ve kesik kenarlar budanan dallardır. En iyi sırada 11 yaprak okunur, en kötü sırada budama hiç olmaz.
XOX'ta Alfa-Beta
XOX'ta Alfa-Beta: Düğüm Sayıları
| Boş tahtadan tam arama | Ziyaret edilen düğüm | Süre | Kök değeri |
|---|---|---|---|
| Minimaks (sıra fark etmez) | 549.946 | — | 0 |
| Alfa-beta, kareler 0–8 sırasıyla (soldan sağa, yukarıdan aşağı) | 20.866 | — | 0 |
| Alfa-beta, önce merkez, sonra köşeler, sonra kenarlar | 7.865 | — | 0 |
| Geçiş tablolu minimaks (her konum bir kez) | 5.478 | — | 0 |
- Sayılar sayfa açılınca bu tarayıcıda hesaplanır; derinlik cezalı ölçek kullanılır. ±1 ölçeğiyle alfa-beta 18.297 ve 7.275 düğüm ziyaret eder: budama değer ölçeğine de bağlıdır.
- İyi sıralama düğüm sayısını 2,7 kat azaltır; minimaksa göre kazanç yaklaşık 70 kattır.
- Geçiş tablosu aynı konumu ikinci kez aramaz; alfa-betayla birlikte kullanıldığında tabloya değerin kesin mi, sınır mı olduğu da yazılır.
Dörtlü Bağla
Dörtlü Bağla: Tam Arama Neden Olmaz?
- 7 sütun, 6 satır; taş seçilen sütunda en alttaki boş yere düşer. Yatay, dikey ya da çapraz dört taşını ilk dizen kazanır.
- Dallanma etkeni en çok 7, oyun en çok 42 yarım hamle. Yasal konum sayısı 4.531.985.219.092 ≈ 4,5·1012 (John Tromp).
- Oyun 1988'de birbirinden bağımsız olarak James D. Allen ve Victor Allis tarafından çözüldü: ilk oyuncu ortadaki sütundan başlarsa kazanmayı garanti eder.
- Bu çözüm kaba kuvvetle değil, oyuna özgü kurallar ve çok güçlü aramalarla bulundu. Bir tarayıcıda, bir saniyede böyle bir çözüm yapılamaz.
Arama belli bir derinlikte durdurulur. Oradaki konumlar oyun sonu olmadığından faydaları bilinmez; yerine bir değerlendirme fonksiyonu konumun ne kadar iyi olduğunu tahmin eder.
Başlangıç konumunda derinlik 7 bile minimaksla 960.793 düğüm demektir.
Dörtlü Bağla
Derinlik Sınırlı Arama
H(s, d) = fayda(s) s oyun sonuysa E(s) d = 0 ise max H(sonuç(s, a), d − 1) MAX a min H(sonuç(s, a), d − 1) MIN a
Laboratuvardaki fayda: Kırmızı (MAX) k. yarım hamlede kazanırsa +(1000 − k), Mavi kazanırsa −(1000 − k), tahta dolarsa 0. 1000 yakınındaki sayılar sütun düğmelerinde “kazanç” ya da “kayıp” diye gösterilir.
- Kesme testi: oyun bittiyse ya da derinlik sınırına gelindiyse inmeyi bırak.
- E(s) kesin değer değil, tahmindir: konum MAX için iyi görünüyorsa büyük, kötü görünüyorsa küçük.
- Oyun sonu E'nin her değerinden büyük ya da küçük olmalı: kazanç ±1000 civarı, E en fazla birkaç yüz.
- Derinlik cezası burada da var: hızlı kazanç ve geç kayıp tercih edilir.
- Alfa-beta aynen çalışır; sınırda E değerleri yaprak gibi kullanılır.
Dörtlü Bağla
Değerlendirme Fonksiyonu
Tahtada yan yana dört kareden oluşan 69 pencere var: 24 yatay, 21 dikey, 24 çapraz. Her pencere bir puan alır:
| Penceredeki taşlar | p(w) |
|---|---|
| 3 kırmızı + 1 boş | +5 |
| 2 kırmızı + 2 boş | +2 |
| 3 mavi + 1 boş | −5 |
| 2 mavi + 2 boş | −2 |
| iki renk birden, tek taş ya da boş | 0 |
E(s) = Σ p(w) + 3 · (Korta − Morta)
Korta, Morta: orta sütundaki kırmızı ve mavi taş sayısı. Orta sütun en çok pencereye girer.
Dörtlü Bağla
Ufuk Etkisi
- Arama derinlik sınırında durduğu için sınırın hemen ötesindeki olayları göremez: buna ufuk etkisi denir.
- Şekilde B'nin altındaki konum E = +6 ile en iyi görünür; oysa bir hamle sonra kaçınılmaz bir kayıp vardır.
- Daha sinsi hâli: kaçınılmaz bir kaybı ufkun ötesine iten anlamsız hamleler (satrançta boş yere şah çekmek). Kayıp ortadan kalkmaz, yalnız görünmez olur.
- Çareler: derinliği artırmak, hareketli konumlarda aramayı sürdürmek (sakinlik araması), tehdit varken bir katman daha inmek.
- Dörtlü Bağla'da derinlik 1 ya da 2 ile oynayan YZ iki yönlü tehditleri göremez ve yenilebilir.
Dörtlü Bağla
Laboratuvardaki Arama
def alfabeta(s, d, a, b, maks): if s.bitti(): # oyun sonu return s.fayda() # ±(1000 − k) ya da 0 if d == 0: return E(s) # değerlendirme deger = -inf if maks else inf for m in sirala(s.hamleler()): v = alfabeta(s.oyna(m), d-1, a, b, not maks) if maks: deger = max(deger, v); a = max(a, deger) else: deger = min(deger, v); b = min(b, deger) if a >= b: break return deger
def en_iyi_hamle(s, d): # kök: MAX a, en = -inf, None for m in sirala(s.hamleler()): v = alfabeta(s.oyna(m), d-1, a, inf, False) if v > a: a, en = v, m return en
- Oyundan bağımsızdır: yalnız
bitti,fayda,hamleler,oynaveEoyuna özgüdür. - Kökte α kökün çocukları arasında taşınır: ilk çocuktan sonra kalanlar daralan pencereyle aranır.
- Laboratuvar her sütunun puanını göstermek için ayrıca tam minimaks da çalıştırır ve iki sonucu karşılaştırır.
Dörtlü Bağla
Dörtlü Bağla Laboratuvarı
Sütun düğmesine tıklanınca insan oyuncunun taşı düşer. Düğmelerdeki sayılar YZ'nin gözünden o sütunun minimaks puanı; turuncu sütun seçimdir. Derinlik 1–7 arası. Dörtlü Bağla oyunu →
Dörtlü Bağla
Ortadan Dışa Sıralamanın Etkisi
| Derinlik | Minimaks | Alfa-beta (soldan sağa) | Alfa-beta (ortadan dışa) | Kök değeri |
|---|---|---|---|---|
| 1 | 8 | 8 | 8 | +3 |
| 2 | 57 | 33 | 21 | 0 |
| 3 | 400 | 200 | 76 | +6 |
| 4 | 2.801 | 966 | 175 | 0 |
| 5 | 19.608 | 4.340 | 627 | +6 |
| 6 | 137.257 | 16.409 | 1.285 | 0 |
| 7 | 960.793 | 67.549 | 5.086 | +8 |
- Boş tahtadan aramada ziyaret edilen düğüm sayısı; sayılar sayfa açılınca bu tarayıcıda yeniden hesaplanır.
- Minimaks yaklaşık 7d ile büyür. Alfa-beta derinlik 7'de soldan sağa sırayla 14 kat, ortadan dışa (4, 3, 5, 2, 6, 1, 7) sırayla 189 kat az düğüm ziyaret eder.
- Kök değeri üç yöntemde de aynı: sıra yalnız maliyeti değiştirir. Orta sütun en çok dörtlüye girdiği için iyi hamleler çoğunlukla ortadadır; önce onlar denenince α ve β erken daralır.
Dörtlü Bağla
Yinelemeli Derinleştirme ve Geçiş Tablosu
- Önce derinlik 1, sonra 2, 3, … süre bitene kadar arama yapılır; süre bitince son tamamlanan aramanın hamlesi oynanır.
- Tekrarlanan iş azdır: son katman diğerlerinin toplamından büyüktür (b = 7 için toplam iş yaklaşık 7/6 katı).
- Bir önceki aramanın en iyi hamlesi önce denenir: hamle sıralaması kendiliğinden iyileşir.
- Aynı konuma farklı hamle sıralarıyla ulaşılır (transpozisyon). Konum bir kez aranır, sonucu karma tablosuna yazılır.
- Kayıt: değer, arandığı derinlik, değerin kesin mi alt/üst sınır mı olduğu, en iyi hamle.
- XOX'ta 549.946 düğüm yerine 5.478 konum. Satranç programları konumu Zobrist (1970) karmasıyla anahtara çevirir.
Kapanış
Sık Yapılan Hatalar
Aralık ebeveynden çocuğa aynen iner; ebeveyne yalnız değer döner. Çocukta güncellenen α ya da β ebeveyne taşınmaz. MAX yalnız α'yı, MIN yalnız β'yı günceller.
Budanan yaprakların değeri okunmaz; elle çözümde onları min ya da max işlemine sokmak yanlıştır. Kesilen düğümün döndürdüğü sayı da kesin değer değil, sınırdır.
E(s) hep aynı oyuncunun gözünden yazılmalı (burada Kırmızı/MAX). YZ ikinci oyuncuysa en küçüğü seçer; negamaks yazılırsa her katmanda işaret çevrilir.
Bütün kazançlar aynı değeri alırsa YZ hazır kazancı erteler, kaybederken de en çabuk kaybedeni seçebilir. Fayda, kazancın kaç hamle sonra geldiğini de içermeli.
Kapanış
Gerçek Dünyada Oyun Ağacı Araması
IBM'in bilgisayarı, dünya şampiyonu Kasparov'u altı oyunluk maçta 3½–2½ yendi. Özel satranç yongalarında paralel alfa-beta, saniyede yaklaşık 200 milyon konum.
Stockfish gibi programlar hâlâ alfa-beta türevi arama kullanır: yinelemeli derinleştirme, geçiş tablosu, güçlü budama sezgileri; 2020'den beri sinir ağıyla değerlendirme (NNUE).
Go'da b ≈ 250 ve iyi bir E(s) yazmak çok zor. Monte Carlo ağaç araması (Coulom, 2006; UCT: Kocsis ve Szepesvári, 2006) rastgele oyunlarla değerlendirir. AlphaGo, MCTS'yi derin sinir ağlarıyla birleştirdi ve Mart 2016'da Lee Sedol'u 4–1 yendi.
Kapanış
Özet
Düğüm konum, kenar hamle; MAX ▲ büyütür, MIN ▽ küçültür. Boyut ≈ bd.
Değerler yapraktan köke: MAX katmanında max, MIN katmanında min. Hatasız rakibe karşı en iyi hamle; O(bd) zaman.
Nim'de minimaks = P/N = XOR kuralı. XOX'ta değer 0; derinlik cezası hızlı kazanç ve geç kayıp seçtirir.
[α, β] aralığı yukarıdan iner; α ≥ β olunca kalan çocuklar budanır. Kök değeri ve hamle değişmez.
En iyi sırada ≈ bd/2 yaprak, en kötü sırada bd. Ortadan dışa sıra Dörtlü Bağla'da 189 kat kazandırır.
Değerlendirme fonksiyonu tahmin eder; ufuk etkisi, yinelemeli derinleştirme ve geçiş tablosu.
Kapanış
Kaynaklar
- S. Russell, P. Norvig, Artificial Intelligence: A Modern Approach, 4. baskı, Pearson, 2020 (Bölüm 5: Adversarial Search and Games).
- D. E. Knuth, R. W. Moore, “An analysis of alpha-beta pruning”, Artificial Intelligence 6(4), 293–326, 1975.
- C. E. Shannon, “Programming a computer for playing chess”, Philosophical Magazine 41(314), 1950.
- J. von Neumann, “Zur Theorie der Gesellschaftsspiele”, Mathematische Annalen 100, 1928 · H. W. Kuhn, “Extensive games and the problem of information”, Contributions to the Theory of Games II, 1953.
- C. L. Bouton, “Nim, a game with a complete mathematical theory”, Annals of Mathematics 3, 1901–1902.
- L. V. Allis, A Knowledge-Based Approach of Connect-Four, yüksek lisans tezi, Vrije Universiteit Amsterdam, 1988 · J. Tromp, John's Connect Four Playground (konum sayısı).
- J. Tromp, G. Farnebäck, “Combinatorics of Go”, Computers and Games, 2016.
- A. L. Zobrist, “A new hashing method with application for game playing”, Tech. Rep. 88, University of Wisconsin, 1970.
- M. Campbell, A. J. Hoane, F. Hsu, “Deep Blue”, Artificial Intelligence 134, 57–83, 2002.
- R. Coulom, “Efficient selectivity and backup operators in Monte-Carlo tree search”, Computers and Games, 2006 · L. Kocsis, C. Szepesvári, “Bandit based Monte-Carlo planning”, ECML, 2006.
- D. Silver vd., “Mastering the game of Go with deep neural networks and tree search”, Nature 529, 484–489, 2016.
Son
Sonraki bölüm: Bölüm 3: Nash Dengesi
Minimaks XOX · Dörtlü Bağla · Terim sözlüğü