T: tema · Z: kodu büyüt · S: konuşmacı notları · F: tam ekran · Esc: genel bakış · ⌂ ders haritası
OYUNLARDA YAPAY ZEKÂ · HAFTA 4
Utility AI
Yanıt eğrileri, etkenler, akıllı nesneler — kararları evet/hayır yerine puanla vermek
PRESS ▶ TO START

Bu derste oyunun haritası 🗺️

  1. Neden puan? — eşiklerin sorunu, fayda fikrinin kısa tarihi
  2. Yanıt eğrileri — bir sayıyı “ne kadar istiyorum?”a çevirmek (canlı eğri editörü)
  3. Etkenleri birleştirmek — çarpım, veto, telafi faktörü (canlı asker)
  4. Seçim ve atalet — en iyi mi, rastgele mi? Dual utility, Zoo Tycoon 2
  5. The Sims — ihtiyaçlar, akıllı nesneler, Joy Booth (canlı oda)
  6. Kod — C#, JS, Python + üç laboratuvar
  7. Gerçek oyunlarda — Guild Wars 2, Dragon Age: Inquisition, Unreal EQS
  8. Kütüphaneler — Unreal StateTree, Unity AnimationCurve, Godot eklentileri, Curvature
🎮 Bu dersin sonunda…

…bir NPC’nin her seçeneğine 0–1 arası bir puan veren eğriler tasarlayabilecek, birden çok etkeni doğru biçimde birleştirebilecek, Sims tarzı ihtiyaç güdümlü bir karakter yazabilecek ve bu yöntemi davranış ağacınızla birlikte kullanabileceksiniz.

🤔 ISINMA: AKŞAM 9, KARARINIZ NE?

Biraz açsınız, epey yorgunsunuz, sevdiğiniz dizinin yeni bölümü çıkmış, yarın sabah sınav var.

  • “Açsam ye, değilsem…” gibi evet/hayır kurallarıyla karar vermiyorsunuz. Her seçeneği kafanızda tartıyorsunuz: ne kadar açım, ne kadar yorgunum, dizi ne kadar cazip.
  • Her seçeneğe gizli bir puan veriyor ve en yüksek puanlıyı seçiyorsunuz. İktisatçılar buna fayda (utility) der.
  • Bir NPC de aynısını yapabilir: “ateş et 0,62 · siper al 0,71 · iyileş 0,18” → siper al. Bugünün konusu bu: Utility AI.

🎯 Bu konu için bilmeniz gerekenler

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

Neden?Y0’daki “bir değeri 0–1 aralığına getirme” fikri bu dersin temel taşı. Y3’teki ağaçla karşılaştıracağız ve sonunda ikisini birleştireceğiz. Matematik olarak sadece çarpma ve grafik okuma gerekiyor.
🧰 Kodlamadan korkuyorsanızUtility AI’ın kalbi kod değil, eğri tasarımı. Eğrileri Excel / Google Sheets / Desmos’ta çizip denemek, Unity’de AnimationCurve ile fareyle şekillendirmek mümkün. Unreal 5.5+ StateTree’de utility seçimi editörden yapılır.

Mini sözlük

utilityfaydaBir seçeneğin “şu an ne kadar iyi” olduğunu gösteren sayı (genelde 0–1)
considerationetken / değerlendirmePuanı etkileyen tek bir ölçüt: mesafe, can, mermi…
normalizationnormalleştirmeHam değeri (ör. 0–50 m) 0–1 aralığına getirmek
response curveyanıt eğrisi0–1 girdiyi 0–1 puana çeviren fonksiyon: doğrusal, üslü, lojistik, parçalı
decision score evaluator (DSE)karar puanlayıcıBir eylemin bütün etkenlerini birleştirip tek puan üreten birim (IAUS)
compensation factortelafi faktörüÇok etkenli eylemlerin çarpım yüzünden haksız düşük puan almasını düzeltir
weighted randomağırlıklı rastgelePuanı yüksek olanın seçilme olasılığı yüksek olan kura
rank · weightöncelik sınıfı · ağırlıkDual utility: önce sınıf, sınıf içinde ağırlık
inertia / commitmentatalet / bağlılıkYeni karara geçmek için mevcut kararı biraz kayırmak: titremeyi önler
smart object · advertisementakıllı nesne · reklamNesnenin “beni kullanırsan şu ihtiyacını şu kadar doyururum” ilanı (The Sims)
LEVEL 0
Neden puan?
eşiklerin sorunu ve fayda fikri
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

Önce kendi akşamınız: dört seçenek, dört ihtiyaç 🌙

Her seçeneğe o anki ihtiyaçlarınıza göre 0 ile 1 arasında bir puan verin ve en yüksek puanlıyı seçin: Utility AI’ın tamamı bu. Senaryoları sırayla deneyin; her birinde önce tahmin edin, sonra en alttaki “evet/hayır kuralları olsaydı” ile karşılaştırın.

Eşik mi, eğri mi?

030100can 01 eşik: “can < 30 → kaç” eğri: kaçma isteği 31: hiç istemiyor!
  • Y2–Y3’te kararlar evet/hayır koşullarıydı. Can 31’de nöbetçi, can 100’deki kadar cesur; 29’da birden tabanları yağlıyor.
  • Eğride ise kaçma isteği can azaldıkça yavaş yavaş artar. Başka etkenlerle (düşman sayısı, siper) tartılabilir.
  • Kevin Dill: “Utility AI, durumun ince ayrıntılarını hesaba katar; yine de eğrileri tasarımcı yazdığı için kontrol elden gitmez.”
  • Önemli: puanlar o anda, oyunun gerçek durumuna göre hesaplanmalı. Sabit ağırlıklar (“saldırı her zaman 0,7”) işe yaramaz.

Fayda fikrinin kısa tarihi 📜

1738 · BernoulliDaniel Bernoulli “St. Petersburg paradoksu”nu çözmek için paranın değerinin herkes için aynı olmadığını söyler: zengine 100 lira, yoksula 100 liradan daha az fayda sağlar. İlk “yanıt eğrisi” budur: para → mutluluk, doğrusal değil.
1944 · von Neumann & Morgenstern“Oyun Teorisi ve Ekonomik Davranış”: rasyonel bir karar verici beklenen faydayı en büyükleyen seçeneği seçer. (Minimax’ı da bu kitaptan tanıyacağız, Y6.)
2000 · The SimsOyuncunun gördüğü ilk büyük utility sistemi: ihtiyaç çubukları ve nesnelerin “reklamları” (Level 4).
2009–2015 · Dave Mark“Behavioral Mathematics for Game AI” kitabı (2009), Kevin Dill ile GDC 2010 konuşması “Improving AI Decision Modeling Through Utility Theory”, Mike Lewis ile GDC 2015 “Building a Better Centaur” — Infinite Axis Utility System (IAUS). Bugünkü dilin çoğu buradan.

