当前位置: 首页 > 知识库问答 >
问题:

为什么带Alpha Beta的Minimax会在第二轮Connect Four中扩展更多节点?

田镜
2023-03-14

我有一个程序,它使用标准最小最大值算法或带有 alpha-beta 修剪的最小最大值与人类对手进行连接四。两种算法都有深度限制,之后它们应用评估函数。作为项目的一部分,我必须创建性能曲线,显示计算机每轮通过算法扩展的搜索树的节点数。正如预期的那样,曲线显示出下降趋势,因为随着游戏的进行,可能的状态数量会下降。但是,我无法解释为什么在计算机的第二轮中节点数量会增加,在 alpha-beta 的情况下最为突出,如下图所示:

这些曲线是基于人类首先玩的测试游戏和 8 层深度限制构建的。有谁知道为什么曲线没有严格减少?

共有1个答案

阎伟志
2023-03-14

Minimax可以看到节点数量的增加,这取决于游戏在不同层的分支方式。考虑一个愚蠢的游戏,在前8层,两名玩家都被迫“无所事事”,而在第9层,他们得到了更多的选择。如果你的深度是8层,那么一旦允许最小值达到第9层,你肯定会看到更多的节点扩展。

阿尔法-贝塔剪枝也是如此。但是此外,在阿尔法-贝塔剪枝中,节点评估的顺序影响扩展的节点的数量。换句话说,它更随机一点。

 类似资料:
  • 我有以下奥赛罗(reversi)游戏的阿尔法-贝塔极小值的实现。我已经修复了这个线程中的一些问题。这一次我想改进这个函数的性能。MAX_DEPTH=8需要很长的时间。在保持AI有点体面的同时,可以做些什么来加快性能? } 实用功能:

  • 问题内容: 我不明白为什么Java注释中没有继承关系,就像Java类一样。我认为这将非常有用。 例如:我想知道给定的注释是否为验证者。通过继承,我可以自反地浏览超类,以了解此注释是否扩展了。否则,我该如何实现? 那么,谁能给我这个设计决定的理由? 问题答案: 关于未采用这种方式进行设计的原因,你可以在JSR 175设计常见问题解答中找到答案,其中说: 你为什么不支持注释子类型化(一种注释类型扩展了

  • 第十二课:OpenGL扩展 扩展 GPU的性能随着更新换代一直在提高,支持渲染更多的三角形和像素点。然而,原始性能不是我们唯一关心的。NVIDIA, AMD和Intel也通过增加功能来改善他们的显卡。来看一些例子。 ARB_fragment_program 回溯到2002年,GPU都没有顶点着色器或片断着色器:所有的一切都硬编码在芯片中。这被称为固定功能流水线(Fixed-Function Pip

  • 我知道一些关于AbstractQueuedSynchronizer的详细信息。它是一个用于创建依赖于状态的类或同步器的框架。但我不理解在ThreadPoolExecutor的Worker中扩展这个类的意义。 由Worker类的签名可以推断出以下内容: > 提交新的可运行/可调用任务时,将创建一个新的工作对象。 Worker的新对象可以被视为新线程。 方法将添加新的worker(或只是一个任务)并在

  • Szenario:我有两个扩展,它们用一些特定字段扩展了。在TYPO3 9之前,我必须使用以下打字脚本配置对新闻扩展的依赖关系进行配置: 模型扩展了基本扩展的模型: 在TYPO3 10中,在(中断:#87623): 只要您只有一个扩展新闻扩展名的扩展名,它就可以工作多久。如果您有第二个扩展并启用TYPO3缓存,您将得到一个错误,即在第一个扩展中添加的字段在新闻扩展的模板中不可用。奇怪的是,这个问题

  • 扩展是可定制化浏览体验的小程序,它们使用户可以根据个人需要或者偏好定制 Chrome 的功能和行为。它们基于 Web 技术(例如 HTML,JavaScript 和 CSS)构建。 扩展必须满足狭义定义且易于理解的单一目的(译者注:功能简单易懂化)。一个扩展可以包括多个组件和一系列功能,只要所有的内容都有助于实现共同的目标。 用户交互界面应尽量小且有意图。他们的范围从简单的图标,如右侧显示的 Go