Yapay Zeka Uygulaması İle Oyun Programlama Teknikleri

Giriş

Bilgisayar ve Video Oyunları pazarı son yıllarda giderek ivmelenen bir gelişme göstermeye başlamıştır. Bunun temel nedenlerinden birisi gelişmiş oyunların artık sadece belirli oyun salonlarından çıkıp masaüstü sistemlerin ve kullanılan özelleşmiş grafik hızlandırıcıları ile hemen her alanda karşımıza çıkmaya başlamasıdır. Hemen her yıl ikiye katlanan işlemci ve grafik işleyici yongaların hızı oyun konusundaki rekabeti körüklemiştir. Özellikle son yıllarda yeni pazarlar arayışına giren dev şirketlerin oyun programlama ve özelleşmiş oyun konsolu tasarımına ağırlık vermeleri de pazardaki rekabetin ve potansiyelin açık bir göstergesidir.

Yıllar geçtikçe işlem gücünün artması sadece oyunların daha hızlı çalışmasını değil oyunların biçimlerini de değiştirmeye başlamıştır. Önceleri sadece hamle tabanlı (satranç, dama ya da basit zeka oyunları) ve düşük kaliteli iki boyutlu karakterlerin tekdüze bir mantığa göre hareketlerine dayanan oyunlar mevcutken günümüz bilgisayarlarında gerçek zamanlı ve neredeyse gerçeğe yakın görünümde ortamlarda onlarca karakterin birbiri ile insan davranışına yakın hareketlerle etkileşimini sergilemektedir. Oyunların ve oyun şirketlerinin her geçen gün artması da kullanıcıların daha gerçekçi grafik ve daha akıllı oyun karakterlerine olan isteğini arttırmıştır. Bu noktada ise oyun programanın en zor ve en etkileyici yönlerinden yapay zeka devreye girer.

Oyun programlamada kullanılan yapay zekanın amacı oyuncu ile etkileşimde bulunan karakterlerin ya da oyunun geçtiği ortamın mümkün olduğunca gerçek insan, topluluk ve dünya (ya da kimyasal- fiziksel – biyolojik olarak anlamlı ortam) yaşam ortamına benzetilmeye çalışılmasıdır. Başka bir anlamda da bilgisayarın yetenekli bir oyuncuya aynı derecede yetenekli karşılık vermesi, oyuncunun kurduğu planlara benzeyen planlar ya da tuzaklar kurması, gerektiğinde oyuncuyu zor duruma düşürüp onu yenebilmesi oyun programındaki yapay zeka kalitesini belirler.

Ancak burada gözden kaçırılmamaı gereken bir nokta oyunlardaki yapay zeka dozunun iyi ayarlanmasıdır. Eğer bilgisayarı oyuncuya karşı çok hızlı reaksiyon verecek şekilde ayarlarsanız ya da oyuncuyu bunaltacak şekilde iyi taktikler gerçekleştirirse oyunun "oynanabilirlik" seviyesi düşer ve kaçınılmaz bir pazar başarısızlığı ortaya çıkabilir. Bunun önüne geçmek için oyunlarda çeşitli yüntemler izlenir. Bunlardan bir tanesi oyuna "seviye" özelliği eklenir ve oyuncu bilgisayarın ne kadar "zeki" davranacağını kendisi belirler. Yukarıda bahsedilen gerekçeden dolayı modern oyunlarda günümüz akademik yapay zeka araştırmalarının popüler konularından olan Yapay sinir ağları (Artificial Neural Networks) ve Genetik Algortimalar gibi konular birkaç oyun türü hariç halen yeni oyunlarda tercih edilmemektedir. Bunun başka nedenlerine birazdan değineceğim.

Günümüz Oyun Pazarına Bakış

Oyun programlama’da yapay zeka kullanımının son üç yılda geldiği aşamayı anlamak için aşağıdaki grafiğe bir göz atalım.

Image

Şekil 1.