Utility AI’ın döngüsü

ham girdimesafe = 18 m normalleştir18 / 50 = 0,36 yanıt eğrisi1 − 0,36² = 0,87 etkenleri birleştir0,87 × 0,81 × 0,79 en iyi eylemi seçsiper al (0,71) her etken için ayrı ayrı · her eylem için ayrı ayrı · saniyede birkaç kez

Bir NPC’nin N eylemi, her eylemin birkaç etkeni var. Her etken bir sayı → 0–1 → eğri → puan. Eylemin puanı, etkenlerinin birleşimi. En yüksek (ya da en iyilerden biri) seçilir. Sonra dünya değişir ve döngü yeniden başlar.

Quiz 1 · neden puan?
Bir FPS’te “can < 30 ise kaç” kuralını utility ile yeniden yazmak neyi değiştirir?
Utility, eşiği bir eğriye çevirir: can 31’de de az da olsa kaçma isteği vardır ve düşman sayısı, siperin yakınlığı gibi etkenlerle birlikte değerlendirilir. Eğrileri tasarımcı çizdiği için kontrol kaybolmaz; hız açısından da genelde daha pahalıdır, ucuz değil.
LEVEL 1
Yanıt eğrileri
bir sayıyı “ne kadar istiyorum?”a çevirmek
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

Adım 1: normalleştirme (“kitap ayraçları”)

Mesafe metre, can puan, mermi adet… Hepsini karşılaştırabilmek için önce 0–1 aralığına getiririz. Mike Lewis buna “kitap ayraçları” (bookends) der: bir en az ve bir en çok değer seçilir.

🎒 Kırpma (clamp)50 m’den uzak her şey 1 sayılır, negatifler 0. Unity: Mathf.Clamp01. Böylece puanlar asla 0–1 dışına taşmaz.
⚠️ Ayraç seçimi bir tasarım kararıKeskin nişancı için “uzak” 100 m, tabancalı için 15 m olabilir. Aynı eğri, farklı ayraçlarla farklı karakter yaratır.

Adım 2: eğri ailesi

şeklieğribiçim (x ∈ [0,1])ne zaman?örnek
doğrusaly = m·(x − c) + bEtki her yerde eşit artıyorsaDüşman sayısı → siper isteği
üslü (karesel, kübik)y = (x − c)^kUçlarda hızlanan/yavaşlayan etkiMermi azaldıkça şarjör isteği: önce ihmal, sonra acil
lojistik (S)y = 1 / (1 + e^(−s·(x − c)))Bir eşik etrafında yumuşak geçişCan ~%25 altına inince kaçma isteği hızla artar
tersy' = 1 − y“Ne kadar azsa o kadar iyi”Mesafe: yakın hedef daha cazip
parçalı doğrusalelle noktalar + aradaki doğrularFormülle anlatılamayan istekThe Sims’in açlık eğrisi

Küçük grafiklerde yatay eksen girdi (0 → 1), dikey eksen istek (0 → 1). Formülden korkmayın: oyunda bu eğrileri kimse formül yazarak ayarlamaz, görsel bir editörde (sonraki slayt, Unity AnimationCurve, Curvature) şekillendirir.

Eğri editörü 📈

Hikâye: Sims neden doğru zamanda acıkır?

David “Rez” Graham (The Sims Medieval, The Sims 4 YZ programcısı) Game AI Pro’da anlatıyor:

  • Bütün Sims oyunlarının sorunu: Sim acıkınca yemek yesin. Açlık için basit bir karesel eğri kullanırsanız, Sim açlık göstergesi neredeyse doluyken bile küçük bir olasılıkla yemeğe gider. Er geç gider de!
  • Tasarımcılar şunu istiyordu: belli bir eşiğe kadar açlığı tamamen yok say, sonra biraz acık, sonra birden çok acık.
  • Bunu tek bir formülle kurmak zor; çözüm elle ayarlanan parçalı doğrusal eğri. Graham: “The Sims’in kullandığı tam olarak budur.”
🔎 Editörde deneyin“Açlık (Sims tarzı)” hazır ayarını seçin. Noktaları sürükleyip kendi Sim’inizin “açlık kişiliğini” tasarlayın: obur bir Sim mi, oruç tutan bir keşiş mi?
💡 DersEğri, karakterin kişiliğidir. Aynı kod, farklı eğrilerle farklı karakterler üretir — programcıya gerek kalmadan tasarımcı ayarlayabilir.
Quiz 2 · eğriler
Bir keskin nişancı “hedef uzaksa daha iyi, ama 80 m’den sonrası fark etmez” istiyor. En uygun yanıt eğrisi?
Ayraçlar 0–80 m olunca 80 m ve üstü zaten 1’e kırpılır. Yükselen bir eğri “uzak iyi” der; k < 1 olan üslü eğri ilk metrelerde hızlı artar. Ters eğri “yakın iyi” demek olurdu; 0–1000 m ayracı ise 80 m’yi 0,08’e sıkıştırıp karesel eğriyle neredeyse sıfırlar.
LEVEL 2
Etkenleri birleştirmek
çarpım, veto ve telafi faktörü
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

Çizimle: aynı üç etken, iki birleştirme

Asker 1: her şey yolundamermi var0,9hedef yakın0,8canım yerinde0,9ortalama0,87çarpım0,65Asker 2: mermi yokmermi var0hedef yakın0,9canım yerinde1,0ortalama0,63 😱çarpım0,00 ✔

“Ateş et” eyleminin üç etkeni var. Sağdaki askerin mermisi yok (ilk etken 0). Ortalama alınırsa yine de 0,63 puanla ateş etmeye kalkar; çarpılırsa puan 0 olur ve eylem elenir. Sonraki slayt aynı sayıları tabloyla verir.

Toplamak mı, çarpmak mı?

“Ateş et” eyleminin üç etkeni var: mermi var, hedef yakın, canım yerinde.

etkenlerortalamaçarpım
0,9 · 0,8 · 0,90,870,65
0 · 0,9 · 1,0 (mermi yok!)0,63 😱0 ✔

