五子棋博弈树剪枝c语言,五子棋AI博弈树之带Alpha-Beta剪枝的极大极小过程函数...
在博弈树的极大极小过程中是对每一个树节点(称它为全局搜索吧)都要计算其估值,然后在这些估值中做出选择。如果搜索比较大的话,全局搜索的方式效率会非常低,因为有一些节点根本不需要搜索。那么怎么加快搜索的速度呢?可以采用Alpha-Beta剪枝方法。
Alpha-Beta剪枝方法如下:
任何Max节点n的alpha值如果大于或等于它先辈节点的bete值,那么节点n以下的分支就不用搜索了。这是beta剪枝。
任何Min节点的beta值如果小于或等于它先辈节点的alpha值,那么节点n以下的分支也不用搜索了。这是alpha剪枝。
下面给出代码:
// 带Alpha-Beta剪枝的极大极小过程函数,按指定的深度,搜索产生一个走法
int ChessAI::maxMinWithAlphaBetaCut(int** chessBoard, int whiteOrBlack, int depth, Point opPos, int alpha, int beta)
{
int bestValue, curValue; // bestValue是最好的分数, curValue是试探下子后,该次下子的分数
if (isBE5AtPoint(chessBoard, whiteOrBlack == 2 ? 1 : 2, opPos)) // 如果在这里可以分出胜负
{
if (whiteOrBlack == 1) // 电脑赢。这里为什么不是2呢?因为这里whiteOrBlack与opPos是相反关系
{
return FIVE_ALIKE;
}
else // 玩家赢
{
return -FIVE_ALIKE;
}
}
else if (depth == 0) //深度为0,估值返回
{
bestValue = getValue(chessBoard);
}
else
{
// 下面开始是利用了剪枝思想的极大极小过程
if (whiteOrBlack == 2) // 此节点为电脑白子,取极大值
{
// 下面开始对各个可以下的子进行评分
for (int i = 0; i <= 14; i++)
{
for (int j = 0; j <= 14; j++)
{
if (chessBoard[i][j] == 0) // 如果可以下子
{
if (alpha >= beta) // alpha剪枝
{
return alpha;
}
chessBoard[i][j] = whiteOrBlack; // 试探下子
curValue = maxMinWithAlphaBetaCut(chessBoard, 1, depth - 1, cocos2d::Point(i, j), alpha, beta);
chessBoard[i][j] = 0; // 撤消下子
if (curValue > alpha)
{
alpha = curValue; //子节点的最大值记录到alpha中
}
}
}
}
bestValue = alpha;
}// end if (whiteOrBlack == 2)
else if (whiteOrBlack == 1) // 此节点为玩家黑子,取极小值
{
for (int i = 0; i <= 14; i++)
{
for (int j = 0; j <= 14; j++)
{
if (chessBoard[i][j] == 0) // 如果可以下子
{
if (alpha >= beta) // beta剪枝
{
return beta;
}
chessBoard[i][j] = whiteOrBlack; // 试探下子
curValue = maxMinWithAlphaBetaCut(chessBoard, 2, depth - 1, cocos2d::Point(i, j), alpha, beta);
chessBoard[i][j] = 0; // 撤消下子
if (curValue < beta)
{
beta = curValue; //子节点的最小值记录到beta中
}
}
}
} // end else if (whiteOrBlack == 1)
bestValue = beta;
}
} // end else : (depth > 0)
return bestValue;
}
五子棋博弈树剪枝c语言,五子棋AI博弈树之带Alpha-Beta剪枝的极大极小过程函数...相关推荐
- alpha-beta剪枝五子棋c语言,五子棋AI算法第三篇-Alpha Beta剪枝
剪枝是必须的 上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250 ...
- 基于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% ...
- 五子棋AI算法-Alpha Beta剪枝
上一篇讲了极大极小值搜索,其实单纯的极大极小值搜索算法并没有实际意义. 可以做一个简单的计算,平均一步考虑 50 种可能性的话,思考到第四层,那么搜索的节点数就是 50^4 = 6250000,在我的 ...
- alpha,beta剪枝详解
α,β剪枝详解\alpha,\beta剪枝详解α,β剪枝详解 示例图 步骤详解 基础原理 这里我们先要理解什么是α,β\alpha,\betaα,β剪枝:α\alphaα是下界,β\betaβ是上界. ...
- 五子棋对弈程序c语言,五子棋程序纯C语言版.doc
五子棋程序纯C语言版 五子棋程序纯C语言版 //以前发的代码里因为有C++的一点点代码,现在我把那C++的代码改掉.重发出来.//但是这些代码由于编译器的原因,在TC下仍无法运行.请使用VC.#inc ...
- 五子棋算杀c语言,五子棋AI算法-算杀(示例代码)
关于剪枝问题 前面讲到的通过Alpha-Beta剪枝和启发式搜索可以将4层搜索的平均时间降低到1秒以下.只有这两个优化方式其实目前最多可以做到6层搜索,就是把AI和玩家各向后推算三步. 6层搜索的棋力 ...
- c语言五子棋毕业设计,基于c语言五子棋小游戏--本科生毕业设计.doc
五子棋小游戏 需求分析 现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生.大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是 ...
- 五子棋人机对弈 c语言,五子棋人机对弈系统
********本科毕业论文(设计)任务书 论文(设计)题目:五子棋人机对弈系统 学院:专业:班级: 学生姓名:学号:指导教师:职称: 1.论文(设计)研究目标及主要任务 研究目标: 采用具有一定智能 ...
最新文章
- 使用移动设备 连接到Exchange Server 2007
- CentOS 7下使用chkconfig添加的服务无法使用/etc/profile里面的环境变量
- 360浏览器清凉新版让手机解暑
- 智慧城市java开发_智慧城市主界面开发 使用eclipse开发智慧城市APP源码 - 下载 - 搜珍网...
- 多表查询, 聚集查询和分组查询
- 基于python的-使用正则表达式验证手机号
- 103 规约分析总结
- html转换成pdf后变模糊,使用html2canvas.js和jspdf.js把网页转换成 pdf 不清晰怎么解决...
- 日本麻将中的牌型名称,充满格调与文艺
- xss.haozi.me
- 百度首页HTML(简单代码)
- Conlletion集合框架总结大全
- 如何在指定网站搜索内容
- 【Linux】-- Mysql(2) : 创建数据库和数据表
- 图书借阅java设计报告_JAVA课程设计报告图书借阅系统.pdf
- 修改远程桌面默认端口
- 论文翻译:ViBe+算法(ViBe算法的改进版本)
- linux如何查看有几个网卡,linux 查看有几块网卡
- 计算机信息处理技术水平证考试,2015年(上)全国信息技术水平考试计算机信息处理技术水平证书考试试卷...
- 年产10亿颗的555定时芯片,你知道是怎么工作么?陈老师告诉你
热门文章
- 05、HttpServletRequest
- ok6410 u-boot-2012.04.01移植六完善MLC NAND支持
- vue 添加完数据后刷新页面_页面刷新vuex数据消失
- jquery对象PHP转换,jQuery对象与DOM对象转换方法详解_jquery
- python如何返回多个值_python- 如何返回多个值 | 学步园
- vue中父子组件先后渲染_VUE如何实现子父组件、父子组件、兄弟组件传值
- centos7 ssr一键脚本_RHEL7(Centos7)下使用shell脚本一键部署服务
- 弹出层,div的写法
- 正直摄影方式的精度估算式_[公务员考试]数量关系——估算法与直除法
- mysql设置keepalived_MySQL高可用性之Keepalived+MySQL(双主热备)