Koyu mavi ile gösterilen grafik oyun şirketlerinin hangi oranında yapay zeka programlama için en az bir kişi çalıştırıldığını gösteriyor. Buna göre 1997’de bu oran %25, 1998’de %45, 1999’da %59 ve inanılmaz biçimde 2000 yılı içerisinde %80 seviyesine ulaşmıştır. Bu Yapay zekanın oyun şirketleri için artık kaçınılmaz bir konu haline geldiğinin çok açık bir göstergesi. Alttaki açık mavi grafik ise gene günümüzdeki bir gerçeği göz önüne seriyor. Bu grafik günümüz oyunlarında işlem gücünün ne kadarının yapay zeka hesaplamalarına ayrıldığını gösteriyor. 1999 yılına kadar %10’un altında olan bu değer 2000 yılında %30 seviyesine yükseliyor. Bunun nedenini anlamak için işlemci ve grafik alanındaki gelişmeleri izlemek yeterli. 1997-98 yılına kadar bir lüks olan yüksek hızlı grafik hızlandırıcı yongaları son iki yılda artık herkes tarafından kullanılacak düzeye gelmekle kalmadı bu "grafik işlemcileri" her yıl neredeyse dörde katlanan performans artışı ile önceden işlemcinin bütün gücünü tüketen grafik çizme işlemlerini neredeyse tamamen üzerine aldı. Son iki yılda ateşlenen masaüstü işlemci hız yarışının gigahertz seviyesinde saat hızına sahip işlemcileri 200$ seviyesine indirmesi önceden performans konuunda büyük zorluk çeken programcılara rahat bir nefes aldırdı.

Klasik-Modern Oyunlar

Oyun programlama konusuna geçmeden önce günümüz oyunlarının klasik olarak adlandırdığım eski oyunlara göre farklarını çeşitli yönlerden anlamak gerekir. Klasik oyunlara örnek olarak Satranç, Dama, Briç, Pacman’ı örnek olarak verebiliriz. Konuları göz önüne alırken Modern oyunlardan Quake III, Age Of Empires, Red Allert, Sims’i düşünebilirsiniz. Bu farkları aşağıdaki tablodan inceleyebilirsiniz. Burada dikkat edilmesi gereken noktalardan biri de "zeka" kavramının kullanımıdır. Klasik oyunlarda bilgisayarın yönettiği karakterin -örneğin satranç- davranışı sadece bir tek konuda özelleşmiş yetenek sergiler. Bu yüzden klasik "zeka" kavramının bu şekilde kullanılmaması gerektiği iddia edilebilse de oyun alanında kullanılan "yapa zeka" kavramına insan zekasına meydan okuyan her türlü algortima, mekanizma gözü ile bakmak daha doğru bir yaklaşım olacaktır.

Klasik Oyunlar

Modern Oyunlar

Hamle Tabanlı süre kıstlaması az (Dakikalar seviyesinde olabilir)

Çoğunlukla gerçek zamanlı

Sabit ve genelde iki boyutlu oyun alanı

Çok büyük ve genellikle üç boyutlu olun alanı

Genellikle iki oyuncu

Oyundaki karaktr sayısı yüzlerce olabilir

Gerektiğinde işlem gücünün neredeyse tamamı AI için harcanır

AI için kısıtlı
işlem gücü vardır.

Gerçek zamanlı oyunlarda bilgisayarın yönettiği karakter tekdüze bir davranışa sahiptir.

Bilgisayarın yönettiği karakterler çok zeki davranış gösterebilir.

Sınırlı sayıda pozisyon olasılığı vardır

Çoğunlukla sonsuz sayıda durum söz konusudur. Her durum farklı davranış gerektirebilir

Sadece tek bilgisayarda oynanır

Ağ üzerinde çoklu oyuncu desteği

Modern oyun programlamada yapay zeka konuları

Kural tabanlı yapay zeka:

Oyunlarda bilgisayar tarafından denetlenen karakterlerin ya da ortamın davranışını tanımlamada en çok kullanılan metot Kural Tabanlı yaklaşımdır. Kural tabanlı yaklaşım Sonlu durum makineleri (FSM, Finite State Machine) ve Bulanık Durum Makineleri (FuSM Fuzzy State Machine) olmak üzere iki alanda kendisine geliştirici bulmuştur.

Sonlu durum makneleri bildiğiniz üzere bir objenin sınırlı sayıdaki durum arasında öeydana gelen olaylara göre geçiş yapmasını sağlayan mekanizmaya verilen isimdir. Bir örnek verecek olursak , bir oyundaki yaratığın davranışı aşağıdaki şekilde belirlenebilir.

