Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 极小极大阿尔法-贝塔算法_Java_Algorithm_Minimax_Alpha Beta Pruning - Fatal编程技术网

Java 极小极大阿尔法-贝塔算法

Java 极小极大阿尔法-贝塔算法,java,algorithm,minimax,alpha-beta-pruning,Java,Algorithm,Minimax,Alpha Beta Pruning,我想我终于了解了minimax和Alpha-beta修剪,但实现它完全是另一回事 根据我的理解,基本要素包括: 您为某些动作指定了一个启发式函数分数(以Gomoku为例) 如果一行中有5个,我们应该指定一个高值,如9999,因为 这是一个胜利的举动 如果我们有4个在一排,我们有两个开放的结束 我们应该再次指定一个高值,因为无法阻止 这一举动等等 我的问题是,我们实际上必须用Java实现它 我有一个彩色[][]板(8x8),其中黑色是播放器1,白色是播放器2,null表示空白,我不知道我们应该

我想我终于了解了minimax和Alpha-beta修剪,但实现它完全是另一回事

根据我的理解,基本要素包括: 您为某些动作指定了一个启发式函数分数(以Gomoku为例)

  • 如果一行中有5个,我们应该指定一个高值,如9999,因为 这是一个胜利的举动
  • 如果我们有4个在一排,我们有两个开放的结束 我们应该再次指定一个高值,因为无法阻止 这一举动等等
我的问题是,我们实际上必须用Java实现它

我有一个彩色[][]板(8x8),其中黑色是播放器1,白色是播放器2,null表示空白,我不知道我们应该如何处理

  • 搜索棋盘,找出对手的动作并赋值 对他们来说
  • 搜索棋盘以查找我的移动并为其赋值 他们
  • 然后选择可能的最佳动作(我认为我能做到) 如果我知道前两个是如何工作的,因为这基本上是 算法)
  • 感谢您的帮助和指导!我看过YouTube教程和来自各种在线资源的课堂讲稿,但在实际编写代码时,它们对我来说都没有意义

    如果有区别,游戏将在8x8板上进行

    定义状态 首先,你必须定义游戏的状态。在您的示例中,它将是表示电路板配置的2d数组

    创建一个存储游戏配置和棋盘状态的java类。这个类现在将成为极小极大树的节点

    定义孩子 定义极大极小树的节点后,必须按照游戏规则定义子节点。这代表您的动作。

    有了这个你就有了极大极小树

    搜索棋盘以找到对手的移动并为其赋值

    要分配每个电路板配置的值,请将其存储在类本身中。此外,你不必搜索董事会来寻找反对者的行动,因为它是由你的孩子代表的。[请注意,电路板与每个类一起存储]

    搜索棋盘以查找我的移动并为其赋值

    同样,如果给定的类代表玩家1的移动,那么子类代表玩家2的移动

    然后选择可能的最佳动作

    这是由算法定义的。如果处于“最大”节点,则选择与“最大值”对应的移动。i、 e您可以选择价值最高的子项。
    对于最小节点,选择最小值的子节点

    PS:您不必事先定义整个极小极大树。它可以在执行dfs时动态创建。这将大大减少内存


    PPS:有关更多详细信息,请参阅。

    当您说存储游戏配置时,您的意思是存储棋盘上的棋子吗?是的,您可以存储棋盘上的棋子。我所说的游戏配置,是指在任何时候都可以描述游戏状态的东西。您可以存储每个玩家的分数、特征值(如第5行等)。