Satranç benzeri yapay zeka sıra tabanlı strateji oyunlarında gerçekten uygulanamaz mı?


13

Açıkçası, min-max algoritmasını tüm hareket ağacına uygulamaya çalışmak sadece küçük oyunlar için çalışır (tüm satranç meraklılarından özür dilerim, "küçük" ile "basit" demek istemiyorum). Tahtanın genellikle 100 karodan daha geniş olduğu ve bir taraftaki tüm parçaların aynı anda hareket edebildiği tipik sıra tabanlı strateji oyunları için, min-max algoritması uygulanamaz.

Kendisini her derinlikte N kart yapılandırmaları ile sınırlayan kısmi bir min-max algoritmasının yeterince iyi olup olmadığını merak ediyordum? Genetik bir algoritma kullanarak, değerlendirme fonksiyonu için iyi olan bir dizi kart konfigürasyonu bulmak mümkün olabilir. Umarım, bu konfigürasyonlar uzun vadeli hedefler için de iyi olabilir.

Bu daha önce düşünülmemiş ve denenmiş olsaydı şaşırırdım. Öyle mi? O nasıl çalışır?


1
Ortak Çalışma Yayılımı ile deney yapabilirsiniz . Izgaraya yayılan değerle çalışır, düşmanlar ızgaraya tepeye tırmanır. En azından yol bulma için çalışır. Eğer dağınık (ayrı ayrı?) Ve daha sofistike tepe tırmanışı için daha fazla değer yaptıysanız (birkaç değere göre bir sonraki
adımın

Alpha-Beta Prunning ne olacak ? Min-max'ın daha iyi bir versiyonudur.
user712092

Alpha-Beta Prunning'ı bir tür min-max olarak görüyorum.
Joh

Evet öyle. Ama daha hızlı olmalı. Size yardımcı olup olmadığını bilmiyorum ...
user712092 8:11

Bu fikirden vazgeçtim. Farklı olaylara nasıl tepki verileceğine dair özel talimatlar yerine kısıtlamaları kullandığım "gevşek" bir senaryo yapay zekaya yöneliyorum. Bir GA'nın veya başka bir optimizasyon algoritmasının makul derecede akıllı davranışlar sağlayabileceğini umuyorum.
Joh

Yanıtlar:


5

Oyunun mekaniğine bağlıdır. Oyun ağacı min-max genel olarak uygulanamayabilir, ancak bazı bölgelerde uygulanabilir. Bir haritadaki bazı konumların stratejik olarak önemli olması yaygındır. Min-max bu konumlardan hangisinin kontrol edileceğini stratejik düzeyde uygulayabilir. Taktiksel düzeyde, her stratejik yerin etrafındaki x kareler için, birimlerin onu yakalamak ve savunmak için nasıl konuşlandıklarına karar vermek için min-max kullanılabilir.


9

Bu bir minimax algoritması değildir, ancak Killzone AI'den sorumlu olan çocuklar, bazı satranç AI'nın da kullandığı konum değerlendirme işlevlerine dayanan bir makale yayınladılar.

Yaptığı tek şey, ajanın mevcut bilgisine dayanarak tahtada bir pozisyon almaktır. Eğer ajan sağlığı düşükse, düşmanın uzağındaki pozisyonlara, düşman menzilinin dışında olmak daha cazip geldiği için daha yüksek bir puan verilecektir.

Makale AI Game Programming Wisdom 3'te bulunabilir ve Dinamik Taktik Pozisyon Değerlendirmesi başlığına sahiptir.

Makalenin bir taslağını burada bulabilirsiniz:
http://www.cgf-ai.com/docs/straatman_remco_killzone_ai.pdf

Umarım yardımcı olur.


2

Yeterince iyi olacağını sanmıyorum. Belirli N konfigürasyonlarını seçmek, kaç tane ve hangileri, bu karmaşık bir şeyde neredeyse imkansız olurdu. Oyununuz sonsuz kaynaklara veya benzer bir şeye sahipse, nasıl oynanabileceğine dair daireler olabileceğini ve bu tür bir AI'den yararlanmayı nispeten kolaylaştırabileceğini unutmayın.


2

En azından alfa-beta budama ile min-max uygulanmasını öneririm.

Denemeden ve pratik olmadığına karar vermeden (yani korkunç performans) ve oyun mekaniğine daha fazla arka plan olmadan, min-max'ın neden uygulanabilir olmadığını düşündüğünüzü anlamıyorum.

Tahtanın boyutu potansiyel olarak bir sorundur, ancak budama ile, kaybetme yollarını atmak aynı miktarda hesaplama ile daha derin bir arama yapılmasını sağlar, bu yüzden belki daha büyük tahta alanları budanırsa bir sorun olmayacaktır? Ek olarak, tahta boyutunun kendisinin bir sorun olduğunu varsaymak, erken olabilir, mekaniklerin karmaşıklığı ve her tahta konumundan kaç hareketin mümkün olduğu kadar tahta boyutu kadar değildir. Oyununuz geniş ancak seyrek nüfuslu bir alana sahipse, her tahta durumundan olası hamle sayısı, kartın tüm parçalara uyacak kadar büyük olmasına göre çok farklı olmayabilir. Tabii ki% 90 dolu devasa bir tahtanız varsa ve her şey her turda herhangi bir yere taşınabiliyorsa, bu çok fazla arama gerektirecektir.

Eşzamanlı hareketin neden doğal olarak bir sorun olduğundan da emin değilim. Bir gizli yönetim kurulu durumundan diğerine geçiş yaptığınız ve bir değerlendirme fonksiyonuna sahip olduğunuz sürece algoritma uygulanmalıdır.

Yine de bir değerlendirme fonksiyonuna sahip olmanız gerektiğini düşünüyorum ve kullandığınız arama ne olursa olsun, değerlendirme fonksiyonu işin çoğunun gitmesi muhtemeldir. Budama ile min-max algoritmasının uygulanması çok basittir, muhtemelen bir veya iki saat içinde yapabileceğiniz bir şeydir ve yönetim kurulu durumu depolama, değerlendirme, taşıma üretimi gibi altyapı çalışmalarının çoğu, razı olduğunuz arama.


eşzamanlı hareketle ilgili olarak: İlk başta genellikle satranç gibi sıra tabanlı oyunlar kullanılarak açıklanan min-max'ın eşzamanlı hareket durumuna nasıl aktarılacağını görmedim. Sanırım bunu nasıl yapacağımı görmeye başlıyorum, ama önemsiz değil.
Joh

Yazımdaki eşzamanlı hareketler sorununa bir çözüm verdim ("Her pozisyonda olası hareketler" başlığı). Bunu her iterasyonda sadece bir hamlede tek bir hamle yaparak ve rakibe dönüş yapan bir “şimdi sıramı bitiriyorum” hamlesiyle halledebilirsiniz. Bu, ara alfa-beta budamanın bu eşzamanlı hareketlerin karmaşıklığını parçalamasına izin verir.
SDwarfs

1

2011 Google AI yarışmasının galibi min-max (derinlik 1) kullandı. Başka bir üst yarışmacı rastgele örnekleme kullandı . Bu yarışmacı, temelde sorumda anlattığım min-max ve rastgele örneklemenin bir karışımının kötü performans gösterdiğini belirtti. Bu onu halleder, sanırım.

Diğer yandan, büyük oyunlarda min-max kullanmanın mümkün olduğunu gösteriyor. Bununla birlikte, küçük karınca gruplarıyla sınırlamak gerekliydi, tüm karıncalarla çalışmak muhtemelen çok yavaş olurdu. Bir başka ilginç gözlem, 1 derinliğin yeterli olduğudur. Biz (insanlar) satranç oynamakta oldukça iyiyiz ve bu oyun için bir yapay zeka zorlu olmak için çok daha derin arama ağaçlarına ihtiyaç duyuyor. Daha karmaşık yeni oyunlar bu kadar uzun süredir oynanmıyor ve incelenmiyor ve daha az sayıda yapay zeka yeterli eğlence değerine sahip olabilir.


1

Bir satranç AI'sının temel fikri, şu anda tahmin edilen en iyi hamleden mümkün olan tüm hareketlerin bir listesini yapmak, daha sonra bunları değerlendirmek ve süreci tekrarlamaktır. Çok az şansa sahip olanları, alınmayacakları için düşürür (ya da bir avantaj sağladığı görülmediği için alınmayacağı varsayılabilir).

Temel fikir, tüm olası hamlelerin bir listesini yapmanızı ve bu işlemi tüm bu hamleler vb. İçin tekrarlamanızı gerektirir. ) ve tavla, dama ve Rubik küpünü çözme gibi diğer şeyler için bir noktaya kadar.

