Dando una bomba inteligente AI Bomberman colocación

13

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.

Paul Manta
fuente
Es difícil pensar en algo que funcione 100% de la nada. Pero tal vez si agrega el algoritmo que tiene actualmente, todos podemos ayudarlo a mejorarlo gradualmente. Probablemente tampoco sea el primer aficionado que intente implementar una IA de Bomberman, y he encontrado bastantes competiciones de IA de Bomberman con una búsqueda aleatoria en Google que podrían ser fuentes de información invaluables para usted.
Roy T.
Creo que puedes generalizar la IA de bomberman en dos cosas: 1) tratando de protegerte de ser bombardeado por las bombas de otros jugadores 2) colocando bombas en el tablero de juego para tratar de hacer que otros mueran (teniendo en cuenta la regla 1): para evitar ser bombardeado / atrapado por tus propias bombas).
tigrou
Probablemente sería mejor si publicara al menos una descripción general de alto nivel de su implementación actual (suponiendo que sea un montón de código) y tal vez podríamos ayudarlo a resolver su problema de que sean demasiado entusiastas al colocar bombas.
Tetrad
@Tetrad Estoy en el proceso de implementar un nuevo algoritmo. Veré cómo funciona y publicaré el algoritmo aquí si es necesario.
Paul Manta
aunque no es un consejo real, pero puedes echar un vistazo al código de clanbomber . Es un juego en muchos sentidos similar a Bomberman.
Ali1S232

Respuestas:

4

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:

  • ¿Está cerca? (para que no camine a la esquina diagonal opuesta del mapa cada vez que quiera colocar una bomba)
  • ¿Hay algún lugar donde pueda esconderme de la explosión y puedo llegar allí antes de que explote la bomba?
  • ¿La explosión explotará los azulejos y me dará poderes especiales?
  • ¿Atacará potencialmente al jugador? (Una IA más fácil podría evitar esto al principio del juego, una IA agresiva buscará esto, sin olvidar los potenciadores)

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.

doppelgreener
fuente
Olvidé dar algunos detalles relevantes sobre el juego. Es una versión simplificada de Bomberman: sin potenciadores, los jugadores siempre pueden colocar bombas ilimitadas, y las bombas siempre tienen un alcance máximo (de un extremo del mapa al otro). El sistema de puntos también es diferente ... [continúa]
Paul Manta
[cont.] Obtienes 1 punto por colocar una bomba, pero 0 puntos por destruir una pared. También obtienes 30 puntos por matar, 15 por asistencia y -20 por suicidio. [continúa]
Paul Manta
[cont.] Con eso en mente, la IA debería tratar de colocar una bomba con la mayor frecuencia posible (porque colocar bombas da bombas), pero no necesita ser particularmente cuidadoso sobre dónde se coloca la bomba. Tiene que tener cuidado de tener siempre un lugar seguro para ir. [continúa]
Paul Manta
[cont.] ¿Cree que al elegir una dirección, es suficiente para mí elegir la que conduce a un área segura ? En lugar de buscar una celda segura, estaría buscando el área segura más grande, para poder esconderme de las bombas colocadas por otros jugadores también, no solo la mía. Además, ¿sería una buena idea favorecer las direcciones que me acercan a uno de los otros jugadores?
Paul Manta
3
¡Bueno, entonces no estamos hablando de Bomberman y su IA en absoluto! Se trata de un juego con bombas que se parece superficialmente a Bomberman, pero Under the Hood es completamente diferente y te anima a ser un gatillo Happy Lunatic , y tengo mucha menos experiencia en ese juego.
doppelgreener