Yapay zekâyı bir geliştirici değil de, bir bilim kurgu hayranı olarak duyduğumda, yapay zekâya karşı saygı ve korku hislerini her defasında baştan hissediyorum. Temelinde, bir gün yapay zekânın insanlığı ele geçireceği fikrinin olduğuna eminim. Bu fikri desteklediğimden değil ha, düşünmesi farklı hissettirdiği için bu düşünceyi zihnimden bile isteye kovmuyorum.
Bu yazımda, yapay zekâyı bilim kurgu kültürü ile değil, bir oyun geliştirici kültürü ile inceleyeceğim. Bu arada, sizler için kompozisyon haline getirdiğim bu bilgileri yazı içinde atıfta bulunduğum ustalara borçluyum. Eğer bir puan yazılacaksa, bu puan bizlerle bilgilerini sakınmadan paylaşan ustalarındır. Zaman ayırıp okuduğunuz için şimdiden çok teşekkür ederim.
Yapay Zekânın Tanımı
Artificial intelligence (AI) is intelligence — perceiving, synthesizing, and infering information — demonstrated by machines, as opposed to intelligence displayed by animals and humans.
İnsanlardakinin aksine, makinelerde gözlemlenen zekâ… Basitçe çevirirsek, yapay zekânın tanımına Wikipedia aracılığıyla böyle ulaşabiliriz. Ancak bu tanımda 3 tane önemli kelime var, asıl dikkatinizi oraya çekmek istiyorum.
- Bilginin algılanması (perceiving information)
- Bilginin sentezlenmesi (synthesizing information)
- Bu bilgiden çıkarım yapılması (infering information)
İnsanoğlu bu üç temel işlevi bir makineye yaptırdığında yapay zekâ doğmuş oluyor. Şimdi iddialı bir cümle kuruyorum; “olay tam olarak bu!”.
Akademik ve Oyun Yapay Zekâsı
Peki! Gelelim fasülyenin faydalarına… Yapay zekâ, bir oyun geliştirici tarafından nasıl, bir akademik araştırmacı tarafından nasıl algılanmalı?
Önce ortak amaca bakalım. Yapay zekâ üretmek isteyen biri, veriyi toplama, sentezleme ve sonuç çıkarma işlemlerini bir makineye yaptırmalı. Yani bu süreçlerdeki adımların en azından sentezleme ve sonuç çıkarma kısımlarını bir yapay zekâya uygulatmalı.
Peki fark nerede?
Akademik Yapay Zeka Doğru Bilgiyi Amaçlar
Akademik bir yapay zekânın yanılma payı çok ama çok düşük olabilir! Kabul edilebilir seviye bir hayli küçüktür. Yani akademik yapay zekâda amaç, bir bilgi havuzunun işlenmesinin ardından doğruya en yakın bilgiyi ortaya çıkarmaktır. Örneğin 10 milyon prostat kanseri insanın kan değerlerini sentezleyip, prostat kanseri teşhisi henüz konmamış bir hastanın kan değerleri incelenerek prostat kanseri olma olasılığını ortaya koymaya çalışan bir yapay zekânın yegâne amacı, doğru bilgiyi ortaya koymaktır. Başarısının yegâne amacı doğru bilgiyi sunmantır! Akademik yapay zekânın başarısı, doğru bilgiyi sunması ile doğru orantılıdır!
Oyun Yapay Zekâsı Eğlendirmeyi Amaçlar
Gelin şöyle bir yapay zekâ hayal edelim; yegâne amacı oyuncuyu öldürmek olan bir bölüm sonu canavarı!.. Eğitimini 50 milyon kullanıcı verisi ile yapmış ve neredeyse kusursuzlaşmış bir canavar! Açıyoruz oyunu, geliyoruz bu bölüm sonu canavarına ve ADAM CANINIMIZA OKUYOR ARKADAŞ! Adam burnumuzdan getiriyor hayatı! Yapay zekâ değil bu, ruh emici! Başarısının yegâne amacı oyuncuyu öldürmek olan bir yapay zekâyı hayal etmek dahi sinirlendirdi değil mi dostlar? Oyunu sildiniz. Para iadesi istediniz. Store’dan 1 yıldız bastınız. Ama daha sönmedi içinizdeki öfke!..
Oyun yapay zekâsının ana amacı, oyuncuyu eğlendirmektir. Bu amacı iyi anlamak ve oyun yapay zekâsı üretirken, bu amaca hizmet eden yapay zekâlar üretmek tavsiye edilir.
Oyun yapay zekâsı oyuncuya, oyuncunun kendini iyi hissedeceği bir deneyim sunmayı amaçlar. Buradaki deneyim sözcüğü, başarılı bir oyun yapay zekâsı için korkunç derecede önemli dostlar! Oyuncuyu eğlendirmek ve oyuncuya iyi bir deneyim sunmak, yapay zekâ üreticileri olarak en ana amacımız!
Oyuncuya nasıl iyi bir deneyim sunacağımıza şöyle kısa bir cevap vermek istiyorum. Bölüm sonu canavarını öyle kodlamışız ki, oyuncuya nefes alabileceği alanlar bırakıyor. Haritada hiç dokunamadığı ve bir kaç saniye boyunca orayı vuramadığı bir nokta var. Ve oyuncu bunu keşfediyor! Oyuncu o noktaya belli aralıklarla geçerek bölüm sonu canavarını janjanlı mermileri ile dans ettiriyor! Oyuncu günün sonunda eğleniyor ve kendini zeki hissediyor! Ve işte buradaki kendini zeki hissetme ve bu keskin zekâ ile de yapay zekâyı alt etme, onun için, yani bizler için paha biçilemez bir deneyim!
Akademik ve oyun yapay zekâsını ayırdığımıza göre, makalemizin bundan sonraki aşamalarında sadece ve sadece oyun yapay zekâsından bahsedecek ve yazması yoran bu kelime öbeğini OYZ olarak kodlayacağız.
OYZ Seçimi

