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.