中国象棋程序设计(五)置换表
声明:本程序设计参考象棋巫师源码(开发工具dephi 11,建议用delphi 10.3以上版本)。
这一章主要介绍置换表。本章目标:
- 实现置换表;
- 采用置换表走法、杀手走法等多种启发方式。
5.1 置换表
没有置换表,就称不上是完整的计算机博弈程序。在搜索过程中,某个搜索结果可能会出现这么多次,这浪费了很多时间。为避免重复搜索,保存搜索结果的表,就是置换表。由于哈希表的读写速度很快,通常置换表就由哈希表来实现。
置换表非常简单,以局面的 Zobrist Key mod HASH_SIZE 作为索引值。每个置换表项存储的内容无非就是:A. 深度,B. 标志,C. 分值,D. 最佳走法,E. Zobrist Lock 校验码。置换表结构:
{置换表结构} type HashItem=record ucDepth, ucFlag:Byte;//深度、标志 svl:SmallInt; //分值 wmv, wReserved:Word; //最佳走法 dwLock0, dwLock1:Cardinal; //Zobrist检验码 end;