IDA* 何时认为目标已找到?

人工智能 搜索 伊达之星 停止条件
2021-11-06 10:17:56

我正在阅读有关 IDA* 的信息,发现此链接解释了 IDA* 并为其提供了动画

这是解决方案的图片。

在此处输入图像描述

我知道截止条件是什么(它取决于 F),如果节点的 (f) 的值小于或等于截止值,则搜索类似于 DFS,并且像 IDF 一样它是迭代的

我的问题是:

在动画中,当阈值为 7 并且扩展目标的父节点 (14) 后,他们表示已找到解决方案,因此,如果我们在扩展 <= 截止值的节点后找到目标,可以我们认为它是解决方案而不对其进行任何条件测试?(它是 F <= 阈值):例如,如果有另一个级别有一个目标,并且可以找到值为 13(小于 14),如下图所示:

在此处输入图像描述

当阈值为 7 时,11 不会被扩展,所以我们永远不会得到 (13)

那么,正确的解决方案是什么?

1个回答

根据人工智能: IDA* 第 4 版的现代方法,截止日期是f-成本(g+h); 在每次迭代中,截止值最小f- 任何超过上一次迭代截止值的节点的成本。

换句话说,每次迭代都详尽地搜索一个f-contour,在该轮廓之外找到一个节点,并使用该节点的f-成本作为下一个轮廓。

并且我们必须在选择该节点进行扩展时测试该节点是否为目标节点,否则该算法不再是最优的(证明类似于A *中的证明)。

我认为该站点提供的动画具有误导性,因为在同一站点最后编写的代码中,我们有:

function Search(node, g, threshold)              //recursive function
{

  f = g + heuristic(node);
  if(f > threshold)             //greater f encountered
         return f;
  if(node == Goal)               //Goal node found
         return FOUND;
  integer min = MAX_INT;     //min = Minimum integer
  foreach(tempnode in nextnodes(node))
  {

     //recursive call with next node as current node for depth search
     integer temp=search(tempnode, g + cost(node, tempnode), threshold);  
     if(temp == FOUND)            //if goal found
       return FOUND;
     if(temp < min)     //find the minimum of all 'f' greater than threshold encountered                                
       min = temp;

     }
     return min;  //return the minimum 'f' encountered greater than threshold
}

而在前面的代码中,我们仅在选择扩展时才测试该节点是否为目标节点。