# Genel oyun oynama
 - YÖNLENDİRME 
Genel oyun oynama (General game playing; GGP), birden fazla oyunu başarıyla oynayabilmek için yapay zeka programlarının yaptığı bir tasarımdır. Satranç gibi birçok oyun için bilgisayarlar, başka bir bağlama aktarılamayan özel olarak tasarlanmış bir algoritma kullanarak bu oyunları oynayacak şekilde programlanmıştır. Örneğin, satranç oynayan bir bilgisayar programı dama oynayamaz. Genel oyun oynama, Yapay Genel Zeka yolunda gerekli bir kilometre taşı olarak kabul edilmektedir.
Genel video oyunu oynama (General video game playing; GVGP), video oyunları oynama amacına göre ayarlanmış GGP kavramıdır. Video oyunları için, oyun kurallarının ya TD-Gammon gibi yapay oyuncular tarafından çoklu yinelemeler üzerinden öğrenilmesi ya da alana özgü bir dilde manuel olarak önceden tanımlanması gerekmektedir. Ayrıca geleneksel GGP'de olduğu gibi yapay oyunculara önceden gönderilmesi gerekmektedir. 2013'ten başlayarak, Atari 2600 oyunlarını oynamayı öğrenebilen programların yanı sıra Nintendo Entertainment System oyunlarını oynamayı öğrenebilen bir program da dahil olmak üzere, derin pekiştirmeli öğrenme yaklaşımının ardından önemli ilerleme kaydedilmiştir.
Genel oyun oynama teknolojisinin ilk ticari kullanımı 1998 yılında Zillions of Games olmuştur. 2003'ten itibaren çevrimiçi müzayedelerde fiyat pazarlığı kapsamında tedarik zinciri yönetimindeki ticaret acenteleri için genel oyun oynama da önerilmiştir.


## Tarihçe.
1992'de Barney Pell Meta-Game Playing kavramını tanımladı ve "MetaGame" sistemini geliştirdi. Bu, satranç benzeri oyunların oyun kurallarını otomatik olarak oluşturan ilk programdı ve otomatik oyun oluşturmayı kullanan ilk programlardan biriydi. Pell daha sonra Metagamer sistemini geliştirdi. Bu sisteme, Oyun Tanımlama Dili (Game Description Language; GDL) adı verilen özel bir dilde oyun kuralları tanımı verildi. Oyunlar oluşturulduktan sonra herhangi bir insan etkileşimi olmadan, satranç benzeri bir dizi oyunu oynayabildi.
1998'de ticari sistem Zillions of Games, Jeff Mallett ve Mark Lefler tarafından geliştirildi. Sistem, oyun kurallarını tanımlamak için LISP benzeri bir dil kullandı. Zillions of Games, değerlendirme işlevini, parça hareketliliği, tahta yapısı ve oyun hedeflerine dayalı oyun kurallarından otomatik olarak türetmiştir. Ayrıca bilgisayar satranç sistemlerinde bulunan olağan algoritmaları da kullandı: hareket sıralamalı alfa-beta budama, aktarma tabloları ve benzeri yöntemler. Paket, 2007 yılında eksiksiz bir Forth tabanlı programlama dili içeren alternatif bir metagame motoru olan Axiom eklentisinin eklenmesiyle genişletildi
1998 yılında, z-Tree, Urs Fischbacher tarafından geliştirildi. z-Tree, deneysel ekonomi için ilk ve en çok atıfta bulunulan yazılım aracıdır. z-Tree, insan deneklerle yapılan oyun teorik deneyleri için oyun kurallarının z-Tree dilinde tanımlanmasına izin vermektedir. Aynı zamanda, insan deneklerle bir oyuna katılan bilgisayar oyuncularının tanımlanmasına da izin vermektedir.
2005 yılında Stanford Projesi Genel Oyun Oynama kuruldu.
2012 yılında PyVGDL'nin geliştirilmesi başladı.


## GGP uygulamaları.
### Stanford projesi.
Genel Oyun Oynama, genel oyun oynama için bir platform oluşturmayı amaçlayan Stanford Üniversitesi, California'daki Stanford Mantık Grubunun bir projesidir. GGP yapay zekasını standartlaştırmada en iyi bilinen çabadır ve genellikle GGP sistemleri için standart olarak görülmektedir. Oyunlar, Oyun Tanımlama Dili'nde temsil edilen bir dizi kuralla tanımlanır. Oyuncular, oyunları oynamak için, hareketleri yasallık açısından izleyen ve oyuncuları durum değişikliklerinden haberdar eden bir oyun barındırma sunucusuyla etkileşime girmektedir.
2005 yılından bu yana, AAAI Konferansı'nda (Yapay Zekayı Geliştirme Derneği) yıllık Genel Oyun Oynama yarışmaları düzenlenmektedir. Yarışma, her bir oyundaki performanslarını kaydederek, rakip yapay zekanın çeşitli farklı oyunlar oynama yeteneklerini değerlendirir. Yarışmanın ilk aşamasında, katılımcılar yasal hamleler yapma, üstünlük kazanma ve oyunları daha hızlı tamamlama yeteneklerine göre değerlendirilir. Sonraki ikinci turda, yapay zekalar giderek daha karmaşık oyunlarda birbirleriyle karşılaştırılırlar. Bu aşamada en çok oyunu kazanan yapay zeka yarışmayı kazanır. 2013 yılına kadar da yaratıcısı 10.000 dolarlık bir ödül kazanmaktaydı.


