Donner un placement intelligent de bombe Bomberman AI

13

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.

Paul Manta
la source
Il est difficile de penser à quelque chose qui fonctionne à 100% à l'improviste. Mais peut-être que si vous ajoutez l'algorithme que vous avez actuellement, nous pouvons tous aider à l'améliorer progressivement. Vous n'êtes également probablement pas le premier amateur à essayer de mettre en œuvre une IA Bomberman, et j'ai trouvé pas mal de compétitions Bomberman AI avec une recherche Google aléatoire qui pourraient s'avérer pour vous des sources d'information inestimables.
Roy T.
Je pense que vous pouvez généraliser l'IA de Bomberman en deux choses: 1) essayer de vous protéger contre les explosions des autres joueurs 2) placer des bombes sur le plateau de jeu pour essayer de faire mourir les autres (tout en gardant à l'esprit la règle 1): pour éviter de vous faire exploser / piégé par vos propres bombes).
tigrou
Il serait probablement préférable que vous publiiez au moins un aperçu de haut niveau de votre implémentation actuelle (en supposant que ce soit beaucoup de code) et que nous pourrions peut-être vous aider à résoudre votre problème avec le fait qu'ils soient trop zélés pour placer des bombes.
Tetrad
@Tetrad Je suis en train d'implémenter un nouvel algorithme. Je vais voir comment ça se passe et poster l'algorithme ici si nécessaire.
Paul Manta
bien que ce ne soit pas un vrai conseil, mais vous pouvez jeter un œil au code du clanbomber . c'est un jeu à bien des égards similaire à bomberman.
Ali1S232

Réponses:

4

Le problème auquel vous êtes confronté est que votre IA ne s'arrête jamais pour prendre une décision intelligente sur l'endroit où elle devrait placer sa prochaine bombe, ce qui la laisse simplement larguer des bombes quand elle le peut et ensuite travailler "merde, merde, que dois-je faire maintenant! ? "

Faire une pause pour réfléchir

En ce moment, votre IA ne va nulle part en particulier. Parfois, cependant, il devrait en fait se déplacer vers une cible. Par exemple, s'il voit un bonus et pense qu'il peut l'atteindre avant le joueur, il devrait peut-être trouver un chemin sûr vers cette tuile et s'y déplacer, en gardant un œil sur les bombes et en les évitant en cours de route.

Le même comportement de déplacement vers la cible peut être utilisé lorsqu'il pense à l'endroit où placer sa prochaine bombe .

Lorsque votre IA peut placer une bombe, au lieu de le faire immédiatement, elle doit brièvement utiliser un algorithme de recherche pour choisir parmi les emplacements de placement de bombes disponibles en fonction de critères tels que:

  • Est-ce à proximité? (pour qu'il ne marche pas dans le coin diagonal opposé de la carte chaque fois qu'il veut placer une bombe)
  • Y a-t-il un endroit où je peux me cacher de l'explosion - et puis-je y arriver avant que la bombe n'explose?
  • L'explosion fera-t-elle exploser des tuiles et me donnera-t-elle des bonus?
  • Va-t-il potentiellement attaquer le joueur? (une IA plus facile pourrait éviter cela en début de partie, une IA agressive poursuivra cela - sans oublier les bonus)

Lorsque cette décision a été prise, l'IA a choisi un emplacement de placement de bombe et un endroit où se cacher de son explosion. Il peut maintenant marcher jusqu'à l'endroit, placer sa bombe, puis marcher jusqu'à sa cachette. Une fois qu'il a atteint sa cachette, il pourrait vouloir continuer à marcher et à trouver des emplacements de bombes (s'il a plusieurs bombes), à condition de garder à l'esprit de se tenir à l'écart de la bombe qu'il a marché ici pour éviter.

En marchant et en trouvant un chemin sûr

Vous pouvez développer pour votre IA une seule méthode de marche au point et l'utiliser à chaque fois que vous voulez qu'elle marche quelque part. Cette méthode pourrait utiliser l' algorithme de recherche A * pour trouver son chemin.

Afin de garder l'IA en sécurité, vous voudrez peut-être lui faire revérifier son chemin à chaque fois qu'une nouvelle bombe est placée. Pour éviter les explosions, il pourrait vérifier le temps jusqu'à ce que la bombe explose et envisager une tuile d'explosion potentielle sûre pour marcher si la bombe n'explose pas pendant qu'elle marche à travers cette tuile - et si ce n'est pas sûr, la traiter comme une tuile infranchissable .

Pour donner des défauts à votre IA (afin qu'elle puisse en fait exploser parfois), il devrait faire des erreurs de calcul: oublier une bombe distraitement, sous-estimer la taille de l'explosion ou le temps jusqu'à ce que la bombe explose, etc.

Remarque: vous pouvez également rendre sa marche aléatoire plus utile en choisissant des endroits au hasard pour marcher, ou en ayant toujours en tête un nouvel emplacement de placement de bombe, au lieu de simplement choisir au hasard une tuile adjacente pour vous promener. De cette façon, il ne se promènera pas d'avant en arrière au même endroit que s'il ne peut pas se décider.

doppelgreener
la source
J'ai oublié de donner quelques détails pertinents sur le jeu. C'est une version simplifiée de Bomberman: pas de power-ups, les joueurs peuvent toujours placer des bombes illimitées, et les bombes ont toujours une portée maximale (d'un bout à l'autre de la carte). Le système de points est également différent ... [suite]
Paul Manta
[suite] Vous obtenez 1 point pour avoir placé une bombe, mais 0 point pour avoir détruit un mur. Vous obtenez également 30 points pour un kill, 15 pour une passe décisive et -20 pour un suicide. [suite]
Paul Manta
[suite] Dans cet esprit, l'IA devrait essayer de placer une bombe aussi souvent que possible (car placer des bombes donne des bombes), mais elle n'a pas besoin d'être particulièrement attentive à l'endroit où la bombe est placée. Il faut faire attention à toujours avoir un endroit sûr où aller. [suite]
Paul Manta
[suite] Pensez-vous que lors du choix d'une direction, il me suffit de choisir celle qui mène à une zone sûre . Au lieu de chercher une cellule sûre, je chercherais la plus grande zone de sécurité, donc je peux me cacher des bombes placées par d'autres joueurs, pas seulement la mienne. Serait-ce également une bonne idée de privilégier des directions qui me rapprochent de l'un des autres joueurs?
Paul Manta
3
Eh bien, nous ne parlons pas du tout de Bomberman et de son IA! Nous sommes à peu près un jeu avec des bombes qui ressemble superficiellement à Bomberman mais sous le capot est complètement différent et vous encourage à être un déclencheur Happy Lunatic , et j'ai beaucoup moins d'expérience avec ce jeu.
doppelgreener