c++ - 为什么我的转置表会导致我的国际象棋引擎挂起棋子?
问题描述
这是我对转置表的实现(它基于这个伪代码)。
我用换位表测试了我的国际象棋引擎,每隔一段时间它就会挂起棋子,或者有时会配对。例如,我经常将受保护的棋子与皇后放在一起。当我禁用我的转置表时,它不再挂起。显然转置表有问题。
我见过这个问题,但答案对我没有帮助。
当然,感谢大家帮助我。
这是代码:
//This bit looks up the current hash in the Transposition table to retrieve Alpha and Beta
//transposition is an unordered map holding keys of ULL hash codes and pairs of Alpha and Beta
auto previous = transposition.find(hashCode); //hashCode is the Zobrist Hash of this position
if (!transposition.empty() && previous != transposition.end()) {
ABPair pair = previous->second;
if (pair.alpha >= beta) //beta cutoff
return pair.alpha;
if (pair.beta <= alpha) //alpha cutoff
return pair.beta;
alpha = max(pair.alpha, alpha);
beta = min(pair.beta, beta);
}
//This bit inserts positions into the transposition table
if (evaluation /*this is the evaluation of the current position*/ <= alpha) {
ABPair abpair = { INT_MIN, evaluation };
pair<unsigned long long, ABPair> pair = { hashCode /*Zobrist hash*/, abpair };
transposition.insert(pair);
}
else if (evaluation > alpha && evaluation < beta) {
ABPair abpair = { evaluation, evaluation };
pair<unsigned long long, ABPair> pair = { hashCode, abpair };
transposition.insert(pair);
}
else if (evaluation >= beta) {
ABPair abpair = { evaluation, INT_MAX };
pair<unsigned long long, ABPair> pair = { hashCode, abpair };
transposition.insert(pair);
}
解决方案
推荐阅读
- flutter - 颤振键盘不关闭
- c# - .Net Core Razor 有错误的文化
- amazon-web-services - 如何在 scala 胶水中将二进制转换为字符串
- r - 如何使用回归模型删除 ggplot 中的图例?
- python - 我在 matplotlib 中绘制绝对值函数,而图形只是围绕顶点
- docker - Docker 容器中的 .NET Core 应用程序和 System.DirectoryServices
- tags - 显示一个非空的 ALT 标签
- javascript - 如何使用呈现的 html 模仿 tinymce textarea 行为
- c# - Windows 窗体应用程序的基于 VPN 的 Windows 身份验证
- android - Android,Kotlin 中的自定义视图