Ortalamada mermisi olmayan asker yine de ateş etmeye çalışır. Çarpımda sıfır olan tek bir etken bütün eylemi veto eder. IAUS ve çoğu sistem çarpar.

⚙️ Bedava optimizasyon (Guild Wars 2)Bir etken 0 verince çarpım 0 olur ve gerisini hesaplamaya gerek kalmaz: erken çıkış. Bu yüzden ucuz etkenler (mermi var mı?) önce, pahalılar (görüş ışını) sonra sıralanır.
⚠️ Çarpımın yan etkisiHer etken 1’den küçük olduğu için, etken sayısı arttıkça puan düşer: 0,9 × 0,9 = 0,81 ama 0,9⁵ = 0,59. Beş etkenli “iyi” bir eylem, iki etkenli “orta” bir eyleme kaybedebilir.

Telafi faktörü (Dave Mark)

Çarpımın kaybettirdiğini, etken sayısına göre geri ver:

etkenlerçarpımtelafili
0,9 · 0,90,810,89
0,9 · 0,9 · 0,90,730,86
0,9 × 50,590,78
0,5 · 0,50,250,34
0 · 0,9 · 0,900 (veto korunur)

Telafi, sıralamayı tamamen düzeltmez ama “daha çok etken = daha düşük puan” cezasını büyük ölçüde azaltır. Sıfır yine sıfır kalır.

Canlı: bir askerin beş seçeneği 🪖

  1. Mermiyi 0 yapın: “Ateş et”in kırmızı etkeni bütün eylemi veto ediyor; “Şarjör değiştir” öne çıkıyor. Düşmanı 5 m’ye getirin: şarjör değiştirmek artık riskli (düşman uzak etkeni düştü).
  2. Canı yavaş yavaş azaltın: önce “İyileş”, sonra çok düşük canda “Kaç” kazanıyor. Hiçbir yerde “eşik” yazmadık!
  3. Medkit kutusunu kaldırın: “İyileş” sıfırlanıyor. Kutu, tasarımcının “bu eylem şu an mümkün mü?” sorusunu etken olarak sormasıdır.
  4. Telafi faktörünü kapatın: 3 etkenli eylemlerin puanı düşüyor, 2 etkenliler kazançlı çıkıyor. Kazanan değişti mi?
🔎 DEMODA DENEYİN
  1. Mermiyi 0 yapın: “Ateş et”in kırmızı etkeni bütün eylemi veto ediyor; “Şarjör değiştir” öne çıkıyor. Düşmanı 5 m’ye getirin: şarjör değiştirmek artık riskli (düşman uzak etkeni düştü).
  2. Canı yavaş yavaş azaltın: önce “İyileş”, sonra çok düşük canda “Kaç” kazanıyor. Hiçbir yerde “eşik” yazmadık!
  3. Medkit kutusunu kaldırın: “İyileş” sıfırlanıyor. Kutu, tasarımcının “bu eylem şu an mümkün mü?” sorusunu etken olarak sormasıdır.
  4. Telafi faktörünü kapatın: 3 etkenli eylemlerin puanı düşüyor, 2 etkenliler kazançlı çıkıyor. Kazanan değişti mi?

🔗 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 · birleştirmek
“İyileş” eyleminin etkenleri: can düşük = 0,8 · medkit var = 0 · düşman uzak = 0,9. Çarpımla puan kaçtır ve bu neden istenen davranıştır?
Çarpımda tek bir 0, bütün puanı 0 yapar: veto. “Medkit yok” bir tercih değil, bir imkânsızlık; ortalama ya da toplam bunu ifade edemez ve NPC’nin olmayan medkiti kullanmaya çalışmasına yol açar.
LEVEL 3
Seçim ve atalet
en iyi mi, rastgele mi? titremeden nasıl kaçınılır?
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

Puanlar hesaplandı: hangisini seçeceğiz?

Mutlak: en yüksekHer zaman en yüksek puanlı. Satranç, strateji için ideal. Sorun: aynı durumda hep aynı şeyi yapar → robot gibi, tahmin edilebilir.
Göreli: ağırlıklı rastgelePuanı 0,6 olan, 0,2 olandan 3 kat sık seçilir. Çeşitlilik var; ama ara sıra çok kötü bir seçenek de seçilir → aptal görünür.
Orta yol: en iyiler arasındanEn iyi 3–5 seçenek ya da “en iyinin %90’ı üstündekiler” arasından ağırlıklı rastgele. The Sims’in de kullandığı yol.

The Sims 3’te Richard Evans, Sim mutluyken neredeyse hep en iyiyi, mutsuzken daha “savruk” seçimler yapan bir yöntem kullandı (Boltzmann dağılımı ve “sıcaklık”; GDC konuşması “Modeling Individual Personalities in The Sims 3”).

Dual utility: önce sınıf, sonra ağırlık (Kevin Dill)

Her seçeneğe iki sayı: rank (öncelik sınıfı) ve weight (sınıf içindeki ağırlık).

  1. Ağırlığı 0 olanları at (imkânsız).
  2. En yüksek rank’ı bul; daha düşük rank’lı her şeyi at.
  3. Kalanlardan en büyük ağırlığın belli bir oranından (ör. %25) küçük olanları at (“aptalca” seçenekler).
  4. Kalanlar arasından ağırlıklı rastgele seç.

Halo’nun öncelik listesi + Sims’in ağırlıklı kurası: ikisinin iyi yanı bir arada.

🐨 Zoo Tycoon 2 (Blue Fang, 2004)
  • Hayvanlar ve ziyaretçiler normalde ihtiyaçlarına (açlık, eğlence, tuvalet) göre seçer: hepsi rank 0, ağırlıklar duruma göre değişir.
  • Koala ağaca tırmanınca ağaç davranışları rank ~5 alır: hayvan başka bir şey seçip ağaçtan “ışınlanarak” inmesin diye.
  • Marine Mania eklentisindeki yunus gösterileri: gösteri davranışları rank 98–102, sırayı basit bir FSM ayarlar.
  • Ölmek: rank 1.000.000. “Hiçbir hayvanın ölümden geri dönmesini istemedik.”

Çizimle: titreme ve atalet

Ataletsiz: her kararda en yüksek puanlıya geç saldırkaç seçilen eylem → her kararda değişiyor: iki el ateş, üç adım kaç, bir el ateş… (titreme) Ataletli: şu an yapılan eylemin puanı × 1,3 saldır × 1,3 (bonuslu)kaç seçilen eylem → hep “saldır”: öbür seçenek ancak gerçekten (1,3 kattan fazla) iyiyse kazanır

