中国象棋程序《兵河五四》版本:V0.72
 
作者:范德军
中国原子能科学研究院(北京)
 
  兵河五四,又名“冰河五四”,象征冰河时期刀光剑影正在厮杀的古战场。五四,横五纵四,指示中国象棋棋盘上中兵的位置。名称来源于一传说中的古谱,红棋先手兵五进一,中兵开路,奋不顾身,只为扫清中路的障碍。红棋车马炮全部从中路突破,只进不退,只攻不守。正像传说中的古战场有一只军队,名为“中花军”,后来演变成中华的先祖。中国象棋之兵河五四,象征了中华先祖中道行、不偏不倚、勇往直前的精神。
 
一、简介
 
  《兵河五四》是开源的中国象棋引擎,支持《中国象棋通用引擎协议》(Universal Chinese Chess Protocol,简称UCCI),可以用支持UCCI协议的界面程序加载。为了交流和促进象棋软件的发展,作者提供了的源代码,可以用于任何非商业目的。
 
二、主要博弈技术
 
  1. 当前移动方
 
int Player;
 
  Player=0,为黑棋;Player=1,为红棋。1-Player,表示对方。
 
  2. 棋盘数组
 
int Board[256];
 
  其值为棋子序号,0为无子,16~31为黑子,32~47为红子,顺序为:将车炮马象士兵。使用256(16×16)个格子的棋盘,黑上红下。
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f
90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf
c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf
d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df
e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef
f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff
  
  3. 棋子数组:
 
int Piece[48];
 
  其值为棋盘坐标,0表示不在棋盘上,非0值对应棋盘的位置。
 
  4. 着法数据结构:
 
unsigned long move;
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
unsigned short HistoryValue; unsigned char nSrc; unsigned char nDst;
unsigned char CheckingPiece; unsigned char CapturedPiece;
  5. 位行与位列:
 
unsigned long xBitBoard[16], yBitBoard[16];
const int xBitMask[256], yBitMask[256];
 
  位行与位列,代替了循环,非常精简而且高效。用于产生车炮的横向和纵向移动,车炮着法合法性校验,将军检测,计算炮架子的位置,以及车炮非吃子移动的自由度。
 
  6. 着法预产生数组:
 
  7. 置换表:
 
  采用4次探察技术,深度优先的原则,每次搜索无须清除Hash表。
 
  8. 搜索技术:
  • 开局:使用开局库中的着法
  • 中局:适应性空着裁剪(Adaptive Null-Move Pruning)
  • 残局:带校验空着裁剪(Verified Null-Move Pruning)
  • 迭代加深搜索(Iterative Deepening)
  • 内部深度迭代(Internal Iterative Deepening)
  • 历史裁减(History Pruning)
  • 寂静搜索(Quiescence Search)
  •   9. 着法排序:
  • 将军杀手
  • HashMove
  • 好的吃子移动
  • 杀手移动
  • 非吃子移动以及剩余的吃子移动,使用历史启发
  •   遇到将军局面,跳过杀手移动和好的吃子移动,使用将军逃避产生器生成解将的着法。目前还未实现非完全解将,所以还不能实现但一应着延伸,但在很大程度上减少了将军判断的次数。
     
      10. 估值函数:
     
      正在调试。
     
      欢迎交流!
     
    联系方式
     
      QQ83021504
      eMailfan_de_jun<at>sina.com.cn
     
      下载地址:http://www.xqbase.com/league/bhws.7z
  • 上一篇 UCCI引擎——ANITA
  • 下一篇 UCCI引擎——理治棋壮
  • 返 回 象棋百科全书——电脑象棋联赛
  • www.xqbase.com