- 15
- 0
- 约4.57千字
- 约 4页
- 2024-01-21 发布于北京
- 举报
实现AI下井字棋的alpha-beta剪枝算法(python实现)
代码参考⾃中国⼤学mooc上⼈⼯智能与息社会陈斌⽼师的算法,我在原来的基础上增加了玩家输⼊的异常捕获
AlphaBeta剪枝算法是对Minimax⽅法的优化,能够极⼤提⾼搜索树的效率,如果对这个算法感兴趣的可以去参考相关资料。
当正确理解AlphaBeta剪枝算法后,还可以将它应⽤在象棋、围棋等⼀些⾼级游戏的算法搜索上,使得电脑寻找最优胜率的速度加快
python代码实现
#coding:utf-8
井字棋(Tictactoe)Python3语⾔实现,带有Alpha-Beta剪枝的Minimax算法.
代码参考⾃中国⼤学mooc⼈⼯智能与息社会(陈斌)
importrandom
#⽤如下的9个数字来表⽰棋盘的位置:
#012
#345
#678
#设定获胜的组合⽅式(横、竖、斜)
WIIG_TRIADS=((0,1,2),(3,4,5),(6,7,8),
(0,3,6),(1,4,7),(2,5,8),
(0,4,8),(2,4,6))
#设定棋盘按⼀⾏三个打印
PRITIG_TRIADS=((0,1,2),(3,4,5),(6,7,8))
#⽤⼀维列表表⽰棋盘:
SLOTS=(0,1,2,3,4,5,6,7,8)
#-1表⽰X玩家0表⽰空位1表⽰O玩家.
X_token=-1
Open_token=0
O_token=1
MARKERS=[_,O,X]
ED_PHRASE=(平局,胜利,失败)
defalpha_beta_valuation(board,player,next_player,alpha,beta):
运⽤AlphaBeta剪枝来计算当前局⾯的分值
因为搜索层数少,总能搜索到最终局⾯,估值结果为[-1,0,1]
wnnr=winner(board)
ifwnnr!=Open_token:
#有玩家获胜
returnwnnr
elifnotlegal_move_left(board):
#没有空位,平局
return0
#检查当前玩家payer的所有可落⼦点
formoveinSLOTS:
ifboard[move]==Open_token:
board[move]=player
#落⼦之后交换玩家,继续检验
val=alpha_beta_valuation(board,next_player,player,alpha,beta)
board[move]=Open_token
ifplayer==O_token:#当前玩家是O,是Max玩家(记号是1)
ifvalalpha:
alpha=val
ifalpha=beta:
returnbeta#直接返回当前的最⼤可能取值beta,进⾏剪枝
else:#当前玩家是X,是Min玩家(记号是-1)
ifvalbeta:
beta=val
ifbeta=alpha:
returnalpha#直接返回当前的最⼩可能取值apha,进⾏剪枝
ifplayer==O_token:
retval=alpha
retval=alpha
else:
retval=beta
returnretval
defpri
您可能关注的文档
最近下载
- 北京纪委监委公开遴选公务员笔试试题及答案.docx VIP
- 银行面试100题及最佳答案.docx VIP
- 起重机械倾覆事故应急处置预案.docx VIP
- 新版煤矿安全规程解读.pptx
- SY_T 4217.1-2018 石油天然气建设工程施工质量验收规范 通信工程 第1部分:油气田场站通信系统工程.docx
- 2024年苏州工业职业技术学院高职单招(语文)历年考点笔试题库含答案解析.doc VIP
- 9 CR400AF系列动车组途中故障应急处理指导手册.pdf
- 三星H635说明书.pdf VIP
- 2023年广东省中考语文语文试题(含答案).doc VIP
- 潍坊市2026届高三(一模历史试卷(含答案).pdf
原创力文档

文档评论(0)