我想为跳棋游戏实施人工智能。我不能理解alpha beta修剪的原理,因为没有任何作用!!
我希望算法在某个时间(5或10秒)停止。但是,我认为使用我的算法,它永远不会停止。此外,算法永远不会削减分支。
编辑:
我有这些错误:
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
感谢您的帮助。
答案 0 :(得分:3)
File "player.py", line 61, in min_value
和TypeError: unorderable types: NoneType() < float()
是重要的提示。您应该考虑实际的错误消息比您所说的有关您遇到的问题的其他任何内容都更重要。
由于您没有阅读错误消息,因此您可以向我们猜测哪一行是第61行。
在该函数中有一些似乎相关的比较(即min()
,if v <= alpha
)。
错误消息表明v
为None
。
由于v
可以来自return self.evaluation(move, CELL_OWN)
的值,看起来self.evaluation
正在返回None
。这通常是因为没有return
或没有表达式的return
而发生的。