T: tema · Z: kodu büyüt · S: konuşmacı notları · F: tam ekran · Esc: genel bakış · ⌂ ders haritası
OYUNLARDA YAPAY ZEKÂ · HAFTA 5
GOAP ve HTN
Hedef, eylem, plan — F.E.A.R.’ın askerleri neden “akıllı” göründü?
PRESS ▶ TO START

Bu derste oyunun haritası 🗺️

  1. Plan nedir? — tepki vermek ile plan yapmak; Shakey robotu ve STRIPS
  2. F.E.A.R. ve GOAP — “üç durum ve bir plan”
  3. A* ile plan aramak — dünya durumları bir graf (adım adım arama)
  4. Canlı yeniden planlama — kapıyı tutarsanız asker ne yapar?
  5. Kod — 40 satırlık planlayıcı + iki laboratuvar
  6. HTN — görevleri alt görevlere bölmek (Transformers, Killzone, Horizon)
  7. Gerçek oyunlarda — Shadow of Mordor, Tomb Raider, Deus Ex, Horizon Zero Dawn
  8. Kütüphaneler — CrashKonijn GOAP, ReGoap, Fluid HTN, GTPyhop, unified-planning
🎮 Bu dersin sonunda…

…bir NPC’nin eylemlerini “ön koşul + etki + maliyet” olarak tanımlayabilecek, A* ile en ucuz planı bulabilecek, plan başarısız olunca yeniden planlayan bir asker yazabilecek ve GOAP ile HTN arasında bilinçli seçim yapabileceksiniz.

🤔 ISINMA: ALMA ACIKTI (Orkin’in örneği)

F.E.A.R.’daki Alma’nın amacı: tok olmak. İki yolu var: pizza ısmarlamak (para gerekir) ya da pasta yapmak (tarif gerekir).

  • Parası yoksa? Önce bankamatikten para çeker, sonra pizza ısmarlar. İki eylemlik bir plan.
  • Bunu hiçbir yerde “önce para çek, sonra ısmarla” diye yazmadık. Sadece her eylemin neye ihtiyaç duyduğunu (ön koşul) ve neyi değiştirdiğini (etki) söyledik.
  • Eylemleri zincirlemek planlayıcının işi. Tasarımcı eylem ve hedef ekler; geçişleri kimse yazmaz. Bugünün konusu bu.

🎯 Bu konu için bilmeniz gerekenler

Yeşil = gerekli · kesikli = faydalı ama şart değil. Tıklayınca ilgili sunuma gider.

Neden?Planlayıcı, bir graf üzerinde en kısa yolu arar: Dijkstra’yı biliyorsanız A*’ı da anlarsınız. A*’ı Y8’de harita üzerinde ayrıntılı göreceğiz; burada sadece “maliyet + tahmin” fikri yeter.
🧰 Kodlamadan korkuyorsanızGOAP’ta tasarımcının işi tablo doldurmaktır: “bu eylem şunu ister, şunu değiştirir, şu kadar pahalıdır.” Arama kodu bir kez yazılır (ya da hazır alınır). Unity’de CrashKonijn GOAP eylemleri ScriptableObject/kod ile tanımlatır ve planı görsel olarak gösterir.

Mini sözlük

planning · planplanlama · planHedefe götüren eylem dizisini önceden bulmak · o dizi
goalhedefUlaşılmak istenen dünya durumu: “hedef etkisiz = doğru”
world statedünya durumuPlanlayıcının bildiği gerçekler: silah dolu mu, hangi odadayım…
action · precondition · effecteylem · ön koşul · etkiEylem, ön koşulları doğruysa yapılabilir; yapılınca etkileri dünyayı değiştirir
costmaliyetEylemin “pahalılığı”; planlayıcı en ucuz planı arar
replanningyeniden planlamaPlan bozulunca yeni durumla baştan plan yapmak
STRIPS—Stanford Research Institute Problem Solver (1971): klasik planlama dili
GOAPhedef odaklı eylem planlamaGoal-Oriented Action Planning: STRIPS’in oyunlara uyarlanmış hâli (F.E.A.R.)
HTN · compound / primitive task · methodhiyerarşik görev ağı · bileşik / ilkel görev · yöntemBüyük görevleri “tarif kitabındaki” yöntemlerle alt görevlere bölerek plan yapmak
working memoryçalışma belleğiNPC’nin bildikleri ve hatırladıkları (kara tahtanın akrabası)
LEVEL 0
Plan nedir?
refleks ile plan, Shakey ve STRIPS
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

Önce Alma’nın mutfağı: sırayı kim yazıyor? 🍕

Beş eylem kartı var. Her kartta yalnızca iki bilgi yazıyor: ne ister (ön koşul) ve ne sağlar (etki). Hedef tek: tok olmak. Kartların sırasını biz yazmıyoruz; planlayıcı kuruyor. Senaryoları deneyin: dünya değişince plan nasıl değişiyor?

Tepki vermek mi, plan yapmak mı?

Şimdiye kadar: “şimdi ne yapayım?”FSM, davranış ağacı ve utility her an bir sonraki eylemi seçer. Gelecek adımları düşünmez; durum değişince yeniden seçer. Refleks gibi: hızlı, öngörülebilir.
Planlayıcı: “hedefe nasıl giderim?”Bir hedef verilir; planlayıcı oraya götüren eylem dizisini arar. GPS gibi: “önce şuraya, sonra şuraya”. Yol kapanırsa yeniden rota hesaplar.
FSM / BTGOAP / HTN
Kim karar sırasını yazar?Tasarımcı (oklar, ağaç)Planlayıcı (arama)
Yeni davranış eklemekGeçiş / dal eklemekEylem eklemek
Beklenmedik çözümlerYokVar (bazen istenmeyen!)
MaliyetÇok ucuzArama yapar: daha pahalı
Hata ayıklamaKolayPlan neden böyle? sorusu zor

Hikâye: Shakey, ilk “düşünen” robot (SRI, 1966–1972) 🤖

  • Stanford Research Institute’te kamerası, mesafe ölçeri ve tekerlekleri olan bir robot: Shakey (sarsıla sarsıla hareket ettiği için).
  • Ona “kutuyu diğer odaya it” gibi komutlar veriliyordu. Bunun için iki problem çözülmeliydi: nasıl gideceğim? ve hangi sırayla ne yapacağım?
  • Birinci soru için Hart, Nilsson ve Raphael A* algoritmasını yayımladı (1968). İkincisi için Fikes ve Nilsson STRIPS planlayıcısını (1971).
  • Yani oyunlarda kullandığımız yol bulma ve eylem planlama aynı robotun iki beyninden doğdu.
