什么 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:1
、M:A:1
和 L:BD:1
。
从T:C:1
,您排队S:C:2
、M:BC:2
和Z:BCD:2
。
当您从队列中拉出S:C:2
时,您会注意到节点 T 已经拥有距离为 1 的项目 C,因此您不要排队 T:C:3
。但是你会排队M:AC:3
和L:BCD:3
。
最终你会找到Z:ABCD:n
,其中n
是一段距离。
【讨论】:
BFS 比 A* 慢 方式。以上是关于什么 A* 变体包括附加限制的主要内容,如果未能解决你的问题,请参考以下文章