没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
2页
python象棋ai⼊门教程-⽤Python编写⼀个国际象棋AI程序 最近我⽤Python做了⼀个国际象棋程序并把代码发布在Github上了。这个代码不到1000⾏,⼤概20%⽤来实现AI。在这篇⽂章中我会介 绍这个AI如何⼯作,每⼀个部分做什么,它为什么能那样⼯作起来。你可以直接通读本⽂,或者去下载代码,边读边看代码。虽然去看看其 他⽂件中有什么AI依赖的类也可能有帮助,但是AI部分全都在AI.py⽂件中。 AI 部分总述 AI在做出决策前经过三个不同的步骤。⾸先,他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到⼏种)。其次,它⽣ 成⼀个棋步树⽤来随后决定最佳决策。虽然树的⼤⼩随深度指数增长,但是树的深度可以是任意的。假设每次决策有平均20个可选的棋 步,那深度为1对应20棋步,深度为2对应400棋步,深度为3对应8000棋步。最后,它遍历这个树,采取x步后结果最佳的那个棋步,x 是我们选择的树的深度。后⾯的⽂章为了简单起见,我会假设树深为2。 ⽣成棋步树 棋步树是这个AI的核⼼。构成这个树的类是MoveNode.py⽂件中的MoveNode。他的初始化⽅法如下:
资源推荐
资源详情
资源评论
python象棋ai⼊门教程-⽤Python编写⼀个国际象棋AI程序
最近我⽤Python做了⼀个国际象棋程序并把代码发布在Github上了。这个代码不到1000⾏,⼤概20%⽤来实现AI。在这篇⽂章中我会介
绍这个AI如何⼯作,每⼀个部分做什么,它为什么能那样⼯作起来。你可以直接通读本⽂,或者去下载代码,边读边看代码。虽然去看看其
他⽂件中有什么AI依赖的类也可能有帮助,但是AI部分全都在AI.py⽂件中。
AI 部分总述
AI在做出决策前经过三个不同的步骤。⾸先,他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到⼏种)。其次,它⽣
成⼀个棋步树⽤来随后决定最佳决策。虽然树的⼤⼩随深度指数增长,但是树的深度可以是任意的。假设每次决策有平均20个可选的棋
步,那深度为1对应20棋步,深度为2对应400棋步,深度为3对应8000棋步。最后,它遍历这个树,采取x步后结果最佳的那个棋步,x
是我们选择的树的深度。后⾯的⽂章为了简单起见,我会假设树深为2。
⽣成棋步树
棋步树是这个AI的核⼼。构成这个树的类是MoveNode.py⽂件中的MoveNode。他的初始化⽅法如下:
def __init__(self, move, children, parent) :
self.move = move
self.children = children
self.parent = parent
pointAdvantage = None
depth = 1
这个类有五个属性。⾸先是move,即它包含的棋步,它是个Move类,在这不是很重要,只需要知道它是⼀个告诉⼀个起⼦往哪⾛的棋
步,可以吃什么⼦,等等。然后是children,它也是个MoveNode类。第三个属性是parent,所以通过它可以知道上⼀层有哪些
MoveNode。pointAdvantage属性是AI⽤来决定这⼀棋步是好是坏⽤的。depth属性指明这⼀结点在第⼏层,也就是说该节点上⾯有多少
节点。⽣成棋步树的代码如下:
def generateMoveTree(self) :
moveTree = [] for move in self.board.getAllMovesLegal(self.side) :
moveTree.append(MoveNode(move, [], None))
for node in moveTree :
self.board.makeMove(node.move)
self.populateNodeChildren(node)
self.board.undoLastMove()
return moveTree
变量moveTree⼀开始是个空list,随后它装⼊MoveNode类的实例。第⼀个循环后,它只是⼀个拥有没有⽗结点、⼦结点的MoveNode的
数组,也就是⼀些根节点。第⼆个循环遍历moveTree,⽤populateNodeChildren函数给每个节点添加⼦节点:
def populateNodeChildren(self, node) :
node.pointAdvantage = self.board.getPointAdvantageOfSide(self.side)
node.depth = node.getDepth()
if node.depth == self.depth :
return
side = self.board.currentSide
资源评论
是空空呀
- 粉丝: 167
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功