开工之前
之前已经实现用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还大的值,那么直接减掉此节点(包括它往后的子节点)
原理如果没看明白