【五子棋AI】AI的基本结构——局面评价
来源:互联网 发布:网络教育专升本难度 编辑:程序博客网 时间:2024/06/11 16:30
如何判断一个走法优劣?我们使用一个量化的形式,即一个分值,例如一种典型的情况:对方冲四,己方一穷二白,那么除了封堵点之外,其他点都导致输棋。从封堵过程来看,如果冲4分值为1000,那么走封堵之后,对方评价值将减少1000。这无疑是一个很好的评价方式。基于程序特点,我使用的评价方法并不是传统的评价当前有几个冲4,有几个活3,而是评价当前能形成几个冲4,能形成几个活3,即针对“冲棋点”进行评价而不是针对已有棋型进行评价,也许又是五子棋AI有别于象棋AI的一个显著特点。
在前面介绍过程中已经说明将冲棋点按段排序,这样只需要遍历每个段取得个数(我也曾试验直接记录个数,但试验结果是那样做得不偿失),然后计算双方得分并做减法即可。在我的程序中,使用了一组没有经过严格论证的得分(额,说白了就是我瞎猜的),但一直没有出现什么大问题,这可能和分段排序有关。按棋型从低到高的给分分别是:
1、4、8、12、256、10、16、320、384、256、40960
10分的棋型是冲3,它前面是33 ,40960是连5或长连上的点的得分(这个是一个特殊情况,它不是冲棋点,前面那些都是空格的得分,而这个是棋子的得分)。
这样一来,就很容易给出一个评价函数(其中win_value=40960*32):
Function Evaluate() As Integer
If 对方连五(或长连) Return -ConstValue.WIN_VALUE
If 己方连五(或长连) Return ConstValue.WIN_VALUE
If 己方可成5 return ConstValue.WIN_VALUE
if 对方成5点有两个 return - ConstValue.WIN_VALUE
For type = 本方冲1 to 本方成42
统计类型个数
EvaluateVal += 类型个数 * 类型得分
Next
For type = 对方冲1 to 对方成5
统计类型个数
EvaluateVal -= 类型个数 * 类型得分
Next
Return EvaluateVal
End Function
这个函数使用了“提前剪裁”的想法,即前4行代码,需要注意的就是它们的先后顺序。当然为了程序更优,可以从更高棋型开始统计而不一定要从冲1,因为冲1本身就没有什么价值,我试验的结论是如果从冲2开始统计,则可以提高3-5%的效率并且也没有什么问题。
全部文章和源码整理完成,以后更新也会在下面地址:
http://www.vbdevelopers.org
http://www.softos.org
- 【五子棋AI】AI的基本结构——局面评价
- 【五子棋AI】AI的基本结构——局面表示
- 【五子棋AI】AI的基本结构——招法生成器
- 【五子棋AI】AI的基本结构——剪裁函数
- AI—五子棋
- 五子棋的简单AI
- 【五子棋AI】多线程——多线程PVS
- 五子棋AI
- AI----------五子棋
- AI五子棋
- 五子棋AI
- 五子棋AI的应用思路
- 简单AI的五子棋程序
- 五子棋AI算法的实现
- 【五子棋AI】一、AI概述
- 【五子棋AI】一、AI概述 .
- 【五子棋AI】启发算法——置换表
- 【五子棋AI】启发算法——主要变例搜索
- C语言 5个数最值问题
- [数据结构]从中序表达式到逆序表达式(逆波兰式)(四则运算表达式求值)
- 一个KMP算法(c++版)
- 设置linux内核启动参数-挂载NFS根文件系统
- 数字
- 【五子棋AI】AI的基本结构——局面评价
- 面向对象设计的原则
- JAVA处理日期时间常用方法
- 一步步将vim改造成C/C++开发环境(IDE)
- 这些话,是乔布斯给世间留下的真正伟大礼物
- Keil MDK下如何设置非零初始化变量
- 史上最全Android开发之adb
- 基于FBX SDK的FBX模型解析与加载-(一)
- 基于FBX SDK的FBX模型解析与加载 -(二)