我正在阅读有关搜索算法和启发式搜索的内容,我对启发式和评估函数略感混淆。人们似乎很自由地使用它们来描述看似相同的东西。我错过了什么?
答案 0 :(得分:2)
评估函数(或评分函数)检查解决方案是否可行以及它有多好。通过比较2个解决方案的得分,您可以看到哪个更好(如果它们都可行)。例如:如果您从布鲁塞尔前往马德里,途经巴黎,里昂和马赛,距离为1000公里(=实际道路距离)。
启发式函数也会返回类似得分的内容,但它适用于部分解决方案,并且它不需要准确。对于A *搜索,它需要被允许(=低估)。例如:如果你从布鲁塞尔经巴黎前往马德里(其余的你还不知道),距离是800公里(=从布鲁塞尔到巴黎的实际道路距离加上离开的距离从巴黎到马德里)。
答案 1 :(得分:2)
在这个问题上可能会感到困惑,因为启发式方法在不同的上下文中意味着不同的事物。因此,让我谈谈启发式方法的不同含义。然后我们可以返回评估功能。
单代理启发式搜索
在单代理启发式搜索(例如A *,IDA *)中,启发式通常用单词 admitible 或 consistent 限定。在这种情况下,试探法是达到目标的成本的下限。也就是说,它们是返回数值的函数的结果。如果试探法是可允许的,则返回的值不会高估与目标的真实距离。如果启发式是 consistent ,则相邻状态之间的启发式变化永远不会超过边缘成本。如果目标的启发式方法为0,则可以采用一致的启发式方法,但并非所有允许的启发式方法都是一致的。
启发式算法和算法相结合证明了许多特性。 A *和IDA *将找到具有一致启发式的最佳路径。在具有一致启发式的必要节点扩展中,A *是最优的,但在启发式不一致的情况下,A *可以执行N个状态的2 ^ N扩展。 (有关发生这种情况的示例,请参见this demo。)
玩游戏
在使用算法(例如alpha-beta或蒙特卡洛树搜索(MCTS))的游戏程序中,试探法表示游戏的赢/输值的近似值。例如,该值可能会在-1(亏损)和+1(获胜)之间缩放,介于两者之间的值表示有关真实值的不确定性。这里不能保证低估或高估,但是值的顺序越好(获胜>抽奖>损失),算法的性能就越好。即使将仿射变换应用于启发式,Alpha-beta修剪也将返回相同的结果,因为alpha-beta使用值的相对顺序进行搜索。有关MCTS中启发式的示例,请参见this paper。请注意,在这种情况下,启发式方法仍然具有数值。
优化
在搜索诸如SAT(可满足性问题)或CSP(约束满足问题)之类的优化问题时,如果算法能够快速找到好的解决方案,它们的效率会大大提高。因此,他们不是天真地搜索,而是以一种期望更有效的方式对搜索进行排序。如果排序良好,则搜索可能会更早终止,但这不能保证。在这种情况下,启发式是一种对选择进行排序的方式,最终可能会更快地找到解决方案。 (在SAT或CSP中令人满意地分配变量。)Here is an example的工作探讨了这些问题的不同排序启发法。
在这种情况下,启发式用于排序,因此它不必基于数字。如果它是基于数字的,则数字不一定像启发式搜索在其他类型的搜索中那样具有全局意义。除了SAT和CSP以外,还有许多其他的优化问题变体以这种方式使用启发式方法。
评估功能
那么,什么是评估函数?它可能最常用于游戏的第二种情况,在这种情况下,试探法和评估功能可以互换,但更笼统地说是指状态的数字评估。重点是评估功能比启发式功能更具体,因为启发式方法在更广泛的环境中得到了广泛的应用。
答案 2 :(得分:0)
启发式函数是特定于问题的,并且编码到最近的目标节点的距离。而评估函数不是特定于问题的,并且由算法用于确定下一个要扩展的节点。
答案 3 :(得分:0)
启发式函数是评估函数的一个组成部分。评估函数通过给定节点估计最便宜的解决方案的成本,可能考虑关于节点的更多信息而不仅仅是状态。启发式函数也将节点作为输入,但它的值仅取决于该节点的状态。
使用A *搜索的示例,评估函数通过节点n估算最便宜的解决方案的成本,写为:
f(n)= g(n)+ h(n)
其中g(n)是到达节点n的成本,而h(n)是从 n到目标的最便宜路径的估计成本。
在其他情况下,评估函数可能不使用除启发函数之外的任何其他信息。即f(n)= h(n)。
答案 4 :(得分:0)
简单地说,评估功能将为您提供解决问题所需的值。但这并不会告诉您在平局情况下首先花费哪个分支。因此,在更坏的情况下,您可能需要扩展整个搜索树,这非常耗时。
可以将再次的启发式功能与“提示”进行比较。当与评估功能一起添加或与评估功能一起使用时,它将帮助您决定首先扩展分支的位置以尽快到达解决方案。尽管它们在某些情况下可能无法很好地工作,但是在大多数情况下,它将通过指导您首先扩展哪个分支来显着减少运行时间,因为该分支更有可能很快为您提供结果,或者该分支更有可能有解决方案。答案 5 :(得分:0)
启发式函数只是根据最小成本确定下一个要扩展的节点,它不会查看扩展的边界是否会导致目标状态。因此,它有时可能会导致无限循环或更长的路径(因为它可能会导致死胡同)。 另一方面,评估函数是一个更稳健的估计函数,它估计下一个要扩展的节点,该节点实际上以最少的成本导致目标状态。 启发式函数是评估函数的一部分。