什么 A* 变体包括附加限制

Posted

技术标签:

【中文标题】什么 A* 变体包括附加限制【英文标题】:What A* variant include additional restriction 【发布时间】:2016-12-23 09:24:17 【问题描述】:

通常情况下,您希望以最小的成本从 A 到 B,但成本旁边的每个链接都有一些您可以购买/收集的物品。

不是真正的口袋妖怪玩家,但使用主题来更好地解释它,你想从你家到健身房,沿着最短的路线在路上拿起至少一件物品。

我可以用 A* 求解最短路径。如何包含附加限制,或者我应该使用不同的算法?

我在考虑使用起始成本,所以当你找到物品时,你会降低成本,而当你旅行时,你会增加成本。并尝试接近 0。

我正在考虑的其他选项是尝试找到覆盖所有项目的路径。然后将 A* 与该子集一起使用。但不确定什么算法可以解决这个问题。

【问题讨论】:

@MooingDuck 可以提供一些例子吗?链接或文档都可以。 我的想法很愚蠢,假设您通常会在几次尝试中找到它们,并且我认为 A* 启发式需要低估,因此添加是无效的。忽略我说的。 @MooingDuck 是的,除非你能找到一个实际正确优先级的可接受的启发式算法,否则 A* 甚至不适用于该问题。事实上,如果启发式选择不当,A* 会变成一个非常慢的 BFS。慢是因为它使用优先级队列而不是简单队列,慢是因为它浪费时间计算启发式算法。 【参考方案1】:

我会使用BFS。通常,您将节点标记为已访问,以便每个节点仅访问一次。但是对于这个问题,您需要跟踪找到的项目和行进的距离。因此,每个节点可能会被多次访问,使用不同的项目集。

使用您的示例让我们为项目分配标签

A for 200 poke balls
B for lure module
C for incense
D for egg

到节点

S for the start node
T for the top node
M for the middle node
L for the lowest node
Z for the end node

假设所有路径的成本相等,成本为 1。

问题从S::0 开始,表示节点 S 没有项目且距离为 0。然后您排队 T:C:1M:A:1L:BD:1

T:C:1,您排队S:C:2M:BC:2Z:BCD:2

当您从队列中拉出S:C:2 时,您会注意到节点 T 已经拥有距离为 1 的项目 C,因此您不要排队 T:C:3。但是你会排队M:AC:3L:BCD:3

最终你会找到Z:ABCD:n,其中n 是一段距离。

【讨论】:

BFS 比 A* 慢 方式

以上是关于什么 A* 变体包括附加限制的主要内容,如果未能解决你的问题,请参考以下文章

使用模块模式的变体附加javascript事件的问题

软件工程附加题

个人附加作业

附加作业

个人附加作业

附加作业