python alpha beta 剪枝_AlphaBeta剪枝算法
AlphaBeta
剪枝算法
关于
AlphaBeta
剪枝的文章太多,
这个方法是所有其它搜索方法的基础,
得多花些时间认
真地理解。
先把基本概念再回顾一遍:
节点
:在中国象棋中就是一个棋盘的当前局面
Board
,当然该轮到谁走棋也是确定的。这
里的圆形节点表示终止节点,在中国象棋里就是一方被将死的情况(或者到达了搜索的最大深
度),后续不会再有着法产生,游戏如果走到这里就会结束。在引擎里通常给红方一个很大的评
估值,如
+30000
,给黑方一个很小的评估值,如
-30000
,来方便地判断这种结束局面。(胜
利局面有稍微不同的表示法,用
-30000+
层数
ply
来表示)
连线
:表示一步着法
Move
,通过这步着法后,局面发生变化,先后手也要交换。
层
:通常的术语是
ply
,复数形式是
plies
,也有称为
levels
,当然与
depth
也是对应的。
这个术语是为了与比赛里常说的回合相区分,一个回合通常包含
2
步,这个
ply
就表示某一方
走了一步。根节点记为
0
层,以下的层数递增。
深度
depth
:要注意是从下到上的,还是从上到下的。(
1
)通常的算法书中都是从下到
上递增的,
即根节点为最大搜索深度,
走到最底部的叶子结点为
0
,
这种算法只要记住一个
depth
值就可以了。
(
2
)而另一种记法是根部结点为
0
,越向下
depth
增加,这时在搜索时就要传递
2
个参数值,
depth
和
maxDepth
,稍微有点啰嗦,应该也会影响一点效率。另外在探查置换
表中的结点时,用第(
1
)种记法也方便一些,因为要知道从当前节点迭代的深度值,否则还要
在置换表中保存
depth
和
maxDepth
两个值。
AlphaBeta
剪枝方法是对
Minimax
方法的优化,它们产生的结果是完全相同的,只不过
运行效率不一样。
这种方法的前提假设与
Minimax
也是一样的:
1
)双方都按自己认为的最佳着法行棋。
2
)对给定的盘面用一个分值来评估,这个评估值永远是从一方(搜索程序)来评价的,
红方有利时给一个正数,黑方有利时给一个负数。
(如果红方有利时返回正数,
当轮到黑方走棋
时,评估值又转换到黑方的观点,如果认为黑方有利,也返回正数,这种评估方法都不适合于常
规的算法描述)
3
)从我们的搜索程序(通常把它称为
Max
)看来,分值大的数表示对己方有利,而对于
对方
Min
来说,它会选择分值小的着法。
但要注意:用
Negamax
风格来描述的
AlphaBeta
中的评估函数,对轮到谁走棋是敏
感的。
也就是说:
在
Minimax
风格的
AlphaBeta
算法中,轮红方走棋时,评估值为
100
,轮黑方走棋评估
值仍是
100
。
但在
Negamax
风格的
AlphaBeta
算法中,轮红方走棋时,评估值为
100
,轮黑方走棋
时评估值要为
-100
。
python alpha beta 剪枝_AlphaBeta剪枝算法相关推荐
- python alpha beta 剪枝_一看就懂的 Alpha-Beta 剪枝算法详解
Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度. 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β 则N有解. 若 α > β 则N无解. ...
- 基于python的AI五子棋实现(极大极小值搜索和alpha beta剪枝)
1.极大极小值搜索介绍 人机博弈是人工智能的重要分支,人们在这一领域探索的过程中产生了大量的研究成果,而极小化极大算法(minimax)是其中最基础的算法,它由Shannon在1950年正式提出. M ...
- 五子棋AI算法第三篇-Alpha Beta剪枝
剪枝是必须的 五子棋AI教程第二版发布啦,地址:https://github.com/lihongxun945/myblog/labels/%E4%BA%94%E5%AD%90%E6%A3%8BAI% ...
- alpha-beta剪枝五子棋c语言,五子棋AI算法第三篇-Alpha Beta剪枝
剪枝是必须的 上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250 ...
- 五子棋AI算法-Alpha Beta剪枝
上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250000,在我的 ...
- Alpha-Beta剪枝(Alpha Beta Pruning)
Alpha-Beta剪枝算法(Alpha Beta Pruning) [说明] 本文基于<<CS 161 Recitation Notes - Minimax with Alpha Bet ...
- alpha,beta剪枝详解
α,β剪枝详解\alpha,\beta剪枝详解α,β剪枝详解 示例图 步骤详解 基础原理 这里我们先要理解什么是α,β\alpha,\betaα,β剪枝:α\alphaα是下界,β\betaβ是上界. ...
- python博弈树_博弈树alpha-beta剪枝搜索的五子棋AI
最近机器学习很火, 乘着这把火,我也学习了一把,但是没有直接学习深度学习,而是遵从一位老前辈,一定要把人工智能的所有方法都了解掌握了,才能真正的掌握人工智能... 我只能说, 路漫漫.. 对于博弈类人 ...
- python 绘图时显示不同的数学符号alpha,beta,偏导、求和等等
在使用python进行绘图时,当涉及当一些数学计算时,常常需要为我们的x.y轴以及标题添加标签,而一些特殊的数学计算符号往往在键盘上无法找到.特此,为了以后寻找方面,将一些常用的数学计算符号等进行汇总 ...
- 【进阶四】Python实现(MD)HVRP常见求解算法——蚁群算法(ACO)
蚁群算法+Split 求解异构车辆路径规划问题 目录 信息传递 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 信息传递 python实现6种智能 ...
最新文章
- 纤维追踪成像理论+核磁共振影像数据处理
- java递归实现数组逆序_Java实现数组全排序(递归)
- 爬取网页时自动获取网页编码信息,并对特殊的乱码页面(压缩过的网页内容)用gzip进行解码。...
- leetcode 反转字符串
- 如何在Kubernetes里创建一个Nginx应用
- 哈希表和红黑树的对比
- 车和家李想批国内电动车虚假里程宣传:特斯拉都打到家门口了别自嗨了
- import java.util_importjava.util.*;classKeyMaster{publi..._考试资料网
- C# ActiveX开发部署更新
- 抽象类及继承(本科生和研究生类)
- truncate表和update 效率_SQL中Truncate的用法
- Spring Boot设置指定包的日志级别
- 流浪宠物管理系统-基于SSM
- html语言怎么修改form边框,form表单样式案例 定义html表单细边框样式
- python假期培训班
- 如何让图片保持原比例,占满整个盒子
- G-002 波峰焊与回流焊的区别
- 使用vscode 编辑运行processing代码
- 这五个数据科学家和机器学习工程师油管博主,你必须关注
- ARM体系结构(1)- 工作模式与工作状态