Python - 用于Minimax的Alpha-Beta Purning

时间:2015-04-28 21:50:49

标签: python algorithm search artificial-intelligence minimax

我想实现3-Men's Morris游戏的代理 - 这与tic-tac-toe游戏非常相似 - 我希望将Minimax策略与Alpha-Beta Pruning一起使用,这是我基于{的Python代码StackOverflow上有{3}}和this post,但它不起作用!!它给出了一个错误的解决方案,即使当前状态的后继者之一是解决方案

def alpha_beta(state,alpha,beta,turn,depth):
  if int(terminal_test(state,turn)) == int(MY_NUMBER):
        return 1  #win
  elif (int(terminal_test(state,turn))!=0) and (int(terminal_test(state,turn))!=int(MY_NUMBER)) :
        return -1 #loose
  else:
    if int(depth) == 13:
        return 0  #reached limit

  moves = successors(state,turn,int(depth))
#valid moves for player based on rules
  for move in moves:
    state = make_move(state,move,turn)
    current_eval = -alpha_beta(state, -beta, -alpha, 2-int(turn),int(depth)+1)
    state = undo_move(state,move,turn)
    if current_eval >= beta:
            return beta

    if current_eval > alpha:
        alpha = current_eval

return alpha


def rootAlphaBeta(state,depth, turn):
    best_move = None
    max_eval = float('-infinity')

    moves = successors(state,turn,int(depth))
    alpha = float('infinity')
    for move in moves:
        state = make_move(state,move,turn)
        alpha = -alpha_beta(state, float('-infinity'), alpha, 2-int(turn),int(depth)+1)
        state = undo_move(state,move,turn)
        if alpha > max_eval:
            max_eval = alpha
            best_move = move 
            #best_move which is selected here is not really the best move!
    return best_move

0 个答案:

没有答案