Bir Bomberman AI akıllı bomba yerleştirme


13

Bomberman için bir AI algoritması uygulamaya çalışıyorum. Şu anda çalışan ama çok akıllı olmayan bir ilk uygulamaya sahibim (mevcut AI, bomba yerleştirmede çok hevesli).

Bu şimdiye kadar uygulamayı denedim ilk AI ve ben biraz sıkışmış. Aklımdaki daha karmaşık algoritmalar (daha iyi kararlar almayı beklediğim algoritmalar) iyi çözümler olamayacak kadar kıvrıktır.

Bir Bomberman AI uygulamak için hangi genel ipuçlarınız var? Botu daha savunmacı veya saldırgan hale getirmek için radikal olarak farklı yaklaşımlar var mı?


Düzenle: Geçerli algoritma

Geçerli algoritmam böyle bir şeye gidiyor (sözde kod):

1) Bir bomba yerleştirmeye çalışın ve yeni yerleştirdiğiniz bomba da dahil olmak üzere tüm bombalardan güvenli bir hücre bulun. Bu hücreyi bulmak için dört yönden yineleyin; güvenli bir ıraksak hücre bulabilir ve zamanında ulaşabilirseniz (örneğin, yön yukarı veya aşağı ise, bu yolun solunda veya sağında bulunan bir hücreyi arayın), o zaman bir bomba yerleştirip hareket etmek güvenlidir bu yönde.

2) Farklı hücreleri bulamaz ve güvenli bulmazsanız, bir bomba yerleştirmemeyi deneyin ve tekrar bakın. Bu kez sadece bir yönde güvenli bir hücre aramanız gerekecek (ondan sapmak zorunda değilsiniz).

3) Hala güvenli bir hücre bulamıyorsanız, hiçbir şey yapmayın.

for $(direction) in (up, down, left, right):
    place bomb at current location
    if (can find and reach divergent safe cell in current $(direction)):
        bomb = true
        move = $(direction)
        return

for $(direction) in (up, down, left, right):
    do not place bomb at current location
    if (any safe cell in the current $(direction)):
        bomb = false
        move = $(direction)
        return

else:
    bomb = false
    move = stay_put

Bu algoritma botu çok tetikleyici mutlu eder (bombaları çok sık yerleştirir). Kendini öldürmez, ancak diğer oyuncular tarafından engellenip öldürülebileceği çıkmaz sokaklara girerek kendisini savunmasız hale getirme alışkanlığı vardır.

Bu algoritmayı nasıl geliştirebileceğim konusunda herhangi bir öneriniz var mı? Ya da belki tamamen farklı bir şey denemeliyim?

Bu algoritma ile ilgili problemlerden biri , botu üzerinde durabileceği çok az (genellikle sadece bir) güvenli hücre ile bırakma eğilimindedir. Çünkü bot kendini öldürmediği sürece arkasında bir bomba izi bırakır.

Ancak, arkasında bir bomba izi bırakmak gizleyebileceğiniz birkaç yer bırakır. Diğer oyunculardan veya botlardan biri, yakınınızdaki bir yere bomba yerleştirmeye karar verirse, genellikle saklanacak yeriniz yoktur ve ölürsünüz.

Ne zaman bomba yerleştireceğime karar vermenin daha iyi bir yoluna ihtiyacım var.


Maviden% 100 çalışan bir şey düşünmek zor. Ama belki de şu anda sahip olduğunuz algoritmayı eklerseniz hepimiz yavaş yavaş geliştirmeye yardımcı olabiliriz. Ayrıca muhtemelen bir Bomberman AI uygulamaya çalışan ilk hobici değilsiniz ve sizin için paha biçilmez bilgi kaynaklarını kanıtlayabilecek rastgele bir Google aramasıyla birkaç Bomberman AI yarışması buldum.
Roy T.Mar

Sanırım bomberman AI'yi iki şeyde genelleştirebilirsiniz: 1) diğer oyuncuların bombaları tarafından patlatılmaktan korunmaya çalışmak 2) başkalarını ölmeye çalışmak için oyun tahtasına bombalar koymak (kural 1'i akılda tutarak) / kendi bombaların tarafından tuzağa düşürüldü).
tigrou

Mevcut uygulamanıza en azından yüksek düzeyde bir genel bakış gönderirseniz (çok fazla kod olduğu varsayılarak) muhtemelen daha iyi olurdu ve bomba yerleştirmede aşırı hevesli olmanızla ilgili sorununuzu çözmenize yardımcı olabiliriz.
Tetrad

@ Tetrad Yeni bir algoritma uygulama sürecindeyim. Bunun nasıl gittiğini göreceğim ve gerekirse algoritmayı buraya göndereceğim.
Paul Manta

Her ne kadar gerçek bir ipucu olmasa da clanbomber koduna bir göz atabilirsiniz . bomberman'a benzeyen bir oyun.
Ali1S232

Yanıtlar:


4

Karşılaştığınız sorun, AI'nızın bir sonraki bombasını nereye yerleştirmesi gerektiğine dair akıllıca bir karar vermek için asla durmaması, bu da onu mümkün olduğunca bomba bırakarak "bok, bok, şimdi ne yapacağım!" ?"

