【问题标题】:Can a cache be used for an alpha-beta search algorithm?缓存可以用于 alpha-beta 搜索算法吗?
【发布时间】:2020-05-22 15:51:02
【问题描述】:

我正在研究一个极小极大井字游戏算法。我让它工作正常,缓存树中的每个状态。

然后我实施了 alpha-beta 剪枝,这似乎影响了游戏。我认为问题在于,如果节点的任何后代(子代、孙代等)被修剪,则节点不能被“信任”。这是真的吗?

目前,我只缓存没有修剪后代的状态。 This 图片显示了我的观点(不是井字游戏)。最大玩家是向上的三角形,应该选择左边的移动。但是,如果在 alpha-beta 修剪过程中缓存了右侧的移动,则红色三角形的错误值为 4,因此将错误地选择右侧的移动。

【问题讨论】:

    标签: artificial-intelligence tic-tac-toe minimax alpha-beta-pruning


    【解决方案1】:

    如果“缓存”是指转置表,那么您不能总是信任转置表中的值。也就是说,当您在转置表中存储一个值时,您还需要存储用于在该状态下进行搜索的 alpha 和 beta 值(也可能是深度)。如果 alpha 和 beta 值不相同*,则不能使用转置表中的值。

    *实际上它们不必相同,表只需要包含包含在当前节点上使用的值的超集的值,您想用缓存值替换。

    编辑:为那些在大型游戏中处理此问题的人提供的附加信息。当您在一个节点上搜索时,您在最终值上有一个下限 (alpha) 和上限 (beta)。如果返回值在 alpha 和 beta 之间,那么你就知道它是状态的真实值。如果它等于 alpha 或 beta,那么您知道它只是最终值的一个界限。但是,您仍然可以使用这些信息来帮助搜索。

    具体来说,假设您在当前搜索中有 alpha=10 和 beta=20,并且转置表中的值为 [alpha = 12, beta = 30, value = 12]。然后,当您在分支下方(重新)搜索时,您可以使用 alpha=10 和 beta=12 的边界进行搜索。

    这是因为您已经在之前的搜索中证明了该值

    【讨论】:

    • 谢谢!我向我的导师提出了这个问题,他也说了类似的话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多