使用python生成器进行Alphabeta修剪

2024-09-24 22:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在python中使用minimax和alpha-beta修剪来分析一个游戏。伪代码类似于

def alphabeta(node, depth, alpha, beta, isMaxNode):
   blah blah
   for each child of node
      blah blah 

在这个特殊的游戏中,计算节点的子节点相当复杂,所以我想定义一个生成器

def children(node):
    blah blah
    yield child

然后有

for child in children(node)

作为上述for循环的实现

我担心当阿尔法-贝塔截止发生时会发生什么,因此在for each child循环中有一个中断,我们永远不会到达生成器的末尾。关闭会发生什么?它是垃圾收集的,还是会有一堆未解决的闭包占用内存

看来我应该知道这个问题的答案。我认为当中断发生时,闭包超出了范围,并且有资格进行垃圾收集,但我不确定

这与Will a Python generator be garbage collected if it will not be used any more but hasn't reached StopIteration yet?不同

在这个问题中,生成器没有超出范围,编译器必须读取代码并确定生成器没有被再次调用。然而,在我看来,在我在这个问题中提出的情况下,一旦for循环中发生break,生成器应该超出范围,并且有资格进行垃圾收集。是这样吗

编辑

再次查看代码,我意识到一旦alpha-beta截止,函数alphabeta不仅会中断for循环,还会返回。这使得生成器对象更有可能被垃圾收集,但我对cPython实现的细节一无所知


Tags: 代码alphanodechild游戏for节点def