Python中的α-β剪枝
在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!