Üstteki çizgiler iki eylemin zaman içindeki puanları: neredeyse eşit ve küçük oynamalarla yer değiştiriyorlar. Alttaki renkli şerit o anda seçilen eylem. Atalet, yapılmakta olan eyleme küçük bir bonus vererek bu gidip gelmeyi keser.

Atalet: kararsız NPC sorunu

Bir asker kötü bir konumda: “saldır” 0,50, “kaç” 0,50. Her karede yeniden karar verirse: iki el ateş, üç adım kaç, bir el ateş, … Titreme (Y2’deki sorunun puanlı hâli).

  • Mevcut eyleme bonus: şu an yaptığın eylemin puanını ×1,2–1,5. Başka bir eylem “gerçekten daha iyi” olmadıkça geçme.
  • Bekleme süresi: karar verdikten sonra X sn boyunca mevcut eylemi çok yüksek puanla tut; süre bitince yavaşça bırak.
  • Bitirince karar ver: The Sims Medieval’de bir Sim, yalnızca eylem kuyruğu boşaldığında karar verirdi. Seçince bağlanırdı.
⚙️ Karar sıklığıÇoğu oyunda utility kararı her karede değil, saniyede 2–10 kez (ya da eylem bitince) verilir. Hem titremeyi azaltır hem işlemciyi rahatlatır.
⚠️ Fazla ataletBonus çok büyükse NPC yangın çıkınca bile TV izlemeye devam eder. Acil durumlar için ya bonusu aşan bir puan ya da dual utility’deki gibi daha yüksek rank kullanın.
LEVEL 4
The Sims ve akıllı nesneler
zekâ karakterde değil, nesnelerde
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

📸 Oyundan bir kare: The Sims (2000)

The Sims (2000) ekran görüntüsü
Ekrandaki her Sim’in açlık, uyku, eğlence gibi ihtiyaç çubukları var; evdeki her nesne bu ihtiyaçlara puan “reklamı” yapıyor. Sim, “kendi akşamınız” demosundaki gibi en yüksek puanlıya gidiyor.
Görsel: The Sims ekran görüntüsü, Maxis/Electronic Arts, Wikipedia (eğitim amaçlı adil kullanım)

Derin hikâye: The Sims (2000) ve “reklam yapan” nesneler 🏠

Will Wright ve Ken Forbus’un 2001 tarihli “Some notes on programming objects in The Sims” notlarından:

  • Her Sim’in ihtiyaçları var: enerji, konfor, açlık, hijyen, tuvalet, oda, sosyal, eğlence ve bunların özeti ruh hâli.
  • Davranışlar Sim’de değil nesnelerde. Her nesne, sunduğu etkileşimleri reklam eder: “beni kullan, şu ihtiyacını şu kadar doyururum.” Tuvalet, Tuvalet ihtiyacına 0–70 arasında reklam verir.
  • Reklamlar kişiliğe göre ölçeklenir: akvaryumdaki “balıkları besle”, Sim’in oyuncu (Playful) puanına göre Eğlence’ye 1 ile 11 arası verir.
  • Reklamlar mesafeyle zayıflar (attenuation): uzaktaki buzdolabı daha az cazip.
  • Sim, evdeki bütün nesnelerin bütün davranışları arasından mutluluğunu en çok artıracak olanı seçer; sonra o davranışın kodu nesneden alınıp Sim’in kendi iş parçacığında çalışır.
💡 Neden dâhice?Yeni bir eşya eklemek için Sim’in beynine dokunmak gerekmez: eşya kendi davranışını ve reklamını getirir. Sims’in onlarca eklenti paketi ve topluluğun binlerce özel eşyası bu sayede mümkün oldu.
🎬 İzleyinThe Genius AI Behind The Sims (Game Maker’s Toolkit) — Sims YZ programcılarıyla röportajlı.

Joy Booth: bağımlılık yapan bir nesne 🎡

Forbus & Wright’ın notlarındaki örnek nesne “Joy Booth” Sosyal, Eğlence ve Ruh hâli için çok güçlü reklam verir.

  • Yerel olarak harika görünür: arkadaşı az bir Sim’i günün sonunda daha mutlu eder.
  • Ama Sim onu kullanırken gerçek ilişkiler kurmaz: arkadaşlık yerine kabinde vakit geçirir. Notların yorumu: “Sonuçta muhtemelen evde bulundurmaya değer bir nesne değil.”
  • Genel ders: “Bağımlılık yapan nesneler yaratmak kolaydır — bir davranışa bir boyutta yüksek reklam verin, o davranışın tekrar tekrar seçildiğini görürsünüz. Zor olan, Sim’lerin doğal görünen desenlerle kullandığı dengeli nesne koleksiyonları kurmaktır.”
🔬 Notlardaki araştırma önerisi: “şüpheci Sim’ler”Nesneler reklam verir ama Sim’ler deneyimin buna değip değmediğini bilmez. Öneri: davranıştan önce ve sonra ihtiyaçları kaydet, nesne reklam ettiği kadar doyurmuş mu karşılaştır, sonraki kararlarda reklamı buna göre ölçekle. Yani öğrenen utility (Y13’e köprü).

Sonraki demoda Joy Booth’u ekleyebilirsiniz: bizim kabin reklamında Eğlence ve Sosyal’e 100 vaat ediyor ama gerçekte 30 ve 12 veriyor.

Sim odasını okuma kılavuzu

Sol: oda
  • Kutular = akıllı nesneler: buzdolabı, yatak, TV, telefon, tuvalet. Her biri bir ihtiyaca reklam veriyor.
  • Yuvarlak yüz = Sim. Üstündeki yazı: şu an yaptığı eylem ve kalan süresi.
  • Bir nesneye tıklarsanız Sim’e emir vermiş olursunuz (oyundaki gibi); 2 sn sonra yine kendi kararlarına döner.
Sağ: Sim’in kafasının içi
  • Üstteki 5 çubuk = ihtiyaçlar. 100 = tam dolu, 0 = kriz. Zamanla kendiliğinden boşalırlar.
  • Alttaki mor çubuklar = her eylemin o anki puanı. Her kare yeniden hesaplanır. Yeşil yazılı olan seçilen eylem.
  • Kriz sayacı: bir ihtiyaç 0’a düştü. Ort. mutluluk: beş çubuğun ortalaması. Fikir değiştirme: Sim kaç kez eylem değiştirdi.

