…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
utility
fayda
Bir seçeneğin “şu an ne kadar iyi” olduğunu gösteren sayı (genelde 0–1)
consideration
etken / değerlendirme
Puanı etkileyen tek bir ölçüt: mesafe, can, mermi…
Bir eylemin bütün etkenlerini birleştirip tek puan üreten birim (IAUS)
compensation factor
telafi faktörü
Çok etkenli eylemlerin çarpım yüzünden haksız düşük puan almasını düzeltir
weighted random
ağırlıklı rastgele
Puanı yüksek olanın seçilme olasılığı yüksek olan kura
rank · weight
öncelik sınıfı · ağırlık
Dual utility: önce sınıf, sınıf içinde ağırlık
inertia / commitment
atalet / bağlılık
Yeni karara geçmek için mevcut kararı biraz kayırmak: titremeyi önler
smart object · advertisement
akıllı nesne · reklam
Nesnenin “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?
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ü
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
şekli
eğri
biçim (x ∈ [0,1])
ne zaman?
örnek
doğrusal
y = m·(x − c) + b
Etki her yerde eşit artıyorsa
Düşman sayısı → siper isteği
üslü (karesel, kübik)
y = (x − c)^k
Uçlarda hızlanan/yavaşlayan etki
Mermi 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
ters
y' = 1 − y
“Ne kadar azsa o kadar iyi”
Mesafe: yakın hedef daha cazip
parçalı doğrusal
elle noktalar + aradaki doğrular
Formülle anlatılamayan istek
The 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
“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.
etkenler
ortalama
çarpım
0,9 · 0,8 · 0,9
0,87
0,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ım
telafili
0,9 · 0,9
0,81
0,89
0,9 · 0,9 · 0,9
0,73
0,86
0,9 × 5
0,59
0,78
0,5 · 0,5
0,25
0,34
0 · 0,9 · 0,9
0
0 (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 🪖
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ü).
Canı yavaş yavaş azaltın: önce “İyileş”, sonra çok düşük canda “Kaç” kazanıyor. Hiçbir yerde “eşik” yazmadık!
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.
“İ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).
Ağırlığı 0 olanları at (imkânsız).
En yüksek rank’ı bul; daha düşük rank’lı her şeyi at.
Kalanlardan en büyük ağırlığın belli bir oranından (ör. %25) küçük olanları at (“aptalca” seçenekler).
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
Ü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)
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.
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 🙂
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.
🎡 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?
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?
“Mesafe zayıflatması”nı kapatın: Sim uzaktaki nesneler için gereksiz yere odayı arşınlıyor mu?
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
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.
🎡 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?
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?
“Mesafe zayıflatması”nı kapatın: Sim uzaktaki nesneler için gereksiz yere odayı arşınlıyor mu?
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ırpma
x’i 0–1 aralığına sıkıştırır
AnimationCurve · curve.Evaluate(x)
Unity eğrisi
Inspector’da çizilen eğrinin x’teki değeri
[Serializable]
serileştirilebilir
Unity 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?.name
null-koşullu erişim
current null ise hata verme, null döndür
$"{a} → {b:0.00}"
metin şablonu
Değişkenleri metne göm; :0.00 = iki ondalık
max(liste, key=f)
Python max
f(eleman) değeri en büyük olan elemanı döndürür
math.exp(x) · Math.exp(x)
e üzeri x
Lojistik 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ı yetenekleri
20–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
Karar
Sı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ıklama
Aktif yol
Puan tablosu (mutlaka görselleştirin!)
Tipik kullanım
Niş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.
Durumları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.
IAUS 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
Etkenleri listeleyin: “ham girdi + ayraçlar + eğri”. Örn. Hedef mesafesi, 0–30 m, ters karesel.
Girdileri tek bir yerde hesaplayın: algı bileşeni mesafeyi, canı, mermiyi bir “bağlam” nesnesine yazsın (Y3’teki kara tahta).
Eylemleri ScriptableObject yapın: her eylem bir asset; içinde etken listesi ve AnimationCurve’ler. Tasarımcı Inspector’da eğri çizer.
Beyin: saniyede 4–10 kez puanla, ataletle seç, seçileni her kare yürüt.
Görselleştirin: OnDrawGizmos ya da bir UI paneliyle NPC’nin puan tablosunu çizin.
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
Öğ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
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)?
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ı?
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?
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
[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ç.
[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ı.
[orta]Utility asker — Unity’de bu sunumdaki beş eylemli asker: ScriptableObject eylemler, AnimationCurve etkenleri, puan paneli.
[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.
[zor]Utility + BT — Üst seviyede utility “ne yapayım?”, alt seviyede davranış ağacı “nasıl?”. Unreal StateTree 5.5+ ya da kendi motorunuzla.
[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?
[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ç.
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 22004 · işletme simülasyonu
Hayvanat bahçesi kurup hayvan ve ziyaretçileri mutlu edersiniz.