Python中的α-β剪枝

3 投票
2 回答
2478 浏览
提问于 2025-04-16 02:13

在alpha-beta剪枝算法中,我有一个类,其中定义了一个函数叫做getAction(self, gamestate)。我在getAction里面又写了两个函数。

比如:

class BAC:
  def you(self,gamestate):
    def me(gamestate,depth,alpha, beta):
    ------
      return v
    def both(gamestate,depth,alpha, beta):
    -------------------
      return v
   return me(gamestate,0,alpha, beta)-

我需要在这两个函数中使用alpha和beta这两个值。但是我应该在哪里定义alpha和beta的值呢?如果我在函数me和函数both里面定义alpha和beta,就会出现错误,因为系统提示找不到全局名称alpha。

我该如何将alpha和beta变成局部变量,或者我该如何让它们正常工作呢?

2 个回答

1

通常,alpha-beta算法会被写成一个高级的函数,这个函数会给alpha和beta两个值一个初始值,然后把这些值传递给一个递归的(或者说是基于栈的非递归)搜索函数。

上面提到的类解决方案也不错,不过我可能会加一个方法来重置alpha和beta,这样每次搜索开始时就不需要重新创建一个类的实例了。

1

我想你是想把alpha和beta定义为你类的属性。

你可能需要一个类的构造函数来初始化你的变量。

class BAC:
    def __init__(self):
        self.alpha= 'Hello '
        self.beta= 'World!'
    def me(self):
        print self.alpha + self.beta

或者你可以像这样初始化你的属性变量:

class BAC:
    def me(self,alpha,beta):
        self.alpha = alpha
        self.beta= beta
        print self.alpha + self.beta

如果你想让这些属性保持不变,只需要引用类的属性即可。

如果你选择第一个解决方案:

my_bac = Bac()
print my_bac.alpha + my_bac.beta

输出结果将是

Hello World!
Hello World!

撰写回答