SRI’nin robotu Shakey
Shakey (SRI, 1972): kamera, menzil ölçer, tampon algılayıcılar · SRI International, CC BY-SA 3.0

35 yıl sonra Jeff Orkin, F.E.A.R.’da bu ikisini birleştirdi: A*’ı hem harita üzerinde yol, hem de eylem uzayında plan bulmak için kullandı.

STRIPS’in özü
  • Hedef: istenen dünya durumu
  • Eylem: ön koşullar + etkiler (ekle/sil listeleri)
  • Planlayıcı: başlangıç durumundan hedefe götüren eylem dizisini arar

Bugün akademide aynı fikir PDDL diliyle ve Uluslararası Planlama Yarışması’nda yaşıyor.

Eylemler tablosu: Alma örneği

eylemön koşuletkimaliyet
Pizza ısmarlapara = ✔tok = ✔2
Pasta yaptarif = ✔tok = ✔8
Para çek—para = ✔3
Tarif bul—tarif = ✔1

Hedef: tok = ✔. Başlangıç: hiçbir şey yok.

  • Plan A: Para çek (3) → Pizza ısmarla (2) = 5
  • Plan B: Tarif bul (1) → Pasta yap (8) = 9
  • Planlayıcı en ucuzunu seçer: Plan A. Bankamatik bozuksa (Para çek başarısız) yeniden planlar → Plan B.
  • Maliyetler bir kişilik de olabilir: tembel Alma için pasta 20 maliyetli, hevesli aşçı Alma için 2.
Quiz 1 · plan nedir?
GOAP’ta “önce şarjör tak, sonra ateş et” sırası nereden gelir?
GOAP’ta eylemler arasında elle yazılmış geçiş yoktur. Bir eylemin ön koşulunu başka bir eylemin etkisi sağlıyorsa, planlayıcı ikisini zincirleyebilir. Sıra, aramanın sonucudur.
LEVEL 1
F.E.A.R. ve GOAP
“Three States and a Plan” (GDC 2006)
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

📸 Oyundan bir kare: F.E.A.R. (2005)

F.E.A.R. (2005) ekran görüntüsü
Oyuncuların “takım hâlinde düşünüyorlar” dediği askerler. Aslında her biri kendi küçük planlayıcısıyla, Alma’nın mutfağındaki gibi eylem kartlarını zincirliyor: siper al, kapıyı tekmele, el bombası at.
Görsel: F.E.A.R. oynanış görüntüsü, Monolith Productions, Wikipedia (eğitim amaçlı adil kullanım)

Derin hikâye: F.E.A.R. (Monolith, 2005) 👻

Oyuncular ve eleştirmenler F.E.A.R.’ın düşmanlarını yıllarca “oyun tarihinin en akıllı askerleri” listelerinde saydı: siper alıyor, körlemesine ateş ediyor, pencereden atlıyor, masayı devirip kendine siper yapıyor, takım hâlinde ilerliyor.

Jeff Orkin’in GDC 2006 bildirisi “Three States and a Plan” bu zekânın sırrını açıkladı ve başlığıyla herkesi şaşırttı:

  • Karakterlerin FSM’inde sadece üç durum var: Goto (bir yere giderken animasyon oynat), Animate (animasyon oynat), UseSmartObject (aslında Animate’in veri güdümlü hâli). Yani gerçekte iki durum!
  • Zor iş, hangi animasyonun ne zaman ve nereye giderken oynatılacağına karar vermek. Bunu FSM değil, bir planlayıcı yapıyor.
Neden planlama?Orkin: “FSM’ler prosedüreldir: her durumda ne yapılacağını ve ne zaman geçileceğini söylersiniz. Planlama bildirimseldir: YZ’ye hedeflerini ve eylemlerini söylersiniz, sıralamayı kendisi bulur.”
🎬 İzleyinBuilding the AI of F.E.A.R. with GOAP ve The AI of F.E.A.R. (AI and Games — kanalın ilk bölümü bu oyundu)

Aynı hedefler, farklı eylemler: asker, suikastçı, fare

Orkin’in örneği: GDC06 adlı hedef setinde sadece iki hedef var: Devriye ve Düşmanı öldür. Aynı seti üç farklı karaktere veriyorlar:

karaktereylem setidavranış
Askersilahla ateş, siper…Devriye gezer, oyuncuyu görünce ateş eder
Suikastçıgörünmezlik, duvara yapışma, yakın dövüşGörünmez koşar, duvara yapışır, oyuncuyu görünce atlayıp yumruklar
Faresadece yürümekSaldıramaz: “öldür” için plan bulamaz, düşük öncelikli “devriye”ye döner
💡 Ders: hedef ve eylemi ayırKarakterin ne istediği (hedefler) ile neler yapabildiği (eylemler) ayrı listelerde. Yeni bir düşman türü = mevcut eylemlerden yeni bir karışım. F.E.A.R. ekibi sonradan eklenen bir düşmanı, hayaletin uçma eylemleriyle askerin ateş eylemlerini birleştirerek hızla yaptı.
Hedefler yarışırHer an en yüksek öncelikli hedef seçilir ve onun için plan aranır. Plan bulunamazsa sıradaki hedef denenir — utility (Y4) ile planlamanın buluşması.

Planlamanın üç faydası (Orkin)

1) Hedef ile eylemi ayırmakÖnceki oyunları No One Lives Forever 2’de hedefler kendi içinde küçük FSM’lerdi ve bilgi paylaşmazlardı. F.E.A.R.’da hepsi ortak bir çalışma belleği kullanır.
2) Katman katman davranışÖnce “kaçın” hedefi + iki eylem (yana yuvarlan, eğil). Sonra “siper al”. Sonra “siperdeyken vurulursan körlemesine ateş et”… Orkin buna soğanın katmanlarını eklemek der. Geçişleri hiç elle yazmadılar.
3) Dinamik problem çözmeAsker kapıyı açmaya çalışır; oyuncu kapıyı bedeniyle tutuyorsa açamaz → yeniden planlar, kapıyı tekmeler → yine olmaz → pencereden atlar ve yakın dövüşe girer. Başarısızlıklar belleğe yazılır, sonraki plan onları hesaba katar.
📜 NOLF2’den bir dersGeliştirmenin sonlarında “karanlık bir odaya girince ışığı aç” isteği geldi. Eski sistemde her hedefin içindeki durum makinesine tek tek dokunmak gerekti: riskli ve zahmetli. GOAP’ta: bir Işığı aç eylemi (etkisi: ışık açık) ve “Git” eylemine bir ışık açık ön koşulu. Bitti.

