我正在尝试为Bomberman实现AI算法。目前,我有一个可行但不是很聪明的基本实现(当前的AI在放置炸弹方面过于狂热)。
这是我尝试实现的第一个AI,我有点受困。我想到的更复杂的算法(我希望做出更好决策的算法)过于复杂,无法成为好的解决方案。
您对实施Bomberman AI有哪些一般提示?是否有根本不同的方法使机器人更具防御性或进攻性?
编辑: 当前算法
我当前的算法是这样的(伪代码):
1)尝试放置一颗炸弹,然后从所有炸弹中找到一个安全的牢房,包括刚刚放置的炸弹。要找到该单元,请在四个方向上进行迭代。如果您可以找到任何安全的发散单元并及时到达(例如,如果方向是向上或向下,则在此路径的左侧或右侧找到一个单元),那么放下炸弹并移动是安全的在那个方向上。
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
该算法使机器人非常满意(它会非常频繁地放置炸弹)。它不会杀死自己,但是它确实有一种习惯,就是通过陷入死胡同来使自己变得脆弱,死胡同可以被其他玩家阻挡并杀死。
您对我如何改进此算法有任何建议?还是我应该尝试完全不同的东西?
这种算法的问题之一是,它趋向于使机器人只有很少(通常只有一个)可以站立的安全单元。这是因为只要它不会杀死自己,该机器人就会留下一堆炸弹。
但是,留下一堆炸弹的痕迹使您几乎无法躲藏。如果其他玩家或机器人之一决定在您附近放置炸弹,则经常会发生您无处藏身而死亡的情况。
我需要一种更好的方法来决定何时放置炸弹。