J'essaie d'implémenter un algorithme d'IA pour Bomberman. Actuellement, j'ai une implémentation rudimentaire fonctionnelle mais pas très intelligente (l'IA actuelle est trop zélée pour placer des bombes).
C'est la première IA que j'ai jamais essayé d'implémenter et je suis un peu coincé. Les algorithmes les plus sophistiqués que j'ai en tête (ceux que j'attends pour prendre de meilleures décisions) sont trop compliqués pour être de bonnes solutions.
Quels conseils généraux avez-vous pour mettre en œuvre une IA Bomberman? Existe-t-il des approches radicalement différentes pour rendre le bot plus défensif ou offensif?
Modifier: algorithme actuel
Mon algorithme actuel va quelque chose comme ça (pseudo-code):
1) Essayez de placer une bombe, puis trouvez une cellule à l'abri de toutes les bombes, y compris celle que vous venez de placer. Pour trouver cette cellule, parcourez les quatre directions; si vous pouvez trouver une cellule divergente sûre et l'atteindre à temps (par exemple, si la direction est vers le haut ou vers le bas, recherchez une cellule qui se trouve à gauche ou à droite de ce chemin), alors il est sûr de placer une bombe et de se déplacer dans cette direction.
2) Si vous ne pouvez pas trouver et sécuriser des cellules divergentes, essayez de NE PAS placer de bombe et regardez à nouveau. Cette fois, vous n'aurez qu'à rechercher une cellule sûre dans une seule direction (vous n'avez pas à en diverger).
3) Si vous ne trouvez toujours pas de cellule sûre, ne faites rien.
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
Cet algorithme rend le bot très réactif (il placera des bombes très fréquemment). Il ne se tue pas, mais il a l'habitude de se rendre vulnérable en allant dans des impasses où il peut être bloqué et tué par les autres joueurs.
Avez-vous des suggestions sur la façon dont je pourrais améliorer cet algorithme? Ou peut-être devrais-je essayer quelque chose de complètement différent?
L'un des problèmes de cet algorithme est qu'il a tendance à laisser le bot avec très peu (souvent une seule) cellules sûres sur lesquelles il peut se tenir. C'est parce que le bot laisse une traînée de bombes derrière lui, tant qu'il ne se tue pas.
Cependant, laisser une traînée de bombes laisse peu d'endroits où vous pouvez vous cacher. Si l'un des autres joueurs ou robots décide de placer une bombe quelque part près de chez vous, il arrive souvent que vous n'ayez pas d'endroit où vous cacher et vous mourez.
J'ai besoin d'un meilleur moyen de décider quand placer des bombes.