Artificial intelligence Alpha-Beta/minimax是否要求每个节点都是游戏板的完整副本?

Artificial intelligence Alpha-Beta/minimax是否要求每个节点都是游戏板的完整副本?,artificial-intelligence,alpha,minimax,beta,Artificial Intelligence,Alpha,Minimax,Beta,这不是一个特定于语言的问题,但为了对话,我目前在C#7中工作 多年来,我成功地实现了Alpha-Beta剪枝算法(甚至在35年前的PASCAL中:) 每一次,我都创建了游戏状态的半深度副本(下面讨论),该副本为每个节点递归。我经常想知道这是否必要,也许我还没有真正理解算法 互联网上充斥着对Tictatcoe的帮助请求,这让我觉得这一定是一个常见的学校作业问题——这有点阻碍了对这个相当基本的主题的搜索 半深拷贝。。。在我看来,每个节点都应该知道: 董事会的全部情况 轮到谁的球员 比赛状态-即:{

这不是一个特定于语言的问题,但为了对话,我目前在C#7中工作

多年来,我成功地实现了Alpha-Beta剪枝算法(甚至在35年前的PASCAL中:)

每一次,我都创建了游戏状态的半深度副本(下面讨论),该副本为每个节点递归。我经常想知道这是否必要,也许我还没有真正理解算法

互联网上充斥着对Tictatcoe的帮助请求,这让我觉得这一定是一个常见的学校作业问题——这有点阻碍了对这个相当基本的主题的搜索

半深拷贝。。。在我看来,每个节点都应该知道:

  • 董事会的全部情况
  • 轮到谁的球员
  • 比赛状态-即:{比赛,球员1胜,球员2胜,平局}
我的问题是:每个节点是否需要自己的线路板副本。。。例如,国际象棋有8x8网格。。。算法是否有更微妙的地方,或者这些节点是否都需要自己的电路板状态快照?是否有一些很酷的方法(除了复制并应用可能的移动)可以让节点从其父节点派生其状态

也许有人可以解释或指向“readthis,dummy”帖子,或者只是确认我需要创建这些实例,正如我试图描述的那样,每个递归调用都有自己的游戏板内存副本


我意识到在过去的几十年里,内存变得很便宜。。。但是组合爆炸仍然是主要的话题。干杯。

我不确定这是否回答了你的问题。但是,你能不能不做每一次复制,而是做一次递归调用,然后撤销移动?比如:

board.make_move(move)
eval = minimax(board, ....)
board.unmake_move(move)

我不确定这是否回答了你的问题。但是,你能不能不做每一次复制,而是做一次递归调用,然后撤销移动?比如:

board.make_move(move)
eval = minimax(board, ....)
board.unmake_move(move)

我会试试这个确切的主意,让你知道它是怎么回事。可爱简洁的回答表明你确实理解了我的问题(不够简洁)。很高兴能帮上忙!我知道这场斗争,我试着下国际象棋,但我的移动函数中有太多的规则,这使得做一个取消移动函数非常复杂。也许我下次再试一次。如果你觉得这是正确的,请接受答案。我确实。。。回到1月13日,但它不会出现,直到我的代表超过15(新用户)。我会尝试这个确切的想法,让你知道它是如何进行的。可爱简洁的回答表明你确实理解了我的问题(不够简洁)。很高兴能帮上忙!我知道这场斗争,我试着下国际象棋,但我的移动函数中有太多的规则,这使得做一个取消移动函数非常复杂。也许我下次再试一次。如果你觉得这是正确的,请接受答案。我确实。。。回到1月13日,但它不会出现,直到我的代表超过15(新用户)。