STRIPS’ten GOAP’a: oyun için dört değişiklik

değişiklikne demek?neden?
Eylem başına maliyetPizza 2, pasta 8Tercih belirtmek; A* ile en ucuz planı aramak
Sabit boyutlu dünya durumuEkle/sil listeleri yerine bir dizi: TargetDead, WeaponLoaded, OnVehicleType, AtNode…Hangi eylemin hangi koşulu sağladığını bulmak çok hızlı. Bedeli: aynı anda tek hedef, tek silah düşünülür; hangisi olduğuna planlayıcının dışındaki sistemler karar verir.
Prosedürel ön koşulDiziye sığmayan kontroller için kod: “kaçabileceğim güvenli bir yol var mı?”Pahalı kontroller (NavMesh’te yol arama) sadece gerektiğinde yapılır
Prosedürel etkiEtki anında değil, animasyon bitince uygulanırOyunda eylemler zaman alır

F.E.A.R. aramayı hedeften geriye doğru (regressive) yaptı. Sonraki oyunlarda ileri arama da kullanıldı; Éric Jacopin’e göre ileri arama hata ayıklamada daha kolay. Bu sunumdaki demolar ileri arama yapıyor.

“Takım taktiği” yanılsaması

F.E.A.R.’da genel bir koordinatör, yakındaki askerleri periyodik olarak timlere ayırır. Sadece dört basit tim davranışı var:

  • Get-to-Cover: biri bastırma ateşi yaparken diğerleri sipere
  • Advance-Cover: biri ateşle örterken diğerleri daha yakın sipere
  • Orderly-Advance: tek sıra ilerle, sondaki arkayı kollasın
  • Search: ikili gruplarla odaları ara

Tim davranışı askerlere emir verir; emre uymak da askerin hedeflerinden biridir. Kaçmak gibi daha önemli bir hedef emri geçebilir.

💡 Kanat saldırısı yok!Orkin: “F.E.A.R.’da karmaşık tim davranışları hiç yok.” Oyuncunun “bak, beni kanattan sardılar!” dediği an çoğu zaman şu: askere geçerli bir sipere gitme emri verilmiş, önünde duvar var, NavMesh arka yoldan dolaştırmış ve asker oyuncunun yanında çıkmış. Kanat saldırısı, yol bulmanın yan etkisi.
🗣️ Ve diyaloglarY1’de gördüğümüz gibi askerler ne yaptıklarını bağırarak anlatır (“Siper alıyorum!”, “Yandan dolaşıyor!”). Oyuncu bu açıklamaları duyunca ortaya çıkan davranışı plan olarak yorumlar.
Quiz 2 · F.E.A.R.
F.E.A.R.’da fareye “Düşmanı öldür” hedefi verildiğinde ne olur?
Hedefler aynıdır ama eylem setleri farklıdır. Hiçbir eylem zinciri “hedef etkisiz” durumuna götürmüyorsa planlayıcı başarısız olur ve sıradaki hedef denenir. Ayrı kod yazmaya gerek yoktur.

🎬 Ara: F.E.A.R.’ın askerleri nasıl plan yapıyor?

Building the AI of F.E.A.R. with Goal Oriented Action Planning
AI and Games (Tommy Thompson) · YouTube’da aç

Alma’nın mutfağındaki kartların gerçek oyundaki karşılığı: askerlerin eylemleri, ön koşulları ve etkileri; oyuncunun “takım hâlinde düşünüyorlar” sandığı davranışların nasıl ortaya çıktığı.

🤔 İzlerkenVideodaki askerin eylemlerinden ikisini “ister / sağlar” biçiminde yazın. Asker bir kapıyı açamayınca ne yapıyor; bu, mutfaktaki hangi senaryoya benziyor?
LEVEL 2
A* ile plan aramak
düğüm = dünya durumu, kenar = eylem
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

Plan aramak = graf üzerinde en kısa yol

{ } {para} {tarif} {tok} 🎯 Para çek (3)Tarif bul (1) Pizza (2)Pasta (8)
  • Düğüm: bir dünya durumu (hangi gerçekler doğru)
  • Kenar: o durumda ön koşulu tutan bir eylem; ok, etkilerin uygulandığı yeni duruma gider
  • Kenar ağırlığı: eylemin maliyeti
  • Hedef: “tok” gerçeğini içeren herhangi bir durum
  • Orkin: “A* aslında genel bir arama algoritmasıdır.” F.E.A.R. aynı A* kodunu hem NavMesh’te yol hem de bu grafta plan bulmak için kullandı.

🎒 Tek slaytta A*

  • Her düğüm için g = başlangıçtan buraya gerçek maliyet, h = buradan hedefe tahmin, f = g + h.
  • Açık liste (öncelik kuyruğu): keşfedilmiş ama henüz genişletilmemiş düğümler. Her adımda f’si en küçük olanı çek.
  • Hedefse: bitti, geriye doğru ebeveynleri izleyerek planı çıkar. Değilse: ön koşulu tutan her eylem için yeni düğüm üret, açık listeye koy.
  • h = 0 ise A* = Dijkstra (En Kısa Yollar sunumu). İyi bir h aramayı hızlandırır; h gerçek maliyeti aşmamalı ki en ucuz plan bulunsun.
Planlama için sezgi (h)Basit ve yaygın: hedefte olup henüz sağlanmamış gerçek sayısı. “Hedef etkisiz” sağlanmadıysa h = 1. Her eylem en az 1 maliyetliyse ve tek bir eylem birden çok hedef gerçeğini aynı anda sağlamıyorsa bu tahmin asla fazla olmaz.
⚙️ Neden hızlı?Oyun planları kısadır (genellikle 1–6 eylem) ve bir karakterin eylem sayısı onlarla sınırlıdır. Jacopin, bu yüzden basit bir genişlik öncelikli ileri aramanın bile pratikte yeterli olduğunu gösterir.

A*’ı haritalarda Y8’de ayrıntılı göreceğiz.

Arama ağacını okuma kılavuzu