Örnek olarak basit bir sıra tabanlı oyun (Medeniyet 2) alırsam, her biriniz tek bir turda toplam 8 kareye (veya 24) gidebilir. 10 adamınız varsa (bu çok fazla değil, genellikle biraz ilginç olmaya başladığında daha fazlasına sahipsiniz) mevcut durumdan (yani tek bir seviye) olası "hamle" toplam sayısı zaten 8 ^ 10 veya yaklaşık 4 milyar. Bunların% 99,99'unu bulansanız bile, olası hareketlerin sayısı gerçekten hızlı bir şekilde patladığı için ağacın derinliklerine gidemezsiniz.

Oyunun, Rubik küp problemine benzediğini, ancak sadece 10 veya 12 hamleden sonra ilerlemeyi gördüğünüze göre, sorun standart bir min / maks'in avantajlarının sadece bellek kapasitesinde yaygın olduğu bir noktaya patlar. tipik bilgisayarınızın sahip olacağından daha fazla.

Başka bir deyişle, bulacağı stratejiler tekrarlanabilir fakat kötü olacaktır.

Asıl sorun için, iyi bir yapay zeka nasıl yapılır, temelde yönlendirilmiş rastgele hareket (her adamı biraz temel zeka ile hareket ettirin), değerlendirme ve ayarlama yönünde giderdim. Bunu 100 veya 1000 farklı olanlar için paralel yapın ve en iyisi olanı seçin. Tekrar ayarlamak için bundan sonuçları orijinal akıllı direksiyona geri gönderebilirsiniz. Biraz monte-carlo simülasyonu gibi.