Düşünmeyi duraklatma

Şu anda, AI'nız özellikle hiçbir yerde dolaşmıyor. Ancak bazen, aslında bir hedefe doğru hareket ediyor olabilir . Örneğin, bir powerup görür ve oyuncudan önce ona ulaşabileceğini düşünürse, belki de o karoya güvenli bir yol bulmalı ve oraya taşınmalı, bombalara göz kulak olmalı ve yol boyunca kaçınmalıdır.

Aynı hedefe taşıma davranışı , bir sonraki bombasını nereye yerleştireceğini düşündüğünde kullanılabilir .

AI'nız bir bomba yerleştirebildiğinde, hemen yapmak yerine , aşağıdaki gibi kriterlere göre mevcut bomba yerleştirme yerlerinden seçim yapmak için kısa bir süre bir arama algoritması kullanmalıdır :

  • Yakında mı? (böylece her bomba yerleştirmek istediğinde haritanın çapraz karşı köşesine yürümez)
  • Patlamadan saklayabileceğim bir yer var mı - bomba patlamadan önce oraya ulaşabilir miyim?
  • Patlama fayansları havaya uçuracak ve bana güç verecek mi?
  • Potansiyel olarak oyuncuya saldıracak mı? (erken bir oyunda daha kolay bir yapay zeka bundan kaçınabilir, agresif bir yapay zeka bunu takip eder - powerups'ı unutmadan)

Bu karar verildiğinde, AI bir bomba yerleştirme noktası ve patlamasından saklanacak bir yer seçti. Şimdi o noktaya yürüyebilir, bombasını yerleştirebilir, sonra saklandığı yere yürüyebilir. Saklandığı yere ulaştığında, kaçınmak için burada yürüdüğü bombanın yolundan uzak tutulması şartıyla, yürümeye ve bomba yerleri bulmaya devam edebilir (birden fazla bomba varsa).

Yürürken ve güvenli bir yol bulurken

AI'nız için tek bir noktadan noktaya yöntem geliştirebilir ve her yerde yürümesini istediğinizde bunu kullanabilirsiniz. Bu yöntem , yolunu bulmak için A * arama algoritmasını kullanabilir.

AI'yı güvende tutmak için, her yeni bomba yerleştirildiğinde yolunu yeniden kontrol etmek isteyebilirsiniz. Patlamalardan kaçınmak için bombanın patladığı zamanı kontrol edebilir ve bomba o karodan geçerken patlamayacaksa potansiyel bir patlama karosunu üzerinde yürümek güvenli olabilir - ve güvenli değilse, geçilmez bir karo gibi davranın .

AI hatalarınızı vermek için (aslında bazen patlayabilir) hesaplama hataları yapmalıdır: dikkatsizce bir bombayı unutmak, patlama boyutunu veya bombanın patladığı süreyi küçümsemek, vb.

Yan not: Rastgele yürümeyi rastgele yürümek için rastgele noktalar seçerek veya dolaşmak için sadece bitişik bir kiremit seçmek yerine her zaman yürümeyi akılda tutarak yeni bir bomba yerleştirme noktasına sahip olarak daha maksatlı görünmesini sağlayabilirsiniz. Bu şekilde, aklını telafi edemiyormuş gibi aynı yerde ileri geri dolaşmayacaktır.


Oyunla ilgili bazı detayları vermeyi unuttum. Bomberman'ın basitleştirilmiş bir versiyonudur: güçlendirme yoktur, oyuncular her zaman sınırsız bomba yerleştirebilir ve bombalar her zaman maksimum menzile sahiptir (haritanın bir ucundan diğerine). Puan sistemi de farklı ... [devamı]
Paul Manta

Bir bomba yerleştirmek için 1 puan, bir duvarı yıkmak için 0 puan alıyorsunuz. Ayrıca öldürme için 30, yardım için 15 puan ve intihar için -20 puan alırsınız. [devamı]
Paul Manta

Bunu akılda tutarak, AI mümkün olduğunca sık bir bomba yerleştirmeye çalışmalıdır (çünkü bomba yerleştirmek bombalar verir), ancak bombanın nereye yerleştirildiği konusunda özellikle dikkatli olması gerekmez. Her zaman güvenli bir yere sahip olmak konusunda dikkatli olmak gerekir. [devamı]
Paul Manta

[devamı.] Size verilen bir yön seçerken bana güvenli yol açtığı birini seçmek için, yeterince olduğunu düşünüyorum bölgede . Güvenli bir hücre aramak yerine, en büyük güvenli bölgeyi arıyordum, böylece sadece kendim değil diğer oyuncular tarafından da yerleştirilen bombalardan saklanabiliyorum. Ayrıca, beni diğer oyunculardan birine yaklaştıracak yönleri tercih etmek iyi bir fikir olabilir mi?
Paul Manta

3
O zaman Bomberman ve onun yapay zekasından hiç bahsetmiyoruz ! Biz sadece üzereyiz Görünüşte benzer, Bombacı Ama Under the Hood tamamen farklı ve A Tetik Mutlu Deli Olmak You teşvik bombaları ile Bazı Oyun ve bunun oyun ile çok daha az deneyim konu işlemi var.
doppelgreener
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.