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剪枝算法相关推荐

  1. python alpha beta 剪枝_一看就懂的 Alpha-Beta 剪枝算法详解

    Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度. 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β  则N有解. 若 α > β 则N无解. ...

  2. 基于python的AI五子棋实现(极大极小值搜索和alpha beta剪枝)

    1.极大极小值搜索介绍 人机博弈是人工智能的重要分支,人们在这一领域探索的过程中产生了大量的研究成果,而极小化极大算法(minimax)是其中最基础的算法,它由Shannon在1950年正式提出. M ...

  3. 五子棋AI算法第三篇-Alpha Beta剪枝

    剪枝是必须的 五子棋AI教程第二版发布啦,地址:https://github.com/lihongxun945/myblog/labels/%E4%BA%94%E5%AD%90%E6%A3%8BAI% ...

  4. alpha-beta剪枝五子棋c语言,五子棋AI算法第三篇-Alpha Beta剪枝

    剪枝是必须的 上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250 ...

  5. 五子棋AI算法-Alpha Beta剪枝

    上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250000,在我的 ...

  6. Alpha-Beta剪枝(Alpha Beta Pruning)

    Alpha-Beta剪枝算法(Alpha Beta Pruning) [说明] 本文基于<<CS 161 Recitation Notes - Minimax with Alpha Bet ...

  7. alpha,beta剪枝详解

    α,β剪枝详解\alpha,\beta剪枝详解α,β剪枝详解 示例图 步骤详解 基础原理 这里我们先要理解什么是α,β\alpha,\betaα,β剪枝:α\alphaα是下界,β\betaβ是上界. ...

  8. python博弈树_博弈树alpha-beta剪枝搜索的五子棋AI

    最近机器学习很火, 乘着这把火,我也学习了一把,但是没有直接学习深度学习,而是遵从一位老前辈,一定要把人工智能的所有方法都了解掌握了,才能真正的掌握人工智能... 我只能说, 路漫漫.. 对于博弈类人 ...

  9. python 绘图时显示不同的数学符号alpha,beta,偏导、求和等等

    在使用python进行绘图时,当涉及当一些数学计算时,常常需要为我们的x.y轴以及标题添加标签,而一些特殊的数学计算符号往往在键盘上无法找到.特此,为了以后寻找方面,将一些常用的数学计算符号等进行汇总 ...

  10. 【进阶四】Python实现(MD)HVRP常见求解算法——蚁群算法(ACO)

    蚁群算法+Split 求解异构车辆路径规划问题 目录 信息传递 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 信息传递 python实现6种智能 ...

最新文章

  1. 纤维追踪成像理论+核磁共振影像数据处理
  2. java递归实现数组逆序_Java实现数组全排序(递归)
  3. 爬取网页时自动获取网页编码信息,并对特殊的乱码页面(压缩过的网页内容)用gzip进行解码。...
  4. leetcode 反转字符串
  5. 如何在Kubernetes里创建一个Nginx应用
  6. 哈希表和红黑树的对比
  7. 车和家李想批国内电动车虚假里程宣传:特斯拉都打到家门口了别自嗨了
  8. import java.util_importjava.util.*;classKeyMaster{publi..._考试资料网
  9. C# ActiveX开发部署更新
  10. 抽象类及继承(本科生和研究生类)
  11. truncate表和update 效率_SQL中Truncate的用法
  12. Spring Boot设置指定包的日志级别
  13. 流浪宠物管理系统-基于SSM
  14. html语言怎么修改form边框,form表单样式案例 定义html表单细边框样式
  15. python假期培训班
  16. 如何让图片保持原比例,占满整个盒子
  17. G-002 波峰焊与回流焊的区别
  18. 使用vscode 编辑运行processing代码
  19. 这五个数据科学家和机器学习工程师油管博主,你必须关注
  20. ARM体系结构(1)- 工作模式与工作状态

热门文章

  1. TCL语言编译器安装及使用
  2. Paxos算法和Raft算法
  3. 如何使用Flutter开发web应用
  4. 常用正则表达式匹配Antconc英文句式搭配
  5. 电子邮件验证及部分常用正则表达式
  6. CDA 数据分析师 Level1 基本知识(4)--统计学原理
  7. retainAll用法
  8. 分析Redis集群原理
  9. HTML 标签参考手册 - 功能排序
  10. 区块链清明上河图 2018Q3