Artificial intelligence Alpha-Beta/minimax是否要求每个节点都是游戏板的完整副本?
这不是一个特定于语言的问题,但为了对话,我目前在C#7中工作 多年来,我成功地实现了Alpha-Beta剪枝算法(甚至在35年前的PASCAL中:) 每一次,我都创建了游戏状态的半深度副本(下面讨论),该副本为每个节点递归。我经常想知道这是否必要,也许我还没有真正理解算法 互联网上充斥着对Tictatcoe的帮助请求,这让我觉得这一定是一个常见的学校作业问题——这有点阻碍了对这个相当基本的主题的搜索 半深拷贝。。。在我看来,每个节点都应该知道:Artificial intelligence Alpha-Beta/minimax是否要求每个节点都是游戏板的完整副本?,artificial-intelligence,alpha,minimax,beta,Artificial Intelligence,Alpha,Minimax,Beta,这不是一个特定于语言的问题,但为了对话,我目前在C#7中工作 多年来,我成功地实现了Alpha-Beta剪枝算法(甚至在35年前的PASCAL中:) 每一次,我都创建了游戏状态的半深度副本(下面讨论),该副本为每个节点递归。我经常想知道这是否必要,也许我还没有真正理解算法 互联网上充斥着对Tictatcoe的帮助请求,这让我觉得这一定是一个常见的学校作业问题——这有点阻碍了对这个相当基本的主题的搜索 半深拷贝。。。在我看来,每个节点都应该知道: 董事会的全部情况 轮到谁的球员 比赛状态-即:{
- 董事会的全部情况
- 轮到谁的球员
- 比赛状态-即:{比赛,球员1胜,球员2胜,平局}
我意识到在过去的几十年里,内存变得很便宜。。。但是组合爆炸仍然是主要的话题。干杯。我不确定这是否回答了你的问题。但是,你能不能不做每一次复制,而是做一次递归调用,然后撤销移动?比如:
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(新用户)。