Dikkat: “eylemi bitir, sonra karar ver” seçiliyken yeşil eylem her zaman en yüksek puanlı olmayabilir — Sim başladığı işi bitiriyor. Buna atalet diyoruz. 🔗 Eğri denemek için: Desmos · izleyin: The Genius AI Behind The Sims.

Canlı: ihtiyaçlarla yaşayan bir Sim 🙂

  1. Bir süre izleyin: Sim hangi sırayla ihtiyaçlarını gideriyor? Sağdaki puan çubukları her an güncelleniyor; yeşil olan seçilen.
  2. 🎡 Joy Booth ekleyin. Sim’in kabinde ne kadar vakit geçirdiğine ve kriz sayısına bakın (ihtiyaçlardan biri sıfıra düştü). Reklamın yalan olması ortalama mutluluğu nasıl etkiliyor?
  3. Atalet: “her kare karar (atalet yok)” + seçim: “ağırlıklı rastgele (hepsi)”. Sim odanın ortasında kararsızca titriyor mu? “Fikir değiştirme” sayacı ne oldu?
  4. “Mesafe zayıflatması”nı kapatın: Sim uzaktaki nesneler için gereksiz yere odayı arşınlıyor mu?
  5. Bir nesneye tıklayın: oyuncu emri (The Sims’te tıklayıp eylem seçmek). 2 sn sonra Sim yine kendi kararlarına döner.
🔎 DEMODA DENEYİN
  1. Bir süre izleyin: Sim hangi sırayla ihtiyaçlarını gideriyor? Sağdaki puan çubukları her an güncelleniyor; yeşil olan seçilen.
  2. 🎡 Joy Booth ekleyin. Sim’in kabinde ne kadar vakit geçirdiğine ve kriz sayısına bakın (ihtiyaçlardan biri sıfıra düştü). Reklamın yalan olması ortalama mutluluğu nasıl etkiliyor?
  3. Atalet: “her kare karar (atalet yok)” + seçim: “ağırlıklı rastgele (hepsi)”. Sim odanın ortasında kararsızca titriyor mu? “Fikir değiştirme” sayacı ne oldu?
  4. “Mesafe zayıflatması”nı kapatın: Sim uzaktaki nesneler için gereksiz yere odayı arşınlıyor mu?
  5. Bir nesneye tıklayın: oyuncu emri (The Sims’te tıklayıp eylem seçmek). 2 sn sonra Sim yine kendi kararlarına döner.

🎬 Ara: The Sims’in zekâsı

The Genius AI Behind The Sims
Game Maker’s Toolkit (Mark Brown) · YouTube’da aç

Az önce Sim odasında oynadığınız fikrin gerçek oyundaki hâli: ihtiyaç çubukları, nesnelerin “reklamları”, eğriler ve en iyiler arasından rastgele seçim.

🤔 İzlerkenVideoda bir nesnenin reklam puanı hangi iki şeye göre değişiyor? Sim neden her zaman en yüksek puanlı eylemi seçmiyor? Bunların bu sunumdaki adları neydi?
LEVEL 5
Kod ve laboratuvarlar
eylem listesi, eğriler, bir döngü
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

🎒 Ön bilgi: “en büyüğü bul” döngüsü

Utility AI’ın kodu, programlamanın en eski kalıplarından biridir: bir listedeki en büyük elemanı bulmak.

🎒 Fonksiyonu veri olarak tutmakHer etken “girdiyi oku” ve “eğriyi uygula” adımlarından oluşur. Bunları bir listede tutarız; yeni etken eklemek = listeye bir satır eklemek. Y3’teki Func<Guard, bool> fikrinin aynısı, bu sefer Func<Npc, float>.
🎒 Unity AnimationCurveUnity’nin animasyon için yaptığı eğri nesnesi, Inspector’da fareyle çizilen bir yanıt eğrisidir: curve.Evaluate(x). Utility AI için biçilmiş kaftan.

Etken, eylem, beyin (1/2)

Etken, eylem, beyin (2/2)

Beyni karar sıklığı ve ataletle sarmak

Debug satırı önemli: utility sistemlerinde hata ayıklamanın tek yolu puanları görmek. NPC’nin başında küçük bir puan tablosu çizmek (demodaki gibi) altın değerindedir.

🎒 Kod sözlüğü

float.MinValue · float("-inf")en küçük sayı“En büyüğü bul” döngüsünü başlatmak için: ilk eleman her zaman daha büyük olur
Mathf.Clamp01(x) · constrain(x, 0, 1)kırpmax’i 0–1 aralığına sıkıştırır
AnimationCurve · curve.Evaluate(x)Unity eğrisiInspector’da çizilen eğrinin x’teki değeri
[Serializable]serileştirilebilirUnity bu sınıfın alanlarını Inspector’da gösterebilsin
Func<Npc, float>fonksiyon türü“Npc alıp float döndüren fonksiyon” tutan değişken
current?.namenull-koşullu erişimcurrent null ise hata verme, null döndür
$"{a} → {b:0.00}"metin şablonuDeğişkenleri metne göm; :0.00 = iki ondalık
max(liste, key=f)Python maxf(eleman) değeri en büyük olan elemanı döndürür
math.exp(x) · Math.exp(x)e üzeri xLojistik eğride kullanılır; ≈ 2,718ˣ

🌱 Isınma kodu: 0–1 aralığına getir

Utility AI’ın ilk adımı. Kırpma için Math.max(0, Math.min(1, x)) (p5.js’te constrain(x, 0, 1)). Kırpmazsanız 80 m’deki düşman “1,6 puan” alır ve bütün çarpımları bozar.

🌱 Isınma kodu: en yüksek puanlı eylem

Bütün utility sistemlerinin son satırı budur: puanları hesapla, en büyüğü seç. Yukarıdaki örnekte cevap "siper".

🧪 Canlı laboratuvar: Sim’in puan fonksiyonu

Başlangıç kodu çalışıyor ama Sim “biraz acıkınca” bile buzdolabına koşuyor. Aciliyeti doğrusal yerine parçalı ya da üslü bir eğriyle hesaplayın (ör. u * u * u), mesafeyi hesaba katın (ör. / (1 + dist / 600)). Kriz sayısını ve ortalama mutluluğu karşılaştırın.

🐍 Laboratuvar: IAUS karar puanı

