Estou tentando implementar um algoritmo de IA para o Bomberman. Atualmente, tenho uma implementação rudimentar funcional, mas não muito inteligente (a IA atual é excessivamente zelosa ao colocar bombas).
Esta é a primeira IA que eu já tentei implementar e estou um pouco preso. Os algoritmos mais sofisticados que tenho em mente (aqueles que espero tomar melhores decisões) são complicados demais para serem boas soluções.
Quais dicas gerais você tem para implementar uma IA do Bomberman? Existem abordagens radicalmente diferentes para tornar o bot mais defensivo ou ofensivo?
Edit: algoritmo atual
Meu algoritmo atual é mais ou menos assim (pseudo-código):
1) Tente colocar uma bomba e, em seguida, encontre uma célula segura de todas as bombas, incluindo a que você acabou de colocar. Para encontrar essa célula, percorra as quatro direções; se você encontrar uma célula divergente segura e alcançá-la a tempo (por exemplo, se a direção for para cima ou para baixo, procure uma célula que se encontre à esquerda ou à direita desse caminho), é seguro colocar uma bomba e mover-se nessa direção.
2) Se você não encontrar células divergentes seguras, tente NÃO colocar uma bomba e olhe novamente. Desta vez, você só precisará procurar uma célula segura em apenas uma direção (não precisa divergir dela).
3) Se você ainda não conseguir encontrar uma célula segura, não faça 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
Esse algoritmo deixa o bot muito feliz em disparar (ele colocará bombas com muita frequência). Ele não se mata, mas tem o hábito de se tornar vulnerável entrando em becos sem saída, onde pode ser bloqueado e morto pelos outros jogadores.
Você tem alguma sugestão de como eu posso melhorar esse algoritmo? Ou talvez eu devesse tentar algo completamente diferente?
Um dos problemas desse algoritmo é que ele tende a deixar o bot com muito poucas (geralmente apenas uma) células seguras nas quais ele pode estar. Isso ocorre porque o bot deixa um rastro de bombas para trás, desde que não se mate.
No entanto, deixar um rastro de bombas para trás deixa poucos lugares onde você pode se esconder. Se um dos outros jogadores ou bots decidir colocar uma bomba em algum lugar perto de você, muitas vezes acontece que você não tem onde se esconder e você morre.
Preciso de uma maneira melhor de decidir quando colocar bombas.