1

我熟悉用于在搜索空间中查找最佳路径的A* 算法,并且正在寻找它的变体,我怀疑它必须是相当标准的。

非正式地,A* 在转换之后遍历一组状态。搜索由启发式函数引导,该函数为每个状态估计到达目标的成本下限。

在操作上,可以用以下值/函数来描述它(请原谅我的 Scala 符号,我相信它比数学更具可读性):

val initial : State
val goal : State

def possibleTransitions(s : State) : Set[Transition]
def followTransition(s : State, t : Transition) : State
def estimateDistance(s1 : State, s2 : State) : Double

...一旦找到过渡到,搜索就会终止goal

我正在寻找一种稍微不同设置的算法:当将转换应用到状态时,我需要生成一组新状态,而不是生成一个新状态。直观地说,这对应于一组子目标,我需要满足这些子目标才能达到最终目标。这会更改签名,如下所示:

def followTransition(s : State, t : Transition) : Set[State]

当所有分支都解决时,搜索终止。

似乎解决此类问题的一种方法是将它们构建为 A* 问题,其中一个状态对应于我的一组状态,但我不禁相信必须有更好的方法来利用问题的结构。

4

1 回答 1

1

如果我正确理解您所追求的,您想要搜索 AND-OR 图。(要解决一个目标,您需要解决所有一组子目标或所有另一组子目标。)执行此操作的标准算法称为 AO*。任何关于人工智能的教科书都会对这个算法有很好的描述。这里有方法本身的简要概述。搜索和/或图形启发式搜索会发现许多其他资源。

于 2012-11-16T21:22:13.597 回答