python alpha函数_python – 实现alpha-beta修剪算法时函数中的奇怪行为

我用alpha-beta修剪实现了minimax算法.为了获得最佳移动,我使用rootAlphaBeta函数调用alpha-beta算法.但是,在rootAlphaBeta函数中,我发现了一些非常奇怪的行为.当我用一个4的ply调用rootAlphaBeta函数时,它会产生大约20 000个调用,但是当我直接调用alphaBeta函数时,它只进行大约2000次调用.我似乎无法找到问题所在,因为呼叫的数量应该是相同的.

两种算法最终找到的举动应该是一样的,对吧?我是这么认为的,至少移动的得分是一样的,我无法知道alphaBeta在没有rootAlphaBeta的情况下直接调用时所选择的移动.

def alphaBeta(self, board, rules, alpha, beta, ply, player):

"""Implements a minimax algorithm with alpha-beta pruning."""

if ply == 0:

return self.positionEvaluation(board, rules, player)

move_list = board.generateMoves(rules, player)

for move in move_list:

board.makeMove(move, player)

current_eval = -self.alphaBeta(board, rules, -beta, -alpha, ply - 1,

board.getOtherPlayer(player))

board.unmakeMove(move, player)

if current_eval >= beta:

return beta

if current_eval > alpha:

alpha = current_eval

return alpha

def rootAlphaBeta(self, board, rules, ply, player):

"""Makes a call to the alphaBeta function. Returns the optimal move for a

player at given ply."""

best_move = None

max_eval = float('-infinity')

move_list = board.generateMoves(rules, player)

for move in move_list:

board.makeMove(move, player)

current_eval = -self.alphaBeta(board, rules, float('-infinity'),

float('infinity'), ply - 1,

board.getOtherPlayer(player))

board.unmakeMove(move, player)

if current_eval > max_eval:

max_eval = current_eval

best_move = move

return best_move

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值