Bir kart oyunu AI için en iyi teknikler


27

Bir kart oyunu için bir AI geliştirmeye çalışıyorum ve kullanmam gereken teknik / algoritma konusunda biraz takılıyorum. İşte oyunla ilgili birkaç varsayım var:

  • Kartlar oyunculara dağıtıldıktan sonra rastgele bir durum yok. Burada her oyuncu hangi kartı oynayacağını seçebilir, ancak kartları oyunun başında dağıtırken olduğu gibi rastgele bir işlem gerçekleşmez.
  • Bir kart çalındığında kartlarla ilgili kısıtlamalar vardır.
  • Hile kazanan oyuncu ilk önce oynar. Örneğin, Oyuncu 1 bir kart çalar, Oyuncu 2 bir kart çalar ve kazanır. Sonra Oyuncu 2 bir kart çalar ve sonra Oyuncu 1 çalar.

Çok fazla ipucu / kural biliyorum (örneğin, oyuncunun A, B, C kartlarına sahip olduğunu biliyorsanız, D'yi oynamalıyım), bu da oyunu kazanmama yardımcı oluyor. Böylece ilk önce bu kuralları tanımlamak için bir Bayesian ağı kullanmak istedim. Sorun şu ki, atamak için hiçbir ihtimal bilmiyorum, fakat oynanan oyunların (bir insana karşı) tarihini kullanarak bir buluşsal bilgiyi hesaplayabilirim. İkinci problem, tüm kuralları bilmemem ve AI tarafından en uygun oyunu bulmak için gereken bazı örtük kurallar olması muhtemeldir.

Bunun böyle bir kart oyunu için bir AI geliştirmenin iyi bir yolu olup olmadığından emin değilim?

Ayrıca soruna en iyi uyan başka teknikler olup olmadığını da merak ediyorum. Mesela minimax'a baktım (budama algoritmasıyla), ama bu problem için iyi bir seçenek olabilir mi? Emin değilim, çünkü en önemli oyunlar en bilinmeyen parametrelerin olduğu oyunun başındadır (kartların çoğu henüz oynanmamıştır).


1
Harika soru! Tam bir cevabınız yok. Sadece 2c'mi eklemek isterim: Oyununun mümkün olabileceği tüm durumları biliyorsanız, Minimax teorik olarak bu oyun-ağacı ağacını geçmek için iyi bir yol olurdu. Bu oyun durumları ağacı çok büyükse performans sorunlarına girebilir miyiz ...
Shivan Dragon

1
Oyunun amacı nedir? Kim kazanır? Bir oyuncunun herhangi bir zamanda oyunu kazanma şansını arttırması mümkün olabilir mi?
GELMEKTEDİR

Oyunu ayrıntılı olarak açıklayamıyorum. Birini kazanmak için en yüksek puanları almak zorundasınız (diğer oyuncudan daha fazla). Başlangıçta, kazanacağımızı söylemek zor / imkansız. Sonunda, eğer zaten yeterince puan kazanmışsa kazanacaklarından emin olabiliriz (diğer oyuncu artık kazanmak için yeterli puan kazanamaz).
LaurentG

1
Oyun HeartStone mu? :)
Lescai Ionel 9:13

