alpha-beta-pruning相关内容

缓存可以用于alpha-beta搜索算法吗?

我正在研究minimax井字游戏算法.我使它工作正常,将树中的每个状态都缓存了. 然后我实施了alpha-beta修剪,这似乎影响了游戏.我认为问题在于,如果修剪了任何后代(子代,孙代等),则无法“信任"节点.这是真的吗? 就目前而言,我只是在缓存状态,如果它们没有修剪后代.此图像显示了我的观点(不是井字游戏).最大的玩家是向上的三角形,该三角形应选择左侧的移动.但是,如果在alpha ..

alpha-beta修剪算法中的alpha值如何使用和更新?

我正在查看帖子在实现alpha-beta修剪算法时函数中的奇怪行为和可接受的答案,其中指出:“您的 rootAlphaBeta 不会更新alpha值”。我想知道代码中需要添加什么。 解决方案 要使alpha-beta修剪起作用,alpha值需要传播到深度优先搜索的顶层。这可以通过以下方式实现:初始化一个变量以将alpha存储在潜在移动的循环外,将调用结果存储在 alphaBeta()中,然 ..

在Java中向Negamax添加Alpha Beta修剪

我正在用Java开发国际象棋游戏,并且(我认为)已经为AI玩家成功实现了Negamax。我在向其中添加alpha beta修剪以改进算法时遇到了一些麻烦。我已经尝试按照以下教程和示例代码进行操作,但是无法理解其工作原理。 下面是我目前要采取最佳行动的代码: private Move getBestMove(){ System.out.println(“获取最佳移动”); Sys ..

您如何得出alpha-beta修剪的时间复杂度?

我了解minimax和alpha-beta修剪的基本知识。在所有文献中,他们都谈到最佳情况下的时间复杂度为O(b ^(d / 2)),其中b =分支因子,d =树的深度,而基本情况是所有首选节点都为 在我的“最佳情况”示例中,我有一个4级的二叉树,因此在16个终端节点中,我需要扩展为最多7个节点。这与O(b ^(d / 2))有什么关系? 我不明白它们是如何变成O(b ^(d / 2) ..

如何为游戏创建良好的评估功能?

我有时会编写程序来玩棋盘游戏.基本策略是标准的alpha-beta修剪或类似搜索,有时会通过通常的残局或开局方法来增强.我主要玩过国际象棋变体,因此当需要选择评估功能时,我将使用基本的国际象棋评估功能. 但是,现在我正在编写一个程序来玩一个全新的棋盘游戏.我该如何选择良好甚至不错的评估功能? 主要挑战是相同的棋子总是在棋盘上,因此通常的材质功能不会根据位置而改变,并且游戏已进行了不到一 ..

使用带有Alpha-Beta修剪的MinMax找到最佳移动

我正在为游戏制作AI,我想将 MinMax 算法与 Alpha-Beta修剪一起使用。 我对它是如何工作有一个粗略的想法,但我仍然无法从头编写代码,所以我花了最近两天在网上寻找某种伪代码。 我的问题是,我在网上找到的每个伪代码似乎都是基于找到最佳移动的值,而我需要返回最佳移动而不是数字。 我目前的代码基于这个伪代码(来源) minimax(级别,玩家,alpha,beta ..

MiniMax与Alpha Beta修剪Othello不工作

我有一个othello(reversi)游戏的alpha beta最小极限的实现。不知何故,这从来没有真正返回适当的行动采取。它似乎返回默认动作我放在函数(0,0)和辅助值-32768,这意味着它已在MAX子程序修剪。任何关于我可以改善这方面的提示,以及我如何可以解决这个问题? 注意:我已经确定后续正确返回大部分。现在的最大深度为8.计算机播放器的pn(播放器编号)为1,人类播放器为0.第一 ..

如何实现高效的α-β剪枝博弈搜索树?

我想学习人工智能,以及如何在程序中实现它。开始最简单的地方大概就是用简单的游戏(在这种情况下,井字棋)和游戏搜索树(递归调用,而不是实际的数据结构)。 我发现这的一本关于该主题的讲座非常有用的视频。 我遇到的问题是,该算法的第一个呼叫正在一个非常长的时间(约15秒)来执行。我已经放在调试日志输出整个code和看起来它是调用算法的部分倍过量。 下面就是该方法的选择计算机的最佳举措: 公共最佳c ..

极大极小算法的井字失败

我想实现一个极大极小算法的井字与α-β剪枝。现在我有程序的运行,但它似乎并不奏效。每当我运行它似乎在所有的方块输入垃圾。所以,我的极小函数接受一个板状态,并修改了状态,这样,当它完成,董事会状态包含了一个最好的举动,我实现它。于是,我把“这”等于修改后的板上。这里是我的函数的极大极小的算法: 无效板:: getBestMove(){ 板returnBoard; 极小(INT_MIN + ..
发布时间:2015-11-30 22:27:28 C/C++开发

如何获得实际的举措,而不是从小型最大算法移动值

我目前正在写一个极大极小算法α+β修剪的国际象棋。 这是我所见过的例子,极大极小算法将返回重新presents的最好成绩或董事会的状态,这将导致从最好的移动一个int值。 我的问题是我们如何才能恢复与该得分的返回值相关联的最好的举动? 例如,我的字母a()以下伪... 公众诠释字母a(INT深度,董事会B,INTα,INT测试,布尔maxPlayer){ 如果(深度== 0) ..
发布时间:2015-11-30 21:19:22 C/C++

如何显示阿尔法贝塔剪枝算法的结果呢?

更新 更新1 我想这个(2号线):我添加节点改变颜色第一指令字母a的功能。我越来越这个结果: 绿色节点访问节点。它看起来像,算法是正确的去扔节点,对不对?但如何输出正确的价值观中的节点 - 我还需要做到这一点?儿童值最小,最大的孩子值(不包括修剪树枝)。对 更新2 我试图输出α和β的树节点,并没有得到正确的结果。 这是code(第18行和31加)。 这是的code结果: ..

极小与α+β修剪转换为negamax

我写了一个极小算法的α+β修剪,在跳棋游戏,现在我想使用的 negamax 方法。我期待这两个是等价的,因为negamax只是一个技术写的极小。但由于某些原因,我的两种算法不同的表现。当我在相同的输入运行它们两者的negamax版本似乎评估更多的国家,所以我认为有些事情一定是错的α+β修剪。 在code列出了两种算法(极大极小和 negamax 函数),并在底部的播放功能,从我给他们打电话。该评 ..
发布时间:2015-11-30 15:22:14 C/C++开发

α-β剪枝的极小

我花了一整天试图实现极小没有真正理解它。现在,我想我知道如何极小的作品,但不是α-β剪枝。 这是我的极大极小的理解: 生成的所有可能的行动清单,直到深度限制。 评估如何有利的游戏区域是底部的每个节点。 对于每一个节点,(从底部开始),该节点的分数是最高分的是孩子,如果该层是最大。如果该层为最小,该节点的得分是最低分的是孩子。 执行具有最高的分数,如果你正在尝试到最大,或者移动最低,如 ..