我想问一个作业问题。我知道有些人不愿回答这类问题,但请相信我,我在这项任务上花费了很多时间,并且尽我所能尝试了一切。因此,如果可以,请提供帮助。
问题是一个网格格式的类 Rogue 类 AI 游戏,其中一个测试用例是如下图:
~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~
~~ g** d *~~
~~ ** * * ~~
~~ ** *** ~~
~~ ** d ~~
~~ ** < ~~
~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~
g=gold, d=dynamite, ~=water, *=wall, < 是我们的代理,面向左。
规则是代理不能进入水中或墙壁。它只能移动到空方格或广告方格来捡起炸药。然后它可以用炸药炸毁一堵墙。炸药一旦使用,就不能再次使用。最终目标是找到黄金并捡起它。代理只能上下或左右移动。没有对角线移动。
由于文本格式的原因,在对角线方向的墙壁之间可能会出现一些额外的空间,但没有任何空间。
到目前为止,我已经使用深度优先搜索来探索地图。(这个示例地图很小,有一些很大)。我还使用 A* 搜索来规划路径,以曼哈顿距离作为启发式方法。
这张地图的棘手之处在于,A*搜索找不到通往目标的路径,唯一的解决办法是先在agent附近捡起炸药,然后炸掉金子右边的第二堵墙,然后向右去捡第二个炸药,然后回去炸金右边最后一堵墙,然后得到金子。
我遇到了以下问题:
- A* 搜索仅在找到目标时才为我提供通往目标的路径。它没有给出“几乎就在那里”的路径。
- 我可以使用 A* 搜索黄金或炸药的路径,但不能同时搜索两者。看来,在这种情况下,我需要在一个例程中寻找先获得炸药然后获得黄金的最佳途径。这听起来太难了..请告诉我这是否是错误的方向。
如果有人有任何建议或好的建议,请不吝赐教。我已经两天没睡了...
谢谢阅读。
[编辑 30/05] 好吧,我设法用一个技巧来解决上面的地图。基本上从黄金向后搜索,并假设第一层相邻的墙壁是否干净,看看代理是否可以移动到那里,也可以从那里捡起任何炸药。如果两者兼而有之,那么它是一条直通路径。
但是,看着下面的地图,我无语了……有人能帮忙吗?
一个。
~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~
~g*** *** ~~
~*** d**~~
~** *d~~
~* ^ *~~
~** **~~
~d** **d~~
~ d** **d ~~
~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~
B.
~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~
~~ ~~
~~ ^ ~~
~~ *** ~~
~~ ***** ~~
~~ ***g*** ~~
~~ ******** ~~
~~ ***dd*** ~~
~~ *****d** ~~
~~ ***d*d** ~~
~~ ******d* ~~
~~ ******** ~~
~~ ******** ~~
~~ d*d**d* ~~
~~ **d** ~~
~~ *** ~~
~~ * ~~
~~ ~~
~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~
任何人都可以解释一下吗?,不胜感激...