使用子目标搜索

时间:2012-11-16 19:08:08

标签: algorithm search

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

非正式地,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,搜索就会终止。

我正在寻找一种稍微不同设置的算法:当应用转换到状态时,我需要生成 set 一个新状态>新州。直觉上,这对应于我需要满足以实现最终目标的一组子目标。这会更改签名,如下所示:

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

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

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

1 个答案:

答案 0 :(得分:1)

如果我正确理解您所追求的内容,则需要搜索AND-OR图。 (要解决目标,您需要解决所有一组子目标或所有另一组子目标。)执行此操作的标准算法称为AO *。任何有关人工智能的教科书都会很好地描述这种算法。该方法本身有一个简要的概述here。搜索和/或图启发式搜索将会产生大量其他资源。