альфа-бета-обрезка в питоне - PullRequest
2 голосов
/ 03 августа 2010

В альфа-версии, алгоритм бета-отсечения, У меня есть класс, в котором определена функция def getAction (self, gamestate) id. Я сделал еще 2 функции в def 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)-

Мне нужно поставить альфа, бета в функции меня и обоих. Но где я могу определить альфа и бета значения? Если я определю альфа и бета в def me и def обоих, произойдет ошибка, так как там нет глобального имени альфа.

Как мне сделать альфа и бета локальные переменные или Как я могу сделать так, чтобы работать правильно?

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Часто алгоритм альфа-бета реализуется как функция более высокого уровня, которая присваивает начальное значение как альфе, так и бете, а затем передает эти значения рекурсивной (или альтернативно нерекурсивной стековой) функции поиска.

Приведенное выше решение для класса также хорошо, хотя я, вероятно, добавил бы метод для сброса альфы и бета-версии, чтобы экземпляр класса не создавался в начале каждого поиска.

1 голос
/ 03 августа 2010

Полагаю, вы хотите определить альфа и бета в качестве атрибута ваших классов.

Вам может понадобиться конструктор класса, который инициализирует ваши переменные.

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!
...