1
Görünüşe göre sana çok benzer bir durumdayım, aynı zamanda kart oyunu, ayrıca yerel oyun (İsviçre'de olmasa da) ve aynı zamanda nereden başladığımı anlamaya çalışıyorum. İlginç bulduğum şeylerden biri, DNA'ları sanal oynatıcılara atadığınız ve daha sonra birbirleriyle çukurlaştırdığınız bir evrimci. Kaybedenleri öldürür ve kazananları yetiştirirsiniz. Sonuç oldukça iyi AI botları olabilir. Bu tropiceuro.com/puerto-rico-evolver'ı kart oyunum için nasıl uyarladığımı çözmedim ama bunun mümkün olduğunu düşünüyorum.
Andrew Savinykh

Yanıtlar:


11

Örneğiniz Bridge'e benziyor . Üst köprü oyun sistemleri hareketleri seçmek için Monte Carlo yöntemlerini kullanır. Yüksek seviyede:

  • Her bir kartın belirli bir eldeki olma ihtimalini belirleyin. Hangi kartların elinizde olduğunu ve hangi kartların oynandığını kesin olarak bilirsiniz. Diğer tüm kartların oynanma olasılığını ve teklif verilmişse muhtemelen bir oyuncunun teklifini esas alarak belirleyin. Başlamak için, sadece bir oyuncunun elinde bir kartın bulunmadığı naif ve eşit bir olasılık kullanabilirsiniz.
  • Şimdi, olabildiğince çok "sanal" oyun oyna. Elinizden bir kart oynamayı simüle edin ve ardından oyunun kurallarını ve olasılıklarınızı kullanarak rakiplerinizin yanıtlarını belirleyin. Her sanal oyun için, bir oyuncuya kart atamak için olasılıklarınızı kullanın ve sonra oyunu hızla simüle edin. Her oyuncunun yeteneklerinin en iyisini oynayacağını varsayalım. Sanal oyununuzdaki tüm kartları bilirsiniz, böylece her oyuncunun mükemmel şekilde oynamasını sağlayabilirsiniz.
  • Sağlam bir örneklemeniz olduğunda (veya zamanınız tükendiğinde), size en iyi sonucu veren yasal hareketi seçin.

Bir şeyi işe koyduktan sonra, her çeşit zenginleştirilmiş stratejiyi ekleyebilirsiniz. Örneğin, bir oyuncunun tarihsel oyunlarına göre olasılıklarınızı değiştirin, bir oyuncunun tarzına göre olasılıkları değiştirin (pasif, temkinli, agresif) ve hatta belirli oyuncuların birlikte oynadıkları efektleri göz önünde bulundurun.


LaurentG'nin yorumuna göre düzenle:

Sonuçta, tüm oyuncular için mükemmel oyun fikrini kırmak ve daha gerçekçi bir şey kullanmak isteyebilirsiniz. Kavramsal olarak, birinin elinde olan bir kart için olasılıkları (kart dağıtımı) bir oyuncunun bir el sırasında belirli bir yasal kart oynaması ihtimalinden (kart seçimi) ayırın.

Kart seçimi öğrenme için olgunlaşmış. Oyunlarda oyunları izlerseniz, belirli bir oyuncunun veya genel olarak oyuncuların, elindeki kartlara ve oynanan kartlara göre nasıl oynama eğiliminde olduğunu öğrenebilirsiniz. Hatta fantezi alabilir ve onlardan gizlenen kartlarla ilgili varsayımlarını modelleyebilirsiniz.

Kart dağıtımı için öğrenme fırsatları da vardır. Bir oyuncunun bir el sırasındaki geçmiş teklifleri ve kart seçimi, ellerinde gizli olanları "anlatabilir". Her sanal oyunu oluştururken olasılıkları ayarlamak için geçmiş verileri kullanabilirsiniz.


İlginç cevabınız için teşekkür ederim. Haklısın, oyun Bridge ile birkaç kuralı paylaşıyor. Anladığım kadarıyla, AI'nız kodladığınızdan daha iyi olmayacak. Monte Carlo yöntemini kullanmanın ve AI'yı öğrenmesinin bir yolu var mı? Geçmiş olayları kullanarak (önceki oyunların hepsinde) her kart için olasılık tayin etmek mümkün müdür?
LaurentG

AI'yı kesinlikle öğrenmesini sağlayabilirsiniz. İşin püf noktası, belirli bir eldeki bir kartın, bir oyuncunun elinde bir kez yasal bir kart oynaması olasılığından ayrılması olacaktır. Yukarıda detaylandırıyorum.
Corbin

6

Son kişisel deneyim durumu:

Kendim bir kart oyunu üzerinde çalışıyorum (Bisca, 2 oyunculu bir Portekizli oyun) ve Monte Carlo yöntemlerini kullanarak, özellikle de En Son Bilgi Kümesi Monte Carlo Ağaç Arama algoritmasını (ISMCTS, Python'da örnek kaynak kodu: http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm ).

Oyunun yanlış oynamasıyla, sadece oyun kurallarının bilgisiyle, oldukça iyi oynuyor. Şu anda, onu okuduğum, geliştirebildiğim için, onu okuduğum bilgilere göre (ve "ana" MCTS'si), oyunsal buluşla oyununu geliştirmek mümkün ( http: // www .orangehelicopter.com / ed / kağıtları / aiide13.pdf ) ve rakip kart çıkarımı.


1
Bu yazı okumak oldukça zordur (metin duvarı). Sakıncası var düzenleyebilir daha iyi bir şekle ing?
tatarcık

Sorunla ilgili gerçek deneyime sahip birisinin yanıtı için teşekkürler. harika linkler!
luben

3

Bence oyunun kurallarına bağlı.

İşte sorunuzdan anladığım şey:

  • Oyun turlarda oynanır, her oyuncu tur başına bir kart oynar
  • İlk giren oyuncu istediği kartı oynayabilir
  • İkinci oynayan oyuncu, ilk oynananlara bağlı olarak yalnızca belirli kartları oynayabilir
  • Turu kazanan oyuncu, bir sonraki turda önce
  • Tüm kartlar ilk turdan önce dağıtılır

Varsayımlar:

  • Diğer oyuncunun kartlarını tam olarak bildiği için, ilk giren oyuncu, her biri için bir kartın turu kazanıp kazanmayacağına karar verebilir (ilk oyuncu kesin bir kazanma kartı oynayabilir)
  • Eğer A ve B kartları bu turda ilk oynandığında kazanırsa, bu turda A oynar (ve kazanır) sonra B oynarsa, aşağıdaki turda B kazanır (kartlar değer kaybetmez)
  • Diğer oyuncunun kartlarını tam olarak bildiği için, ikinci olan oyuncu bir kartın bu turu kazanıp kazanamayacağına karar verebilir, ancak bir sonraki turda ilk oynanırsa kaybedecektir (en kötü kazanan kartı seçti)

Bu kuralları izleyen örnek oyun:

İlk oyuncu bir kart oynar. İkinci oyuncunun aynı süitteki bir kartı oynaması veya kaybetmesi gerekir. Eğer süitler eşleşirse, en yüksek kart kazanır.

Şimdi, bu oyuna beraberlik şansı ve rakiplerinizin elini tanımak için hangi kartların oynandığını ezberleyerek karar vermiş olursunuz.
Bu durumda, AI'ya sadece hangi kartların oynandığını kısmen hatırlatacağım, yani hatırlanan listeden rastgele çıkartılan kartların bir yüzdesini (düşük sayı = yüksek zorluk AI), ancak Aslar veya Krallar gibi önemli olanları değil. Bu şekilde, örneğin, AI bir Kupa Kraliçesi oynamanın güvenli olduğunu bilecektir çünkü rakibin As veya Kralı olmadığını hatırlar, ancak 10'u oynamak istiyorsa, bir olasılık hesaplamak zorunda kalacaktır. çünkü Jack'in hala oyunda olup olmadığını hatırlamayabilir.
Bu, insan dikkatini taklit eder.

TL; DR
AI'nın ne kadar bildiğini sınırlayın, bu yüzden kararları mükemmel değil, sadece yeterince iyi.


Cevabınız için teşekkürler. Ancak soruda belirtildiği gibi, kartların dağıtılmasından sonra şans / rastlantısallık yoktur. Ve bir oyuncu diğer oyuncuların kartlarını bilmiyor. Zaten oynanan kartları ve bazı "kuralları" kullanarak varsayımlarda bulunmalıdır.
LaurentG

2
Ezberlenmiş kartları rastgele çıkarma fikri gibi. Bu, kolay, orta ve zor gibi seviyelerin gelişimi hakkında bir ipucu verir.
superM
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.