启发式函数在α-β修剪中的应用



在求解alpha-beta修剪算法时,启发式函数如何帮助修剪尽可能多的节点?如果在最坏的情况下,没有节点被修剪,如何使用启发式函数对它们进行修剪?

在完美信息广泛形式的双人游戏(即游戏树(中,在从alpha-beta修剪进行搜索的过程中,您总是有下限和上限。这些边界本质上说,只有这些边界之间的值才是有趣的——树中的祖先会修剪其他任何值。

如果你有一个启发式算法,它是给定状态的所有子级值的保证下界/上界,你可以根据当前状态的边界来测试它。如果启发式算法说所有未来状态的值都保证大于或等于上限(或小于或等于下限(,那么你可以立即修剪并停止搜索。

例如,假设最大玩家处于具有alpha=-10beta = 3的状态,并且您的启发式算法显示为h(s) >= 5。然后,您可以立即将alpha更新为5。由于alpha >= beta,您可以立即修剪并返回。在一个最小节点上具有相同的alpha/beta值时,您需要使用启发式算法来表示h(s) <= -10能够进行修剪。

阿尔法-贝塔修剪可以将树大小b^d减小到b^(d/2)。使用一个完美的启发式方法,你可以从根本上将树的大小减少到d。也就是说,你的启发式方法可以立即切断每个状态下所有剩余的子级。在实践中你不可能做得这么好。但是,启发式算法可以在阿尔法-贝塔修剪的基础上显著减少搜索的规模。

最新更新