中国象棋软件-引擎实现(一)概述

程序的基本框架:
从程序的结构上讲,大体上可以将本程序划分为四大部分:
棋局表示、 着法生成、 搜索算法、 局面评估

程序的大概的思想是:
首先使用一个数据结构来描述棋局信息,对某一特定的棋局信息由着法生成器生成当前下棋方所有合法的着法并依次存入着法队列。然后通过搜索算法来逐一读取着法并调用局面评估函数对该着法所产生的后继局面进行评估打分,从中选出一个最有可能导致走棋方取胜的着法。在搜索的过程中还可以采用一些辅助手段来提高搜索的效率。其过程如下图所示:

在搜索算法上我采用了Alpha-Beta搜索。此外,为了提高搜索的效率,我还加进了历史启发以及归并排序等以辅助搜索。这些用的都是前人的东西。本程序最具创造性的地方在于局面评估部分(请允许我用“创造性”这个词,尽管我设计的算法可能很幼稚——从目前电脑的下棋水平来看我不得不这么说,但毕竟耗费了我好多脑细胞啊)。搜索算法和局面评估是整个程序的核心。其中局面评估对计算机的下棋水平起着至关重要的影响。也是今后我的程序想要提高机器“智能”所要着重改进的地方。呵呵,既然如此重要这个就放在最后再讲了。

程序项目的构成:
我为程序建了一个win32控制台项目,这意味着我的程序用了一个DOS的界面(在界面开发出来之前,我通过在DOS窗口中输入坐标、电脑反馈坐标的方式来和电脑下棋,以此测试我的引擎)。
我将各个模块分别写成头文件,最后再包进一个主的cpp文件。我知道这样似乎有点外行,但对像我一样的初学者来说这种方法简单易懂:)

整个项目包含如下文件:
scCChess.cpp
——程序主文件。负责游戏的开始。
scCChess.h
——主头文件。定义了初始化游戏、开始游戏等基本函数。
CChessDef.h
——象棋相关定义。包括棋子棋盘的表示,行棋的基本结构类型等定义。
CChessEvaluate.h
——局面评估。为某一特定局面进行评分。
CChessMove.h
——着法生成器。就当前局面生成某一方所有合法着法。
CChessSearch.h
——搜索部分。对着法队列进行搜索,求出最佳着法。
HistoryHeuristic.h
——历史启发。Alpha-Beta搜索之补充,以提高搜索效率。
SortMove.h
——着法排序。对着法按其历史得分进行降序排序,以提高搜索效率。

下面将陆续介绍程序各部分的实现……

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年1月15日
下一篇 2018年1月16日

相关推荐