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つだけ)ままにしておく傾向があることです。これは、ボットが自分自身を殺さない限り、ボットが背後に爆弾の跡を残すためです。
ただし、爆弾の跡を残しておくと、隠れる場所がほとんどなくなります。他のプレイヤーまたはボットのいずれかがあなたの近くのどこかに爆弾を配置することを決定した場合、多くの場合、あなたが非表示にする場所がなく、あなたが死ぬことが起こります。
爆弾をいつ投下するかを決めるより良い方法が必要です。