Kutular ve çizgiler
  • Her kutu bir dünya durumu; üstünde o duruma hangi eylemle gelindiği yazar. En üstteki BAŞLANGIÇ.
  • Her çizgi bir eylem: ön koşulu tuttuğu için o durumdan yapılabiliyor.
  • g = buraya kadar harcanan maliyet · h = hedefe kalan tahmin · planlayıcı hep g + h’si en küçük kutuyu açar.
  • Kesikli kutu = üretildi ama henüz açılmadı (bekleme listesinde).
  • Yeşil yol = bulunan en ucuz plan.
Üstteki kutucuklar: “dünya nasıl başlasın?”
  • silah dolu · yedek şarjör var · sağ odada: askerin başlangıç durumu.
  • 🧠 ile başlayanlar: askerin hafızası — daha önce denedi ve olmadı (kapı açılmıyor, tekme işe yaramadı, cephanelik boş).
  • sezgiyi kapat: h = 0. Aynı plan bulunur ama daha çok kutu açılır.

Önce “İleri ▶|” ile tek tek ilerleyin ve her adımda “şimdi hangi kutuyu açar?” diye tahmin edin.

Adım adım plan arama 🔎

  1. Varsayılan durumda adım adım ilerleyin: en ucuz plan Cephane al → Şarjör tak → Kapıdan geç → Ateş et (4). Kesikli kutular üretilmiş ama genişletilmemiş düğümler.
  2. “🧠 kapı açılmıyor” kutusunu işaretleyin: plan kapı yerine tekmeyi kullanıyor. İkinci 🧠 kutusunu da işaretleyin: pencere.
  3. “🧠 cephanelik boş”: silah doldurulamıyor; tek yol Yumruk (7). Ama dikkat: yumruk her zaman mümkündü, sadece pahalıydı!
  4. “sezgiyi kapat”: kaç düğüm genişletildiğini karşılaştırın. Küçük problemde fark az; büyük alanlarda çok önemli.
  5. “silah dolu” + “sağ odada”: tek adımlık plan. Planlayıcı gereksiz eylem eklemez.
🔎 İZLEYİCİDE DENEYİN
  1. Varsayılan durumda adım adım ilerleyin: en ucuz plan Cephane al → Şarjör tak → Kapıdan geç → Ateş et (4). Kesikli kutular üretilmiş ama genişletilmemiş düğümler.
  2. “🧠 kapı açılmıyor” kutusunu işaretleyin: plan kapı yerine tekmeyi kullanıyor. İkinci 🧠 kutusunu da işaretleyin: pencere.
  3. “🧠 cephanelik boş”: silah doldurulamıyor; tek yol Yumruk (7). Ama dikkat: yumruk her zaman mümkündü, sadece pahalıydı!
  4. “sezgiyi kapat”: kaç düğüm genişletildiğini karşılaştırın. Küçük problemde fark az; büyük alanlarda çok önemli.
  5. “silah dolu” + “sağ odada”: tek adımlık plan. Planlayıcı gereksiz eylem eklemez.

🔗 Başka gözle: etkileşimli anlatımlar ve yazılar

Aynı konuyu başka bir anlatımla, kendi elinizle oynayarak görmek çok işe yarar. Kartlar yeni sekmede açılır; çoğu İngilizce ama görsel ve etkileşimli.

Quiz 3 · A* ile plan
Sezgi h = “sağlanmamış hedef gerçeği sayısı”. Hangi durumda bu sezgi gerçek kalan maliyeti aşabilir (ve A* en ucuz planı kaçırabilir)?
İki gerçek eksikse h = 2 der; ama maliyeti 1 olan tek bir eylem ikisini birden sağlıyorsa gerçek kalan maliyet 1’dir: sezgi fazla tahmin etti. A*’ın en ucuz planı garanti etmesi için h gerçek maliyeti aşmamalı. C ve B’de h her zaman güvenli; A’da h = 0, yani Dijkstra (her zaman güvenli ama yavaş). Bizim askerin hedefinde tek gerçek var: h en fazla 1, her eylem en az 1 maliyetli → güvenli.
LEVEL 3
Canlı: yeniden planlama
kapıyı tutun, cephaneliği boşaltın
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

F.E.A.R.’ın kapı sahnesi — canlı 🚪

🔎 DEMODA DENEYİN
  1. Hiçbir kutu işaretli değilken izleyin: dört adımlık plan sorunsuz yürüyor.
  2. “🚪 kapıyı bedeninle tut” → ↺ Baştan. Asker kapıyı açmayı deniyor, başarısız oluyor, “kapı açılmıyor” bilgisini çalışma belleğine yazıyor ve yeniden planlıyor: tekme. O da olmayınca pencere. Orkin’in GDC’de anlattığı sahnenin aynısı.
  3. “📭 cephanelik boş” → ↺ Baştan: cephane alamayınca plan yumruğa dönüyor.
  4. İkisini birden işaretleyin. Kaç kez yeniden planlıyor? Toplam süre ne kadar uzadı?
  5. Günlükte her planın maliyetine bakın: her başarısızlıktan sonra plan biraz daha pahalı ama hâlâ mümkün olan en ucuz.

Önemli tasarım ayrıntısı: başarısızlık bilgisi bir “gerçek” olarak dünya durumuna yazılıyor (🧠). Eylemlerin ön koşulları da bu gerçeklere bakıyor. Böylece planlayıcı aynı hatayı tekrar etmiyor.

LEVEL 4
Kod ve laboratuvarlar
eylem = veri, planlayıcı = 40 satır
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

🎒 Ön bilgi: sözlük, kopya ve öncelik kuyruğu

Dünya durumu = sözlük{"loaded": True, "inB": False}. Anahtar → değer. Sözlükte olmayan anahtarı yanlış kabul edeceğiz: s.get("loaded", False).
⚠️ Kopyalamadan değiştirme!Arama, aynı anda birçok olası geleceği dener. Bir eylemin etkisini uygularken orijinal durumu değiştirirseniz diğer dallar da bozulur. Önce kopyala: yeni = dict(s) / {...s} / new Dictionary<,>(s).
Öncelik kuyruğu“En küçüğü hızlı ver” diyen yapı (Öncelik Kuyrukları sunumundaki yığın/heap). Python: heapq.heappush, heapq.heappop. Küçük planlarda basit bir listeyi her adımda sıralamak da yeter.
Eylem = veriEylemler kod değil, tablo satırı: ad, ön koşul sözlüğü, etki sözlüğü, maliyet. Tasarımcılar bunları bir dosyada / ScriptableObject’te düzenleyebilir; F.E.A.R.’da GDBEdit adlı veritabanı aracındaydı.

