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.
Respuestas:
El problema al que te enfrentas es que tu IA nunca se detiene para tomar una decisión inteligente sobre dónde debería colocar su próxima bomba, lo que lo deja simplemente lanzando bombas cada vez que puede y luego resuelve "¡mierda, mierda, qué hago ahora! ? "
Pausando para pensar
En este momento, tu IA solo vaga a ninguna parte en particular. A veces, sin embargo, en realidad debería moverse hacia un objetivo. Por ejemplo, si ve un powerup y cree que puede alcanzarlo antes que el jugador, tal vez debería encontrar un camino seguro a esa casilla y moverse allí, vigilando las bombas y evitándolas en el camino.
Se puede usar el mismo comportamiento de movimiento hacia el objetivo cuando piensa dónde colocar su próxima bomba .
Cuando su IA puede colocar una bomba, en lugar de hacerlo inmediatamente, debe usar brevemente un algoritmo de búsqueda para elegir entre los lugares de colocación de bombas disponibles en función de criterios como:
Cuando se ha tomado esta decisión, la IA ha elegido un lugar de colocación de bombas y un lugar para esconderse de su explosión. Ahora puede caminar hasta el lugar, colocar su bomba y luego caminar hacia su escondite. Una vez que llegue a su escondite, es posible que desee seguir caminando y encontrar ubicaciones de bombas (si tiene varias bombas), siempre que tenga en cuenta que se mantenga alejado de la bomba que caminó aquí para evitar.
Al caminar y encontrar un camino seguro
Puede desarrollar para su IA un único método de caminar a punto y usarlo cada vez que quiera que camine a algún lugar. Este método podría usar el algoritmo de búsqueda A * para encontrar su ruta.
Para mantener la IA segura, es posible que desee volver a comprobar su camino cada vez que se coloca una nueva bomba. Para evitar explosiones, puede verificar el tiempo hasta que la bomba explote, y considerar una baldosa de explosión potencial segura para caminar si la bomba no explota mientras atraviesa esa baldosa, y si no es segura, trátela como una baldosa intransitable .
Para dar fallas a su IA (para que pueda explotar a veces), debe cometer errores de cálculo: olvidarse de una bomba distraídamente, subestimar el tamaño de la explosión o el tiempo hasta que la bomba explote, etc.
Nota al margen: También puede hacer que su caminata aleatoria parezca más útil eligiendo lugares aleatorios para caminar, o siempre teniendo en mente un nuevo lugar de colocación de bombas para caminar, en lugar de elegir aleatoriamente una ficha adyacente para deambular. De esa manera no irá vagando de un lado a otro en el mismo lugar como si no pudiera decidirse.
fuente