Başlangıç kodu sadece çarpıyor. Veto, telafi ve boş liste kurallarını ekleyin. Tek etkenli listede telafi “kendiliğinden” sıfırdır (mod = 0) — formülünüz bunu da doğru vermeli.

🐍 Laboratuvar: dual utility adayları

Testlerde Zoo Tycoon örnekleri de var: ölüm rank 1.000.000, gösteri 100, ağaç davranışları 5. Hiç seçenek kalmazsa boş liste döndürün.
LEVEL 6
Gerçek oyunlarda
Guild Wars 2, Dragon Age, Unreal EQS
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

Guild Wars 2: Heart of Thorns (2015) — IAUS sahada

  • ArenaNet’in yapay zekâsı Dave Mark’ın Infinite Axis Utility System’i üzerine kuruldu (Mike Lewis, Game AI Pro 3, 13. bölüm).
  • Her karakter türüne bir karar listesi verilir; her karar bir DSE (karar puanlayıcı). Her düşünme döngüsünde bütün DSE’ler puanlanır, en iyisi kazanır.
  • DSE = etkenlerin çarpımı. Her etken: ham sayı → 0–1 → yanıt eğrisi. Bir etken 0 verirse karar elenir ve kalan etkenler hesaplanmaz.
  • Hepsi veri: girdi seçimi ve eğri ayarı mühendis gerektirmeden tasarımcı tarafından yapılır.
“Sonsuz eksen” ne demek?Bir kararın kaç etkeni olacağına sınır yok: “hedef mesafesi”, “hedefin canı”, “bana bakıyor mu?”, “bu yeteneği az önce kullandım mı?” (bekleme süresi de bir etken!). Her etken bir eksen.
🎬 GDC 2015Mark & Lewis, “Building a Better Centaur: AI at Massive Scale” konuşmasında bir tasarımcının IAUS ile yeni bir NPC’nin yapay zekâsını yaklaşık 7 dakikada kurduğu hızlandırılmış bir video gösterir (GDC Vault).

Dragon Age: Inquisition (2014) — puan bantları

BioWare’in “Behavior Decision System”i (Hanlon & Watts, Game AI Pro 3, 31. bölüm): bir savaşçının 2–20 yeteneği var, her biri mana/dayanıklılık harcar. Her yetenek için küçük bir değerlendirme ağacı puan ve hedef üretir; en yüksek puan kazanır.

eylem sınıfıpuan aralığı
Temel (sıradan vuruş)10
Saldırı yetenekleri20–40
Destek (büyü, hazırlık)25–45
Tepki (yakın tehlikeye)50–70
💡 Dual utility’nin akrabasıBantlar, sınıflar arasında öncelik kurar (tepki her zaman saldırıdan önce) ve sınıf içinde 20 puanlık bir “aciliyet aralığı” bırakır. Bu bir kural değil, tasarımcılar arasında bir anlaşmadır: oyun verisinde zorlanmaz.
Hedef seçimi de puanlaBir yetenek “kime?” sorusunu da cevaplar: değerlendirme ağacı her olası hedef için ayrı puan üretir, en iyisi seçilir. Y12’de konum seçimi için aynı fikri göreceğiz.

Utility her yerde

Unreal EQS (Environment Query System)“Nereye siper alayım?” sorusu için çevredeki noktaları üretir, her noktayı testlerle puanlar (oyuncuya mesafe, görüş, yol uzunluğu) ve en iyisini döndürür. Konumlar için utility! (Zieliński, Game AI Pro, 33. bölüm — Y12’de ayrıntılı.)
Davranış ağacına utilityBill Merrill (Game AI Pro, 10. bölüm): çocuklarını sırayla değil puanla deneyen “utility selector”. Unreal StateTree 5.5+’ta da çocuk durumlar puanla seçilebiliyor.
The Last of Us — EllieNaughty Dog, Ellie’ye “combat utility” derken işe yararlığı kastediyor: oyuncuyu desteklemesi ama zorluk dengesini bozmaması (Game AI Pro 2, 35. bölüm). Kelime aynı, anlam farklı — dikkat!
Strateji ve simülasyonKaynak dağıtımı, inşaat sırası, diplomasi kararları gibi “birçok şeyi tart” problemlerinde utility doğal seçimdir. Zoo Tycoon 2 ve The Sims gibi simülasyonlar bunun klasik örnekleri.

BT mi, utility mi? İkisi birden mi?

Davranış ağacıUtility AI
KararSıra ve evet/hayır koşullarıPuanlar ve eğriler
Güçlü yanıOkunabilir, öngörülebilir, “şunu kesin yap” kurallarıAyrıntılı tartma, kişilik, çeşitlilik, yeni seçenek eklemek kolay
Zayıf yanıÖncelikler sabit, ayrıntıyı ifade etmek zor“Neden bunu seçti?” sorusu zor; eğri ayarı zaman alır
Hata ayıklamaAktif yolPuan tablosu (mutlaka görselleştirin!)
Tipik kullanımNişancı düşmanlar, boss fazlarıSims tarzı simülasyon, RPG ekip arkadaşları, strateji

Pratik öneri: çoğu oyun ikisini birleştirir. Üst seviyede utility “ne yapayım?” (savaş / yağma / iyileş), alt seviyede BT “nasıl yapayım?” (siper al → nişan al → ateş). Ya da BT’nin içinde bir utility selector.

LEVEL 7
Kütüphaneler ve entegrasyon
Unreal, Unity, Godot ve kendi aracınız
  • neden puan?
  • yanıt eğrileri
  • etkenleri birleştirmek
  • seçim ve atalet
  • The Sims ve akıllı nesneler
  • kod ve laboratuvarlar
  • gerçek oyunlarda
  • kütüphaneler ve entegrasyon

🧰 Kütüphaneler ve araçlar

