如何将置换表与 MTD(f) 算法结合使用

我正在为一个卡牌游戏编写 AI,经过一些测试后,我发现将 MTD(f) 算法应用到我的 alpha-beta 算法(一系列零窗口搜索)上比单独使用 alpha-beta 算法更快。

MTD(f) 算法在这里有很好的描述:http://people.csail.mit.edu/plaat/mtdf.html

我遇到的问题是,在 MTD(f) 搜索的每次迭代(对于每个猜测)中,我都没有重用任何以前存储的位置,即使链接上的文章建议我应该这样做(实际上,在迭代之间清除表格会加速算法)。

我的问题是,当我在置换表中存储一个位置和一个值时,我还会存储它有效的 alpha 和 beta 值。因此,通过具有不同猜测(因此 alpha 和 beta)的树的第二次传递不可能重用任何信息。这是应该预期的吗?或者我遗漏了一些基本的东西?

例如,如果对于 alpha=3,beta=4,我们得到了结果 7(显然是一个截止),我应该将它存储在表格中,对于 alpha=3 到 beta=6 有效吗?还是 beta=7?


回答:

你的问题归结于对如何在 alpha-beta 搜索旁边使用置换表的概念理解。这也是我遇到的一个大问题,经过一番搜索,我找到了这个讨论,它比我读过的任何关于这个主题的论文都更自然地向我解释了这个概念。

基本上,你不能将所有 alpha-beta 结果都视为相同,因为当发生截止时,结果仅代表一个界限,而不是真正的极小极大值。已经证明,使用界限仍然总是会给你相同的最佳下一个状态,但可能没有准确的分数。当你存储来自截止的状态时,你需要将其视为一个界限,并在下一次传递中尝试改进它。这将经常多次评估同一个节点,但它会根据需要不断改进实际分数。

这是一个很好的例子,更完整地实现了之前链接文章中列出的概念。滚动到第 14 页。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注