0

Min / maks'i sıra tabanlı bir strateji oyununa başarıyla uygulamak için mevcut tüm satranç tekniklerini doğru bir şekilde uygulamanız gerekir ...

Değerlendirme fonksiyonu

Değerlendirme fonksiyonlarınız kötü ise, satranç motorları bile çok kötü bir güce sahiptir. Bir değerlendirme fonksiyonunun en basit versiyonu: 1 = beyaz ile kazanılan oyun, -1 = siyahla kazanılan oyun, 0 = diğer tüm durumlar; Ancak, bu size çok kötü bir performans verecektir. Aynı şey sıra tabanlı oyununuza da oluyor! Eğer satrançta olduğu gibi min / max (alfa / beta budama ve eşyalar ile) kullanmak istiyorsanız, makul bir değerlendirme fonksiyonu da uygulamalısınız! Aksi takdirde, strateji oyununuza uygulandığında bu algoritmaların performansını satranç için geçerli olan durumla karşılaştıramazsınız.

Satranç motorlarının değerlendirme işlevleri ne yapar:

  • Bir parçanın tahtadaki konumu ne kadar iyi?
  • Bir parça kaç kez saldırıya uğruyor?
  • Parça kaç kez korunur?
  • Her parça tahtada serbestçe "hareket edebilir". (veya: Kaç fayans "kontrol eder")

Değerlendirme fonksiyonunun bu bölümleri önce oyununuza "çevrilmelidir":

  • Parçanın konumu: Örneğin, atış menzilini genişleten bir tepe üzerinde mi?
  • Saldırı: Her bir parça ne kadar tehlikede? (örneğin, özel bir birime saldırabilecek bir olasılıkla çarpılan birimlerin saldırı değerlerinin toplamı; birim zaten hasar görmüşse olasılık artar; diğer birçok birim saldıran birim aralığındaysa azalır)
  • Kendi Saldırı: Bu birimlerden kaç tane saldırı yapılabilir?
  • Koruma: Yanında ne kadar kendi parçası var (yardım etmek için)? Belki de bir birim minimum mesafenin altındaki birimlere saldıramayabilir ve yakın birimlere saldırma imkanına sahip birimle onu korumak tercih edilebilir.
  • Mobilite: Üniteniz ne kadar hareketli? (kaçabilir mi?)

Farklı birimler, tüm birimler için ağırlıklandırma fonksiyonu (factor_a * rating_a + factor_b * ranting_b + ...) ile özetlenmelidir ...

Strateji oyunlarında ayrıca kalan kaynaklar (altın, ahşap, ...) dikkate alınmalıdır.

Değerlendirme fonksiyonunuz yeterince iyiyse, çoğu durumda ağaçta gerçekten "derin" arama yapmanız gerekmez. Bu yüzden muhtemelen sadece en umut verici 3 veya 10 seçeneğe daha yakından bakmanız gerekir. Sonraki bölüme bakın ...

Her pozisyonda olası hamleler