Eylemler ve iki yardımcı

Planlayıcı: A* (ya da sezgisiz hâli Dijkstra) (1/2)

Planlayıcı: A* (ya da sezgisiz hâli Dijkstra) (2/2)

Planı yürütmek ve yeniden planlamak

Üç sinyal yeniden planlamayı tetikler: plan bitti, bir eylem başarısız oldu, sıradaki eylemin ön koşulu artık tutmuyor (ör. hedef kaçtı). Ek olarak periyodik yeniden planlama, daha önemli bir hedefin ortaya çıkmasını yakalar.

🎒 Kod sözlüğü

Dictionary<string, bool> · dict · {}sözlükAnahtar → değer tablosu; dünya durumu için ideal
s.TryGetValue(k, out var v) · s.get(k, False)güvenli okumaAnahtar yoksa hata yerine varsayılan değer
{ ...s, ...eff } · dict(s); n.update(eff)kopyalayıp birleştirmeÖnce s’nin kopyası, sonra eff’teki anahtarlar üzerine yazılır
all(... for ...) · every(...)hepsi mi?Bütün elemanlar için koşul doğruysa True
heapq.heappush / heappopyığın (heap)Python’un öncelik kuyruğu: en küçük ilk çıkar
itertools.count()sayaçEşit f değerlerinde karşılaştırma hatasını önleyen sıra numarası
Queue<T> · Peek · DequeuekuyrukPlan adımları: sıradakine bak · sıradakini çıkar
float("inf")sonsuz“Henüz yol bilinmiyor” başlangıç değeri

🌱 Isınma kodu: bu eylem şu an yapılabilir mi?

Planlayıcının sorduğu ilk soru. “Ateş et”in ön koşulu { inB: true, loaded: true }: asker B odasında değilse ya da silah boşsa bu eylem aday bile olamaz.

🌱 Isınma kodu: eylemin etkisini uygula

“Şarjör tak”ın etkisi { loaded: true, hasAmmo: false }. Kopya almadan değiştirirseniz planlayıcı aynı anda denediği diğer gelecekleri de bozar — GOAP yazan herkesin en az bir kez düştüğü tuzak. Bu iki fonksiyon + bir öncelik kuyruğu = planlayıcı.

🧪 Canlı laboratuvar: askerin eylem tablosu

Kapı tutulduğu için başlangıçta asker takılıp kalıyor. Eksik üç eylemi ekleyin: tekme kickFailed değilse çalışır, pencere her zaman, yumruk B odasında. Test beş senaryoda en ucuz plan maliyetini kontrol eder (4, 6, 8, 7, 1). Sonra maliyetlerle oynayın: pencere 2 olursa asker kapıyı hiç denemez mi?

🐍 Laboratuvar: en ucuz planın maliyeti

İki TODO’yu doldurun (Dijkstra = sezgisiz A*). Testlerde askerin bütün senaryoları, Alma’nın pizza/pasta problemi ve bir etkinin başka bir gerçeği sildiği (False yaptığı) zor bir örnek var.
LEVEL 5
HTN: görevleri bölmek
tarif kitabıyla planlama
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

HTN: hiyerarşik görev ağları

GOAP serbestçe arar: “hangi eylemler hedefe götürür?” HTN ise yukarıdan aşağı böler: “bu büyük görevi nasıl yaparım?”

  • Bileşik görev (compound): “Düşmana saldır”. Kendi başına yapılamaz, bölünür.
  • Yöntem (method): bir bileşik görevi bölmenin bir yolu + ne zaman geçerli olduğu. “Elinde kütük varsa: düşmana git, kütükle vur.”
  • İlkel görev (primitive): doğrudan yapılabilen eylem; koşulu ve etkisi var.
  • Planlayıcı kökten başlar, ilk uygun yöntemi seçer, alt görevleri sırayla ayrıştırır. Bir şey tutmazsa geri izler ve sonraki yöntemi dener.
Benzetme: yemek tarifi“Akşam yemeği hazırla” → (yöntem: misafir varsa) “çorba + ana yemek + tatlı” → “ana yemek” → (yöntem: fırın çalışıyorsa) “fırında tavuk”… Usta aşçının bilgisi, yöntemlerde saklı.
BT’ye benziyor mu?Troy Humphreys: HTN’ler davranış ağaçlarının modülerliğini taşır, ama BT’lerden farklı olarak eylemlerin etkileri hakkında akıl yürütebilir: “kütüğü vurunca elimde kütük kalmayacak” bilgisini plan sırasında kullanır.

Trunk Thumper: köprü bekçisi trol 🧌

Humphreys’in Game AI Pro’daki örneği (Transformers: Fall of Cybertron ekibinden):

Trunk Thumper oldüşmanı görüyorgörmüyorDüşmana saldırDevriyekütük varkütük yokdüşmana gitkütükle vurağaç bulağacı sökdüşmana gitkütükle vurköprü seçköprüye gitköprüyü kontrol etmavi = bileşik görev (yöntemlerle açılır) · turuncu = yöntemin koşulu · yeşil = ilkel eylem (sırayla yapılır)

Sonra tasarımcılar fikir değiştirir (“kütük saldırısı çok güçlü, vurduktan sonra kütük kırılsın”): yalnızca bir yöntem ve bir etki değişir.

⚙️ Neden hızlı?Arama maliyet ve sezgi kullanmaz; yöntemler sıralıdır ve hiyerarşi, ağın büyük kısımlarını baştan eler. Humphreys: bu özellikler sayesinde Fall of Cybertron’daki HTN planlayıcı, önceki oyun War for Cybertron’da kullandıkları GOAP sisteminden belirgin şekilde daha hızlıydı.
BedelHTN “yaratıcı” değildir: yöntemlerde yazmadığınız bir çözümü bulamaz. GOAP’ın pencereden atlama gibi beklenmedik zincirleri HTN’de ancak siz bir yöntem olarak yazarsanız çıkar.

HTN ayrıştırması — adım adım 🧌

