Ich versuche, einen AI-Algorithmus für Bomberman zu implementieren. Derzeit habe ich eine funktionierende, aber nicht sehr clevere rudimentäre Implementierung (die derzeitige KI ist beim Platzieren von Bomben übereifrig).
Dies ist die erste KI, die ich jemals versucht habe, umzusetzen, und ich stecke ein bisschen fest. Die ausgefeilteren Algorithmen, die ich im Auge habe (die ich für bessere Entscheidungen erwarte), sind zu kompliziert, um gute Lösungen zu sein.
Welche allgemeinen Tipps haben Sie für die Implementierung einer Bomberman-KI? Gibt es radikal unterschiedliche Ansätze, um den Bot entweder defensiver oder offensiver zu machen?
Bearbeiten: Aktueller Algorithmus
Mein aktueller Algorithmus sieht ungefähr so aus (Pseudocode):
1) Versuche eine Bombe zu platzieren und finde dann eine Zelle, die vor allen Bomben sicher ist, einschließlich der, die du gerade platziert hast. Um diese Zelle zu finden, durchlaufen Sie die vier Richtungen. Wenn Sie eine sichere divergierende Zelle finden und rechtzeitig erreichen können (z. B. wenn die Richtung nach oben oder unten zeigt, suchen Sie nach einer Zelle, die sich links oder rechts von diesem Pfad befindet), können Sie sicher eine Bombe platzieren und sich bewegen in diese Richtung.
2) Wenn Sie divergierende Zellen nicht finden und retten können, versuchen Sie, KEINE Bombe zu platzieren und suchen Sie erneut. Dieses Mal müssen Sie nur in einer Richtung nach einer sicheren Zelle suchen (Sie müssen nicht davon abweichen).
3) Wenn Sie immer noch keine sichere Zelle finden, tun Sie nichts.
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
Dieser Algorithmus macht den Bot sehr triggerglücklich (er wird sehr häufig Bomben platzieren). Es tötet sich nicht selbst, aber es hat die Angewohnheit, sich verwundbar zu machen, indem es in Sackgassen gerät, in denen es von den anderen Spielern geblockt und getötet werden kann.
Haben Sie Vorschläge, wie ich diesen Algorithmus verbessern könnte? Oder sollte ich mal was ganz anderes probieren?
Eines der Probleme mit diesem Algorithmus besteht darin, dass es dazu neigt, dem Bot sehr wenige (häufig nur eine) sichere Zellen zu hinterlassen, auf denen er stehen kann. Dies liegt daran, dass der Bot eine Spur von Bomben hinterlässt, solange er sich nicht selbst tötet.
Wenn Sie jedoch eine Spur von Bomben zurücklassen, bleiben nur wenige Orte übrig, an denen Sie sich verstecken können. Wenn einer der anderen Spieler oder Bots beschließt, irgendwo in Ihrer Nähe eine Bombe zu platzieren, kann es vorkommen, dass Sie keinen Platz zum Verstecken haben und sterben.
Ich brauche eine bessere Möglichkeit, um zu entscheiden, wann ich Bomben platzieren soll.
Antworten:
Das Problem, mit dem Sie konfrontiert sind, ist, dass Ihre KI nie aufhört, eine intelligente Entscheidung darüber zu treffen, wo sie ihre nächste Bombe platzieren soll. Dadurch wirft sie nur Bomben ab, wann immer es geht, und arbeitet dann "Scheiße, Scheiße, was mache ich jetzt! ? "
Pause zum Nachdenken
Im Moment wandert Ihre KI nur ins Nirgendwo. Manchmal sollte es sich jedoch tatsächlich um ein Ziel handeln. Wenn es zum Beispiel ein Powerup sieht und denkt, dass es es erreichen kann, bevor der Spieler es erreicht, sollte es vielleicht einen sicheren Weg zu diesem Plättchen finden und sich dorthin bewegen, nach Bomben Ausschau halten und sie auf dem Weg meiden.
Das gleiche Verhalten beim Bewegen zum Ziel kann angewendet werden, wenn überlegt wird, wo die nächste Bombe platziert werden soll .
Wenn Ihre KI eine Bombe platzieren kann, anstatt dies sofort zu tun, sollte sie kurz einen Suchalgorithmus verwenden , um aus den verfügbaren Bombenplatzierungspunkten zu wählen, basierend auf Kriterien wie:
Nachdem diese Entscheidung getroffen wurde, hat die KI einen Ort für die Bombenplatzierung und einen Ort ausgewählt, an dem sie sich vor ihrer Explosion verstecken kann. Es kann jetzt zur Stelle gehen, seine Bombe platzieren und dann zu seinem Versteck gehen. Sobald es sein Versteck erreicht hat, möchte es möglicherweise weitergehen und Bombenstandorte finden (wenn es mehrere Bomben hat), vorausgesetzt, es wird daran gedacht, sich aus dem Weg der Bombe zu halten, die es hier gegangen ist, um zu vermeiden.
Zu Fuß und auf der Suche nach einem sicheren Weg
Sie können für Ihre KI eine einzelne Punkt-zu-Punkt-Methode entwickeln und diese jedes Mal anwenden, wenn Sie möchten, dass sie irgendwohin läuft. Diese Methode könnte den Suchalgorithmus A * verwenden , um den Pfad zu finden.
Um die KI zu schützen, möchten Sie sie möglicherweise veranlassen, ihren Pfad jedes Mal zu überprüfen, wenn eine neue Bombe platziert wird. Um Explosionen zu vermeiden, könnte die Zeit bis zum Explodieren der Bombe überprüft werden und ein potenzielles Explosionsplättchen in Betracht gezogen werden, über das man sicher gehen kann, wenn die Bombe nicht explodiert, während sie durch das Plättchen läuft - und wenn es nicht sicher ist, behandeln Sie es als unpassierbares Plättchen .
Um Ihre KI-Fehler zu vermeiden (so dass sie manchmal tatsächlich in die Luft gejagt werden können), sollten Berechnungsfehler auftreten: Unachtsames Vergessen einer Bombe, Unterschätzung der Explosionsgröße oder der Zeit bis zur Explosion der Bombe usw.
Randnotiz: Sie können das zufällige Gehen auch zielgerichteter erscheinen lassen, indem Sie nach dem Zufallsprinzip Punkte auswählen, zu denen Sie gehen möchten, oder immer einen neuen Bombenplatz im Auge behalten, anstatt nur nach dem Zufallsprinzip ein benachbartes Plättchen auszuwählen, zu dem Sie wandern möchten. Auf diese Weise wandert es nicht an derselben Stelle hin und her, als könne es sich nicht entscheiden.
quelle