Dare a Bomberman un posizionamento intelligente della bomba AI


13

Sto cercando di implementare un algoritmo AI per Bomberman. Attualmente ho un'implementazione rudimentale funzionante ma non molto intelligente (l'attuale IA è troppo zelante nel piazzare bombe).

Questa è la prima IA che abbia mai provato a implementare e sono un po 'bloccato. Gli algoritmi più sofisticati che ho in mente (quelli che mi aspetto di prendere decisioni migliori) sono troppo contorti per essere buone soluzioni.

Quali suggerimenti generali hai per implementare un'intelligenza artificiale di Bomberman? Esistono approcci radicalmente diversi per rendere il bot più difensivo o offensivo?


Modifica: algoritmo corrente

Il mio attuale algoritmo va in questo modo (pseudo-codice):

1) Prova a posizionare una bomba e poi trova una cella che è al sicuro da tutte le bombe, compresa quella che hai appena piazzato. Per trovare quella cella, scorrere le quattro direzioni; se riesci a trovare una cella divergente sicura e raggiungerla in tempo (ad es. se la direzione è su o giù, cerca una cella che si trova a sinistra o a destra di questo percorso), allora è sicuro posizionare una bomba e muoverti in quella direzione.

2) Se non riesci a trovare e proteggere le celle divergenti, prova a NON posizionare una bomba e guarda di nuovo. Questa volta dovrai solo cercare una cella sicura in una sola direzione (non devi divergere da essa).

3) Se non riesci ancora a trovare una cella sicura, non fare nulla.

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

Questo algoritmo rende il robot molto grilletto (posizionerà le bombe molto frequentemente). Non si uccide, ma ha l'abitudine di rendersi vulnerabile andando in vicoli ciechi dove può essere bloccato e ucciso dagli altri giocatori.

Hai qualche suggerimento su come potrei migliorare questo algoritmo? O forse dovrei provare qualcosa di completamente diverso?

Uno dei problemi con questo algoritmo è che tende a lasciare il bot con pochissime (spesso solo una) celle sicure su cui può stare. Questo perché il robot lascia dietro di sé una scia di bombe, purché non si uccida da solo.

Tuttavia, lasciare una scia di bombe dietro lascia pochi posti dove è possibile nascondersi. Se uno degli altri giocatori o robot decide di posizionare una bomba da qualche parte vicino a te, spesso succede che non hai un posto dove nasconderti e muori.

Ho bisogno di un modo migliore per decidere quando posizionare le bombe.


È difficile pensare a qualcosa che funziona al 100% all'improvviso. Ma forse se aggiungi l'algoritmo che hai attualmente possiamo tutti aiutare a migliorarlo gradualmente. Probabilmente non sei anche il primo hobbyista che cerca di implementare un'intelligenza artificiale di Bomberman e ho trovato parecchie competizioni di Bomberman AI con una ricerca casuale di Google che potrebbe rivelarti preziose fonti di informazioni per te.
Roy T.

Penso che puoi generalizzare l'intelligenza artificiale di bomberman in due cose: 1) cercando di proteggerti dalle esplosioni di bombe di altri giocatori 2) posizionando le bombe sul tabellone di gioco per cercare di far morire gli altri (tenendo presente la regola 1): per evitare di essere distrutto / intrappolato dalle tue stesse bombe).
tigrou,

Probabilmente sarebbe meglio se avessi pubblicato almeno una panoramica di alto livello della tua attuale implementazione (supponendo che sia un sacco di codice) e potremmo forse aiutarti a risolvere il tuo problema con il fatto che sono troppo zelanti nel piazzare bombe.
Tetrad,

@Tetrad Sto implementando un nuovo algoritmo. Vedrò come andrà e pubblicherò l'algoritmo qui, se necessario.
Paul Manta,

anche se non è un vero suggerimento, ma puoi dare un'occhiata al codice del clanbomber . è un gioco in molti modi simile a bomberman.
Ali1S232

Risposte:


4

Il problema che stai affrontando è che la tua IA non si ferma mai per prendere una decisione intelligente su dove dovrebbe piazzare la sua prossima bomba, che lascia cadere bombe ogni volta che può e poi elaborare "merda, merda, cosa devo fare ora! ?"

Pausa per pensare

In questo momento, la tua IA vaga solo in nessun posto in particolare. A volte, tuttavia, dovrebbe effettivamente spostarsi verso un obiettivo. Ad esempio, se vede un potenziamento e pensa di poterlo raggiungere prima del giocatore, forse dovrebbe trovare un percorso sicuro verso quella tessera e spostarsi lì, tenendo d'occhio le bombe ed evitandole lungo il percorso.

