我想爲跳棋遊戲實現人工智能。我不明白alpha beta修剪的原理,因爲沒有任何工作!
我希望算法在某個時間停止(5或10秒)。但是,我認爲,用我的算法,它永遠不會停止。此外,該算法不會削減分支。帶跳棋的Alpha-beta修剪
編輯:
我有這些錯誤:
File "player.py", line 61, in min_value
v = min(v, self.max_value(pBoard, single_move, pDue, alpha, beta))
File "player.py", line 44, in max_value
v = max(v, self.min_value(pBoard, single_move, pDue, alpha, beta))
File "player.py", line 61, in min_value
[...]
File "player.py", line 61, in min_value
v = min(v, self.max_value(pBoard, single_move, pDue, alpha, beta))
File "player.py", line 44, in max_value
v = max(v, self.min_value(pBoard, single_move, pDue, alpha, beta))
File "player.py", line 61, in min_value
TypeError: unorderable types: NoneType() < float()
如果有人能解釋清楚的過程來實現,我將非常感激。 以下是我用python編寫的代碼:
「評估」功能給出了一個相對於棋盤上棋子位置的值。
def calc_move(self, pBoard, pDue):
score =0
validMoves = pBoard.find_possible_moves(CELL_OWN)
for move in validMoves:
pBoard.do_move(move)
score_move = self.max_value(pBoard, move, pDue, -float('inf'), float('inf'))
if score_move > score:
score = score_move
best_move = move
return best_move
def max_value(self, pBoard, move, pDue, alpha, beta):
if pDue - time.time() < 0.5 or move.is_EOG():
return self.evaluation(move, CELL_OWN)
v = -float('inf')
validMoves = pBoard.find_possible_moves(CELL_OWN)
for single_move in validMoves:
pBoard.do_move(single_move)
v = max(v, self.min_value(pBoard, single_move, pDue, alpha, beta))
if v >= beta:
return v
alpha = max(alpha, v)
return v
def min_value(self, pBoard, move, pDue, alpha, beta):
if pDue - time.time() < 0.5 or move.is_EOG():
return self.evaluation(move, CELL_OTHER)
v = float('inf')
validMoves = pBoard.find_possible_moves(CELL_OTHER)
for single_move in validMoves:
pBoard.do_move(single_move)
v = min(v, self.max_value(pBoard, single_move, pDue, alpha, beta))
if v <= alpha:
return v
beta = min(beta, v)
return v
感謝您的幫助。
「什麼都行不通!!」這是模糊的。 「它永遠不會停止。」這是模糊的。 「它」是什麼意思?哪個功能?所有這些使用'for',所以他們看起來像他們會終止。 「此外,該算法不會削減分支。」如果它永不停止,那麼「永不削減分支」部分並不意味着太多,是嗎?請添加'print'語句來顯示此代碼中各個點上正在發生的事情。沒有'print',我們都只是在猜測。添加'print'後,請包含顯示錯誤的示例輸出。 –
'TypeError:unorderable types:NoneType()