### Diğer yaklaşımlar.
Oyun kurallarını tanımlamak için kendi dillerini kullanan başka genel oyun oynama sistemleri de vardır. Diğer genel oyun oynama yazılımları şunları içerir:
  - 2009'dan itibaren FRAMASI adlı bir sistem geliştirildi.
  - Stephen Tavener (önceki Zillions geliştiricisi) tarafından AiAi adlı bir sistem, 2015'ten ve 2017'nin sonlarına kadar aktif olarak geliştirildi.
  - Unity oyun motoruna dayalı olarak Eylül 2017'de piyasaya sürülen David M. Bennett tarafından PolyGamo Player adlı bir sistem de vardır.


## GVGP uygulamaları.
### Pekiştirmeli öğrenme.
GVGP, potansiyel olarak gerçek video oyunu AI'sını otomatik olarak oluşturmak için ve ayrıca "yöntemsel içerik oluşturma kullanılarak otomatik olarak oluşturulanlar dahil oyun ortamlarını test etmek ve bir insan oyuncunun yararlanabileceği oyundaki potansiyel boşlukları bulmak için" kullanılabilir. GVGP ayrıca oyun kuralları oluşturmak ve bir oyunun iyi AI ile kötü AI arasında izin verdiği beceri farklılaşmasını karşılaştıran Göreceli Algoritma Performans Profillerine (Relative Algorithm Performance Profiles; RAPP) dayalı bir oyunun kalitesini tahmin etmek için kullanılmıştır.


### Video Oyunu Açıklama Dili.
Genel Video Oyunu AI Yarışması (General Video Game AI Competition; GVGAI), 2014'ten beri devam ediyor. Bu yarışmada GGP yarışmasında kullanılan masa oyunları yerine 1980'ler dönemi atari ve konsol oyunlarına benzeyen (bazen de baz alınan) iki boyutlu video oyunları kullanılmaktadır. Araştırmacılara ve uygulayıcılara en iyi genel video oyunu oynama algoritmalarını test etmeleri ve karşılaştırmaları için bir yol sundu. Yarışma, GDL ile karıştırılmaması gereken ve kolayca ayrıştırılabilen basit semantik ve komutlar kullanan bir kodlama dili olan Video Oyunu Açıklama Dili (Video Game Description Language; VGDL) ile yazılmış çok sayıda oyunu içeren ilişkili bir yazılım çerçevesine sahiptir. VGDL için bir örnek, 2013 yılında geliştirilen PyVGDL'dir. GVGP'de kullanılan oyunlar, ölçmesi en basit ve en kolay olduklarından, şimdilik genellikle 2 boyutlu atari oyunlarıdır. Video oyunlarını yorumlayabilen bir AI oluşturma sürecini basitleştirmek için, bu amaç için oyunlar manuel olarak VGDL'de yazılır. VGDL, Cevap Kümesi Programlama (Answer Set Programming; ASP) ve Evrimsel Algoritma (Evolutionary Algorithm; EA) kullanarak, özellikle prosedürel seviye üretimi için bir oyunu tanımlamak için kullanılabilir. GVGP daha sonra prosedürel seviyelerin geçerliliğini ve ayrıca bir aracının nasıl performans gösterdiğine bağlı olarak seviyelerin zorluk veya kalitesini test etmek için kullanılabilir.


## Algoritmalar.
GGP yapay zeka, birden fazla oyun oynamak için tasarlandığından, tasarımı, belirli oyunlar için özel olarak oluşturulmuş algoritmalara dayanamaz. Bunun yerine yapay zeka, yöntemleri çok çeşitli oyunlara uygulanabilen algoritmalar kullanılarak tasarlanmalıdır. Yapay zeka ayrıca, önceki durumların sonucundan ziyade mevcut durumuna uyum sağlayabilen devam eden bir süreç olmalıdır. Bu nedenle, açık döngü teknikleri genellikle en etkilidir.
GGP yapay zeka geliştirmek için popüler bir yöntem, Monte Carlo ağaç arama (Monte Carlo tree search; MCTS) algoritmasıdır. Genellikle UCT yöntemiyle (Ağaçlara Uygulanan Üst Güven Sınırı) birlikte kullanılan MCTS'nin varyasyonları, belirli oyunları daha iyi oynamak ve video oyunu oynamaya uyumlu hale getirmek için önerilmiştir. Kullanılan ağaç arama algoritmalarının bir başka varyasyonu, mevcut her eylem için mevcut duruma bir alt düğümün oluşturulduğu ve oyun bitene veya süresi bitene kadar en yüksek ortalama ödüle göre sıralanan her çocuğu ziyaret ettiği Yönlendirilmiş Genişlik Öncelikli Arama (Directed Breadth-first Search; DBS)'dir. Her ağaç arama yönteminde, yapay zeka potansiyel eylemleri simüle eder ve kazanılan puanlar açısından her yolun ortalama en yüksek ödülüne dayalı olarak her birini sıralar.


### Varsayımlar.
Oyunlarla etkileşime girebilmek için algoritmaların, oyunların hepsinin ortak özellikleri paylaştığı varsayımı altında çalışması gerekir. Yarı Gerçek: Gerçek Dünyalar ve Kurgusal Dünyalar Arasındaki Video Oyunları kitabında Jesper Juul, oyunların şu tanımını verir: Oyunlar kurallara dayanır, değişken sonuçları vardır, farklı sonuçlar farklı değerler verir, oyuncu çabası sonuçları etkiler, oyuncu sonuçlara bağlıdır ve oyunun tartışılabilir sonuçları vardır. Bu varsayımları kullanarak, oyuncu girdisini, oyun sonuçlarını ve çeşitli kuralların nasıl uygulandığını ölçerek ve en uygun yolu hesaplamak için algoritmalar kullanarak oyun oynama yapay zekası oluşturulabilir.