🔎 DEMODA DENEYİN
  1. Varsayılan: trol düşmanı görüyor ama elinde kütük yok. “kütük yoksa” yöntemi seçiliyor; Ağacı sök görevi planlama sırasındaki dünya durumunu “elinde kütük var” yapıyor ve sonraki Kütükle vur bu sayede uygulanabiliyor.
  2. “yakında ağaç var”ı kapatın: Ağaç bul başarısız → geri izleme → saldırı yöntemi kalmadı → kök görev bir sonraki yönteme, Devriye’ye geçiyor.
  3. “düşmana yol var”ı kapatın: iki saldırı yöntemi de “Düşmana git”te tıkanıyor. Kaç adım boşa gitti?
  4. “düşmanı görüyor”u kapatın: ilk yöntem hiç denenmiyor.

Yığına dikkat: HTN’de “plan” sadece ilkel görevlerden oluşur; bileşik görevler planlama bitince ortadan kalkar.

HTN planlayıcının kalbi (Python) (1/2)

HTN planlayıcının kalbi (Python) (2/2)

Bu, Dana Nau’nun SHOP/Pyhop planlayıcılarının sade bir hâli. Özyineleme sayesinde geri izleme bedava: bir dal None dönerse döngü bir sonraki yöntemi dener.

Quiz 4 · HTN
Trol düşmanı görüyor, elinde kütük yok ve yakında ağaç da yok. HTN planlayıcı ne üretir?
İlk saldırı yöntemi “elinde kütük var” koşulunda, ikincisi “Ağaç bul”un koşulunda tıkanır. Planlayıcı geri izleyip kök görevin sonraki yöntemine (Devriye) geçer. HTN alan dosyasında olmayan bir eylemi asla icat etmez — bu hem güvencesi hem sınırıdır.
LEVEL 6
Gerçek oyunlarda
Monolith, Crystal Dynamics, Guerrilla, High Moon
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

GOAP’ın 20 yılı

F.E.A.R. (2005) → Shadow of Mordor (2014)Monolith GOAP’ı geliştirmeye devam etti. GDC 2015’teki “Goal-Oriented Action Planning: Ten Years Old and No Fear!” oturumu, sistemin Middle-earth: Shadow of Mordor’da nasıl büyüdüğünü anlatır.
Tomb Raider (2013) ve devamıCrystal Dynamics aynı oturumda GOAP’ın ürettiği “çoğu zaman yeni ya da beklenmedik” davranışların nasıl hata ayıklandığını ve raporlandığını anlattı. Planlayıcıların gerçek sorunu: beklenmedik davranış hem güzellik hem baş ağrısı.
Deus Ex: Human Revolution — Director’s Cut (2013)Jacopin’in Game AI Pro 2 bölümünde GOAP’ın hâlâ kullanıldığı örnekler arasında sayılır; bu oyunlarda bazen ileri arama tercih edildi.
Transformers: War for Cybertron (2010)High Moon Studios GOAP kullandı; devam oyununda HTN’e geçti (sonraki slayt).
TürlerGOAP özellikle taktik nişancı ve sızma oyunlarında parlar: kısa planlar, çok sayıda koşul, beklenmedik engeller. Simülasyonlarda (köylüler odun toplar, alet yapar, ev kurar) da sık kullanılır.

HTN: Killzone’dan Horizon’a

Killzone 2 ve 3 (Guerrilla)Çok oyunculu botlar HTN ile çalıştı. Killzone 3’te botların ve taretlerin aynı planlayıcıyı kullandığı, akademideki SHOP planlayıcısına (Lisp) dayanan ve alanları C++’a derleyen bir sistem anlatılıyor (Straatman, Verweij vd., Game AI Pro, 29. bölüm).
Transformers: Fall of Cybertron (2012)Önceki oyundaki GOAP’ın yerine HTN; daha hızlı ve tasarımcıların “önce şunu dene” sezgisine daha uygun.
Horizon Zero Dawn (2017) ve Forbidden WestMakineler bireysel ajan; HTN planlayıcıdan “yeni bölgeye git”, “insana saldır”, “güvenliğe kaç” gibi görevler için plan ister. Sürüleri bir grup ajanı (oyunda fiziksel olarak yok) yönetir: kara tahtasıyla bilgi paylaşır, kimin saldıracağını seçer — sadece planlayıcı “yapabilir” dediği için değil, saldırı ilginç olacağı için. Diğer makineler sıralarını beklerken oyuncunun etrafında döner.

Guerrilla’nın Decima motoru HTN’i geliştirmeye devam ediyor: “HTN Planning in Decima” (Tim Verweij, 2024) Prolog benzeri geri izlemeyi ve oyun içi hata ayıklamayı anlatıyor.

Ne zaman planlayıcı, ne zaman değil?

FSM / BTUtilityGOAPHTN
Kararkural / öncelikpuanserbest aramayöntemlerle bölme
Tasarımcı kontrolüçok yüksekyüksekortayüksek
Beklenmedik çözümyokazçokaz
İşlemciçok ucuzucuzarama (kontrollü)arama (hızlı)
Uygun olduğu yerbasit düşmanlar, bosssimülasyon, RPG ekiptaktik nişancı, sızmabüyük, sürü / tim YZ’si
⚠️ Planlayıcının tuzaklarıÇok fazla eylem → arama patlar (eylem sayısını ve dünya durumunu küçük tutun). Gerçek dünya plan bitmeden değişir (sık yeniden planlayın ama çok sık değil). Oyuncu davranışı “anlamazsa” zekâ boşa gider (Y1: F.E.A.R. bu yüzden diyalog kullandı).
LEVEL 7
Kütüphaneler ve entegrasyon
Unity, C#, Python ve PDDL dünyası
  • plan nedir?
  • F.E.A.R. ve GOAP
  • A* ile plan aramak
  • canlı: yeniden planlama
  • kod ve laboratuvarlar
  • HTN: görevleri bölmek
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

🧰 Kütüphaneler ve araçlar

