五子棋AI第二篇 AB剪枝和启发搜索(Java)

本文介绍了如何使用Java实现五子棋AI,并通过AB剪枝和启发式搜索进行算法优化。AB剪枝通过排除不利节点减少搜索空间,启发式搜索则通过对空子序列排序提高效率。文章提供相关错误总结、原理分析及代码参考链接。
摘要由CSDN通过智能技术生成

开工之前

之前已经实现用C语言大致实现了一个AI下棋算法,接下来用Java做一个简单界面,在此之前,把算法进行优化。把界面贴出来:
游戏界面
之所以选择Java,有几点考虑,
1、Java虽然没学过但是语法与C语言很类似,用起来容易上手。
2、好友老周是Java大神,有问题可以随时请教。
3、作为一名写过驱动代码的程序猿,没弄过界面设计也不想用IDE。
Java界面虽然不怎么好看,但用起来比较方便,一个txt编辑器就够了。

简单总结下刚用Java时出过的错误。
1、jdk是编译开发环境。jre是运行环境,用于跨平台的支持。
2、JDK6以上的版本,不用指定CLASSPATH,只需要指定PATH即可。不指定会出现javac指令找不到。
3、java test报错,找不到或无法加载主类。
java区分大小写,Windows不区分大小写。如果文件名和主类为Test。
javac编译后为test.class执行java test会报错:找不到或无法加载主类,
正确执行应该是:java Test。
4、Windows下DOC窗口编译,如果需要支持中文,加上编译选项 -encoding
如编译 javac -encoding UTF-8 *.java
5、构造函数不需要返回值,void类型都不需要。

AB剪枝

为什么需要AB剪枝优化:
简单计算一下,如果每一步有50种可能,为了很普通棋手水平接近,那么AI至少要推算4步,就需要搜索50^4即6250000个节点,普通计算机得需要2分钟以上。这肯定不理想。
AB剪枝基本原理:
双方不会选择对自己不利的点下棋,基于这个前提,可以直接不考虑某个不利于自己节点。
在电脑下棋的MAX层,假设当前搜索到的最大值记为X,如果发现下一个节点的下一层会产生一个比X还小的值,那么直接减掉此节点(包括它往后的子节点)
同理在玩家下棋的MIN层,假设当前搜索到的最小值记为Y,如果发现下一个节点的下一层会产生一个比Y还大的值,那么直接减掉此节点(包括它往后的子节点)

原理如果没看明白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值