我已经了解了A *,BFS,DFS,并且可以很好地实现它们。但是,当我尝试解决pacman路径查找问题时会出现一些问题。让我们假设只有两种类型的迷宫:一种是完整的物品,因为没有空白的方块,一切都是pacman或物品收集或墙;一个只有少数项目(4个或更少)。
如果要收集多个项目,BFS和DFS究竟是如何实现的?在这种情况下,它们仍能产生最佳效果吗?
完整项目地图的最佳算法/启发式是什么?到目前为止,我想出的是贪婪的启发式,但由于地图上有太多的东西要收集,所以它很随意,因此,解决这样的迷宫不是一个好主意。
在少数项目地图中使用A *,是否有任何好方法可以确定应该首先采取哪个项目?我想过尝试使用Mahattan距离作为粗略估计,但这听起来并不正确,尤其是在一些棘手的情况下。
答案 0 :(得分:0)
如果添加更多食物,算法不会改变。唯一改变的是国家空间。你必须想出一种代表你的问题的新方法。当你只吃一份食物时,你只需要pacman的x,y位置。例如,当您有3个点吃时,您必须将这些信息添加到模型中。您可以添加3个布尔变量来指示pacman已通过该点。现在,状态空间是由以下类型的节点组成的图形:
((x,y),FALSE,FALSE,FALSE) -> state that indicates that pacman has not eat any food
((x,y),FALSE,TRUE,FALSE) -> state that indicates that pacman has eat only one food
((x,y),TRUE,TRUE,TRUE) -> this is the goal state
要解决此问题,您只需在新模型中运行相同的算法。 BFS和A *将始终为您提供最佳解决方案。问题是:你放的食物越多,找到解决方案的速度就越慢。所以这些算法不会在合理的时间内给出答案。你已经想到了这样做的新方法。
答案 1 :(得分:0)
1)在这种情况下使用BFS或DFS时遇到的问题是这最终会导致效率低下,特别是在完整的地图示例中。要使任一算法与多个目标一起使用,您可以构建搜索,以便在找到第一个路径后不会结束,但是这仍然不能为地图上的每一块食物提供“最佳”路径,或者你可以做一个从pacman到最近的食物的路径,那些食物到下一个最近的地方等,找到那些路径,然后比较那些以找到真正的最佳路径,但我不想考虑这会有多长取。
2)我可能会坚持使用贪婪的A *,只看最近的食物(在大多数情况下我看不到曼哈顿距离的问题,因为pacman的地图已经是一个网格;它会是对于挡住Pacman无法进入最近的边缘情况的次优,但这是一个难以解决的问题。曼哈顿将是一个体面的,可能通过食物密度而不仅仅是距离来修改,例如: (曼哈顿距离)/(3x3平方食物内的食物总量)
3)如果没有在每个项目上使用寻路,那么选择最短的,我认为曼哈顿在少数项目场景中会做得很好。它并不总是选择最好的,但100%最佳的AI通常不是游戏的最佳目标。
在这种情况下,我想尝试贪婪的A *,重量有利于物品群,作为一种简单,快速的解决方案。
更复杂的解决方案应该更接近Pacman遵循的最佳路径将使用算法来查找Minimum Spanning Tree http://en.wikipedia.org/wiki/Minimum_spanning_tree但我不知道实施起来有多容易。这是一个讨论两个最小生成树算法的优点的问题:Kruskal vs Prim