adplatformne yapar / sınırlarınasıl eklenir
CrashKonijn GOAPUnity · açık kaynakÇok iş parçacıklı (Jobs) GOAP, görsel hata ayıklayıcı (planı ve maliyetleri gösterir), ScriptableObject veya kodla yapılandırma, iyi belgeler. Öğrenme eğrisi orta.Package Manager → git URL: https://github.com/crashkonijn/GOAP.git?path=/Package
ReGoapC# / Unity · açık kaynakGenel amaçlı GOAP kütüphanesi ve Unity örnekleri. Eski ama okunabilir; kendi planlayıcınızı yazmadan önce incelemeye değer.Kaynağı projeye kopyala
Fluid HTNC# (Unity uyumlu) · açık kaynakSade ve hızlı HTN planlayıcı; akıcı (fluent) “domain builder” sözdizimi, kısmi planlar, slotlar.Kaynağı / DLL’i projeye ekle
GTPyhopPython · açık kaynakDana Nau’nun (SHOP’un yazarı) eğitim amaçlı HTN planlayıcısı; görev ve hedefleri birlikte destekler.pip install gtpyhop ya da tek dosya
unified-planningPython · açık kaynakAIPlan4EU projesi: klasik planlama problemlerini Python’da kur, birçok akademik planlayıcıyla (PDDL) çöz. Oyun içi değil, prototip ve araştırma için.pip install unified-planning
Kendi planlayıcınızher motorBu sunumdaki 40 satır. Küçük alanlarda (≤ 20 eylem) en esnek ve en anlaşılır yol. Unreal ve Godot’da yerleşik GOAP/HTN yok; StateTree / BT ile birlikte kendi planlayıcınızı çağırabilirsiniz.—

Unreal ve Godot için mağazalarda üçüncü taraf GOAP/HTN eklentileri var; kalite ve bakım durumları çok değişken, eklemeden önce son güncelleme tarihine ve örnek projeye bakın.

🧩 Projenize GOAP eklerken: adım adım

  1. Dünya durumunu küçük tutun: 10–20 bool/enum. “Hangi düşman?” gibi seçimleri planlayıcının dışında yapın (F.E.A.R.’daki gibi).
  2. Eylem tablosunu bir hesap tablosunda tasarlayın: ad · ön koşul · etki · maliyet. Her eylem küçük ve tek amaçlı olsun.
  3. Hedefleri önceliklendirin (sabit sıra ya da utility puanı). En yüksek hedef için plan yoksa sıradakini deneyin.
  4. Yürütücü: her eylem bir animasyon/hareket; başarı, başarısızlık ve “sürüyor” döndürsün (BT’deki gibi).
  5. Başarısızlıkları belleğe yazın ve yeniden planlayın.
  6. Görselleştirin: NPC’nin başında hedef ve planı yazın; arama ağacını kaydedin.
⚙️ PerformansPlanlamayı her karede değil, olaylar olunca (plan bitti, başarısız oldu, yeni algı) yapın. Aramaya düğüm sınırı koyun. Çok sayıda NPC varsa planlamayı karelere yayın; CrashKonijn GOAP bunu iş parçacıklarına dağıtır.
Melez mimariYaygın bir kombinasyon: utility hangi hedefin önemli olduğunu seçer → GOAP/HTN planı yapar → her plan adımı küçük bir BT ya da FSM ile yürütülür. F.E.A.R. bile planın altında iki durumlu bir FSM kullanıyordu.

🤖 Bu konuyu bir YZ kod asistanıyla yazarken

Sık yapılan hatalar — kontrol edin
  • Etkiyi orijinal duruma uygulamak (bütün dallar bozulur)
  • Eylemlerin süresini unutmak: etkiler anında uygulanıyor
  • Her karede yeniden planlamak (işlemci + kararsızlık)
  • Dünya durumuna her şeyi koymak: arama uzayı patlar
  • GOAP ile HTN’i karıştıran yarım bir mimari üretmek: hangisini istediğinizi söyleyin
İyi bir istek (prompt) örneği

“Unity 6, C#. Bir asker için GOAP yaz. Dünya durumu Dictionary: inB, hasAmmo, loaded, targetDead, doorStuck, kickFailed. Eylemler ScriptableObject olsun (ad, pre, eff, cost). A* planlayıcı: h = sağlanmamış hedef gerçeği sayısı, en fazla 500 düğüm. GoapAgent: plan bitince, eylem başarısız olunca ya da ön koşul bozulunca yeniden planlasın; başarısız “Kapıdan geç” eylemi memory["doorStuck"]=true yazsın. Planı OnDrawGizmos ile karakterin üstüne yaz. PriorityQueue kullanma (Unity’nin .NET sürümü).”

  • Eylem tablosunu (ön koşul/etki/maliyet) siz tasarlayın, asistana planlayıcıyı yazdırın
  • Durum kopyalamanın (immutability) açıkça yapılmasını isteyin
  • Plan bulunamazsa ne olacağını (yedek hedef) belirtin
  • Arama için düğüm sınırı ve zaman bütçesi isteyin
  • Unit test: “şu başlangıç + şu hedef → şu maliyet” senaryoları

🔬 Araştırma ucu: dil modelleri plan yapabilir mi?

LLM+P (2023)Liu vd.: dil modelleri uzun planlarda sık hata yapıyor. Çözüm: LLM doğal dildeki problemi PDDL’ye (STRIPS’in torunu) çevirsin, klasik bir planlayıcı çözsün, LLM sonucu tekrar anlatsın. Klasik planlama ölmedi; LLM’e “güvenilir hesap makinesi” oldu.
Voyager (2023)Wang vd.: Minecraft’ta GPT-4 ile çalışan bir ajan kendi hedeflerini önerir, kod olarak beceriler yazar ve bir beceri kütüphanesi biriktirir. Elle yazılmış eylem tablosunun yerini, dil modelinin ürettiği eylemler alıyor.
Oyun için anlamıLLM’i her karede karar verici yapmak pahalı ve riskli (Y14). Daha gerçekçi yol: LLM’in hedef seçmesi ya da eylem tablosu önermesi, GOAP/HTN’in güvenilir ve hızlı biçimde yürütmesi. Doğrulanabilir ön koşul/etki yapısı, LLM’in saçmalamasına karşı bir emniyet kemeri.

💬 Tartışma soruları

Yanınızdakiyle 2 dakika konuşun, sonra sınıfça tartışalım
  1. F.E.A.R.’ın askerleri oyuncuyu aslında kanattan sarmıyor; yol bulma onları tesadüfen yanınızdan çıkarıyor. Bunu öğrenmek oyundan aldığınız keyfi azaltır mı? Tasarımcı bu “kazayı” nasıl bilerek büyüttü?
  2. Planlayıcı, tasarımcının hiç düşünmediği bir çözüm buldu (asker pencereden atladı). Bu ne zaman harika bir an, ne zaman bir hata raporu olur?
  3. Bir hayatta kalma oyununda köylü: odun topla → balta yap → ağaç kes → ev kur. Bunu davranış ağacıyla mı, GOAP ile mi yazardınız? Oyuna her ay yeni eşya eklenecekse cevabınız değişir mi?
  4. Sabah okula gelmek için yaptığınız planı GOAP gibi yazın: hedef, 4–5 eylem, ön koşullar, etkiler, maliyetler. Otobüs gelmezse planınız nasıl değişiyor?

