Estoy tratando de implementar un algoritmo de IA para Bomberman. Actualmente tengo una implementación rudimentaria funcional pero no muy inteligente (la IA actual es demasiado entusiasta al colocar bombas).
Esta es la primera IA que he intentado implementar y estoy un poco atascado. Los algoritmos más sofisticados que tengo en mente (los que espero tomar mejores decisiones) son demasiado complicados para ser buenas soluciones.
¿Qué consejos generales tienes para implementar una IA de Bomberman? ¿Existen enfoques radicalmente diferentes para hacer que el bot sea más defensivo u ofensivo?
Editar: algoritmo actual
Mi algoritmo actual es más o menos así (pseudocódigo):
1) Intenta colocar una bomba y luego encuentra una celda que esté a salvo de todas las bombas, incluida la que acabas de colocar. Para encontrar esa celda, itera sobre las cuatro direcciones; si puede encontrar una celda divergente segura y llegar a tiempo (por ejemplo, si la dirección es hacia arriba o hacia abajo, busque una celda que se encuentre a la izquierda o derecha de este camino), entonces es seguro colocar una bomba y moverse en esa direccion.
2) Si no puede encontrar y proteger las celdas divergentes, intente NO colocar una bomba y vuelva a mirar. Esta vez solo tendrá que buscar una celda segura en una sola dirección (no tiene que desviarse de ella).
3) Si aún no puede encontrar una celda segura, no haga nada.
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
Este algoritmo hace que el bot sea muy disparador (colocará bombas con mucha frecuencia). No se suicida, pero tiene la costumbre de hacerse vulnerable al entrar en callejones sin salida donde los demás jugadores pueden bloquearlo y matarlo.
¿Tiene alguna sugerencia sobre cómo podría mejorar este algoritmo? ¿O tal vez debería probar algo completamente diferente?
Uno de los problemas con este algoritmo es que tiende a dejar al bot con muy pocas (con frecuencia solo una) celdas seguras en las que pueda sostenerse. Esto se debe a que el bot deja un rastro de bombas detrás de él, siempre y cuando no se mate.
Sin embargo, dejar un rastro de bombas deja pocos lugares donde puedes esconderte. Si uno de los otros jugadores o bots decide colocar una bomba en algún lugar cerca de usted, a menudo sucede que no tiene dónde esconderse y muere.
Necesito una mejor manera de decidir cuándo colocar bombas.