Reference: Kevin Dill — What is Game AI
Bu yazıda, her yapay zekâ tipini ayrıca incelemem, ne yazık ki çok mümkün olmadı. Malûm, her bir ayrı yapay zekâ türü için ayrı bir makale çıkıyor ortaya. Bu sebeple, yukarda gördüğünüz yapay zekâ tiplerini birer anahtar kelime olarak görmeniz ve her biri üzerine ayrı ayrı okumalar yapmanız, naçizane tavsiyemdir.
Bu başlık altında, yazdığımız OYZ’sından beklentimize göre, onu nasıl seçebileceğimiz konusuna değinmeye çalışacağım. Aslında, Kevin Dill, What is Game AI isimli makalesinde bu konuya bir hayli güzel değinmiş. Oradan bolca alıntı yaptığımı belirtmek isterim. Lütfen makaleyi en kısa zamanda tüketiniz.
Oyunumuz için yazacağımız OYZ’sının bizler tarafından fazlaca kontrol edilmesi, yani yapay zekâmızın yazanın kontrolünde olmasını istiyorsak, o zaman yukardaki grafikte sola yakın olan türde yapay zekâlar seçmeliyiz. Ha yok, büyük bir data kümesi ile yapay zekâmızı eğitelim de, yapay zekâ ne zaman ne yapacağına daha çok kendi karar versin diyorsak, o zaman da grafikte sağa yakın olan yapay zekâ tiplerinden birini seçmeliyiz.
Uzun sözün kısası, oyunlarımızda kullanacağımız yapay zekâyı, yazmak istediğimiz zekânın ne kadar otonom veya ne kadar yazar kontrolünde olması gerektiğine göre belirlememiz, ortaya çıkardığımız yapay zekâ’yı amacımıza yönelik hale getirecek ve dolayısıyla da kalitesini artıracaktır.
İyi Bir OYZ Üretmenin Altın Kuralları
Başlığı fazlaca iddialı yazdım, farkındayım! Sebebiyse, uzun bir yazının henüz başlarında olmamız. Dikkatinizi çekmek, biraz söz kalabalığı yapmak ve “Zengin olmanın 10 altın kuralı” gibi balon başlıkları sizlere anımsatarak, yüzünüzü güldürmek istedim. İşe yaramış olması dileğiyle, söz salatasına son veriyorum. Yazının burası kontrol kısmıydı, buraya kadar okumuşsunuz, teşekkür ediyorum! 🙂
Peki, iyi bir yapay zekâyı üretirken nelere odaklanmalıyız?
- Oyuncu Davranışlarını Anlamak Üzerine
İlk olarak, oyuncu davranışlarına odaklanmakta fayda var. Eğer oyunumuzdaki yapay zekâ çok büyük bir saçmalık yapmıyorsa, oyuncular yapay zekâmızın insan gibi davranan kaliteli bir yapay zekâ olduğu kanısında olacaklar. Bu çıkarımı ilk olarak Steve Rabin’in bu makalesinde okudum. Bir oyuncu olarak baktığımda, bu kanıya katılmamak elimde değil dostlar. Şöyle ki, onca para verdiğim bir oyun, bütün evreni ve kurgusu ile beni içeri alıyorsa ve oyundaki yapay zekâ çok da kendini açığa çıkarmıyorsa, üzerimde oynanan bu ilüzyonun devam etmesi için elimden geleni yapıyorum. Oyuncuya saçma yapay zekâ hataları vermediğimiz sürece, yapay zekânın sunduğu sahte gerçeklik, oyuncunun da yardımıyla sürecektir.
Steve Rabin’in makalesine bir atıfta daha bulunacağım. Anthropomorphize, yani insana benzetmek diye bir kavramdan bahsediliyor bu makalede. “Düdüklü tencere yardım çığlığı atmaya başladı, gidip de kurtarayım!” dediğimizde örneğin, düdüklü tencereye insan özelliği katmış oluyoruz. Bu durum, oyunlardaki yapay zekâyı korkunç destekliyor dostlar. Şöyle bir örnek vereceğim; eşimle GTA 5 oynuyoruz ve araç kullanırken hiç bir yayaya çarpmıyoruz. Çünkü o yayanın ne suçu var, yazık değil mi? Trafikteki arabaları da çalmıyoruz, çünkü adam o arabaya ne kadar para saymıştır, yazık! Demem o ki, eğer oyuncunun bu tutumunu iyi anlar ve oyuncunun yapay zekâ ile bağ kurmasını sağlarsak, eşsiz bir deneyim sunabiliriz. Bakınız, Last Of Us — Ellie…
2. İteratif Geliştirme
Aslında bu döngü, bütün herhangi bir işi geliştirmenin en temel döngüsü; “test et, sorunu bul ve çöz”… Bu döngünün sıklıkla yapılması, yapay zekâ için apayrı bir önem taşıyor. Normalde arayüzde bir hata ile karşılaşırsanız, bunu debuglayıp çözmeniz, Behavior Tree altyapısı üzerine oturtulmuş yetişkin bir yapay zekâ’da karşılaştığınız hatayı debuglayıp çözmekten çok daha kolay olacaktır. Bu iteratif geliştirme sürecinin yapay zekâ için ayrıca önem taşımasının sebebi de budur dostlar. Yapay zekâyı debuglamak ve onun içindeki sorunları bulmak yer yer çok daha zor olmaktadır.

