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

通过 alpha beta 修剪了解最小最大值

蔺劲
2023-03-14

抱歉,这是我的笔记。

在最后一天,我一直在阅读极大极小树和阿尔法数据修剪,为我的项目做准备。这是c语言中奥赛罗的实现。

我阅读了大量关于它的资料,我知道它被问了很多。在我开始我的评估功能之前,我想充分了解这一点。

在随附的图像中,我无法弄清楚函数Min_Node(pos)Max_Node(pos)究竟会做什么,任何输入将不胜感激。

如果任何人有任何提示或事情,我应该注意在实现这个和我的奥赛罗评估功能,我愿意采取任何帮助,我可以找到。

共有2个答案

东方俊杰
2023-03-14

我设法弄清楚了最大和最小节点是什么,在这种情况下,max_node(pos)检查这是否是玩家,它返回true,因为这应该是最大的,min_node。

孙风畔
2023-03-14

这里也描述了极大极小算法,它需要在给定游戏树中当前位置的情况下找到最优值的移动。该位置由棋盘配置和当前玩家组成(对于某些游戏,这可以单独取决于棋盘配置)。通常,移动的值是递归定义的;对于处于eding位置的棋盘(它是游戏树的一片叶子),如果玩家一获胜,则值为1;如果玩家二获胜,则为-1;对于平局,值为0。移动的值是通过执行该移动并递归计算该值来确定的。然后,选择最大(对于玩家一)或最小(对于玩家二)的移动;在递归求值中,该值是当前位置的子树根集的所有叶的最大(或最小)值。这显然是原问题中提到的功能应该做的。

如这里所述,α-β-修剪是这种方法的改进。由于最佳值是已知的(它们是1-1),一旦找到具有所需值的移动,就可以停止评估。

这种方法独立于实际游戏。但是,我建议第一步,将更简单的游戏(例如井字游戏)用作玩具示例,这可能更容易调试

 类似资料:
  • 我正在为游戏开发AI,我想使用MinMax算法和Alpha-Beta修剪。 我对它的工作原理有一个粗略的想法,但我仍然无法从头开始编写代码,所以我花了最近两天的时间在网上寻找某种伪代码。 我的问题是,我在网上找到的每个伪代码似乎都是基于找到最佳移动的值,而我需要返回最佳移动本身而不是数字。 我现在的代码是基于这个伪代码(源代码) 如您所见,这段代码返回一个数字,我想这是使一切正常工作所必需的(因为

  • 我对这个问题有意见。对于这个问题,我将编写一个与超类交互的子类。 某公司用多种方法编写了一个大类银行账户,包括: 方法/构造函数和描述: < Li > public BankingAccount(Startup s)使用Startup对象中的信息构造一个banking account对象 公共作废借方(借方d)记录给定的借方 公共无效信用(信用c)记录给定的信用 < li>public int g

  • 我想为一个类似跳棋的游戏实现一个人工智能 我写了以下方法: -方法 这将返回所有按重量排序的有效移动的列表,其中重量是根据移动的类型和位置计算的 -方法 将移动应用于棋盘,如果有棋子被杀则返回1 -方法 以恢复板的先前状态。 这是一个零和游戏,所以人工智能应该最大化玩家颜色的棋子,最小化对手的棋子。 为此,最好的方法似乎是使用最小-最大和α-β修剪。这有以下伪码 但我还没有明白如何适应我的问题。有

  • //{this.props.params.item}来自反应路由器(路径('/detail/item/id')) 为什么我的调度是无限循环,直到出错(超过最大调用堆栈大小)

  • 问题内容: 我已经读到 32位Windows上的最大堆大小是〜1.5GB,这是由于JVM需要连续的内存。有人可以解释“连续内存”的概念吗,为什么Windows上最多只有1.5GB? 其次,那么64位Windows上的最大堆大小是什么?为什么与32位Windows上可用的最大堆大小不同? 问题答案: 32位/ 64位部分与Java无关 事实证明,32位系统中的内存位置由32位无符号整数引用。这最多允

  • 问题内容: 如何通过环境变量设置Java的最小和最大堆大小? 我知道可以在启动Java时设置堆大小,但是我希望通过服务器上的环境变量对此进行调整。 问题答案: 您不能直接使用环境变量来做到这一点。您需要使用传递给java命令的“非标准”选项集。运行:java -X了解详细信息。您要查找的选项是-Xmx和- Xms(这是“初始”堆大小,因此可能是您要查找的内容。) 诸如Ant或Tomcat之类的某些