Lo stesso comportamento di spostamento verso il bersaglio può essere usato quando pensa a dove posizionare la sua prossima bomba .

Quando la tua IA può piazzare una bomba, invece di farlo immediatamente, dovrebbe usare brevemente un algoritmo di ricerca per scegliere tra i punti di posizionamento della bomba disponibili in base a criteri come:

  • È nelle vicinanze? (in modo che non passi all'angolo diagonale opposto della mappa ogni volta che vuole posizionare una bomba)
  • C'è un posto che posso nascondere dall'esplosione - e posso raggiungerlo prima che esploda la bomba?
  • L'esplosione farà esplodere le piastrelle e mi darà potenziamenti?
  • Potrà potenzialmente attaccare il giocatore? (un'intelligenza artificiale più semplice potrebbe evitarlo all'inizio del gioco, un'intelligenza artificiale aggressiva lo perseguirà, senza dimenticare i power-up)

Quando è stata presa questa decisione, l'IA ha scelto un punto di posizionamento della bomba e un posto per nascondersi dalla sua esplosione. Ora può camminare verso il punto, posizionare la sua bomba, quindi raggiungere il suo nascondiglio. Una volta raggiunto il suo nascondiglio, potrebbe voler continuare a camminare e trovare posizioni di bombe (se ha più bombe), a condizione di tenere a mente di tenersi lontano dalla bomba che ha camminato qui per evitare.

Camminando e trovando un percorso sicuro

Puoi sviluppare per la tua IA un unico metodo walk-to-point e utilizzarlo ogni volta che vuoi che cammini da qualche parte. Questo metodo potrebbe utilizzare l' algoritmo di ricerca A * per trovare il suo percorso.

Al fine di mantenere l'IA al sicuro, potresti voler ricontrollare il suo percorso ogni volta che viene piazzata una nuova bomba. Per evitare esplosioni, potrebbe controllare il tempo fino a quando la bomba esplode e considerare una potenziale tessera di esplosione sicura da percorrere se la bomba non esploderà mentre sta attraversando quella tessera - e se non è sicura, trattala come una tessera invalicabile .

Per dare i tuoi difetti di intelligenza artificiale (quindi a volte può essere fatto esplodere) dovrebbe commettere errori di calcolo: dimenticare distrattamente una bomba, sottovalutare la dimensione dell'esplosione o il tempo che la bomba esplode, ecc.

Nota a margine: puoi anche far sembrare la sua camminata casuale più intenzionale scegliendo casualmente punti in cui camminare, o avendo sempre in mente un nuovo punto di posizionamento della bomba in cui camminare, invece di scegliere casualmente una tessera adiacente a cui vagare. In questo modo non andrà avanti e indietro nello stesso punto come se non riuscisse a decidersi.


Ho dimenticato di fornire alcuni dettagli rilevanti sul gioco. È una versione semplificata di Bomberman: nessun potenziamento, i giocatori possono sempre piazzare bombe illimitate e le bombe hanno sempre il raggio massimo (da un'estremità all'altra della mappa). Anche il sistema di punti è diverso ... [continua]
Paul Manta

[cont.] Ottieni 1 punto per piazzare una bomba, ma 0 punti per distruggere un muro. Ottieni anche 30 punti per un'uccisione, 15 per un assist e -20 per un suicidio. [proseguendo]
Paul Manta,

[cont.] Con questo in mente, l'IA dovrebbe cercare di posizionare una bomba il più frequentemente possibile (perché posizionare le bombe produce bombe), ma non è necessario prestare particolare attenzione a dove viene collocata la bomba. Deve stare attento a trovare sempre un posto sicuro dove andare. [proseguendo]
Paul Manta,

[cont.] Pensi che quando si sceglie una direzione, è sufficiente per me per scegliere quello che porta ad una sicura zona . Invece di cercare una cella sicura, sarei alla ricerca della più grande area sicura, così posso nascondermi dalle bombe piazzate anche da altri giocatori, non solo dalla mia. Inoltre, sarebbe una buona idea favorire direzioni che mi avvicinino a uno degli altri giocatori?
Paul Manta,

3
Bene, allora non stiamo parlando di Bomberman e della sua IA! Stiamo solo parlando di un gioco con bombe che assomiglia in modo superficiale a Bomberman ma Under the Hood è completamente diverso e ti incoraggia ad essere un trigger Happy Lunatic , e ho molta meno esperienza nell'affrontare quel gioco.
doppelgreener,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.