depth: 白方第4步深度上调到18

顺带将 ai.ttMove 修正为 ai.nextMove()
并且多加了几个 nodeCompare 的 策略但未启用。

自对弈时长 10s 多。对比2000盘自对弈结果,速度为修改前的90%。
自对弈棋谱改变,最后一着为 (2,7)->(2,6) 三次重复局面和棋。
This commit is contained in:
Calcitem 2020-05-04 02:31:28 +08:00
parent 4013b5bb7f
commit 36daf7bb4f
4 changed files with 41 additions and 13 deletions

View File

@ -107,6 +107,8 @@
#define COMPARE_SCORE_PREFERRED
#else
#define COMPARE_RATING_ONLY
//#define COMPARE_RATING_1ST_VALUE_2ND
//#define COMPARE_VALUE_1ST_RATING_2ND
#endif // HOSTORY_HEURISTIC
#define PREFETCH_SUPPORT

View File

@ -83,7 +83,7 @@ depth_t AIAlgorithm::changeDepth(depth_t origDepth)
const depth_t placingDepthTable_12[] = {
+1, 2, +2, 4, /* 0 ~ 3 */
+4, 12, +12, 12, /* 4 ~ 7 */
+4, 12, +12, 18, /* 4 ~ 7 */
+12, 16, +16, 16, /* 8 ~ 11 */
+16, 16, +16, 17, /* 12 ~ 15 */
+17, 16, +16, 15, /* 16 ~ 19 */
@ -271,7 +271,7 @@ Node *Node::addChild(
}
#endif // TT_MOVE_ENABLE
// 若没有启用置换表,或启用了但为叶子节点,则 ttMove 为0
// 若没有启用置换表,或启用了但为叶子节点,则 nextMove 为0
square_t sq = SQ_0;
if (m > 0) {
@ -386,6 +386,30 @@ Node *Node::addChild(
#ifdef ALPHABETA_AI
int AIAlgorithm::nodeCompare(const Node *first, const Node *second)
{
#ifdef COMPARE_RATING_1ST_VALUE_2ND
if (first->rating == second->rating) {
if (first->value == second->value) {
return 0;
}
return (first->value < second->value ? 1 : -1);
}
return (first->rating < second->rating ? 1 : -1);
#endif
#ifdef COMPARE_VALUE_1ST_RATING_2ND
if (first->value == second->value) {
if (first->rating == second->rating) {
return 0;
}
return (first->rating < second->rating ? 1 : -1);
}
return (first->value < second->value ? 1 : -1);
#endif
#ifdef COMPARE_RATING_ONLY
return second->rating - first->rating;
#endif
@ -1039,7 +1063,7 @@ void AIAlgorithm::undoNullMove()
}
#ifdef ALPHABETA_AI
const char* AIAlgorithm::ttMove()
const char* AIAlgorithm::nextMove()
{
char charChoose = '*';
@ -1050,11 +1074,15 @@ const char* AIAlgorithm::ttMove()
Board::printBoard();
int moveIndex = 0;
bool foundBest = false;
int cs = root->childrenSize;
for (int i = 0; i < cs; i++) {
if (root->children[i]->move != best) {
charChoose = ' ';
} else {
charChoose = '*';
foundBest = true;
}
loggerDebug("[%.2d] %d\t%s\t%d\t%d\t%u %c\n", moveIndex,
@ -1112,8 +1140,11 @@ const char* AIAlgorithm::ttMove()
}
#endif // TRANSPOSITION_TABLE_DEBUG
#endif // TRANSPOSITION_TABLE_ENABLE
return moveToCommand(best);
if (foundBest == false) {
assert(0);
} else {
return moveToCommand(best);
}
}
#endif // ALPHABETA_AI

View File

@ -185,7 +185,7 @@ public:
int search(depth_t depth);
// 返回最佳走法的命令行
const char *ttMove();
const char *nextMove();
#endif // ALPHABETA_AI
// 暂存局面

View File

@ -109,12 +109,7 @@ deque<int> openingBookDeque(
21, 23,
19, 20,
17, 18,
15, 10,
26, 12,
28, 11,
27, 9, -15,
29, -12, 25,
13, -25
15,
}
);
@ -196,7 +191,7 @@ void AiThread::run()
strCommand = "draw";
emitCommand();
} else {
strCommand = ai.ttMove();
strCommand = ai.nextMove();
if (strCommand && strcmp(strCommand, "error!") != 0) {
loggerDebug("Computer: %s\n\n", strCommand);
emitCommand();