Durumlar: Dur, Oyuncuya yaklaş, Saldır,Kaç, Ölü
Eylemler: Oyuncu uzak, yakın, çok yakın, Ağır yara, Çok ağır yara
Parametreler: Mesafe, sağlık durumu, Zaman

Elbetteki bu örnek daha da çeşitlendirilip zenginleştirilebilir. Parametre, eylem ve durumlar arttırılabilir. Bu tip durum makineleri şu andaki modern oyunların tamamında son derece yaygın biçimde kullanılmaya devam etmektedir.

Bu tip sonlu durum makinelerinin biraz daha "akıllı" örnekleri bulanık sonlu durum makineleri ile kendini göstermiştir. Burada ise durumlar arası geçişleri sağlayan eylemler oyunun ve oyuncunun davranışına göre farklılık gösterir. Yani durumlar arası geçiş parametreleri kesin mantıksal ifadelere bağlı olmayabilir. Bu da karakter davranışını biraz daha tahmin edilemez ya da insan mantığına uygun hale getirir. Buradaki handikap ise bu geçiş parametrelerinin çok iyi ayarlanması gerekliliğidir. (Bulanık durum makineleri Unreal oyununda yaratık davranışını ifade etmek için yoğun biçimde kullanılmıştır)

Image

Şekil 2.

Son bir iki yılda kullanılmaya başlayan hiyerarşik kural tabanlı sistemler ise genellikle çok karmaşık olan bazı karar mekanizmalarının hiyerarşik tabakalar şeklinde ele alınması ile çözülmeye başlanmıştır. Interplay şirketinin çıkardığı Starfleet Command ve Red Storm’un Force 21 oyunlarında oyunu kumanda eden oyuncu sadece üst seviyedeki askeri emirleri vermekte, alt tabakaya gelen emirler her tabakada bağımsız biçimde yorumlanarak örneğin General ‘den manga seviyesindeki asker grubuna kadar yayılmaktadır. Bu şekilde oyuncunun alt seviyeye olan müdahalesi minimum seviyeye inmektedir. Bu hem oyunun tasarımını hem de hata ayıklama işlemini kolaylaştırmaktadır.

Öğrenme ve Stratejik düşünme

Bu konu kural tabanlı sisteme göre çok daha karmaşık bir yapıya sahiptir. Halen ufak tefek deneme alanı bulan bu tekniklerde akademik alanda yaygın biçimde kullanılan Yapay sinir ağları ve genetik algoritmalar tercih edilir.

Bu teknik ile geliştirilen oyunlarda bilgisayar denetimindeki karakter oyuncunun kendisine olan tepkisine göre saldırı stratejisini değiştirme yeteneğine sahiptir. Bu da oyunu her defasında daha farklı bir senaryoya sürüklediğinden oldukça favori bir konuma getirebilir. Magic & Mayhem oyununda önceki saldırılarda olanlar bir veri tabanında tutuluyor. Yazılım yeni saldırı önerildiğinde veri tabanındaki verilerle önerilen saldırıyı kıyaslıyor. Eğer saldırının fazla başarılı olamayacağı sonucun elde ederse başka bir saldırıyı deniyor. Dosya sürekli tazelenip eski tecrübeler atılıyor

Ancak klasik kural tabanlı sistemlerin akademik öğrenme ve kendini geliştirme algoritmaları olarak basitçe tanımlanacak bu yapay sinir ağları ve genetik algoritmalara karşı halen seçilmelerinin bir numaralı nedeni tasarımlarının basitliği ve test etmenin çok kolay olmasıdır.

Test problemi halen en büyük problemi oluşturmaktadır. Bu algoritmaların tabiatı gereği bir durumdaki sistemin davranışını önceden kestirmek çok zordur. Bu durumda oyun pazara çıktıktan sonra oyunu oynayan kişinin oyun geliştirme sırasında yazılımın daha önce hiç test edilmediği bir hareketi yapması ve yazılımın çok kötü bir reaksiyon vermesi olasıdır. Oyun çıkarmak artık zamanla yarış haline geldiği için bu tip algoritmaların kullanımı pazar açısından son derece riskli olabilmektedir. Buna rağmen şu andaki oyun geliştiricilerinin %20’sinin özellikle yapay sinir ağları ve öğrenme konusunda deneysel araştırmalar yaptıkları bilinmektedir.

