Bomberman AIにインテリジェントな爆弾配置を与える


13

BombermanのAIアルゴリズムを実装しようとしています。現在、私は実用的ですが、あまりスマートではない初歩的な実装をしています(現在のAIは爆弾を配置することに熱心です)。

これは、私が実装を試みた最初のAIであり、少し立ち往生しています。私が念頭に置いているより洗練されたアルゴリズム(より良い決定を下すことを期待しているアルゴリズム)は複雑すぎて、良いソリューションにはなりません。

Bomberman AIを実装するための一般的なヒントは何ですか?ボットをより防御的または攻撃的にするための根本的に異なるアプローチはありますか?


編集: 現在のアルゴリズム

私の現在のアルゴリズムは次のようなものです(擬似コード):

1)爆弾を配置してから、配置したばかりの爆弾を含むすべての爆弾から安全なセルを見つけます。そのセルを見つけるには、4つの方向で繰り返します。安全な分岐セルを見つけて時間内に到達できる場合(例:方向が上または下の場合、このパスの左または右にあるセルを探します)、爆弾を置いて移動しても安全ですその方向に。

2)発散した細胞を見つけられない場合は、爆弾を置かずにもう一度見てください。今回は、安全なセルを一方向にのみ探す必要があります(そこから分岐する必要はありません)。

3)それでも安全なセルが見つからない場合は、何もしないでください。

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

このアルゴリズムは、ボットを非常にトリガーしやすくします(非常に頻繁に爆弾を配置します)。自分自身を殺すわけではありませんが、他のプレイヤーがブロックして殺すことができる行き止まりになることで、自分自身を脆弱にする習慣があります。

このアルゴリズムを改善する方法について何か提案はありますか?それとも完全に異なるものを試す必要がありますか?

このアルゴリズムの問題の1つは、ボットが安全なセルを非常に少ない(多くの場合1つだけ)ままにしておく傾向があることです。これは、ボットが自分自身を殺さない限り、ボットが背後に爆弾の跡を残すためです。

ただし、爆弾の跡を残しておくと、隠れる場所がほとんどなくなります。他のプレイヤーまたはボットのいずれかがあなたの近くのどこかに爆弾を配置することを決定した場合、多くの場合、あなたが非表示にする場所がなく、あなたが死ぬことが起こります。

爆弾をいつ投下するかを決めるより良い方法が必要です。


100%完全に機能するものを考えるのは難しいです。しかし、もし現在持っているアルゴリズムを追加すれば、私たち全員が徐々にそれを改善するのを助けることができるでしょう。あなたはおそらくボンバーマンAIを実装しようとする最初の愛好家ではないでしょうし、あなたにとって貴重な情報源を証明できるランダムなGoogle検索でボンバーマンAIコンテストをかなり見つけました。
ロイT.

ボンバーマンAIを2つに一般化できると思います:1)他のプレイヤーの爆弾による爆破から身を守る2)ゲームボードに爆弾を置いて他のプレイヤーを死なせる(ルール1を念頭に置いて):爆破を避ける/あなた自身の爆弾によって捕獲された)。
ティグロー

現在の実装の少なくとも高レベルの概要(多くのコードであると仮定)を投稿した方が良いでしょう。おそらく、爆弾を配置することに熱心であるという問題を解決するのに役立つかもしれません。
テトラッド

@Tetrad私は新しいアルゴリズムを実装しているところです。必要に応じて、その方法を確認し、アルゴリズムをここに投稿します。
ポールマンタ

それは本当のヒントではありませんが、クランボマーコードを見ることができます。それはボンバーマンに似た多くの点でゲームです。
Ali1S232

回答:


4

あなたが直面している問題は、あなたのAIが次の爆弾をどこに置くべきかについてインテリジェントな決定を下すことを決して止めないということです。それは可能な限り爆弾を落とすだけです。 ?」

考えるのを一時停止する

