给Bomberman AI智能炸弹放置


13

我正在尝试为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

该算法使机器人非常满意(它会非常频繁地放置炸弹)。它不会杀死自己,但是它确实有一种习惯,就是通过陷入死胡同来使自己变得脆弱,死胡同可以被其他玩家阻挡并杀死。

您对我如何改进此算法有任何建议?还是我应该尝试完全不同的东西?

这种算法的问题之一是,它趋向于使机器人只有很少(通常只有一个)可以站立的安全单元。这是因为只要它不会杀死自己,该机器人就会留下一堆炸弹。

但是,留下一堆炸弹的痕迹使您几乎无法躲藏。如果其他玩家或机器人之一决定在您附近放置炸弹,则经常会发生您无处藏身而死亡的情况。

我需要一种更好的方法来决定何时放置炸弹。


很难想到100%出乎意料的事情。但是,也许如果您添加当前拥有的算法,我们都可以帮助逐步改进它。您可能也不是第一个尝试实施Bomberman AI的业余爱好者,并且我发现了很多Bomberman AI竞赛,它们都通过随机Google搜索来为您证明宝贵的信息来源。
罗伊·T。

我认为您可以从两方面概括轰炸机AI:1)尝试保护自己免遭其他玩家炸弹的炸弹2)在游戏板上放置炸弹以试图使其他人死亡(同时牢记规则1):避免被炸毁/被自己的炸弹困住)。
tigrou 2012年

如果您至少发布了当前实现的高级概述(假设有很多代码)可能会更好,并且我们可能会帮助您解决问题,因为他们过分热衷于放置炸弹。
Tetrad 2012年

@Tetrad我正在实施一种新算法。我将看看这种情况如何,并在必要时在此处发布算法。
保罗·曼塔

尽管这不是一个真正的技巧,但是您可以看一下clanbomber代码。这是一款与轰炸机相似的游戏。
Ali1S232'3

Answers:


4

您面临的问题是,您的AI永远不会停止做出明智的决定,决定应该放置下一颗炸弹的位置,这使它仅在可能的时候就投下炸弹,然后做出“该死,该死,我现在该怎么办! ?

暂停思考

现在,您的AI尤其游刃有余。但是,有时它实际上应该移至目标。例如,如果它看到加电并认为可以在玩家之前到达,则也许应该找到一条通往该瓷砖的安全路径并将其移动到那里,留意炸弹并避免炸弹。

考虑下一颗炸弹的放置位置时,可以使用相同的“移至目标”行为。

当您的AI可以放置炸弹时,而不是立即放置炸弹,它应该根据以下标准,短暂地使用搜索算法从可用的炸弹放置位置中进行选择:

  • 在附近吗?(这样,它每次想放置炸弹时都不会走到地图的对角线)
  • 我可以在爆炸中躲藏吗?在炸弹爆炸前我可以到达那里吗?
  • 爆炸会炸毁瓷砖并给我力量吗?
  • 它会潜在地攻击玩家吗?(更简单的AI可能会在游戏初期避免这种情况,而积极的AI会追求这一点-同时不要忘记加电)

做出此决定后,AI选择了一个炸弹放置点以及一个躲藏爆炸的地方。现在,它可以走到现场,放置炸弹,然后走到藏身之处。一旦它到达藏身之处,它可能会想继续走走并找到炸弹的位置(如果它有多枚炸弹的话),前提是要牢记避免将炸弹移到这里躲避。

走路时,找到安全的道路

您可以为AI开发一种单一的点到点方法,并在每次希望它到某个地方走时使用此方法。该方法可以使用A *搜索算法找到其路径。

为了确保AI的安全,您可能希望每次放置新炸弹时都要重新检查其路径。为了避免爆炸,它可以检查直到炸弹爆炸的时间,并考虑如果炸弹在穿过该砖块时不会爆炸,则可以安全地穿过一个可能的爆炸砖-如果它不安全,则将其视为不可逾越的砖块。

为了给您的AI故障(有时它实际上有时会被炸毁),它应该造成计算错误:忘记遗忘的炸弹,低估爆炸的大小或炸弹爆炸的时间等。

旁注:您还可以通过随机选择要行走的地点,或者始终牢记要步行到新的炸弹放置地点,而不是只是随机地选择相邻的砖块漫步,来使其随机行走似乎更有目的。这样一来,它就不会在无法确定的情况下在同一地点来回徘徊。


我忘了提供有关游戏的一些相关细节。这是Bomberman的简化版本:无需通电,玩家始终可以放置无限数量的炸弹,并且炸弹始终具有最大射程(从地图的一端到另一端)。积分系统也有所不同... [续]
Paul Manta 2012年

[续]放置炸弹可获得1分,但破坏墙壁可获得0分。您还可以获得30分的杀戮,15分的助攻和-20分的自杀率。[续]
保罗·曼塔

[续]考虑到这一点,认可机构应尝试尽可能频繁地放置炸弹(因为放置炸弹会炸弹),但不必特别注意炸弹的放置位置。始终要有一个安全的地方必须要小心。[续]
保罗·曼塔2012年

[续]您是否认为在选择一个方向时,我选择一个通往安全区域的方向就足够了。我将寻找最大的安全区域,而不是寻找安全的牢房,这样我就可以躲藏在其他玩家放置的炸弹中,而不仅仅是我自己的。另外,支持那些使我更接近其他参与者之一的方向是一个好主意吗?
保罗·曼塔

3
那么,我们根本就不在谈论Bomberman及其AI!我们只是一些炸弹游戏,从表面上看类似于炸弹人,但在幕后却完全不同,鼓励您成为触发快乐的疯子,而我处理该游戏的经验则少得多。
doppelgreener 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.