3. Yapay Zekânın Salakça Davranışları
Türkçe’ye çevirmekte zorlandım Artificial Stupidity’yi. Ancak yapay zekânın saçma sapan bir hareket yaparak, oyuncuya kendini açık ettiği durumlar diye özetleyebiliriz. Fasulyenin faydalarına gelecek olursak da, yapay zekâmızın salakça davranmasından köşe bucak kaçmalıyız ki, oyuncuya sunduğumuz illüyzon bozulmasın, oyuncuya sunduğumuz illüzyon bozulmasın ki oyuncu yapay zekâmızla kurduğu bağı kaybetmesin.
4. Hile Yapan Yapay Zekâ
Yapay zekâ’ya hile yaptırmak, gelin eğri oturup doğru konuşalım, dünyanın en kolay şeyi! Bunu yapmak ya da yapmamanın etikliğini hiç tartışmayacağım bu arada. Tartışmak istediğim şey, yapay zekâya hile yaptırmak meselesinin takımlar için bir dizayn kararı olabileceği…
Yapay zekâ bir çok oyunda, bize fark ettirmeksizin hile yapıyor dostlar. Örneğin World Of Warcraft’ta, haritanın görmediğiniz bir yerinde sizi zorlamak ve sizin deneyiminizi canlı tutmak için, gölgelerin arkasında düşmanlar yaratılıyor. Bu durum oyun tasarımcısına sorulduğunda, aslında bu başlığa ana fikrini verip, bizi daha fazla yazmaktan kurtaracak o açıklama geliyor; “oyuncu fark etmediği ve eğlendiği sürece yapay zekâ hile yapabilir.” Bu cümleye katılmak zorunda hissetmeyin lütfen. Bunun tam aksini yapan oyunlar da mevcut; örneğin, Last of Us’taki meşhur Ellie geliştirilirken, asla ve asla hile kullanılmamış. Detaylarının yazının ilgili başlığı altında bulabileceksiniz.
Sonuç olarak, yapay zekânız hile yapıyorsa ve fark edilirse, oyuncu deneyimi bozulacak ve oyuncuya sunmuş olduğunuz illüzyon perdesi kalkacaktır. Bu hiç ama hiç istemediğimiz bir şey!
5. Dialog Ağaçları
İngilizce’si Dialog Trees… Bu ağaçları yapay zekâ desteği ile güçlendirerek, kendini bir hayli az tekrar eden, dinamik durumlara uygun dinamik cümleler üretebilen dialog ağaçları elde etmemiz mümkün.
Şimdi sizi bir yayına yönlendireceğim. Çok beğendiğim örnekler var içinde. Bir çok güzel örnekten en azından bu yazı kapsamında dikkatinizi bu yayında 13. sayfada Maden 2011 sayfasındaki cümleye çekeceğim. “Spikerler, dinamik durumlar için binlerce cümle üretirler.” Bir geliştirici olarak bakıyorum da dostlar, bir futbol oyunu yapsam ve spikerin konuşmasını kodlayacak olsam, if-else ile yapmak en son tercihim olurdu. Bu sebeplerden en önemlisi, yazdığımız spiker kolayca kendini tekrar düşecek. Yani direkte patlayan her topa, “top direkte patladı!” diyecek ve oyuncuya konuşanın bir insan olmadığını belli ederek korumaya çalıştığımız illüzyon perdesini birden bire kaldıracak! Diğer bir sebepse, o kadar if-else kullanırsam, cyclomatic complexity’si yüksek, öğrenilmesi ve yönetilmesi zor bir kod yığını üretmiş olacağım. Hem oyuncuyu, hem de geliştiriciyi memnun edecek yöntemler dururken, aman uzak olsun kirli yöntemler!
Bu arada, dialog ağaçlarımızı oyundaki çevrenin o anki halini ve kullanıcının daha önce aldığı kararları göz önünde bulunduracak şekilde dinamik olarak üretebilirsek, yapay zekâmızın illüzyonunu daha bir korumuş olacağız.
6. Dinamik Hikâye Akışı
Bir anahtar kelime olarak İngilizce’sini vermem gerekirse; Dynamic Storyline… Yapay zekâ yardımıyla dinamik bir hikâye akışı sağlamak, oyunun tekrar oynanabilirliğini artırmak ve oyunu tek düzelikten kurtarmak için bir hayli temiz bir yol. Düşünsenize, tekrar tekrar oynadığınız oyunda, her seferinde farklı bir hikâye örgüsü ile oyunu bitiriyorsunuz. Oyunda aldığınız kararlar, oyunun sonunu dolaylı ya da doğrudan etkileyebiliyor. Rolüne büründüğünüz karakterle oynama şekliniz, oyundaki yapay zekâların size olan davranış biçimlerini değiştiriyor. Böylece Twitch yayınlarınızda oyununuzu yayınlayan bir yayıncı neredeyse her defasında farklı bir hikâye kurgusu ile karşılaşıyor. Düşünmesi heyecan verici, uygulamasıysa geliştirici gözünden ömürlük bir deneyim!
Bu başlığa odaklanarak kazanç sağlayan bir örneği sizlerle paylaşmak istiyorum.
7. Animasyon
Yapay zekâmızı koruyan illüzyon perdesi aralanmasın istiyorsak, en başta robotik hareketleri engellemek gerek. İşte tam da burada animasyonlar devreye giriyor. Bir sahne hayâl edin ki karşınızda çocuğunu kurtarmanız için size dil döken yapay zekânın kafası tersine dönmüş! Korkunç! Perde kalktı, yapay zekâ açığa çıktı! Ve deneyim, oyuncu deneyimi mahfoldu! İşte bunun önüne geçmek, geliştiricinin en büyük sorumlulukları arasında diye düşünüyorum.
Bu arada hazır animasyonun gücüne değinmişken, yapay zekânın etkisini artırmak için animasyon hızını kullanabiliriz. Örneğin telaşlı bir karakteri hızlı hareket ettirip, uyuşuk ve isteksiz bir karakteri yavaş animasyon hızıyla destekleyebiliriz. Böylece karakterin duygusunu desteklemiş, kullanıcı deneyimini pürüzsüz hale getirmiş oluruz.
Sims oynarken lütfen animasyonları gözlemleyin. Acıkan, sinirlenen ya da sevinen yapay zekânın tepkileri tam olarak bu başlıkta anlatmak istediğim deneyim!
Bu arada F.E.A.R’daki yapay zekâların kendi aralarında konuşup, bizim nerede olduğumuzu sorduklarını, bizim saklandığımız yeri arkadaşlarına haber verdiklerini de gözlemlemenizi rica ediyorum. Ha bu arada, eğer F.E.A.R’da yapay zekâ saçma bir durumda kalırsa, stres altında kalmış gibi davranacak ve yapay zekâ’da oluşan hatayı bizlere hissettirmeyecek. Harika bir örnek! Bug değil feature!!!
8. Reaksiyon Zamanı
İnsan gibi davranmasını ve kendine yüklenen bu misyonu yerine getirmesini beklediğimiz yapay zekâ’ya, insan reflekslerinde reaksiyon verme özelliğini kazandırmayı unutmamalıyız. Bir insan gibi refleks gösteremiyorsa, yapay zekâyı koruyan illüzyon perdesi gene hızlı bir şekilde açılacaktır. Gerisi, anne bak kral çıplak!
9. Datayı Analiz Etmek
Oyuncunun oyunumuzda aldığı her aksiyon, bizim için bir data! Bu dataları yapay zekâ ile işleyip oyunumuzu bırakmak üzere olan kullanıcıları bulmak ve onlara oyuna tutunmaları için yeni yollar yaratmaksa, oyuncularımızın deneyimlerini iyileştirmek için muhteşem bir fırsat. Şöyle basit bir örnekle bu başlığı tamamlayabileceğimizi düşünüyorum, açık dünya oyunumuzda bir şekilde 10 gündür haritanın hep aynı yerinde dolaşan bir oyuncu için dinamik bir görev üreterek oyuncuyu daha haritayı keşfetmeye itebiliriz. Biliyorum, örnek çok havada kalacak, ancak burada dikkat çekmek istediğim yer, yapay zekâ ile işlediğimiz kullanıcı verilerimizin oyunun aynı bölgesinde 10 gün gezen oyuncularımızın 11. gün oyunu terk ettiklerini bilebiliyor ve bu soruna her oyuncu için özel bir çözüm üretebiliyoruz. Sonuç olarak da deneyim kişiselleşiyor ve oyuncunun oyunda kalma süresi artıyor.
İlk part’ın sonuna geldik dostlar. Tam burada bölmeliydim ki, araştırma notlarım daha tüketilebilir olsun. Umarım part 1’i yararlı bulmuşsunuzdur. Lütfen yorumlarınızı, geri bildirimlerinizi esirgemeyin. Elf gözlerinizden öperim. İkinci partta görüşmek üzere. 🙂
Referanslar:
Steve Rabin — The Illusion Of Intelligence
Elan Ruskin — AI-driven Dynamic Dialog through Fuzzy Pattern Matching
Brett Laming – Informing Game AI through the Study of Neurology
Sergio Ocio Barriales – But, It Worked on My Machine! How to Build Robust AI for Your Game