現在、あなたのAIは特にどこにも迷い込んでいないだけです。ただし、実際はターゲットに移動する必要がある場合があります。たとえば、パワーアップが表示され、プレーヤーの前に到達できると考えられる場合、おそらく、そのタイルへの安全なパスを見つけてそこに移動し、爆弾に目を光らせ、途中で回避する必要があります。

次の爆弾をどこに置くかを考えるとき、同じターゲットへの移動動作を使用できます。

AIがすぐに爆弾を配置できる場合、すぐに行うのではなく、検索アルゴリズムを使用して、次のような基準に基づいて使用可能な爆弾配置スポットから選択する必要があります。

  • 近くですか?(そのため、爆弾を配置するたびにマップの対角線の対角まで歩いて行かないように)
  • 爆発から隠すことができる場所はありますか?また、爆弾が爆発する前にそこに到達できますか?
  • 爆発はタイルを爆破し、パワーアップを与えますか?
  • プレーヤーを潜在的に攻撃しますか?(簡単なAIは初期のゲームでこれを回避するかもしれませんが、攻撃的なAIはこれを追求します-パワーアップを忘れないでください)

この決定が下されると、AIは爆弾の配置場所とその爆発から隠す場所を選択しました。スポットまで歩いて爆弾を置き、隠れ場所まで歩くことができます。隠れ場所に到達すると、ここで歩いた爆弾の邪魔にならないように心に留めておくと、歩き続けて爆弾の場所を見つけることができます(複数の爆弾がある場合)。

歩いて、安全な道を見つける

AIに対して単一のウォークツーポイントメソッドを開発し、どこかを歩くたびにこれを使用できます。この方法では、A *検索アルゴリズム使用してそのパスを見つけることができます。

AIを安全に保つために、新しい爆弾が置かれるたびにパスを再確認することをお勧めします。爆発を避けるために、爆弾が爆発するまでの時間を確認し、爆弾がタイルを歩いているときに爆弾が爆発しない場合は安全に通り抜けられる可能性のある爆発タイルを検討することができます。 。

AIにフォールトを与えるため(実際には時々爆破される可能性があります)、計算エラーを発生させる必要があります。

サイドノート:隣接するタイルをランダムに選んで歩き回るのではなく、ランダムに歩くスポットをランダムに選ぶか、常に新しい爆弾配置スポットを念頭に置いて、ランダムウォークをより目的のあるものにすることができます。そうすれば、あたかも決心できないかのように、同じ場所を行き来することはありません。


ゲームに関するいくつかの関連する詳細を提供するのを忘れました。これはボンバーマンの簡易バージョンです。パワーアップなし、プレイヤーはいつでも無制限の爆弾を配置でき、爆弾の射程は常に最大です(マップの一方の端から他方の端まで)。ポイントシステムも異なります... [続き]
ポールマンタ

[続き]爆弾を置くと1ポイント、壁を破壊すると0ポイントが得られます。また、キルで30ポイント、アシストで15ポイント、自殺で-20ポイントを獲得します。[続き]
ポールマンタ

[続き]これを念頭に置いて、AIはできるだけ頻繁に爆弾を配置しようとします(爆弾を配置すると爆弾が発生するため)が、爆弾の配置場所について特に注意する必要はありません。常に安全な場所を確保することに注意する必要があります。[続き]
ポールマンタ

[続き]方向を選択するとき、安全なエリアにつながる方向を選択するだけで十分だと思いますか。安全なセルを探す代わりに、私は最大の安全なエリアを探しているので、自分だけでなく他のプレイヤーによって置かれた爆弾からも隠すことができます。また、他のプレイヤーの1人に近づく方向を優先するのは良い考えでしょうか?
ポールマンタ

3
それでは、ボンバーマンとそのAI についてはまったく話していない!私たちは、ボンバーマンに表面的に似ている爆弾を使ったゲームですが、ボンネットの下は完全に異なっており、トリガーハッピールナティックになることを奨励しています。私はそのゲームを扱う経験がはるかに少ないです。
-doppelgreener
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.