Yol Bulma ve Engel Geçişi

Bundan dört beş yıl öncesinin ünlü oyunlarından War Craft ya da Command and Conquer ile başlayan yeni nesil oyunların en büyük problemlerinden birisi yol bulma olmuştur. Bugün tasarlanan bütün oyunlarda karşımıza çıkan bu sorun, bir ya da birden fala hareketli nesnenin oyuncunun komutu ile ya da bilgisayarın kararı ile bir noktadan bir noktaya hareket ettirilmesidir.

Yol bulma algoritmaları konusunda pek çok çalışma yapılmış, sonuçta bu problem için en uygun çözümün A* (A Star) algoritması olduğuna karar verilmiş (A* algoritmasının detaylarını burada açıklamayacağım). Bu algoritmanın üç boyuta uygulanması da söz konusu olmuş ve D* algoritması türetilmiştir.
http://www.gamasutra.com/features/programming/19990212/sm_01.htm
Algoritma oldukça karmaşık durumlarda bile kullanılsa da bazı durumlarda halen işe yaramamktadır. Örneğin dar köprü ya da dağ geçitlerini büyük gruplar ile aşmak ya da oyun alanının hareket sırasında değişmesi ancak algoritmanın değiştirilmesi ve geliştirilmesi ile çözülebilecek konulardır. Bugün bile tam olarak mükemmel bir yol bulma algoritmasının oyunlardaki kullanımından sözetmek son derece güçtür.

Yüzey analizi ve Etki haritaları

Modern oyunlarda bilgisayarın sadece yol bulma algoritmaları ile rasgele gruplarla oyuncuya saldırması yeterli olmamaktadır. Gelecek oyunlarda yazılımlar oyun alanında ayrıntılı yüzey analizi yapac
aklardır.

Buradaki teknik şöyledir, sistem oyun alanını bir matris gibi düşünür ve her bir matris karesine komşu elemanların dostluk ve düşmanlık, arazi yapısı ve kaynaklara yakınlığı açısından değerlendirir. Yapılan tarama sonucunda ortaya çıkan iki boyutlu yüzey eğrisinin (Etki haritası) analizine göre sistem oyuncuya karşı saldırılabilecek en zayıf noktaları, dost düşman bölgelerin yoğunluğunu, stratejik öneme sahip alanları tespit edebilir. Bunun sınırlı bir kullanımı Age Of Empires’te denedi.

Görüş netlik grafı

Görüş netlik grafı tekniğinde ise özellikle helikopter ya da stratejik askeri oyunlarda oyun alanındaki engel teşkil eden nesneleri bir kapalı poligon şeklinde temsil edip en yakın poligon kenarları arasında çizilen hatlarla bir tür graf elde etmeye dayanır. Bu sayede engellere çarpmadan gidilebilecek yere en kısa yol graf üzerinden rahatlıkla bulunabilir. Red Storm’un Force 21 oyununda bu teknikten faydalanılmıştır.

Sürü hareketi (flocking)

Sürü hareketi özellikle çok sayıda nesnenin bir hedefe doğru aynı anda hareketi ile oluşur. Bir hedefe doğru koşan onlarca asker ,uçuşan partiküller uçan yüzlerce kuş yada yüzen balığın hareketini gerçeğe yakın elde etmek oldukça güç bir eylem olarak biliniyordu. Ancak 1986’da ortaya atılan pratik bir algoritma ile bu sorunun üstesinden gelindi.

Image

Şekil 3.

Algortimaya göre sürüyü oluşturan nesneler (boids adı veriliyor) üç farklı işlemi gerçekleştirler.

1- Komşularla ve engellerle çarpışmadan kaçınmak (üstteki şekil)
2- Hız uyarlama: Hız ve doğrultuyu komşularla yaklaşık aynı tutmak (ortadaki şekil)
3- Komşulara yakın durmaya çalışmak (alttaki şekil)

