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

实施迭代深化

怀德馨
2023-03-14

为了通过Alpha-Beta剪枝提高最小极大算法的性能,我实现了迭代深化:

 public Integer iterativeDeepening(int maxDepth, boolean isFirstPlayer) {

    Integer bestCell = -1;

    for (Integer depth = 1; depth <= maxDepth; depth++) {
        bestCell = alphabeta.minimax(depth, false, Integer.MIN_VALUE, Integer.MAX_VALUE)[1];
    }

    return bestCell;
}

其中方法<code>iterativeDeepening</code>只返回最佳移动的id。

首先,我不确定这是否是实现迭代深化的正确方法。

其次,我注意到AI开始做错误的动作。迭代深化有可能影响决策吗?

在使用转置表和迭代深化时,我衡量了算法速度的显著提高,但我真的不想为了速度而牺牲AI质量。

共有1个答案

乐城
2023-03-14

首先,我不确定这是否是实现迭代深化的正确方法。

我认为这是正确的,但如果你想迭代深化来加快你的算法,你也应该在其中添加移动顺序。这个想法是,在下一次迭代中,您使用浅层搜索的结果,以及看起来最好的搜索动作。这意味着在阿尔法-贝塔算法中有更好的快速截止机会。

其次,我注意到AI开始做错误的动作。迭代深化有可能影响决策吗?

为alpha-beta算法实现迭代深化不应该影响决策。你的实现一定有问题,但是没有足够的信息来说明它是什么。

 类似资料:
  • 我在做什么:我正在用C编写一个象棋引擎。我最近更新了我的引擎的minimax搜索算法,该算法使用alpha-beta修剪来利用迭代深化,以便在时间限制下运行。这是它的外观: 我的问题:这个实现的问题是,当搜索任何大于1的深度时,它将在搜索所需深度之前搜索所有之前的深度。也就是说,此迭代深化搜索首先搜索深度为1的所有移动。然后,它将再次搜索深度1,然后再搜索深度2,而不是在下一次搜索时选择深度2。然

  • 本篇简述一下迭代加深搜索,并列出了伪代码帮助大家理解。 迭代加深是一种每次限制搜索深度的深度优先搜索。 (1)本质:它的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度d ,当d达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度+1 ,重新从根开始。 既然是为了找最优解,为什么不用BFS呢?我们知道BFS的基础是一个队列,队列的空间复杂度很大,当状态比较多

  • 问题内容: 我有一个类似于以下内容的JSON字符串: 我对此字符串进行了JSON解析,然后将所有对象转换为HashMaps,并将所有数组转换为HashMap [] s。我的问题是我需要一个递归函数来遍历Java中此JSON结构的所有节点。我怎样才能做到这一点?我在想类似的东西: 问题答案: 假设一个数组只能在内部包含Maps(而不是其他数组): 或者,如果您可以使用3个功能,则可以使其更简单

  • 我的程序中有一个有效的negamax算法。然而,我需要程序在时间内找到最佳移动。我做了一些研究,似乎用我的negamax算法进行迭代深化是最好的方法。现在,我启动搜索的函数如下所示: 我想我也应该重新排序之前的最佳移动到儿童列表的前面,但是,我在等待实现,直到我得到基本版本的工作。实际的阿尔法-贝塔函数是这样的: 当我尝试调试时,一切似乎都在按预期工作。然而,当我将迭代深化版本与常规的alphab

  • 我正在尝试用换位表实现增强的α-β-最小-最大修剪。我使用这个伪代码作为参考: http://people.csail.mit.edu/plaat/mtdf.html#abmem 这个算法有三个问题: > 我相信我应该在每个保存的换位表条目中存储深度(=到叶级的距离),并且仅在 entry.depth 时才使用条目 我想存储每个位置的最佳移动,以便在搜索停止后使用它进行移动排序和提取最佳移动。在纯

  • 问题内容: 我尝试实现冒泡排序,但是不确定它是否正确。如果您可以看一下它,并且它是气泡式的,并且可以通过更好的方式完成,请不要害羞。这是代码: 问题答案: 这是冒泡排序的正常实现,似乎还可以。可以进行几种优化,但是总体思路是相同的。这里有一些想法: 如果在内循环中未执行任何交换时,外循环有一个迭代,则中断,无用继续 在外循环的每次迭代中,交换内循环的方向-从左至右执行一次,然后从右至左执行一次(这