IDA *和一种启发式的可接受性?

时间:2016-07-20 11:56:30

标签: graph artificial-intelligence traversal a-star heuristics

我想练习人工智能的旧考试,看一个具有挑战性的问题,并需要一些专家帮助......

A是初始状态,G是目标状态。成本显示在边缘,启发式“H”值显示在每个圆上。 IDA *限制为7。 我们想用IDA *搜索此图表。访问这些节点的顺序是什么? (按字母顺序选择子项,在相同条件下,首先选择生成第一个节点。)

溶液是A,B,D,C,D,G。

enter image description here

  

我的问题是如何计算,以及我们如何说这个启发式   是可以接受的还是一致的吗?

1 个答案:

答案 0 :(得分:1)

  

我的问题是如何计算,以及我们如何说这种启发式是可接受的和一致的?

让我们首先介绍什么是可接受的和一致的启发式方法:

  1. 可接受的启发式永远不会过高估算达到目标的成本,即估算达到目标的成本不会超过从该节点到目标节点的最短路径的成本在图中。

    您可以很容易地看到,对于图表中的所有节点n,估算h(n)始终小于或等于实际最短路径。例如,h(B)= 0 <= 6(B-> F-> G)。

  2. 设c(n,m)表示来自节点n的图表中最佳路径的成本 到另一个节点n'。启发式估计函数h(n)在何时是一致的 对于图表中的所有节点h(n) + c(n, m) <= h(n')n , n'。另一种看待一致性的方法是单调性。一致的启发式函数也称为单调函数,由于估计的部分解的最终成本,沿着到目标的最佳路径单调地不减少。因此,我们可以注意到你的启发式函数不一致。

    h(A)+ c(A,B)&lt; = h(B) - &gt; 6 + 2&lt; = 0。

  3. 让我做一个类比,以较少数学的方式解释它。 你要和你的朋友一起跑步。在某些时候,你要求你的朋友完成你的跑步需要多长时间。他是一个非常乐观的人,他总是给你一个较小的时间,你可以做到,即使你在剩下的路上跑到最高点。 但是,他的估计并不是很一致。在A点,他告诉你,至少要跑一小时,跑完30分钟后再问他一次。现在,他告诉你,那里至少还有5分钟。 A点的估计比B点的信息量少,因此您的启发式朋友不一致。

    关于IDA *的执行,我从维基百科中复制粘贴算法的伪代码(我没有经过测试):

     node              current node
     g                 the cost to reach current node
     f                 estimated cost of the cheapest path (root..node..goal)
     h(node)           estimated cost of the cheapest path (node..goal)
     cost(node, succ)  step cost function
     is_goal(node)     goal test
     successors(node)  node expanding function
    
     procedure ida_star(root)
       bound := h(root)
       loop
         t := search(root, 0, bound)
         if t = FOUND then return bound
         if t = ∞ then return NOT_FOUND
         bound := t
       end loop
     end procedure
    
     function search(node, g, bound)
       f := g + h(node)
       if f > bound then return f
       if is_goal(node) then return FOUND
       min := ∞
       for succ in successors(node) do
         t := search(succ, g + cost(node, succ), bound)
         if t = FOUND then return FOUND
         if t < min then min := t
       end for
       return min
     end function
    

    按照您的示例执行是直截了当的。首先,我们使用启动节点的启发式函数的值设置边界(或阈值)。我们使用深度优先搜索方法探索图表,排除f值大于界限的分支。例如,f(F)= g(F)+ h(F)= 4 + 4> bound = 6。 按以下顺序探索节点:A,B,D,C,D,G。在算法的第一次迭代中,探索节点A,B,D,并且我们用尽小于边界的选项。

    更新边界,并在第二次迭代中探索节点C,D和G.一旦我们到达解决方案节点,估计(7)小于边界(8),我们就有最佳的最短路径。