adplatformne yapar / sınırlarınasıl eklenir
Unreal StateTree (utility seçimi)Unreal 5.5+ · yerleşikDurumların “Selection Behavior”u: Try Select Children With Highest Utility ya da …at Random Weighted by Utility. Her durumda etkenler (Consideration), AND/OR ve ağırlık.StateTree eklentisini etkinleştir → durumun Selection Behavior ayarı
Unreal EQSUnreal 4/5 · yerleşikKonum/hedef puanlama: üreteç + testler (mesafe, görüş, yol). BT’den “Run EQS Query” ile çağrılır. Eylem seçimi için değil, “nerede/kime” için.Project Settings → AI System; içerik tarayıcı → Environment Query
BTUtilityPluginUnreal · açık kaynakUnreal davranış ağacına puanla seçen “Utility” composite düğümü ekler. Eski ama fikri öğretici.Plugins klasörüne kopyala
Unity AnimationCurve + kendi kodunuzUnity · yerleşikEğri editörü hazır; yukarıdaki 60 satırlık beyin yeter. En esnek ve en yaygın yol.Hiçbir şey kurmayın: public AnimationCurve curve;
ZorPastaman UtilityAIUnity · açık kaynakAjan, etken, eylem bileşenleri; yanıt eğrileri; OpenUPM paketi.OpenUPM: com.zor.utility-ai
Utility AI GDExtensionGodot 4 · açık kaynakAgent Behaviour düğümleri + puanlı “Node Query System” (EQS benzeri, zaman bütçeli). BT ve State Tree düğümleri de içerir.AssetLib’de “Utility AI (GDExtension)”
godot-utility-aiGodot 4 · açık kaynakDavranış, etken ve yanıt eğrilerini Inspector’dan düzenleten küçük GDScript eklentisi.AssetLib ya da addons klasörü
CurvatureWindows · açık kaynakIAUS fikirleriyle utility yapay zekâ tasarlama ve deneme aracı (Mike Lewis). Oyun motoru değil, tasarım laboratuvarı.GitHub sürümünü indir

Python/JS için yaygın bir utility kütüphanesi yok: yukarıdaki kod zaten yeterince kısa. Eğri tasarlamak için Desmos (desmos.com/calculator) ya da bir hesap tablosu çok iş görür.

Unity’de utility: tasarımcı dostu kurulum

  1. Etkenleri listeleyin: “ham girdi + ayraçlar + eğri”. Örn. Hedef mesafesi, 0–30 m, ters karesel.
  2. Girdileri tek bir yerde hesaplayın: algı bileşeni mesafeyi, canı, mermiyi bir “bağlam” nesnesine yazsın (Y3’teki kara tahta).
  3. Eylemleri ScriptableObject yapın: her eylem bir asset; içinde etken listesi ve AnimationCurve’ler. Tasarımcı Inspector’da eğri çizer.
  4. Beyin: saniyede 4–10 kez puanla, ataletle seç, seçileni her kare yürüt.
  5. Görselleştirin: OnDrawGizmos ya da bir UI paneliyle NPC’nin puan tablosunu çizin.
  6. Kayıt alın: her karar değişimini (eski → yeni, puanlar) bir dosyaya yazın; “neden saçmaladı?” sorusunun cevabı orada.

🧩 Projenize utility eklerken: dikkat listesi

Sık hatalar
  • Normalleştirmeyi unutmak: “mesafe 18” ile “can 0,7”yi çarpmak.
  • Puan enflasyonu: her şeye “biraz daha önemli” diye ağırlık eklemek; sonunda hepsi 1 civarında.
  • Ortalama almak: veto kaybolur.
  • Ataletsiz her kare karar: titreme.
  • Görselleştirmemek: utility’de hata ayıklamak “neden 0,61 ve 0,63?” sorusudur; tablo yoksa cevap yok.
⚙️ PerformansN NPC × M eylem × K etken her düşünmede. 100 NPC × 10 eylem × 4 etken = 4000 eğri değerlendirmesi: saniyede 5 kez rahat. Pahalı etkenleri (görüş ışını) önbelleğe alın, sıfır veren ucuz etkeni öne koyun, NPC’lerin düşünme anlarını karelere yayın.
Ayar süreciÖnce her eylemi tek bir etkenle çalıştırın, sonra etken ekleyin. Her eklemeden sonra 5–10 senaryoyu (bu sunumdaki lab gibi) otomatik test edin: “çok aç → yemek”, “mermi yok → ateş etme”.

🤖 Bu konuyu bir YZ kod asistanıyla yazarken

Sık yapılan hatalar — kontrol edin
  • Normalleştirmeden çarpmak ya da puanları 0–1 dışına taşırmak
  • Ortalamayla birleştirip veto özelliğini kaybetmek
  • Her eylem için ayrı ayrı “if” zinciri yazıp buna utility demek
  • Her kare new List / LINQ ile çöp üretmek (sık çağrılan kodda)
  • Ağırlıklı rastgelede puanı 0 olanları da kuraya katmak
İyi bir istek (prompt) örneği

“Unity 6, C#. Bir asker NPC için utility AI yaz. Eylemler: Shoot, TakeCover, Reload, Heal, Flee. Her eylemin etkenleri ScriptableObject’te AnimationCurve ile tanımlansın; girdiler 0–1’e normalleştirilsin (mesafe 0–50 m, can 0–maxHp, mermi 0–magSize). Puan = etkenlerin çarpımı, herhangi biri 0 ise erken çık, Dave Mark’ın telafi faktörünü uygula. Beyin saniyede 4 kez karar versin, mevcut eyleme ×1.25 atalet versin, karar değişince Debug.Log yazsın ve OnDrawGizmos ile puanları karakterin üstüne yazsın. LINQ kullanma.”

  • Etken listesini, ayraçları ve eğri türlerini siz belirleyin; asistan kodu yazsın
  • Çarpım + veto + telafi istediğinizi açıkça yazın
  • Karar sıklığı ve atalet değerlerini isteyin
  • Her NPC için puan tablosunu çizen bir debug paneli isteyin
  • Senaryo testleri (girdi → beklenen eylem) yazdırın

🔬 Araştırma ucu: eğrileri kim ayarlar?

Öğrenen reklamlarSims notlarındaki “şüpheci Sim” fikri: nesnenin vaadi ile gerçek etkisini karşılaştırıp reklamı güncellemek. Basit bir pekiştirmeli öğrenme (Y13) problemi.
Eğri ayarını otomatikleştirmekBinlerce simüle maç oynatıp eğri parametrelerini optimize etmek (genetik algoritma, Bayes optimizasyonu). Hedef: “kazanma oranı %50”, “oyuncu 10 dakikada ölmesin”. Zorluk ayarıyla (Y17) birleşir.
LLM + utilityDil modeli her kare karar vermek için pahalı ve öngörülemez. Ama bir karakterin kişilik tarifinden (“korkak ama açgözlü bir tüccar”) eğri parametreleri üretmesi, sonra utility sisteminin hızlı ve güvenilir şekilde çalışması mümkün (Y14).