Strateji oyunları için min / max kullanmanın en sorunlu yanı, bir turda birden fazla birime komut verebilmenizdir, oysa satrançta sadece bir birime komut vermenize izin verilir (castling hariç, ancak bu açıkça tanımlanmış bir hareket kombinasyonudur). Bu, her bir birim için yalnızca "kuzey, güney, batı, doğu VEYA dur" arasında karar verirseniz, her "pozisyon" (satranç terimi) için N birimler için 5 ^ N olası harekete neden olur. Karmaşık komutu düşük seviyeli komutlara ayırarak bunu çözebilirsiniz: örn. Ünite A için eylem seçin, derinlemesine gidin ve ünite B'ye karar verin .... ünite N'ye karar verin ... ve sonra bu dönüşü sonlandırın. Ancak, bu tek başına karmaşıklığı değiştirmez! Eylemlerin birimlere atanma sırasını en iyi duruma getirmelisiniz (örneğin ilk birim B, C, D ve sonra birim A). Son hesaplama sırasında her birim için kararın etkisini kaydedebilir ve daha sonra önem derecesine göre sıralayabilirsiniz. Bu şekilde alfa-beta budama, arama ağacından herhangi bir kötü kombinasyonu kesmek için çok erken kullanılabilir. En yüksek öncelik, her yinelemede "daha fazla bir şey yapmayın ve sıranızı sonlandırın" (boş hareket budaması) olmalıdır. Bu şekilde çoğu üniteye birçok görev atamayı "atlayabilir" ve daha önce yaptıklarına devam etmelerine izin verebilirsiniz. Bu şekilde arama, sadece "kritik" birimlere (örneğin şu anda gerçekten savaşta olanlara) bir göz atarak hızlı bir şekilde derinlere inecektir. Her birime yalnızca bir kez komut verdiğinizden emin olun ... "Önemli" birimlerin de zaman zaman bir komut aldığından emin olmak için bazı rasgelelikler de kullanabilirsiniz. Özellikle, bir işi bitiren birimler (ör.

Yinelemeli Derinleşme + Önbellekleme / Karma Tablosu

Daha sonra, bir süre sınırına ulaşılana kadar derinlemesine gitmek için "interaktif derinleşme" yapabilirsiniz. Böylece daha az birim varsa daha derinlemesine arama yaparsınız ve daha iyi bir çözüm aramayı bırakırsanız her zaman bir "sonuç" elde edersiniz. Yinelemeli derinleştirme, eski arama sonuçlarını önbelleğe almak için bir karma tablo kullanılmasını gerektirir. Bu aynı zamanda son dönüş aramasından (arama ağacının son dönüşte gerçekte yürütülen komutları kapsayan dalı) bazı sonuçların yeniden kullanılmasını sağlar. Bunu uygulamak için, yinelemeli olarak güncellenebilen çok iyi bir karma işlevine ("zobrist anahtarına göz atın") ihtiyacınız vardır. Karma anahtarını güncellemek, eski "konumun" karma anahtarını alabileceğiniz ve yalnızca konumdaki değişikliği (ör. üniteyi x konumunda alın ve y) konumuna getirin. Bu şekilde hash anahtarını hesaplamak hızlıdır ve sadece karmanın bu konum için eski bir giriş içerip içermediğini kontrol etmek için tüm panoların durumunu işlemeniz gerekmez. Bir şekilde karma çarpışmaların gerçekleşmediğinden emin olmalısınız.

Deterministik Olmayan Davranış

Deterministik olmayan davranış min / maks aramalar için bir problemdir. Bu, saldırıya uğramış bir hedefi vuracağınızdan emin değilsiniz (örneğin olasılık% 10'dur). O zaman sadece bunun olmasını planlayamazsınız. Bu durumda algoritmayı değiştirmeniz ve arasına bir "olasılık" katmanı koymanız gerekir. Biraz "olasılıklar döner" gibi. Her bağımsız sonuç ayrı ayrı dikkate alınmalıdır. Bu derinlik "katmanı" yoluyla değerlendirme daha sonra örneklenmelidir (monte carlo örneklemesi) ve derinlemesine değerlendirmenin sonucu oluşma olasılığı ile ağırlıklandırılmalıdır. Olasılık katmanının farklı sonuçları farklı karşıt hareketler olarak değerlendirilmelidir (ancak min / maks yerine "ortalama" hesaplanmalıdır). Bu elbette arama ağacının karmaşıklığını artıracaktır.

özet

Tüm bu teknikleri (mevcut satranç motorları tarafından kullanılan) deterministik bir oyuna uygularken, kesinlikle bir oyun için de makul sonuçlar elde edebileceksiniz. Deterministik olmayan oyunlar için bu muhtemelen daha karmaşık olacaktır, ancak yine de yönetilebilir olduğunu düşünüyorum.

Bu tekniklerin (satranç için) açıklanması için iyi bir kaynak http://chessprogramming.wikispaces.com/

Min / maks aramalarda bir tür yönlendirilmiş rastgele uygulama bile uygulayabilirsiniz. Her yinelemede ilk önce en iyi sonuçları kararlı bir şekilde araştırmak yerine, bunu rastgele seçebilir ve mevcut değerlendirmelere dayanan bir olasılık dağılımı ile sırasına karar verebilirsiniz ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.