Bu üç işlemin sonucunda bir hızlanma vektörü elde ediliyor. Bu işlem sürüyü oluşturan bütün nesnelere uygulandığında gerçekten günlük hayatta gördüğümüz sürü şeklindeki kuşların ya da kalabalık bir insan grubunun hareketine yakın bi hareket elde ediliyor. Bu özelikle Red Allert tarzı çoklu insan ve mekanize askeri grupların bir noktaya doğru hareketini ifade etmede yaygın olarak kullanılmıştır.

Ayrıca bu algoritma sinema efekti olarak 1987’de Batman Returns filmindeki sürü şeklindeki penguenlerin hareketini oluşturmak için kullanıldı. Algoritmanın karmaşıklığı şu an için O(n^2) karmaşıklığında olsa da uygun bölmeleme teknikleri ile karmaşıklık azaltılabilir. (Ayrıntı: http://www.red3d.com/cwr/boids/)

Yapay Yaşam (A-Life)

Özellikle son birkaç yılda kullanılan bu oyun konusu Creatures ve Sims gibi örneklerle oldukça ilgi çekti. Temelde genetik algoritmalar kullanılarak gerçek hayatın bilgisayarda bir modelinin oluşturulmaya çalışmasına dayanan a-life’ta canlı nesneler oyuncun müdahalesi ile ortama göre farklı karakterler elde etmekte, öğrenmekte ve tecrübe kazanmaktadır. Genellikle problemlere global değil küçük parçalar halinde çözümler aranarak öğrenme işlemi kotarılmaktadır. Bilgi için http://www.a-life.org

Yapay Yaşam işleminin oyuncuya çok gerçekçi biçimde verilebilmesi için yaşam alanları da akıllı biçimde tasarlanmıştır. Bu metot başka türlü oyunlarda da karakterlerin gerçekçi ve kestirilemez tepkiler vermesini sağlar. Buna göre oyun alanındaki nesnelerin hepsinin yayın yapma özelliği vardır.

Örneğin oyuncumuz bir evde oturuyor olsun. Mutfak büyük bir çaplı çember alanına sürekli olarak "doyma" sinyali yollar. Karakter bu çemberin içerisine yönlendiğinde mutfağa doğru gitme eğilimi gösterir. Mutfaktaki nesnelerden buzdolabı "yemek" sinayali yayınlar. Buzdolabına yönlenen karakter aldığı yemekten yayılan "pişir" sinyali ile ocağa doğru yönlenir. Senaryo uzayıp gider.

Bu yöntem kendini Baldur’s Gate gibi RPG oyununlarında bazı karakterlerin örneğin "tehlike" sinyali yayan yerlerde rahatsız olmaları şeklinde kendini gösterir.

AI yazılımları

Oyun geliştiricilerine yardımcı olan araçlardan birisi yapay zeka yazılım geliştirme araçlarıdır. Bu konuda iki yaklaşım vardır."Extensible AI" ve "Game AI SDK"

Extensible AI özellikle Quake, Unreal, Half Life gibi FPS (First person shooter) oyunlarında ortamda size karşı savaşan Bot’ların davranışını tasarlamada kullanılan bir tür script dilidir. Bu tür teknikler RPG (Role Playing Game) ile de kullanılmıştır. (Örnek: Baldur’s Gate, aşağıda)

SDK’lar arasında ise durum makinalarını uygulamayı kolaylaştıran Direct IA , Fuzzy Durum makinaları için Spark! Yazılım aracı ve Karmaşık hareket/reaksiyon tabanlı Motivate kütüphanesi geliştirilmiştir. Motivate Prince of Persia 3D’de kullanıldı

Örnek AI script, Baldur’s Gate

oIF
o// If my nearest enemy is not within 3
o!Range(NearestEnemyOf(Myself),3)
o// and is within 8
oRange(NearestEnemyOf(Myself),8)
oTHEN
o// 1/3 of the time
oRESPONSE #40
o// Equip my best melee weapon
oEquipMostDamagingMelee()
o// and attack my nearest enemy, checking every 60 ticks to make sure he is still the nearest
oAttackReevalutate(NearestEnemyOf (Myself),60)
o// 2/3 of the time
oRESPONSE #80
o// Equip a ranged weapon
oEquipRanged()
o// and attack my nearest enemy, checking every 30 ticks to make sure he is still the nearest

Posted in Genel.

Bir cevap yazın