Ayrıca: utility puanlarını oyuncuya göstermek (Sims’in ihtiyaç çubukları gibi) bir tasarım kararıdır: YZ’yi okunabilir yapar ve oyuncuya “zekâ yanılsaması” verir (Y1).

💬 Tartışma soruları

Yanınızdakiyle 2 dakika konuşun, sonra sınıfça tartışalım
  1. Bu akşam ne yapacağınıza nasıl karar veriyorsunuz? Üç seçenek ve her birini etkileyen ikişer “etken” yazın. Hangi etken sizde bir veto (sıfır olunca seçenek tamamen düşüyor)?
  2. Joy Booth Sim’i “mutlu” gösteriyor ama hayatını kötüleştiriyor. Gerçek hayatta ve oyunlarda bunun karşılığı ne? Bir tasarımcı böyle bir nesneyi bilerek koyar mı?
  3. Aynı askere iki farklı eğri seti verdiniz: biri “korkak”, biri “gözü kara”. Kodda tek satır değişmedi. Oyuncu bu farkı nasıl fark eder? Fark etmesi için ne eklerdiniz?
  4. Utility ile yazılmış bir NPC saçma bir şey yaptı. Davranış ağacındaki bir hatayı bulmakla bunu bulmak arasında ne fark var? Hangi aracı isterdiniz?

🚀 Proje ve araştırma önerileri

  1. [kolay] Eğri kataloğu — Desmos ya da p5.js ile 6 farklı yanıt eğrisini çizen ve parametrelerini kaydırıcıyla değiştiren küçük bir araç.
  2. [kolay] Kedi simülatörü — Bir kedinin 4 ihtiyacı (açlık, uyku, oyun, sevgi) ve evdeki nesneler. Sims tarzı reklamlar ve mesafe zayıflatması.
  3. [orta] Utility asker — Unity’de bu sunumdaki beş eylemli asker: ScriptableObject eylemler, AnimationCurve etkenleri, puan paneli.
  4. [orta] Kişilikler — Aynı kod, üç farklı eğri seti: korkak, cesur, açgözlü. Oyuncular farkı fark ediyor mu? Küçük bir oyuncu testi yapın.
  5. [zor] Utility + BT — Üst seviyede utility “ne yapayım?”, alt seviyede davranış ağacı “nasıl?”. Unreal StateTree 5.5+ ya da kendi motorunuzla.
  6. [araştırma] Şüpheci Sim’ler — Nesne reklamlarını deneyimden güncelleyen ajanlar. Yalancı Joy Booth’a karşı ne kadar sürede “bağışıklık” kazanıyorlar?
  7. [araştırma] Otomatik ayar — Bir eğri setini genetik algoritmayla ayarlayıp elle ayarlanmış setle kıyaslayın: hangisi daha “insan gibi” görünüyor?

Neler öğrendik? 🎒

  • Utility: her seçeneğe o anki duruma göre 0–1 puan; en iyisini (ya da iyilerden birini) seç.
  • Normalleştirme → yanıt eğrisi → birleştirme → seçim.
  • Çarpım = veto ve erken çıkış; telafi faktörü çok etkenli eylemleri korur.
  • Seçim: mutlak, ağırlıklı rastgele, en iyiler arasından, dual utility.
  • Atalet: bonus, bekleme süresi, “bitirince karar ver”.
  • The Sims: akıllı nesneler ve reklamlar; Joy Booth dersi.
  • Gerçek oyunlar: Zoo Tycoon 2, Guild Wars 2, Dragon Age: Inquisition, Unreal EQS.
  • Araçlar: StateTree utility, EQS, AnimationCurve, Godot eklentileri, Curvature.
  • Sonraki: GOAP — tek bir eylem değil, bir plan seçmek.

🎮 Bu sunumdaki oyunlar

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.

Zoo Tycoon 2 2004 · işletme simülasyonu
Hayvanat bahçesi kurup hayvan ve ziyaretçileri mutlu edersiniz.
The Sims 2000 · yaşam simülasyonu
Sanal insanların evini kurar, açlık, uyku, eğlence gibi ihtiyaçlarını yönetirsiniz.
Guild Wars 2 2012 · MMO
Çok oyunculu çevrimiçi rol yapma oyunu; düşman kararları utility puanlarıyla.
Dragon Age: Inquisition 2014 · rol yapma
Ekip tabanlı fantastik rol yapma oyunu; ekip arkadaşlarını YZ yönetir.
Halo: Combat Evolved 2001 · nişancı
Xbox’ın amiral gemisi bilimkurgu nişancısı; korkak küçük Grunt’lar ve lider Elite’ler meşhurdur.
The Last of Us 2013 · aksiyon-macera
Salgın sonrası Amerika’da Joel ve Ellie’nin yolculuğu; yoldaş YZ’si çok övüldü.
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ı.

Kaynaklar: videolar 🎬

GDC Vault (bazıları ücretsiz): Improving AI Decision Modeling Through Utility Theory (Mark & Dill, 2010) · Building a Better Centaur: AI at Massive Scale (Mark & Lewis, 2015)

📄 Akademik okumalar

Forbus & Wright 2001 · Some notes on programming objects in The Sims (Northwestern Üniversitesi ders notu)
Akıllı nesneler, reklamlar, ihtiyaçlar, Joy Booth — birinci elden.
Graham 2013 · An Introduction to Utility Theory (Game AI Pro, Bölüm 9)
Eğriler, seçim yöntemleri, kovalar, atalet; Sims örnekleri.
Dill 2015 · Dual-Utility Reasoning (Game AI Pro 2, Bölüm 3)
Rank + weight; Zoo Tycoon 2.
Lewis 2017 · Choosing Effective Utility-Based Considerations (Game AI Pro 3, Bölüm 13)
Guild Wars 2’de IAUS: etken seçimi sanatı.
Hanlon & Watts 2017 · Behavior Decision System: Dragon Age Inquisition’s Utility Scoring Architecture (Game AI Pro 3, Bölüm 31)
Puan bantları ve hedef seçimi.
Merrill 2013 · Building Utility Decisions into Your Existing Behavior Tree (Game AI Pro, Bölüm 10)
BT + utility melezi.
Mark 2009 · Behavioral Mathematics for Game AI (Course Technology (kitap))
Alanın temel kitabı; bağlantı yazarın IAUS sayfası.

Kaynaklar: okuma 📚

NEXT LEVEL ▶
GOAP
F.E.A.R.’ın planlayan askerleri: hedef, eylem ve A* ile plan
SONRAKİ SUNUM ▶