井字棋玩具进阶!实现人机交互!
核心博弈算法解释:
博弈函数minimax使用了极小化极大算法,通过递归和回溯的方式来模拟整个决策树的搜索过程,并根据每个节点的收益评估来进行选择。
极小化极大算法尝试在决策树的每个层级上最大化自己的收益,并且假设对手会在其层级上选择最有利于对手自己的行动。该算法递归地搜索所有可能的游戏局面,并评估它们的分数来确定最优的下一步行动。在实现过程中,假设计算机为极大化玩家,用户为极小化玩家。
该函数有三个输入参数:
board
:表示当前游戏局面的状态。depth
:表示当前搜索的深度。通常用于在达到一定深度时停止搜索或评估局面。maximizing_player
:表示当前轮到的玩家是否是极大化收益的玩家。
函数会根据棋盘状态给出不同的返回值。若用户获胜,返回-1。若计算机获胜,返回1,若平局则返回0。
接下来,如果当前轮到的是极大化(极小化)收益的玩家,则进入一个循环,遍历所有可用的移动(空位)。对于每个移动,都将创建一个新的局面,并在该位置上标记,然后递归调用 minimax 函数来评估新局面,并将返回的评估分数与当前的最大(最小)分数进行比较,更新并返回最大(最小)分数。
通过不断递归调用 minimax 函数,最终找到了最优的下一步行动,该行动的分数已经经过评估和比较,实现人机博弈。
python实现:
#标记
EMPTY = ' '
HUMAN = 'X'
COMPUTER = 'O'
def print_board(board):
print('---------')
for i in range(3):
print('|', end='')
for j in range(3):
print(board[i*3 + j], end='|')
print('\n-----