🚀 Proje ve araştırma önerileri

  1. [kolay] Alma’nın mutfağı — Pizza/pasta örneğini genişletin: 10 eylem, 3 hedef. Planlayıcınızın bulduğu planları ve maliyetleri tablo olarak yazdırın.
  2. [kolay] Oduncu köylü — Unity/p5.js: köylü balta bulur, ağaç keser, odunu depoya taşır; balta kırılınca yeniden planlar. GOAP’ın klasik “ilk proje”si.
  3. [orta] F.E.A.R. odası — Bu sunumdaki kapı/pencere sahnesini 3B’de: NavMesh + GOAP + başarısızlık belleği. Oyuncu kapıyı gerçekten tutabilsin.
  4. [orta] HTN troll — Trunk Thumper alanını Fluid HTN ile Unity’de kurun; kütük kırılınca yeniden ağaç sökmesini izleyin.
  5. [zor] Sürü planlayıcı — Horizon tarzı: bir grup ajanı, üç makineye roller dağıtır; saldıran HTN ile plan yapar, diğerleri bekler.
  6. [araştırma] LLM eylem tablosu — Bir LLM’den yeni bir düşman türü için eylem tablosu (pre/eff/cost JSON) üretmesini isteyin; planlayıcıyla otomatik test edin: kaç tanesi geçerli plan üretiyor?
  7. [araştırma] GOAP vs HTN ölçümü — Aynı problemi iki yöntemle çözüp eylem sayısı arttıkça planlama süresini ölçün; Humphreys’in “HTN daha hızlıydı” gözlemini tekrar edin.

Neler öğrendik? 🎒

  • Planlama: hedefe götüren eylem dizisini aramak; Shakey → STRIPS → GOAP.
  • Eylem = ön koşul + etki + maliyet; geçişleri kimse yazmaz.
  • Plan arama = durum grafında A*.
  • F.E.A.R.: üç durum, bir plan; hedef/eylem ayrımı; kapı → tekme → pencere; tim taktiği yanılsaması.
  • Yeniden planlama ve başarısızlık belleği.
  • HTN: bileşik görev, yöntem, ilkel görev, geri izleme; Trunk Thumper.
  • Oyunlar: Shadow of Mordor, Tomb Raider, Deus Ex HR DC, Transformers, Killzone, Horizon.
  • Araçlar: CrashKonijn GOAP, ReGoap, Fluid HTN, GTPyhop, unified-planning.
  • Sonraki: oyun ağaçları — rakip de plan yapıyorsa? Minimax ve MCTS.

🎮 Bu sunumdaki oyunlar (1/2)

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

F.E.A.R. 2005 · nişancı
Paranormal olayları araştıran özel tim; düşman askerleri yıllarca “en akıllı düşmanlar” listelerinde anıldı.
Transformers: Fall of Cybertron 2012 · aksiyon
Transformers evreninde üçüncü şahıs nişancı; düşmanları GOAP ile plan yapar.
Killzone 2004 · nişancı
PS2’nin “Halo rakibi” diye tanıtılan askerî nişancısı; serinin ilk oyunu.
Horizon Zero Dawn 2017 · açık dünya aksiyon
Robot dinozorların dolaştığı dünyada avcı Aloy; makineler HTN planlayıcıyla düşünür.
Middle-earth: Shadow of Mordor 2014 · açık dünya aksiyon
Ork kaptanlarıyla savaşırsınız; sizi öldüren ork terfi eder ve sizi hatırlar (Nemesis sistemi).

🎮 Bu sunumdaki oyunlar (2/2)

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

Tomb Raider: Underworld 2008 · aksiyon-macera
Lara Croft’un İskandinav mitolojisi temalı macerası.
Deus Ex: Human Revolution 2011 · aksiyon RPG
Gizlilik, konuşma ve çatışmayı serbestçe karıştırabildiğiniz siberpunk rol yapma oyunu.
No One Lives Forever 2 2002 · casus nişancı
1960’lar temalı mizahi casus nişancısı; F.E.A.R. ekibinin önceki oyunu.
Killzone 2 / 3 2009 / 2011 · nişancı
PlayStation 3’ün askerî bilimkurgu nişancıları; çok oyunculu botları HTN planlayıcıyla düşünür.
Minecraft 2011 · kum havuzu
Bloklardan oluşan, prosedürel üretilen, neredeyse sonsuz bir dünya.

Kaynaklar: videolar 🎬

GDC Vault: Three States and a Plan (Orkin, 2006) · GOAP: Ten Years Old and No Fear! (2015) · Guerrilla: HTN Planning in Decima

📄 Akademik okumalar

Orkin 2006 · Three States and a Plan: The A.I. of F.E.A.R. (GDC 2006 bildirisi)
GOAP’ın kaynağı; bu sunumdaki F.E.A.R. bilgilerinin çoğu buradan.
Fikes & Nilsson 1971 · STRIPS: A New Approach to the Application of Theorem Proving to Problem Solving (Artificial Intelligence 2(3–4))
Klasik planlamanın temeli.
Humphreys 2013 · Exploring HTN Planners through Example (Game AI Pro, Bölüm 12)
Trunk Thumper; Transformers: Fall of Cybertron.
Straatman, Verweij vd. 2013 · Hierarchical AI for Multiplayer Bots in Killzone 3 (Game AI Pro, Bölüm 29)
Üretimde HTN: botlar ve taretler.
Jacopin 2015 · Optimizing Practical Planning for Game AI (Game AI Pro 2, Bölüm 13)
Planlayıcıyı oyun bütçesine sığdırmak.
Anguelov, Humphreys, Mark 2013 · Behavior Selection Algorithms (Game AI Pro, Bölüm 4)
FSM, BT, utility, GOAP, HTN karşılaştırması.
Liu vd. 2023 · LLM+P: Empowering Large Language Models with Optimal Planning Proficiency (arXiv 2304.11477)
LLM + klasik planlayıcı.
Wang vd. 2023 · Voyager: An Open-Ended Embodied Agent with Large Language Models (arXiv 2305.16291)
Minecraft’ta beceri kütüphanesi kuran LLM ajanı.

Kaynaklar: okuma 📚

NEXT LEVEL ▶
Oyun Ağaçları
Minimax, alfa-beta budama ve Monte Carlo ağaç araması
SONRAKİ SUNUM ▶