这些算法是 alpha-beta 算法的扩展,还是
它们是全新的算法吗,因为它们与 alpha-beta 算法无关?
其中大部分是 Alpha-Beta 剪枝算法的扩展。例如,迭代深化与 Alpha-Beta 修剪几乎相同,但会自动以逐渐增加的深度限制重复算法,直到达到某个时间限制,而不是只为预先确定的深度限制运行一次。
Principal Variation Search 仍然使用 Alpha-Beta 作为基础,但执行许多搜索时的[alpha, beta]
窗口比标准的 Alpha-Beta 修剪算法要小得多。
在大多数情况下,这些扩展将从现有的 Alpha-Beta 实现开始,并从那里构建并在代码中进行一些调整。但是,并非所有这些扩展都如此,仅对大多数扩展而言。例如,Transposition Tables 是一种单独的扩展,可以插入到 vanilla Minimax、Alpha-Beta 或 Principal Variation Search 或您正在使用的任何东西中。
在这个网站上,这些算法属于 4 类之一,即
- 强制的
- 选择性
- 侦察员和朋友
- Alpha-beta 优先
这是否意味着 alpha-beta 算法分为四个区域,并且它们是针对每个区域的专门优化算法?
这四个类别并不相互排斥,它们更像是……广泛的“口味”。他们在必填项下列出的是一些更基本的扩展,任何程序员在开发国际象棋程序时可能应该首先考虑这些扩展。另一类是不同的“口味”,不同的“大意”。例如,“选择性”下列出的所有内容都是关于搜索搜索树中“有趣”或“令人兴奋”的部分,而不是“不那么有趣”或“无聊”的部分。无论您使用的是 Alpha-Beta、Iterative Deepening 还是 PVS,都可以使用其中的许多想法,并且可能所有这些想法都可以与 Transposition Tables 结合使用。
我什至如何开始决定选择哪种优化算法?
这真的很难仅根据名称来决定。理论上,哪种算法是“最好的”也很大程度上取决于您的特定游戏,甚至可能是硬件。而且,在许多情况下,它甚至不是相互排斥的部分之间的选择;不同的想法可以以不同的方式相互结合。
这里唯一的解决方案实际上就是做大量的阅读、大量的研究,尝试实现不同的东西来更好地理解它们。