From b17bd6e80556d976565515d46771108f16abac6c Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Fri, 28 Oct 2022 20:55:26 +0200 Subject: [PATCH 01/17] Templated search and modified returning qsearch tt scores Bench: 1404031 --- src/constants.h | 4 ++++ src/search.cpp | 56 +++++++++++++++++++++++++++++-------------------- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/constants.h b/src/constants.h index 11f6488..45b4b73 100644 --- a/src/constants.h +++ b/src/constants.h @@ -113,6 +113,10 @@ enum Color { COLOR_EMPTY = 2, WHITE = 0, BLACK = 1 }; +enum NodeType { + ROOT_NODE, PV_NODE, NON_PV_NODE +}; + constexpr PieceType PIECE_TYPES_BY_VALUE[6] = {PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING}; struct Piece { diff --git a/src/search.cpp b/src/search.cpp index c73f775..c7d366a 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -131,18 +131,21 @@ Score see(const Position &pos, Move move) { return e[0]; } - +template Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { + constexpr bool pvNode = type != NON_PV_NODE; + constexpr bool nonPvNode = !pvNode; + if (shouldEnd()) return UNKNOWN_SCORE; if (ply > selectiveDepth) { selectiveDepth = ply; } - bool ttHit; + bool ttHit = false; Score ttScore = ttProbe(pos.getHash(), ttHit, 0, alpha, beta); - if (ttScore != UNKNOWN_SCORE) return ttScore; + if (ttScore != UNKNOWN_SCORE && nonPvNode) return ttScore; Score staticEval = eval(pos); @@ -173,7 +176,7 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { pos.makeMove(m); - Score score = -quiescence(pos, -beta, -alpha, ply + 1); + Score score = -quiescence(pos, -beta, -alpha, ply + 1); pos.undoMove(m); @@ -197,26 +200,33 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { return alpha; } +template Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score beta, Ply ply) { + constexpr bool rootNode = type == ROOT_NODE; + constexpr bool pvNode = type != NON_PV_NODE; + constexpr bool notRootNode = !rootNode; + constexpr bool nonPvNode = !pvNode; + constexpr NodeType nextPv = rootNode ? PV_NODE : type; + if (shouldEnd()) return UNKNOWN_SCORE; - if (pos.getMove50() >= 4 && ply > 0 && pos.isRepetition()) return DRAW_VALUE; + if (pos.getMove50() >= 4 && notRootNode && pos.isRepetition()) return DRAW_VALUE; bool ttHit = false; - bool pvNode = beta - alpha > 1; Score matePly = MATE_VALUE - ply; Score ttScore = ttProbe(pos.getHash(), ttHit, depth, alpha, beta); - if (!pvNode && ttScore != UNKNOWN_SCORE) return ttScore; + + if (nonPvNode && ttScore != UNKNOWN_SCORE) return ttScore; // Mate distance pruning - if (ply > 0) { + if (notRootNode) { if (alpha < -matePly) alpha = -matePly; if (beta > matePly - 1) beta = matePly - 1; if (alpha >= beta) return alpha; } - if (depth <= 0) return quiescence(pos, alpha, beta, ply); + if (depth <= 0) return quiescence(pos, alpha, beta, ply); MoveList moves = {pos, ply, false}; @@ -233,13 +243,13 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score Score staticEval = state->eval = eval(pos); - if (ply > 0 && !inCheck) { + if (notRootNode && !inCheck) { bool improving = ply >= 2 && staticEval >= (state - 2)->eval; // Razoring - if (depth == 1 && !pvNode && staticEval + RAZOR_MARGIN < alpha) { - return quiescence(pos, alpha, beta, ply); + if (depth == 1 && nonPvNode && staticEval + RAZOR_MARGIN < alpha) { + return quiescence(pos, alpha, beta, ply); } // Reverse futility pruning @@ -249,7 +259,7 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score return beta; // Null move pruning - if (!pvNode && !(state - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { + if (nonPvNode && !(state - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { // We don't want to make a null move in a Zugzwang position if (pos.pieces(color) | pos.pieces(color) | pos.pieces(color) | pos.pieces(color)) { @@ -258,7 +268,7 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score state->move = Move(); pos.makeNullMove(); - Score score = -search(pos, state + 1, depth - R, -beta, -beta + 1, ply + 1); + Score score = -search(pos, state + 1, depth - R, -beta, -beta + 1, ply + 1); pos.undoNullMove(); if (score >= beta) { @@ -269,9 +279,9 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score } // Internal iterative deepening - if (!ttHit && !pvNode) depth--; + if (!ttHit && nonPvNode) depth--; - if (depth <= 0) return quiescence(pos, alpha, beta, ply); + if (depth <= 0) return quiescence(pos, alpha, beta, ply); } // Check extension @@ -290,7 +300,7 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score Score score; // We can prune the move in some cases - if (ply > 0 && !pvNode && !inCheck && alpha > -WORST_MATE) { + if (notRootNode && nonPvNode && !inCheck && alpha > -WORST_MATE) { // Late move/movecount pruning if (depth <= LMP_DEPTH && index >= LMP_MOVES + depth * depth && m.isQuiet()) @@ -302,23 +312,23 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score ttPrefetch(pos.getHash()); if (index == 0) { - score = -search(pos, state + 1, depth - 1, -beta, -alpha, ply + 1); + score = -search(pos, state + 1, depth - 1, -beta, -alpha, ply + 1); } else { // Late move reduction if (!inCheck && depth >= LMR_DEPTH && index >= LMR_MIN_I + pvNode * LMR_PVNODE_I && !m.isPromo() && m.isQuiet() && m != killerMoves[ply][0] && m != killerMoves[ply][1]) { - score = -search(pos, state + 1, depth - reductions[index][depth], -alpha - 1, -alpha, - ply + 1); + score = -search(pos, state + 1, depth - reductions[index][depth], -alpha - 1, -alpha, + ply + 1); } else score = alpha + 1; // Principal variation search if (score > alpha) { - score = -search(pos, state + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + score = -search(pos, state + 1, depth - 1, -alpha - 1, -alpha, ply + 1); if (score > alpha) { - score = -search(pos, state + 1, depth - 1, -beta, -alpha, ply + 1); + score = -search(pos, state + 1, depth - 1, -beta, -alpha, ply + 1); } } @@ -386,7 +396,7 @@ Score searchRoot(Position &pos, Score prevScore, Depth depth, bool uci) { if (alpha < -ASPIRATION_BOUND) alpha = -INF_SCORE; if (beta > ASPIRATION_BOUND) beta = INF_SCORE; - Score score = search(pos, stateStack + 1, depth, alpha, beta, 0); + Score score = search(pos, stateStack + 1, depth, alpha, beta, 0); if (score == UNKNOWN_SCORE) return UNKNOWN_SCORE; From 5720e3fdc40ca9aea5af801c456fbaaff6a24266 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Sat, 29 Oct 2022 11:23:26 +0200 Subject: [PATCH 02/17] Made tt entries more accessible in search Bench: 1403658 --- src/search.cpp | 18 +++++++++++++----- src/tt.cpp | 22 +++++----------------- src/tt.h | 2 +- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index c7d366a..fe4d2f8 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -144,8 +144,12 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { } bool ttHit = false; - Score ttScore = ttProbe(pos.getHash(), ttHit, 0, alpha, beta); - if (ttScore != UNKNOWN_SCORE && nonPvNode) return ttScore; + TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, 0, alpha, beta); + if (ttHit && nonPvNode && (ttEntry->flag == EXACT || + (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || + (ttEntry->flag == BETA && ttEntry->eval >= beta))) { + return ttEntry->eval; + } Score staticEval = eval(pos); @@ -195,7 +199,6 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { } - // TODO elo test storing null move instead of bestMove ttSave(pos.getHash(), 0, alpha, ttFlag, bestMove); return alpha; } @@ -215,9 +218,14 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score bool ttHit = false; Score matePly = MATE_VALUE - ply; - Score ttScore = ttProbe(pos.getHash(), ttHit, depth, alpha, beta); + TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, depth, alpha, beta); - if (nonPvNode && ttScore != UNKNOWN_SCORE) return ttScore; + if (ttHit && nonPvNode && + ttEntry->depth >= depth && (ttEntry->flag == EXACT || + (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || + (ttEntry->flag == BETA && ttEntry->eval >= beta))) { + return ttEntry->eval; + } // Mate distance pruning if (notRootNode) { diff --git a/src/tt.cpp b/src/tt.cpp index 5ff7476..dd0662d 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -65,7 +65,7 @@ void ttResize(unsigned int MBSize) { } -Score ttProbe(U64 hash, bool &ttHit, Depth depth, Score alpha, Score beta) { +TTEntry *ttProbe(U64 hash, bool &ttHit, Depth depth, Score alpha, Score beta) { TTBucket *bucket = getBucket(hash); TTEntry *entry; if (bucket->entryA.hash == hash) { @@ -74,25 +74,13 @@ Score ttProbe(U64 hash, bool &ttHit, Depth depth, Score alpha, Score beta) { } else if (bucket->entryB.hash == hash) { entry = &bucket->entryB; } else { - return UNKNOWN_SCORE; + return nullptr; } - ttHit = true; - if (std::abs(entry->eval) > MATE_VALUE - 100) return UNKNOWN_SCORE; - - if (entry->depth >= depth) { - if (entry->flag == EXACT) { - return entry->eval; - } - if (entry->flag == ALPHA && entry->eval <= alpha) { - return alpha; - } - if (entry->flag == BETA && entry->eval >= beta) { - return beta; - } - } + if (std::abs(entry->eval) > MATE_VALUE - 100) return nullptr; - return UNKNOWN_SCORE; + ttHit = true; + return entry; } void ttSave(U64 hash, Depth depth, Score eval, EntryFlag flag, Move bestMove) { diff --git a/src/tt.h b/src/tt.h index d7d9434..29106a1 100644 --- a/src/tt.h +++ b/src/tt.h @@ -53,7 +53,7 @@ void ttClear(); void ttFree(); -Score ttProbe(U64 hash, bool &ttHit, Depth depth, Score alpha, Score beta); +TTEntry *ttProbe(U64 hash, bool &ttHit, Depth depth, Score alpha, Score beta); void ttSave(U64 hash, Depth depth, Score eval, EntryFlag flag, Move bestMove); From af6e18592123815ff2a6211913bd4fdd89fb9922 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Sun, 30 Oct 2022 14:55:13 +0100 Subject: [PATCH 03/17] Speed Bench: 1403658 --- src/search.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index fe4d2f8..a8bc26e 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -236,19 +236,9 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score if (depth <= 0) return quiescence(pos, alpha, beta, ply); - MoveList moves = {pos, ply, false}; - Color color = pos.getSideToMove(); bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); - if (moves.count == 0) { - if (inCheck) { - return -matePly; - } else { - return DRAW_VALUE; - } - } - Score staticEval = state->eval = eval(pos); if (notRootNode && !inCheck) { @@ -296,6 +286,15 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score if (inCheck) depth++; + MoveList moves = {pos, ply, false}; + if (moves.count == 0) { + if (inCheck) { + return -matePly; + } else { + return DRAW_VALUE; + } + } + Move bestMove; EntryFlag ttFlag = ALPHA; int index = 0; From 994aaf9cc07f221e9de54540dacfebe52272b711 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Mon, 31 Oct 2022 14:10:28 +0100 Subject: [PATCH 04/17] Major rewrite pt 1 Bench: 5638571 --- src/Makefile | 2 +- src/bench.cpp | 19 +++++++++++++------ src/constants.h | 2 ++ src/move_ordering.cpp | 2 +- src/move_ordering.h | 2 +- src/search.cpp | 44 ++++++++++++++++++++++++++++++++++++------- src/search.h | 5 ++++- src/timeman.cpp | 42 ++++++++++++++++++++--------------------- src/timeman.h | 4 +++- src/uci.cpp | 44 ++++++++++++++++--------------------------- src/uci.h | 29 ++++++++++++++++++---------- 11 files changed, 118 insertions(+), 77 deletions(-) diff --git a/src/Makefile b/src/Makefile index 522569f..818d24e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -3,7 +3,7 @@ TARGET_FLAGS = -static -static-libgcc -static-libstdc++ ARCH=native NAME = BlackCore VERSION_MAJOR = 2 -VERSION_MINOR = 0 +VERSION_MINOR = 1 OBJECT_DIR = objects SOURCES := $(wildcard *.cpp) OBJECTS := $(patsubst %.cpp, $(OBJECT_DIR)/%.o, $(SOURCES)) diff --git a/src/bench.cpp b/src/bench.cpp index eb956cc..ad7d591 100644 --- a/src/bench.cpp +++ b/src/bench.cpp @@ -31,9 +31,9 @@ struct TestPosition { const unsigned int posCount = 10; -const unsigned int searchTestHashSize = 16; +const unsigned int searchTestHashSize = 32; -const Depth SEARCH_DEPTH = 13; +const Depth SEARCH_DEPTH = 15; const TestPosition testPositions[posCount] = { // Positions from CPW @@ -82,13 +82,20 @@ void testSearch() { initSearch(); ttResize(searchTestHashSize); - startSearch(0, 0, 0, 0); + U64 totalNodes = 0; + U64 nps; + for (const TestPosition &tPos : testPositions) { ttClear(); Position pos = {tPos.fen}; - std::atomic a; - iterativeDeepening(pos, SEARCH_DEPTH, false, std::ref(a)); + SearchInfo info; + info.maxDepth = SEARCH_DEPTH; + info.uciMode = false; + startSearch(info, pos, 1); + joinThread(true); + totalNodes += nodeCount; + nps += getNps(); } - std::cout << nodeCount << " nodes " << getNps() << " nps" << std::endl; + std::cout << totalNodes << " nodes " << nps / posCount << " nps" << std::endl; } diff --git a/src/constants.h b/src/constants.h index 45b4b73..8720b33 100644 --- a/src/constants.h +++ b/src/constants.h @@ -41,6 +41,8 @@ constexpr Score MATE_VALUE = 100000; constexpr Score WORST_MATE = MATE_VALUE - 100; constexpr Score DRAW_VALUE = 0; +const Ply MAX_PLY = 100; + const std::string STARTING_FEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; constexpr unsigned int RANDOM_SEED = 1254383; diff --git a/src/move_ordering.cpp b/src/move_ordering.cpp index 6ec7c30..790c346 100644 --- a/src/move_ordering.cpp +++ b/src/move_ordering.cpp @@ -40,7 +40,7 @@ constexpr Score losingCapture[6][6] = { {0, 200000, 200100, 200200, 200300, 200400}, // QUEEN }; -Move killerMoves[101][2]; +Move killerMoves[MAX_PLY + 1][2]; // TODO Counter move history Score historyTable[2][64][64]; diff --git a/src/move_ordering.h b/src/move_ordering.h index d736f1c..82cbb05 100644 --- a/src/move_ordering.h +++ b/src/move_ordering.h @@ -20,7 +20,7 @@ #include "move.h" #include "position.h" -extern Move killerMoves[101][2]; +extern Move killerMoves[MAX_PLY + 1][2]; Score scoreMove(const Position &pos, Move m, Ply ply); diff --git a/src/search.cpp b/src/search.cpp index a8bc26e..adf6b1f 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -58,11 +58,11 @@ Ply selectiveDepth = 0; Move bestPV; // Move index -> depth -Depth reductions[200][64]; +Depth reductions[200][MAX_PLY + 1]; void initLmr() { for (int moveIndex = 0; moveIndex < 200; moveIndex++) { - for (Depth depth = 0; depth < 64; depth++) { + for (Depth depth = 0; depth < MAX_PLY; depth++) { reductions[moveIndex][depth] = std::max(2, Depth( LMR_BASE + (log((double) moveIndex) * log((double) depth) / LMR_SCALE))); @@ -153,6 +153,10 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { Score staticEval = eval(pos); + if (ply >= MAX_PLY) { + return staticEval; + } + if (staticEval >= beta) { return beta; } @@ -234,6 +238,10 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score if (alpha >= beta) return alpha; } + if (ply >= MAX_PLY) { + return eval(pos); + } + if (depth <= 0) return quiescence(pos, alpha, beta, ply); Color color = pos.getSideToMove(); @@ -387,7 +395,7 @@ Score searchRoot(Position &pos, Score prevScore, Depth depth, bool uci) { globalAge++; clearTables(); selectiveDepth = 0; - SearchState stateStack[100]; + SearchState stateStack[MAX_PLY + 1]; Score alpha = -INF_SCORE; Score beta = INF_SCORE; @@ -443,12 +451,10 @@ Score searchRoot(Position &pos, Score prevScore, Depth depth, bool uci) { } } -void iterativeDeepening(Position pos, Depth depth, bool uci, std::atomic &searchRunning) { +void iterativeDeepening(Position pos, Depth depth, bool uci) { pos.getState()->accumulator.refresh(pos); - searchRunning = true; - Score prevScore; Move bestMove; @@ -481,5 +487,29 @@ void iterativeDeepening(Position pos, Depth depth, bool uci, std::atomic & out("bestmove", bestMove); } - searchRunning = false; + searchStopped() = true; +} + +#include + +std::thread th; + +void joinThread(bool waitToFinish) { + if (!waitToFinish) stopSearch(); + + if (th.joinable()) th.join(); +} + +void startSearch(SearchInfo &searchInfo, Position &pos, int threadCount) { + + joinThread(false); + + Color stm = pos.getSideToMove(); + if (stm == WHITE) { + initTimeMan(searchInfo.wtime, searchInfo.winc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); + } else { + initTimeMan(searchInfo.btime, searchInfo.binc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); + } + + th = std::thread(iterativeDeepening, pos, searchInfo.maxDepth, searchInfo.uciMode); } \ No newline at end of file diff --git a/src/search.h b/src/search.h index 1fbc19d..059fe34 100644 --- a/src/search.h +++ b/src/search.h @@ -19,6 +19,7 @@ #include #include "movegen.h" +#include "uci.h" #ifdef TUNE @@ -95,6 +96,8 @@ inline void initSearch() { Score see(const Position &pos, Move move); -void iterativeDeepening(Position pos, Depth depth, bool uci, std::atomic &searchRunning); +void joinThread(bool waitToFinish); + +void startSearch(SearchInfo &searchInfo, Position &pos, int threadCount); #endif //BLACKCORE_SEARCH_H diff --git a/src/timeman.cpp b/src/timeman.cpp index 0dccf57..6ae64e8 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -16,50 +16,48 @@ #include "timeman.h" #include "position.h" - #include unsigned int MOVE_OVERHEAD = 10; -constexpr U64 mask = (1ULL << 15) - 1; - -U64 startedSearch; -U64 shouldSearch; -U64 searchTime; -U64 maxSearch; -U64 stabilityTime; +constexpr U64 mask = 1023; +U64 startedSearch, shouldSearch, searchTime, maxSearch, stabilityTime, maxNodes; -bool stop = false; +bool stopping = true; +bool stopped = true; U64 getTime() { return std::chrono::duration_cast( std::chrono::system_clock::now().time_since_epoch()).count(); } -void startSearch(U64 time, U64 inc, U64 movesToGo, U64 moveTime) { +void initTimeMan(U64 time, U64 inc, U64 movesToGo, U64 moveTime, U64 nodes) { nodeCount = 0; movesToGo = movesToGo == 0 ? 15 : movesToGo; startedSearch = getTime(); stabilityTime = 0; - stop = false; + stopping = false; + stopped = false; - if (time == 0) { - // We have infinite time - shouldSearch = 0; - maxSearch = 0; - } else if (moveTime != 0) { + maxNodes = nodes; + + if (moveTime != 0) { // We are limited how much can we search shouldSearch = moveTime - MOVE_OVERHEAD; maxSearch = moveTime - MOVE_OVERHEAD; + } else if (time == 0) { + // We have infinite time + shouldSearch = 0; + maxSearch = 0; } else { U64 panicTime = time / (movesToGo + 10) + 2 * inc; stabilityTime = time / 400; - shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 5) + inc * 3 / 4 - MOVE_OVERHEAD); + shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 1) + inc * 3 / 4 - MOVE_OVERHEAD); maxSearch = std::min(time - MOVE_OVERHEAD, shouldSearch + panicTime); } @@ -67,19 +65,21 @@ void startSearch(U64 time, U64 inc, U64 movesToGo, U64 moveTime) { } void stopSearch() { - stop = true; + stopping = true; } +bool &searchStopped() { return stopped; } + void allocateTime(int stability) { U64 newSearchTime = shouldSearch - stability * stabilityTime; searchTime = std::min(maxSearch, newSearchTime); } bool shouldEnd() { - if ((nodeCount & mask) == 0 && maxSearch != 0 && !stop) { - stop = getSearchTime() >= searchTime; + if ((nodeCount & mask) == 0 && !stopping) { + stopping = (maxSearch != 0 && getSearchTime() >= searchTime) || (maxNodes != 0 && nodeCount > maxNodes); } - return stop; + return stopping; } U64 getSearchTime() { diff --git a/src/timeman.h b/src/timeman.h index 8dbb40f..d4439b4 100644 --- a/src/timeman.h +++ b/src/timeman.h @@ -21,12 +21,14 @@ extern unsigned int MOVE_OVERHEAD; -void startSearch(U64 time, U64 inc, U64 movesToGo, U64 moveTime); +void initTimeMan(U64 time, U64 inc, U64 movesToGo, U64 moveTime, U64 nodes); bool shouldEnd(); void stopSearch(); +bool &searchStopped(); + void allocateTime(int stability); U64 getSearchTime(); diff --git a/src/uci.cpp b/src/uci.cpp index 01ca1a2..f44bb9b 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -67,7 +67,7 @@ Move stringToMove(const Position &pos, const std::string &s) { void uciLoop() { // Identifying ourselves - out("id", "name", "BlackCore_v2-0-H1"); + out("id", "name", "BlackCore_v2-1"); out("id", "author", "SzilBalazs"); @@ -110,9 +110,7 @@ void uciLoop() { initSearch(); Position pos = {STARTING_FEN}; - std::thread searchThread; - - std::atomic searchRunning(false); + int threadCount = 1; while (true) { std::string line, command, token; @@ -130,10 +128,10 @@ void uciLoop() { if (command == "isready") { out("readyok"); } else if (command == "quit") { - stopSearch(); + joinThread(false); break; } else if (command == "stop") { - stopSearch(); + joinThread(false); } else if (command == "ucinewgame") { ttClear(); } else if (command == "setoption") { @@ -220,41 +218,31 @@ void uciLoop() { } else if (command == "go") { - if (searchRunning) { - out("Search is already running!", "To stop it use the \"stop\" command."); - continue; - } - - U64 wtime = 0, btime = 0, winc = 0, binc = 0, movestogo = 0, movetime = 0; - Depth depth = 64; + SearchInfo searchInfo; for (unsigned int i = 0; i < tokens.size(); i += 2) { if (tokens[i] == "wtime") { - wtime = std::stoi(tokens[i + 1]); + searchInfo.wtime = std::stoi(tokens[i + 1]); } else if (tokens[i] == "btime") { - btime = std::stoi(tokens[i + 1]); + searchInfo.btime = std::stoi(tokens[i + 1]); } else if (tokens[i] == "winc") { - winc = std::stoi(tokens[i + 1]); + searchInfo.winc = std::stoi(tokens[i + 1]); } else if (tokens[i] == "binc") { - binc = std::stoi(tokens[i + 1]); + searchInfo.binc = std::stoi(tokens[i + 1]); } else if (tokens[i] == "movestogo") { - movestogo = std::stoi(tokens[i + 1]); + searchInfo.movestogo = std::stoi(tokens[i + 1]); } else if (tokens[i] == "depth") { - depth = std::stoi(tokens[i + 1]); + searchInfo.maxDepth = std::stoi(tokens[i + 1]); } else if (tokens[i] == "movetime") { - movetime = std::stoi(tokens[i + 1]); + searchInfo.movetime = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "nodes") { + searchInfo.maxNodes = std::stoi(tokens[i + 1]); } else if (tokens[i] == "infinite") { - depth = 64; + } } - if (pos.getSideToMove() == WHITE) - startSearch(wtime, winc, movestogo, movetime); - else - startSearch(btime, binc, movestogo, movetime); - - searchThread = std::thread(iterativeDeepening, pos, depth, true, std::ref(searchRunning)); - searchThread.detach(); + startSearch(searchInfo, pos, threadCount); } else if (command == "d" || command == "display") { pos.display(); diff --git a/src/uci.h b/src/uci.h index 2479f5e..4309627 100644 --- a/src/uci.h +++ b/src/uci.h @@ -18,21 +18,30 @@ #define BLACKCORE_UCI_H #include - -inline void _out() { - std::cout << std::endl; -} - -template -inline void _out(T a, Args... args) { - std::cout << " " << a; - _out(args...); +#include "constants.h" + +struct SearchInfo { + U64 wtime = 0, btime = 0, winc = 0, binc = 0, movestogo = 0, movetime = 0, maxNodes = 0; + Depth maxDepth = MAX_PLY; + bool uciMode = true; +}; + +namespace BlackCore { + inline void _out() { + std::cout << std::endl; + } + + template + inline void _out(T a, Args... args) { + std::cout << " " << a; + _out(args...); + } } template inline void out(T a, Args... args) { std::cout << a; - _out(args...); + BlackCore::_out(args...); } inline void tuneOut(const std::string &name, int value, int min, int max) { From 254f3a64c33e6310166579ab01d631a68fe67342 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Mon, 31 Oct 2022 14:41:16 +0100 Subject: [PATCH 05/17] In qsearch generate all moves Bench: 4820626 --- src/search.cpp | 29 ++++++++++++++++------------- src/search.h | 2 +- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index adf6b1f..eef06d7 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -165,7 +165,10 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { alpha = staticEval; } - MoveList moves = {pos, ply, true}; + Color color = pos.getSideToMove(); + bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); + + MoveList moves = {pos, ply, !inCheck}; EntryFlag ttFlag = ALPHA; Move bestMove; @@ -208,7 +211,7 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { } template -Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score beta, Ply ply) { +Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score beta, Ply ply) { constexpr bool rootNode = type == ROOT_NODE; constexpr bool pvNode = type != NON_PV_NODE; @@ -247,11 +250,11 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score Color color = pos.getSideToMove(); bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); - Score staticEval = state->eval = eval(pos); + Score staticEval = stack->eval = eval(pos); if (notRootNode && !inCheck) { - bool improving = ply >= 2 && staticEval >= (state - 2)->eval; + bool improving = ply >= 2 && staticEval >= (stack - 2)->eval; // Razoring if (depth == 1 && nonPvNode && staticEval + RAZOR_MARGIN < alpha) { @@ -265,16 +268,16 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score return beta; // Null move pruning - if (nonPvNode && !(state - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { + if (nonPvNode && !(stack - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { // We don't want to make a null move in a Zugzwang position if (pos.pieces(color) | pos.pieces(color) | pos.pieces(color) | pos.pieces(color)) { Depth R = NULL_MOVE_BASE_R + depth / NULL_MOVE_R_SCALE; - state->move = Move(); + stack->move = Move(); pos.makeNullMove(); - Score score = -search(pos, state + 1, depth - R, -beta, -beta + 1, ply + 1); + Score score = -search(pos, stack + 1, depth - R, -beta, -beta + 1, ply + 1); pos.undoNullMove(); if (score >= beta) { @@ -310,7 +313,7 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score while (!moves.empty()) { Move m = moves.nextMove(); - state->move = m; + stack->move = m; Score score; @@ -327,23 +330,23 @@ Score search(Position &pos, SearchState *state, Depth depth, Score alpha, Score ttPrefetch(pos.getHash()); if (index == 0) { - score = -search(pos, state + 1, depth - 1, -beta, -alpha, ply + 1); + score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); } else { // Late move reduction if (!inCheck && depth >= LMR_DEPTH && index >= LMR_MIN_I + pvNode * LMR_PVNODE_I && !m.isPromo() && m.isQuiet() && m != killerMoves[ply][0] && m != killerMoves[ply][1]) { - score = -search(pos, state + 1, depth - reductions[index][depth], -alpha - 1, -alpha, + score = -search(pos, stack + 1, depth - reductions[index][depth], -alpha - 1, -alpha, ply + 1); } else score = alpha + 1; // Principal variation search if (score > alpha) { - score = -search(pos, state + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); if (score > alpha) { - score = -search(pos, state + 1, depth - 1, -beta, -alpha, ply + 1); + score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); } } @@ -395,7 +398,7 @@ Score searchRoot(Position &pos, Score prevScore, Depth depth, bool uci) { globalAge++; clearTables(); selectiveDepth = 0; - SearchState stateStack[MAX_PLY + 1]; + SearchStack stateStack[MAX_PLY + 1]; Score alpha = -INF_SCORE; Score beta = INF_SCORE; diff --git a/src/search.h b/src/search.h index 059fe34..d9a4bed 100644 --- a/src/search.h +++ b/src/search.h @@ -81,7 +81,7 @@ constexpr Score SEE_MARGIN = 2; #endif -struct SearchState { +struct SearchStack { Move move; Score eval = 0; }; From da2334b3b1479d3f478e026e96527f5b3290c13f Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Mon, 31 Oct 2022 19:17:08 +0100 Subject: [PATCH 06/17] Retried lmr tweaks Bench: 5098723 --- src/search.cpp | 46 +++++++++++++++++++++++----------------------- src/search.h | 16 +++++++--------- src/uci.cpp | 17 ++++++++++------- 3 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index eef06d7..f3fea97 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -21,6 +21,7 @@ #include "uci.h" #include +#include #ifdef TUNE @@ -39,8 +40,7 @@ Depth NULL_MOVE_R_SCALE = 3; Depth LMR_DEPTH = 3; double LMR_BASE = 1; double LMR_SCALE = 1.75; -int LMR_MIN_I = 2; -int LMR_PVNODE_I = 1; +int LMR_INDEX = 2; Depth LMP_DEPTH = 4; int LMP_MOVES = 5; @@ -165,10 +165,7 @@ Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { alpha = staticEval; } - Color color = pos.getSideToMove(); - bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); - - MoveList moves = {pos, ply, !inCheck}; + MoveList moves = {pos, ply, true}; EntryFlag ttFlag = ALPHA; Move bestMove; @@ -252,9 +249,9 @@ Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score Score staticEval = stack->eval = eval(pos); - if (notRootNode && !inCheck) { + bool improving = ply >= 2 && staticEval >= (stack - 2)->eval; - bool improving = ply >= 2 && staticEval >= (stack - 2)->eval; + if (notRootNode && !inCheck) { // Razoring if (depth == 1 && nonPvNode && staticEval + RAZOR_MARGIN < alpha) { @@ -329,27 +326,30 @@ Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score ttPrefetch(pos.getHash()); - if (index == 0) { - score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); - } else { - // Late move reduction - if (!inCheck && depth >= LMR_DEPTH && index >= LMR_MIN_I + pvNode * LMR_PVNODE_I && !m.isPromo() && - m.isQuiet() && m != killerMoves[ply][0] && m != killerMoves[ply][1]) { + // Late move reduction + if (!inCheck && depth >= LMR_DEPTH && index >= LMR_INDEX && !m.isPromo() && + m.isQuiet()) { - score = -search(pos, stack + 1, depth - reductions[index][depth], -alpha - 1, -alpha, - ply + 1); - } else score = alpha + 1; + Depth R = reductions[index][depth]; + R += improving; + R -= pvNode; - // Principal variation search - if (score > alpha) { - score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + Depth newDepth = std::clamp(depth - R, 1, depth - 1); - if (score > alpha) { - score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); - } + score = -search(pos, stack + 1, newDepth, + -alpha - 1, -alpha, ply + 1); + + if (score > alpha && R > 1) { + score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); } + } else if (nonPvNode || index != 0) { + score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + } + + if (pvNode && (index == 0 || (score > alpha && score < beta))) { + score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); } pos.undoMove(m); diff --git a/src/search.h b/src/search.h index d9a4bed..1ccede9 100644 --- a/src/search.h +++ b/src/search.h @@ -38,8 +38,7 @@ extern Depth NULL_MOVE_R_SCALE; extern Depth LMR_DEPTH; extern double LMR_BASE; extern double LMR_SCALE; -extern int LMR_MIN_I; -extern int LMR_PVNODE_I; +extern int LMR_INDEX; extern Depth LMP_DEPTH; extern int LMP_MOVES; @@ -52,13 +51,13 @@ extern Score SEE_MARGIN; #else -constexpr Score DELTA_MARGIN = 307; +constexpr Score DELTA_MARGIN = 306; -constexpr Score RAZOR_MARGIN = 146; +constexpr Score RAZOR_MARGIN = 145; -constexpr Depth RFP_DEPTH = 8; -constexpr Score RFP_DEPTH_MULTIPLIER = 60; -constexpr Score RFP_IMPROVING_MULTIPLIER = 56; +constexpr Depth RFP_DEPTH = 7; +constexpr Score RFP_DEPTH_MULTIPLIER = 59; +constexpr Score RFP_IMPROVING_MULTIPLIER = 52; constexpr Depth NULL_MOVE_DEPTH = 2; constexpr Depth NULL_MOVE_BASE_R = 3; @@ -67,8 +66,7 @@ constexpr Depth NULL_MOVE_R_SCALE = 3; constexpr Depth LMR_DEPTH = 3; constexpr double LMR_BASE = 1; constexpr double LMR_SCALE = 1.75; -constexpr int LMR_MIN_I = 2; -constexpr int LMR_PVNODE_I = 1; +constexpr int LMR_INDEX = 2; constexpr Depth LMP_DEPTH = 4; constexpr int LMP_MOVES = 5; diff --git a/src/uci.cpp b/src/uci.cpp index f44bb9b..9fa7967 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -16,8 +16,8 @@ #include #include -#include #include "uci.h" +#include "eval.h" #include "tt.h" #include "search.h" #include "timeman.h" @@ -87,8 +87,7 @@ void uciLoop() { tuneOut("NULL_MOVE_BASE_R", 4, 2, 6); tuneOut("NULL_MOVE_R_SCALE", 5, 2, 10); tuneOut("LMR_DEPTH", 4, 2, 10); - tuneOut("LMR_MIN_I", 3, 1, 10); - tuneOut("LMR_PVNODE_I", 2, 1, 10); + tuneOut("LMR_INDEX", 3, 1, 10); tuneOut("LMP_DEPTH", 4, 1, 10); tuneOut("LMP_MOVES", 5, 1, 10); tuneOut("ASPIRATION_DEPTH", 9, 5, 20); @@ -99,6 +98,8 @@ void uciLoop() { tuneOut("BISHOP_VALUE", 850, 500, 1000); tuneOut("ROOK_VALUE", 1250, 1000, 1500); tuneOut("QUEEN_VALUE", 1600, 1200, 2000); + tuneOut("LMR_BASE", 10, 1, 30); + tuneOut("LMR_SCALE", 17, 10, 40); #endif ttResize(16); @@ -162,10 +163,8 @@ void uciLoop() { NULL_MOVE_R_SCALE = std::stoi(tokens[3]); } else if (tokens[1] == "LMR_DEPTH") { LMR_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_MIN_I") { - LMR_MIN_I = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_PVNODE_I") { - LMR_PVNODE_I = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_INDEX") { + LMR_INDEX = std::stoi(tokens[3]); } else if (tokens[1] == "LMP_DEPTH") { LMP_DEPTH = std::stoi(tokens[3]); } else if (tokens[1] == "LMP_MOVES") { @@ -186,6 +185,10 @@ void uciLoop() { PIECE_VALUES[ROOK] = std::stoi(tokens[3]); } else if (tokens[1] == "QUEEN_VALUE") { PIECE_VALUES[QUEEN] = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_BASE") { + LMR_BASE = double(std::stoi(tokens[3])) / 10; + } else if (tokens[1] == "LMR_SCALE") { + LMR_SCALE = double(std::stoi(tokens[3])) / 10; } #endif } From b212eeb0be529e95cd3e41f957b54de045de9d53 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Thu, 3 Nov 2022 08:17:32 +0100 Subject: [PATCH 07/17] Tempo aware net architecture Bench: 3573347 --- src/corenet.bin | Bin 394242 -> 394754 bytes src/eval.cpp | 8 +- src/eval.h | 8 +- src/nnue.cpp | 201 ++++++++++++++++++++++++++--------------------- src/nnue.h | 30 +++---- src/position.cpp | 2 +- src/position.h | 6 +- src/search.cpp | 14 ++-- src/search.h | 16 ++-- src/uci.cpp | 10 +-- 10 files changed, 158 insertions(+), 137 deletions(-) diff --git a/src/corenet.bin b/src/corenet.bin index 64126dca7da002e317ca73bfa9acf46a477e61a7..c018bfcbc224155f744c08d97b5d4325bd7e115a 100644 GIT binary patch literal 394754 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

k&&i6Pl_7jX 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≺Xg??c`Ncq1|xHemE^?S0d?!P!2 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 L8s&V@}LrSfr*TwM`h!-9%pXwi? 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 z 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

f~9`Y7u@|!oT6yp}~Cc6>X&URS- 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�Hp)K8)ikODUz{y@Qw+Mmr^bm$8Ppku`$mb?|sbrj{0mk0r8bccZ_EgF%~OWVrNhF z|LP*s2I$~SI(vEtN-n^3ir}lYAj@q0zlkX9-fbT94UGLxEonV;>I}n+S^Jx8u6NOC zM{&bFg)HU@t&ium$KpG2=tnVtTq+O`MfPZ7q&J|=WVV-pi|a6@m16SitaO~43V*cM zH4`qaYgBwuL}?WL@@MydS+>xY>m{k4p;$R zAclSjY3xA~5ypv4;T8aAP3-?DoERE?0NJLfYzRcIAuv6l-O+@|gtQE|Q!!E^+Bvz1rr6rSaujLh<5$;OK2UE{Oj*ZY_ z2rqtB{QnW&;@*7fZ2UXa{*OJM#)U6h!|3kq{Z;cO<2$7xUGTRWY_60HEU)>6yXcn2 z`&s%p7`H*hIsq%(e&vbVv9d3C$PSj7(3k1~JSeQo_ts0V8n0VR3&C4cv8eCGzZ0yh z5)EEw>8UY-YAp8w`TZC*=ltYcKvce$44#k1viy%pa}bu;*<8E%_r`3muv{Rs8p)?{ zJe&Yr!sniJ*Uh11rf4vH-bYU217xovg&Ulv ziW=qc%{SEmZ^{_nVIQGu^=^K+0e8ypTtg=wSAieohP7(AtRO3#o*+UeWq@^68IQ`o zH(B$($4H*Ab7;Dshg(!rVg1j@vJ(7yk*whkSR(NDjA1?^! z{+^Sgeavchh>dH-j7ffVYApK5xc2iz-IBtzNj#s564_$LV3kN&^&lRxm4z43L77&yrXRw*o{4``6ZsD#D9g(# zlGT&`9=hC(rvLdWQy&M0O-BDhqJ{K4Mg*E54!$e@3%h>9ja{dqXF-*jhavAA7<7`K zb~L_xDkIxO3oBW2k3&9jTt0unJ%qc|t$roJUwH9VQLiV4@U}Y4e8^S}mubX49$+^e zR9(XDc4gGwmXPE%64~NA;WYRf-q#tU4Bb~(Lbp{ay2I5yD$~zk5wW5CzjJc1QMQKv z4Lzp^>3=NW7^|AI+}hg!)-#7My8D|IzF`G99l5!sIx0>EjiS%t*=%wD2|m-&8$++P zVAnbE*%nyOM_9@}zVVgMZBz}*nJ6WaZL=`GFdOu1Sp3QYv z|ND#o7lOdJ(c%|b)eVOPxgwI;iP5;e$htW{Fk-Pgc#YJ|Er(I*J!wKxw1XbTN(oQ${cG=T2Dn8o2us z6j>yDUTXy90M`xQ)#sn3!Y#mhe)HA`2Q)ku%2edTT@$OT_LQlt%f<*)dZ6G*lB%D7eMsiJgq8h z&`m}BsAx^Df$GY;{xnB+E)VtIiM*^}wANb-MX$n)u>OBt?X(2FY>mJ2#Ip7ckD$*z zR+9CLW%uW-OXem7v-xg63pf24QT0_ z{hv9b_r#1Iye;&d{m@+A7Q6ajd;3}6`~Fsi^^f7J9c9^ni-(iR^Q?QSo}~XLSXxT& zecn6Y5RLA`OkWch-I>4^v+;>7nih9tT5dKM(v5 zUG!dslkH)3=(z)8Q>u z@&9#p7JV(_uS?^ZWeE32&1iW{BApESO%|A4{@+e+QyaT1#iOk8^Zx=^ap)^OUrgyE zhK(|}%5ve`alz|iP3W7TSB$KDGAu7@{*Aq>5C4yO;%XM(RHxTR<&*#Lm+t;lP_6Bt zXE%roL}91?He(H|L|@6)mf*glX}TC4j*y?$!G7MQ|BqPWct4q}ntRyVN)aolcf#gu zu;vX79{BU)lPV$5-e5W_|zYK!hk4OE5>73>pkDFgHQFs_07ET*g@h_<`r5w>p z&-=!=+%|)^R1)0+|0_o?1yO6wa_LAdQsrztHt;gY4%^*>Ls5XV$tm zU;sy0_Eu3OH^2J|lRE1Dx08u#Q3l#<4xL|vNF(LZY4CqsLWFD~h6c8?(K_ZGR?&9T z*EHtpdRW!8P#cTx1Qg^ z>~FL4eka?gWBqqH-&tbR8==f%Jo6wf)Lo|SZd>{4M4mH&7v)e<3+J;|IICS<#NQdG zw)3_Isbu00d&Hp1K6%WDd&6h<=cz89hk-xIhj*~WLUO?RWcLC67Z#P~i?3(--LGO> zlD*ebCvFD!>+``8R;J(LYX#JVa$!98!ikD3@mjK)UHai3!BFQ}$3nYdV-qmqVQQ*l z)$PJvLM@hTX}C(;-?!=tf#sey<|6hH zQZ*cN?nv4h)(T&zs88nqlIVA>UDv)cvk;e-b$ZhgZVI3{f|c@EC0P4I{XX z1?-JCv$=w>y|!=6V&j2>^uYLT+W(y?njOz!DK+IUU-Oad^1m+f&_Bh&QZkZH_~v%< zx@c^v_;fq*c{22W9e;cW7awaycmp|vdo|vLa$k_sb$C$DjKhw)?7p)@Y;3L1L^f7@ z8}wL-zv$!1D)uH{i;G6p*?J9(U?JPVfTI<%qi$@f5{wuIuj=sI24?sM8Ly$m!&Z-v z$*rDb_t|mutnl=1ac`K|dK=c&SL}6flF$C8LbZ!@wwiBMe$tTthu%t=$Y5@wd32l1 z{UR1}LG-UlZ$-tNEG)1&Uh}&8e^&MzI$z|JGqhJp{mHKP%9zPz&mS$CRu#{~KFcNI z!B)?AZc9zHxtLK+q<9?uH{mf&Sjz!&xdPu8k!a{RUI|-Is%yS2;^e`*@3JB=f@U+R zXXLORol)HFV@^9&cn;uRdL!_SCa|F)?`ayZi($Lv_Gi1_!mKh-v597ryg5-14i}0ZaZNL zo9L%3FZc~|&!?dwkS*M87y8y+f&ZZ&{v!~314R1MJlgZmdRS-=`Y*=rwuuhmhJlMX zgS~D1{~zOilJ|cu|6fK@d9nV`Uo^Wlm^v&crHa^UKJtdOtz5J)77H%U7aqK2W&PE= z(&7KTe7XX^w`#;%%iXH6{7NQWeE%ltucVuR|MTSMJ=MLB8_NZp<)Hlx8^dl0I@=)6 zIBMs@Sf14in_13lpN8MlG3zXH(X0@+3~mtmc#ezbLzqWNB=iLBN|MjX7<7E{xdO0R z*9?py+%;Pc=a{CJv@Py*D+{wzg``qjqnL+n>HkEY`$dacJY&2y+_&uLc|ZkakoOc6 zaW28*(uudC8SwvkIpIKAXDjUgSu(0G*3`vo9)oJj_{|;_qP4de*KAeS9MMpc-sPuN z%{;YFPKYniKqt{P^!GTgqO_ibDzo+9;?sH_7xA~r*jcy*cdShKt~i(Kc6az+kww0O zm+rHYfsvWR*DQDso1aSmuhL&TykH{aL@}F@?f5@fc=EK8O!mS zQmS7cJH-*~xHmb@xBk1Cbr!;G%3{uWRsUX*72kP_W8`LO6U_WymETXWnysFFM0U17 zuKQo|?YN)YOzYsdxp`u!&~G;9?Xa#d4&oFqFU!tSwiv}dVrVT)>Qfd`QROBd9yr>m z+@o~=si?LCMt>|`_4kI?R42YS)W~Q?KVKRbP9`>|P z9%uLNTu~e87`=x@&ZYlvF|*RDfGv!rzVF^Ny8bx-bPQw#jGQA!D5ml_Tm9xuX!sLv z3OBx7FqV<@AHk$4(Ar(>{&g3Yekpk|&S~Fc-RN*^7oup~6KAzIS^dAhm7Bq|8%`t) z#;Eo{-q5x7FV(;=M7u>KJqi+r?ohwk5wef>)nqZN#s3d6nwPyhoQ~`x-i1ouZnjX~ z8}z@x>fAJg4VJ~l4|!@E`%V@b-~E1KUzDiYADh$NLyWi`9*weY8TPq+2-^xmM!VNZ zZXsKo9b01~=Q2JQ`kPlJ`(ltf4b=J#BDED;)2sGwfR%a7?IHYhrZ@DK6UXr?@%krklm&M*ZaJLkG@KO8?yy#9d7sP<(#`z5P9r}W$ z@So1je8UcVwixci^sn~+_reN>z>nWx;0<~8EHUhm|LjwOy>mQiCZ09gDZ4wcuh4-y z^cuM&TK#Ih@_np#6=Z7d6ZW^NMuhHJMfgbv|NX2kQirYX_N<4Y&kV9ILI3t5@TDwl z{~wuFTe(hHliSRfcG*q%maz}_^TJ}zzlkDt8ckGpJQok*|JI}Fzp)tG6^@>x&9KL7 zKXw|?W#~;jQ#4&iX7lxt-o%S!{1AAr$o;;Rx#fKN6yFFpbzFsugT$`Q-u{UkZml)M zO0+sKnVJt~Ah{D5-u>}jwifOhF9pjBklW|%p{VGc7v~O~vY+w3OaHl`{4czullVVP zE;O#Ka**7|#%cH($SK7Ki*-UN96xI&m(B5B7#8lq z+zp+Qs)sqqV=fJCWSgBa*13LN?Lsy35BX{UD&%_{&!sVdl^40Pa1hu&^{&2`(%E3M8c8Q@Aky@Hq(Dr{#Z;zT8m{( zg_7ULmF*S_cY5AooZ*DlJ7$>I%1LXCGu*?wL&W`DO@1(MaBqm}+EUp0F@Bm(R->m@ z6nYOYAe&TCQ)pjY9ae87c%9lww>)UK)fF;Jvh8s1N@a{>EOr)p z0OnB{EN+D7)QHc~e_wik14`6~K_UJZA>T(u%y2XM7@T?rf6#5tf1CNg&O2(J_rjyk z@&Cg3|0WUcKK|GrVtiwbb0Mug;xubI>mGV%#n#n%#Jf=H3;ZB$+y^!e6VKAZ%csRt zx5vd<b~Ts-Q*qF>@?tDuNgW?ITY{~z(hKIYerMBjm36~(|Wc=$Ig zWGcPQi8J$|aHBzjwx)|tId48KanW{SjgwE} zRM@XDQ5_+tO!5hptlrS->EzFGIC@3IWkE3u8jmTrhp#W(+Trj%zg=qIOpd_& z^;b!uvappjPLpP7=v>2yTHpZ>sde_H%fj-Kl;oaHG;QRr!b_OQ{WP7+&-$5zJ7J9Z zGxqYMy1#yj?D`3sDDU4V+pVxW-a!kEv6}C1t^Y6L|6#>HbdMWDS7GgW489RqWlJ@L z`Sews+>hIj^_R?Q2CZd`da?1B)Fle5s%FMGAHqrsh+`{MIwq(}47HN9SDvvRVuk(R z#f>9o*?A(nMageH1a6D_)}+-9Zjzd746WpS`SG5kn5O;xvcU}MWCPr#lfjWNT~WI3rocF}iFi{&#{iOIh`o;!C)x^&hAm8G znx;E1xqX1slvHhAM4I{z;0yP#Ik(#Dk=2Fe7KGnt%qgi-u!wbTgike%JyofojljAGDfEI)Kq zU#_OMO1zuQZyJY6pU8ZVF}4>)3MLxG-_dL~(k;kO@>tmoU1#&yfw|e6>$A7Utal20 zFQiIx5-Prdfou@(#>GSUc35lAE)#l?-2T7=f0ir02wzWQ)Q9D+YjN^-J-4sDM_-fC zDLLW+CzmhTgKz;?3}+dy={55{ukU9E{`XG2gj>a5CfSy-zY=QPuwzip{q>oS|ZGiFRl?|khLM3N{dUGmkWbe64 zt+xF?LvhhFqI+-a(xHF#2BUjXPCtdEET)@IGKhBkIjquzy=MQa=e%V#;Wrt=qiP?y zY3VcXe9fPB(#AP8_WRBCDStW*q0^g72e`Xe{=bx7^NX$_lXbfhElgz}i`2`X!9s@V z0rH2lU~_omAL{X^@bdLC+q8)pac{PsM%Iv7W>Sd+!aZZ5dq!6h&1_xlC(m^@Q(j(E zOmBiq&Y-22)edq&z-Lqj?_k>_$>VEY+ln96fa68vDy>v4o@T?<%q1su>*UuGItYf_ zCZ31h;f~pVSzAYJCZVeHI4zu~p7KG|2gQXKgZ$3PXi+y$O`|I}~m=QhNJ;_Q?<)vH$;59`>-9c|g?eD+}F5 zn;+73KJjR@JpMndYX(kzQnr+pMrVrQ2a+Gg1F^->Ys$%cRiO&lOHn@$8T?;tvz7d> z43@o)r1DtX(z#cTdch}CtFF3*#j4zOSU6mqIm_xEGs8ac>`5$Qtt_vXG5sS7+{HF) zv#z3v_hnLRS=TB5-Nm-&$y!?To6sN7c{N;RoBZz}>&*Z$+%u9m%(*;s0r|$nLCsx0SwqDDLBP$j9s!*a0I zA^6fzX!eJFHj`LtU-)w&`Ec~Q?`$RC23SG3h5In>_AN{bo#OQ%#@Nq@t!<7jWk35m~{3my$$2rStFc`=bdLgpOEESSkMx2{T)cMETA)4tn&Ls(ek>? zE#&_@V7-omJnSho30@HNXV)d zL&I9o^$6Gw#}cu#uAocj;-Z#p&!vzHriBv=tc=oS_s{alW8Y9 zPOCDu8n4MHV`w0> z%1`za<51shD{kGuSnBe&%JTm-Bop=#Oq6dO@af!QQVCrD5}Z2}kHuGqlSt^f0XJyx!j9|Kv1lMg4I9 zVYtz7I&_{P&eesO-T78q7JC%Nhxa$qe<~sW%gpbK%0zG2KeU@Ql!y4CDevT*FrB64*)d^4G8q>|F8eG^UR!wKA&TYi*Wg_c0`TzHJYZRf~JIr_&4-J`W z=zE?OR;(rcUBR10{7JI4CUVl0Y~y9Ukl8%zKL`~&%K$pqW%U)E_K@eaWa(keN{*%S8 z;Z*Sq*cEnT*Y>wNJ$V|uN{chNv)20xVn=qi%JWajIg176;8P1_65oj%h2U`t*}&t` zGTxlt?igK`j3b5pUu|*LCB|5oKi6T0NATD??2ZbZAKvCo3w&b?#uDx=vri-nH>DKy zZxcm>_dKVL_YRO{w}$3d;o}J`;bC>loO1b`G}wZNWrlFOSVWEZvfMU@_*!1|AfudP zCvT|jXZu;#KqEO4pTOwGdD0r_|CN=X?@3$+5*HTR!)c9cR&A!i=Z(0*SQPdqZ&D{Xfmu}*>wDlB9c35KkVHST$ijkh ziwrM8vl@wQGEuv)#n1n{Nq4RphQ2K$M1pXGx5z6d7iTvQk@e5ch8|I8p6<^t(rOt| zpbH5s=SAmn+ga9L4`I5)$?928J*<8)7i!!?62Cf6n1=s;;dzUUzo5*d7OiJyACJqh z?!|_OlIyE1@I94`=@2I^-KK^aFR+uJtf^eV)o&BGuEZNj`U6s}?`c)w;1QA6tr7P5 z{bhH23-*w~>a2c7toaE1?}4+7HLpk6*1fRwxOJ?^9+Tkb@8K|O&0&tUyyG&em(>ve zBKKJ2oXig4%b%c{S=mH*eJuh0Q^r_cTz2UKVbL&6Q* z;mqG~a>~dys(9lGC^`@RlogZfK!pkRHl@J;-4O%pPC})LaPDVVQcwJUN}hAcjAp5$ zwxNq2e4vXtRpDEUAn)y%jyiP|ZerNNbFU=VM|bk!8(3>NQ9DbVImmmSG2`vH`QbQ+ z*nPYD&r~|gNB^G~ogD%3)1(>hIA|C4!$XfPx3G4mOw;Yw_8^bL@^BSR8>s#@96v9Qt9~nD);5DHb{u6C<#!lyW-AWc#LQ;#dCX%8jk8fdY?>Snlaw>8PMg99(Ii~ek^ z$~X5crKWTxG{;cZ;*2Fnj;m3#1&fh-~9 z#6_Wdn&=TRX^EI#24nt`&sFj5ee(YStYx+LH`HP9BCFXP7bB$xB1t)Zd6k5ImA~~@ z@!cA)g|_46y1nhj2>U;JivM@UtD(vZ<`coCUGWWZI@}u)?&I#qLKleF4OM5~P>VT+ zlh0s_q2||z4lcK0oY zEC;{QsGsf5D#%u%?sv@egrN zk*h2gahc^OS;$(Jx5Ow)iD9vfcOLy07pt#W;s2wD#@Lo9Y7A zA~LH)+^;)vxc9KMGkZ_!5|LH?XLK@(D#l;QjoLuPa68e`I2E+2O%|`w>X-C?gae zJ|JTJg_|#e{O7FTT{VXp;>COHvXlKLkJv@y{H(X!=2QBl(b-ORyhn~Tp7vjck>5Js zQ-QWZzokdW>uE@T9}mvr`4iNCR?F0viFbGNyC3Cib9qTEpIH&SO2p2o5_F$Y4He-g zS^uBNEAM9?`(+I2aoexia^Mdo)&FnE_);2mO8;6`?Q=YNgfo7ZgHX7=@#@lfD;EkkK3OC1 zsXBgEP5d4sBAg-J1hg4vZ^&`_5BFNdkS>FWIZ)oTnq;m*m&Sf?!*}*LeV@%t^b#eL zrty69$iRDxkxhEFy~(00yBQzDx@U`oV`VY!Yg6^#jh}rUzbp&ROuCuH z-*)U^siz;N`))FmG~(QU@P9H}c~chETKumr`%2u(f)ldRCU)zE+aKS;h9<+GN3gU0 z##m0?JC0_Wvf^sE!#`yAyx4bdVr;yLzqVjI7qFwyRi%oI;XgQ4gM6lw+D5kgw{e#d z1y-~4lkq@5ZGr)wFz4Wf;l7t}4^ah??gm|4rROU0jr(}V`#65es2+y$wOw!cel(u% zE$17x*hbhR)4*(-V}b>&ISlY`1ARA_wWd!zuNuZO)cOCAjcmM?wQTpN;`aakj;TKZ z6`H}~QyA=4b-Nbg??3T2R`@PHa}V^`A!g50|IZvZQjzY+gR|@#b;o`5^U)xb{l#$oDh2}kj6jaOBo0iR&5T$k>A+c+W4}XY>3NcSk4{l zSi7;ihvILr%+O!GH2tL#*+;7Xw)C`^71Sf!CUCSlM*6qki+kS!40I(7niMw>wQKlh zIHB4~Y@08u+kY!+T_e{H^!hvYy^t>cR7LA1Zw}{eA2zbc?Akc{5boh_V}$>BYXi3T zK6?l!bYA#qcJ|X+glgMJD}D> z))=bro^SbSxTCf;kG~Wz*Dv4;KI;Z^mcImsr`G?c1Js>mj^(^{3f6VlD$t!`P);8D zHveBv-(T{Rk5yDQV2sB}JD=ENN2{1n3tIk3?)o1?!QWx!Z*2QP9p-hRB&}1}cWq;A zB|mfPYy1T-h-K{I#B6pev19Q3TIwAc`Aa)Cc|CTsow@xhvi^^4EaaVffZPB78vdW2 z--r5N4^rCbIcMzLZHh}>fLwpFg-KQvd*HntU`e=%`*th+E3IGr1flMWt{HFG={Siz z!!7nh&FneRKHPl#96phn_8%8@J7WruI{&*{-rIsSQ;7`EiskCV5alItWHw|NgpZzr zbj6LRwfT>;|J!LN8O_t|BJ_@FgeCnTGKamj`Z`C8jOkrSv(x%d7S`7pH>m(i_SmiT z5B~oltN&4Cswf^dgisx^keaL~C(ijE{OMJ5qL3j6w0 z{XE>1J{#xS9d;wZ-7#jrE&es$s6KWe-p(6}!vEn|&p-0NK|b{&%L)5Zb^H}CZiA}t zh``_bb-pU`Ssbgjr)G?%@!~&3^0MYJ1?SsJZ>{M+oJFqA^THmS^ZvcElfu?P=)V)c z$juV#;)8wN|FM-16(F(u;aTW1_r7S}ik!mzcCY$GYd+l{k4wX*GqJ#FGOzipZF>A1 z&kG$cPC=-*u+Z-?=Rf5VFUU`6#jJj_lDP<`Y`{gEtA$L2KVjeG+4v?)ZWbM)|5QTmTys)+Q2zg~s(v|59@EK_2_zp{z`Z23-{_=+*U07q(g z%LO)75oXk);hV`W@gZ}&OfRKz>P%3v7?xf_<^M-EQy2fg6EgK=TPaAii*Zd?^=XR- zj)=p)=YKuxPgT2F@Ozusb4Et@G89O|GmnVPqeaTseR`N@S^M{YO?I}M%{O!ZS1J}g z*Q&w-*xy!W+u9h*@#ooAoEsT?b383{fa*#A%`mLo*r*eoWP1;`_a*=D!_r>&)}GKU z@USHqS!uRh-IJTh|57{45&Fr7yPt2ekdET)a6qiXZ1aL2<1I8aDt zG7NJ&pyqZC3e4c&O)=aen8a4=E>9U@3IG3Vrr|_UJxuQ!$xiUxGEsle*eue!Q8TjQ zl6W>gBx8Mul*7sAiFEpt&%UAlla_^bmh&xxl%>h+4LR9giH!K)cI+vu+L0PvoD1G( zqMeV7e><;e3qRB1UrqfjU)0UBW|-e6*2F$zDVPj9xhP*d~Dh$gII_XL&8+U-(fP7*-1IhnnS4a*gfYS&6+D<=3OIrRip$Mm5^16{(Ci7P}?m z);@b1Nf#x@0qiW?uXvV~k29a#a#tOY_{0L-egL$t$)1)#=de>H3)?8Ezivu#c_o~f zuNvP6@9GHKU*V~F&3_c`+R~ry@!wnCmtQveyA`Ylu%J6wR4?}Sfc4*W#xq(*v{Tjn zdov%wjvA`aToi$}#{Kf2#$xfc*%@vHfyFaZouIE(Bow8#a z1z5@kwmaQQN+13@9TLtp7x(?pKv*%gvq?mp1H;<0z$d*^JjI%J;Dpa%n4u?AHCVJl z1>`6AS<};giR;Ik*lJbZA!mO79{gYW|5~~iFrUjT4&d{rrkR@LHpmR7$E^!V(-r9= zB~#e0sHFQUa?fQqE0jxYYeLU@$YpgAGHtO|+7en(sL@bzPjVaN7TTZvoY{Tm;bH#& z-|zSS&U?=He9w8$dtQ7b_MeJ6;Z0YF{t6vS$Fg=~8e=h$h3>jI=|VQK?t2rRu1cc6 zxc)mDum~n^wnt&7r!FRoi4bTw|NkP^aGDm>C5D3}lHhr(#ZV>QdMC6S>GMT$PH}#B z7nPs&J@X_Rf09Q{iU0C=i_Ln+uZNA%)$ZR|Y1nBaeD5b5WsDo1fC9LB0xDcY>xWv?5T!u~^%-pBnD~F3Pm5)OuC|JFiXAL~TA%TZ4ah1g9bX}# zPV6EBw$DmCD>Z;VwvYu#C)YvPTt$19$6<@3<%sWA`PCTaMtx~7_WQ9t-6a^raM!eC z$Ft=L|K@q+Xjiv0pRoTC@NXz-jir0{u&GON?jLwqSyD{l4*#+f*0;`Af3jK+k*>*1 z=;yQ;?-MJ&Z>i~<%BBWkp4V8T?x8+qukTN#?XgeI4m1AwD>E}Td6>nfd8?+Pu=Zvl za-LhPK*esf4G{G!2r>~@e9b%$7XLSr-;8|`&N4PPo$Zz0U^YgW$uXjYsQ(&BKkvpB zALM`9(3|ZO(|GmKun)0tvgY$t|+-Cm2C(-@`@n zU&VB*S>QnN-%x9>SQ;J7mJ!*+4~zn*|O}k)+;%&=C#;=Krrt$Pqgi!V0uGHTjcMD)Jt1VLxw&X@bifJNi+z(5gi?kJmx=R0jiS zJtCOCjK|@melkkM!UC9gN=Jl0;192hIXfklXmoG?ugeOS;Tucn(gyP!XQ%gb|6w@L z480sC@;)VzF~SUm!6l-0CxqW@6UJ|Fow}TJ+XtsUF z{Q865qK=u2E-+Eia%0;3$jFa%a-Qc7x>zKCwv~M?h398k z4Vg^tUCJ{4OOx0cH^7YSPzyGPl|P{VqgC=4sfVO)p#?qog+pcaLVuLMUclqMEr!YD zqc1TZgXrLgIO-0FHd-uNOuL)O`yGX$d1am{hX(KBVK2g9PQ%vNK^^t~4a;h+zI2Mz zB3B;r)5z#5i5rGtBvH+>THfd-GPQ4$FDNvMN#-hm&p^HZI*`U|9=`Aae_OnA4#_5Qgiu?%4R$Z z6MV`{%qH);n16qFch+>WQRXc6J(L<*bJlR1>Wee5F4))0vRP|!9 z2*#bmpOngGMGx^oWOzuvtGdU|JaNFU(ahdH(Nuk zEJY`Uj%jO?je76oq<#m-mpOlGy7_NqMW=D{oGkAYaavpPcNMaU{n9(2+qs@NNZzv0 zs3+kNapu)}z9tPrsRRGt!#CE@&TiiQb#GV??~ZQdyLiHzFr{_$?kHV+P`0R|cvZDf za-;n}lb}>Z_sC~uMG)X$u&)=cSA|qZS-*T-MmI7E#XN#Nh_bPtv#06FU_7vjS=x)W zKSeg{FxHi3usgh{Ntd_DGZvDRuJ~;9A(81jyo&x&&a?WK?;4o;9@@_{q9rO7*tgmH zk;lAR^`B8hf6=9?!=Av(sL- zqFc>sZS+Tu)t-)g-JfxR@y0irm+B`E#MFKf7DXR9o_R^1 z&xHXk*-ZgmC}eYL5c$?A^y5>xk#;oZc3hxA8UH(K9^Ukhfvp#lmUU9sr||Jr;))i@ zTJv8G!qufOt$CN_*w7W^zmJt%FA}*Q&zxy&+eHz#o5`1~;KVuE(~>9n_Il<$+k1~8 zwY}bQ4eaP+H0dnnH#~46M)`YB>kc;?%DzTd@fpsusZ3^rQ`_b3mRa)|q)Oy2zV&VR zR4kr8kM`V%%TFk~e|HF;MT^>yW5Jo-$pNgfq4=PfMm^$=?L;2YC*f0h`x?+D;(?pV z;!oy3ofm$V_X#G}jfUZ7?C&HG@PaJQ9MM8Qe};AZzU_b z!z^`RAqArK7d<&Ttz!MwabNJX>f+$@$uD~3=BGxxekr`EFH63UhMq_&Vh@oWiGD^U zG8>Wcxgo7@vfKXeGop?;@Vo~k94tq^A}uR9i_a?bK6i?18(|f5^?I!=hm|L%(O%x- zDNJI#XD{@P_ux$DvbZEoRG#j-T5LWOj=v@5kIwf$o5_c0cdmKO#GMwvjwAe5d%hwg z8I{aqw_oE2(f=cAQ2XFW<*?aNc=m5e^eH&$Nis^fcP+8Thq7X)MA$=<7S_prrJoU7 zzJ(jbNyK~PHfMQvc|Li%ef0f(I@K3?Kg>cuV|&pfYG)GmF($QMzmHex;g=%!4&?kO zt&g*kbc5snkMUSd@r6~GZJcsfRjl`juF1=w=PI91^J!atava@^Q{>lRQ%6{56Yn1# z4xOuQkHfY^&q9dVkG(dg9b44YEYN%Xr1-HvUpSFuR_X=V*5_+|vo97@s3TwDnLCr# zPC&W@W4M7Yz8P~q#wNGYl3jB3!=c7VdXX)TpNgfWCq-h-o+6-P6>3G0_)=A6kHhJ8 zVvJR+vAq5}rO9x$KA#4kr0a_@xdJknN;@-B)oJogvT2w5>78t{%3lZ(deDM==(`ZI zt<|S;Kl^KrwKS1gIIN0VPMNHyyF)~?^ZBaD?%amASb;4S$bywioo`+asjOAkj&Yow zYG|$XKX`WmO*oz`mQC9NB{rMe0^C2&So|w|*@-DFkSE?pQ?`onm*9jYnCFBfmmNGw zr;B|$S?=oZ@)M24HeK!d?g9&E^Q8-t`9}6SU;RZg-aWpB^k2Z$`&sex-erTcCseB? zTX5*7`QLn_c*c9KhsF28=ld|;DR}uaR$Q)>Id0`MUBI1uvxk4VPlVJH7x;wNKV=NV z)!AJpk{o*`FR4yqFPPnrR6*q6G{@;ksl49LuFS^WDo0kANBsuFoeA3y;ww9ivop+$ z%H@OJry?Ed&->d8NSYb$au8Y`@TaTmkF%#zNL$4?50g`lv3=u?M?H0^Pu?fF3O=a= z8#}_J3iL9A-dFeJy}WH`XD_TZ_5$24!n*)+9Fcv^mJb^XOWrkxEGQT|@ZT`5EZ6=( zhOrmm0JP5Z%^I%ij3soZmC<*v5^TG`wTC=E*9d=MN%zay_Gh1Q64O?*SJiz=eJkE4 z2kyTwgP+6qSEVhZ#iy%%accumulator.forward(); - return (pos.getSideToMove() == WHITE ? score : -score) + TEMPO_SCORE; -} \ No newline at end of file diff --git a/src/eval.h b/src/eval.h index 4a1a2c6..db3f9c2 100644 --- a/src/eval.h +++ b/src/eval.h @@ -27,13 +27,13 @@ extern Score PIECE_VALUES[6]; #else constexpr Score PIECE_VALUES[6] = { - 0, 150, 762, 892, 1254, 1651 + 0, 144, 562, 613, 738, 1015 }; #endif -constexpr Score TEMPO_SCORE = 10; - -Score eval(const Position &pos); +inline Score eval(const Position &pos) { + return pos.getState()->accumulator.forward(pos.getSideToMove()); +} #endif //BLACKCORE_EVAL_H diff --git a/src/nnue.cpp b/src/nnue.cpp index 995520a..23a56b8 100644 --- a/src/nnue.cpp +++ b/src/nnue.cpp @@ -29,120 +29,145 @@ namespace NNUE { alignas(64) int16_t L_0_WEIGHTS[L_0_SIZE * L_1_SIZE]; alignas(64) int16_t L_0_BIASES[L_1_SIZE]; - alignas(64) int16_t L_1_WEIGHTS[L_1_SIZE * 1]; + alignas(64) int16_t L_1_WEIGHTS[L_1_SIZE * 2]; alignas(64) int16_t L_1_BIASES[1]; void Accumulator::loadAccumulator(NNUE::Accumulator &accumulator) { + for (Color perspective : {WHITE, BLACK}) { #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[offset4]); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset1], ac1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset2], ac2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset3], ac3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset4], ac4); - } + for (int i = 0; i < chunkNum; i += 4) { + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset4]); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], ac1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], ac2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], ac3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], ac4); + } #else - std::memcpy(hiddenLayer, accumulator.hiddenLayer, sizeof(int16_t) * L_1_SIZE); + std::memcpy(hiddenLayer[perspective], accumulator.hiddenLayer[perspective], sizeof(int16_t) * L_1_SIZE * 1); #endif + } + } void Accumulator::refresh(const Position &pos) { - std::memcpy(hiddenLayer, L_0_BIASES, sizeof(int16_t) * L_1_SIZE); + for (Color perspective : {WHITE, BLACK}) { + std::memcpy(hiddenLayer[perspective], L_0_BIASES, sizeof(int16_t) * L_1_SIZE); + } for (Square sq = A1; sq < 64; sq += 1) { Piece p = pos.pieceAt(sq); if (!p.isNull()) { - addFeature(getAccumulatorIndex(p.color, p.type, sq)); + addFeature(p.color, p.type, sq); } } } - void Accumulator::addFeature(int index) { + void Accumulator::addFeature(Color pieceColor, PieceType pieceType, Square sq) { + for (Color perspective : {WHITE, BLACK}) { + unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset4]); - - __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); - __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); - __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); - __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); - - __m256i sum1 = _mm256_add_epi16(ac1, we1); - __m256i sum2 = _mm256_add_epi16(ac2, we2); - __m256i sum3 = _mm256_add_epi16(ac3, we3); - __m256i sum4 = _mm256_add_epi16(ac4, we4); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset1], sum1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset2], sum2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset3], sum3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset4], sum4); - } + for (int i = 0; i < chunkNum; i += 4) { + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); + + __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); + __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); + __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); + __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); + + __m256i sum1 = _mm256_add_epi16(ac1, we1); + __m256i sum2 = _mm256_add_epi16(ac2, we2); + __m256i sum3 = _mm256_add_epi16(ac3, we3); + __m256i sum4 = _mm256_add_epi16(ac4, we4); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); + } #else - for (int i = 0; i < L_1_SIZE; i++) { - hiddenLayer[i] += L_0_WEIGHTS[index * L_1_SIZE + i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + hiddenLayer[perspective][i] += L_0_WEIGHTS[index * L_1_SIZE + i]; + } #endif + } } - void Accumulator::removeFeature(int index) { + void Accumulator::removeFeature(Color pieceColor, PieceType pieceType, Square sq) { + for (Color perspective : {WHITE, BLACK}) { + unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[offset4]); - - __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); - __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); - __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); - __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); - - __m256i sum1 = _mm256_sub_epi16(ac1, we1); - __m256i sum2 = _mm256_sub_epi16(ac2, we2); - __m256i sum3 = _mm256_sub_epi16(ac3, we3); - __m256i sum4 = _mm256_sub_epi16(ac4, we4); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset1], sum1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset2], sum2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset3], sum3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[offset4], sum4); - } + for (int i = 0; i < chunkNum; i += 4) { + + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); + + __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); + __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); + __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); + __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); + + __m256i sum1 = _mm256_sub_epi16(ac1, we1); + __m256i sum2 = _mm256_sub_epi16(ac2, we2); + __m256i sum3 = _mm256_sub_epi16(ac3, we3); + __m256i sum4 = _mm256_sub_epi16(ac4, we4); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); + } #else - for (int i = 0; i < L_1_SIZE; i++) { - hiddenLayer[i] -= L_0_WEIGHTS[index * L_1_SIZE + i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + hiddenLayer[perspective][i] -= L_0_WEIGHTS[index * L_1_SIZE + i]; + } #endif + } } - Score Accumulator::forward() { + Score Accumulator::forward(Color stm) { int32_t output = L_1_BIASES[0]; - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[i]) * L_1_WEIGHTS[i]; + if (stm == WHITE) { + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[i]; + } + + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[L_1_SIZE + i]; + } + } else { + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[i]; + } + + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[L_1_SIZE + i]; + } } return output * 400 / (255 * 255); @@ -155,8 +180,8 @@ namespace NNUE { ptr += sizeof(int16_t) * L_0_SIZE * L_1_SIZE; std::memcpy(L_0_BIASES, gNetData + ptr, sizeof(int16_t) * L_1_SIZE); ptr += sizeof(int16_t) * L_1_SIZE; - std::memcpy(L_1_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_1_SIZE * 1); - ptr += sizeof(int16_t) * L_1_SIZE * 1; + std::memcpy(L_1_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_1_SIZE * 2); + ptr += sizeof(int16_t) * L_1_SIZE * 2; std::memcpy(L_1_BIASES, gNetData + ptr, sizeof(int16_t) * 1); // Currently loading net from a file is not supported @@ -168,9 +193,9 @@ namespace NNUE { fread(L_0_WEIGHTS, sizeof(int16_t), L_0_SIZE * L_1_SIZE, file); fread(L_0_BIASES, sizeof(int16_t), L_1_SIZE, file); - fread(L_1_WEIGHTS, sizeof(int16_t), L_1_SIZE * 1, file); + fread(L_1_WEIGHTS, sizeof(int16_t), L_1_SIZE * 2, file); fread(L_1_BIASES, sizeof(int16_t), 1, file); }*/ } -} \ No newline at end of file +} diff --git a/src/nnue.h b/src/nnue.h index 6391a30..28cf950 100644 --- a/src/nnue.h +++ b/src/nnue.h @@ -23,19 +23,20 @@ class Position; namespace NNUE { - /* +-----------------------+ + /* + * +-----------------------+ * | NNUE Architecture | - * | 768->256->1 | - * | Activation: ReLU | + * | 2x(768->256)->1 | + * | Activation: ReLU | * +-----------------------+ * - * L_0_IN = features count + * L_0_SIZE = features count * - * L_1_WEIGHTS = in features -> L_1 (768 -> 32) - * L_1_BIASES = L_1 biases + * L_0_WEIGHTS = in features -> L_1 (768 -> 256) + * L_0_BIASES = L_1 biases * - * L_2_WEIGHTS = L_1 -> L_2 (32 -> 32) - * L_2_BIASES = L_2 biases + * L_1_WEIGHTS = 2xL_1 -> L_2 (2x256 -> 1) + * L_1_BIASES = L_2 biases * */ @@ -47,7 +48,7 @@ namespace NNUE { constexpr int chunkNum = 256 / regWidth; struct Accumulator { - alignas(32) int16_t hiddenLayer[L_1_SIZE]; + alignas(32) int16_t hiddenLayer[2][L_1_SIZE]; constexpr Accumulator() {} @@ -55,15 +56,16 @@ namespace NNUE { void refresh(const Position &pos); - void addFeature(int index); + void addFeature(Color pieceColor, PieceType pieceType, Square sq); - void removeFeature(int index); + void removeFeature(Color pieceColor, PieceType pieceType, Square sq); - Score forward(); + Score forward(Color stm); }; - constexpr int getAccumulatorIndex(Color color, PieceType type, Square square) { - return color * 384 + type * 64 + square; + constexpr int getAccumulatorIndex(Color perspective, Color pieceColor, PieceType pieceType, Square square) { + return (perspective == WHITE ? pieceColor : 1 - pieceColor) * 384 + pieceType * 64 + + (perspective == WHITE ? square : square ^ 56); } constexpr int16_t ReLU(int16_t in) { diff --git a/src/position.cpp b/src/position.cpp index 9034eed..2251c9a 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -73,7 +73,7 @@ bool Position::isRepetition() { } void Position::display() const { - state->accumulator.forward(); + std::vector text; text.emplace_back(string("Hash: ") + std::to_string(state->hash)); if (getEpSquare() != NULL_SQUARE) diff --git a/src/position.h b/src/position.h index 6079f5b..3f32d34 100644 --- a/src/position.h +++ b/src/position.h @@ -205,7 +205,7 @@ void Position::clearSquare(Square square) { state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; if constexpr (updateAccumulator) { - state->accumulator.removeFeature(NNUE::getAccumulatorIndex(piece.color, piece.type, square)); + state->accumulator.removeFeature(piece.color, piece.type, square); } } @@ -220,7 +220,7 @@ void Position::setSquare(Square square, Piece piece) { state->hash ^= pieceRandTable[12 * square + 6 * p.color + p.type]; if constexpr (updateAccumulator) { - state->accumulator.removeFeature(NNUE::getAccumulatorIndex(p.color, p.type, square)); + state->accumulator.removeFeature(p.color, p.type, square); } } @@ -231,7 +231,7 @@ void Position::setSquare(Square square, Piece piece) { state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; if constexpr (updateAccumulator) { - state->accumulator.addFeature(NNUE::getAccumulatorIndex(piece.color, piece.type, square)); + state->accumulator.addFeature(piece.color, piece.type, square); } } diff --git a/src/search.cpp b/src/search.cpp index f3fea97..d0090e2 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -25,13 +25,13 @@ #ifdef TUNE -Score DELTA_MARGIN = 307; +Score DELTA_MARGIN = 252; -Score RAZOR_MARGIN = 146; +Score RAZOR_MARGIN = 155; Depth RFP_DEPTH = 8; -Score RFP_DEPTH_MULTIPLIER = 60; -Score RFP_IMPROVING_MULTIPLIER = 56; +Score RFP_DEPTH_MULTIPLIER = 56; +Score RFP_IMPROVING_MULTIPLIER = 46; Depth NULL_MOVE_DEPTH = 2; Depth NULL_MOVE_BASE_R = 3; @@ -39,7 +39,7 @@ Depth NULL_MOVE_R_SCALE = 3; Depth LMR_DEPTH = 3; double LMR_BASE = 1; -double LMR_SCALE = 1.75; +double LMR_SCALE = 1.65; int LMR_INDEX = 2; Depth LMP_DEPTH = 4; @@ -50,7 +50,6 @@ Score ASPIRATION_DELTA = 28; Score ASPIRATION_BOUND = 3000; Score SEE_MARGIN = 2; -Depth SEE_DEPTH = 4; #endif @@ -285,7 +284,8 @@ Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score } // Internal iterative deepening - if (!ttHit && nonPvNode) depth--; + if (!ttHit && pvNode) depth--; + if (!ttHit && depth >= 5) depth--; if (depth <= 0) return quiescence(pos, alpha, beta, ply); } diff --git a/src/search.h b/src/search.h index 1ccede9..9060ffe 100644 --- a/src/search.h +++ b/src/search.h @@ -51,21 +51,21 @@ extern Score SEE_MARGIN; #else -constexpr Score DELTA_MARGIN = 306; +constexpr Score DELTA_MARGIN = 252; -constexpr Score RAZOR_MARGIN = 145; +constexpr Score RAZOR_MARGIN = 155; -constexpr Depth RFP_DEPTH = 7; -constexpr Score RFP_DEPTH_MULTIPLIER = 59; -constexpr Score RFP_IMPROVING_MULTIPLIER = 52; +constexpr Depth RFP_DEPTH = 9; +constexpr Score RFP_DEPTH_MULTIPLIER = 42; +constexpr Score RFP_IMPROVING_MULTIPLIER = 63; constexpr Depth NULL_MOVE_DEPTH = 2; -constexpr Depth NULL_MOVE_BASE_R = 3; -constexpr Depth NULL_MOVE_R_SCALE = 3; +constexpr Depth NULL_MOVE_BASE_R = 4; +constexpr Depth NULL_MOVE_R_SCALE = 2; constexpr Depth LMR_DEPTH = 3; constexpr double LMR_BASE = 1; -constexpr double LMR_SCALE = 1.75; +constexpr double LMR_SCALE = 1.65; constexpr int LMR_INDEX = 2; constexpr Depth LMP_DEPTH = 4; diff --git a/src/uci.cpp b/src/uci.cpp index 9fa7967..62fe974 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -80,7 +80,7 @@ void uciLoop() { #ifdef TUNE tuneOut("DELTA_MARGIN", 400, 200, 500); tuneOut("RAZOR_MARGIN", 130, 50, 200); - tuneOut("RFP_DEPTH", 5, 3, 8); + tuneOut("RFP_DEPTH", 5, 3, 10); tuneOut("RFP_DEPTH_MULTIPLIER", 70, 30, 200); tuneOut("RFP_IMPROVING_MULTIPLIER", 80, 30, 200); tuneOut("NULL_MOVE_DEPTH", 3, 1, 6); @@ -94,10 +94,10 @@ void uciLoop() { tuneOut("ASPIRATION_DELTA", 30, 10, 100); tuneOut("SEE_MARGIN", 0, 0, 200); tuneOut("PAWN_VALUE", 150, 100, 200); - tuneOut("KNIGHT_VALUE", 750, 500, 1000); - tuneOut("BISHOP_VALUE", 850, 500, 1000); - tuneOut("ROOK_VALUE", 1250, 1000, 1500); - tuneOut("QUEEN_VALUE", 1600, 1200, 2000); + tuneOut("KNIGHT_VALUE", 750, 300, 1000); + tuneOut("BISHOP_VALUE", 850, 300, 1000); + tuneOut("ROOK_VALUE", 800, 300, 1000); + tuneOut("QUEEN_VALUE", 1000, 500, 1500); tuneOut("LMR_BASE", 10, 1, 30); tuneOut("LMR_SCALE", 17, 10, 40); #endif From 68c79ea10999e6017e0b66655203525b0b9ebe4a Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Thu, 3 Nov 2022 14:28:38 +0100 Subject: [PATCH 08/17] Tuned params & rep detection improvement Bench: 4893760 --- src/eval.h | 2 +- src/search.cpp | 7 +++++-- src/search.h | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/eval.h b/src/eval.h index db3f9c2..e45f9a5 100644 --- a/src/eval.h +++ b/src/eval.h @@ -27,7 +27,7 @@ extern Score PIECE_VALUES[6]; #else constexpr Score PIECE_VALUES[6] = { - 0, 144, 562, 613, 738, 1015 + 0, 156, 561, 608, 736, 1022 }; #endif diff --git a/src/search.cpp b/src/search.cpp index d0090e2..442a41b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -217,7 +217,10 @@ Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score if (shouldEnd()) return UNKNOWN_SCORE; - if (pos.getMove50() >= 4 && notRootNode && pos.isRepetition()) return DRAW_VALUE; + if (notRootNode && pos.getMove50() >= 3 && pos.isRepetition()) { + alpha = DRAW_VALUE; + if (alpha >= beta) return alpha; + } bool ttHit = false; Score matePly = MATE_VALUE - ply; @@ -259,7 +262,7 @@ Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score // Reverse futility pruning if (depth <= RFP_DEPTH && - staticEval - RFP_DEPTH_MULTIPLIER * (int) depth + RFP_IMPROVING_MULTIPLIER * improving >= beta && + staticEval - RFP_DEPTH_MULTIPLIER * depth + RFP_IMPROVING_MULTIPLIER * improving >= beta && std::abs(beta) < WORST_MATE) return beta; diff --git a/src/search.h b/src/search.h index 9060ffe..f0aad17 100644 --- a/src/search.h +++ b/src/search.h @@ -55,9 +55,9 @@ constexpr Score DELTA_MARGIN = 252; constexpr Score RAZOR_MARGIN = 155; -constexpr Depth RFP_DEPTH = 9; +constexpr Depth RFP_DEPTH = 8; constexpr Score RFP_DEPTH_MULTIPLIER = 42; -constexpr Score RFP_IMPROVING_MULTIPLIER = 63; +constexpr Score RFP_IMPROVING_MULTIPLIER = 66; constexpr Depth NULL_MOVE_DEPTH = 2; constexpr Depth NULL_MOVE_BASE_R = 4; From ca298b66b4bf1284ce286d36fed12645cb5485ba Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Fri, 4 Nov 2022 11:56:15 +0100 Subject: [PATCH 09/17] New net Bench: 3755390 --- src/corenet.bin | Bin 394754 -> 394754 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/corenet.bin b/src/corenet.bin index c018bfcbc224155f744c08d97b5d4325bd7e115a..2df21797ce8db25bb33579199efe9c9e9e7586da 100644 GIT binary patch literal 394754 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

5f<~Q7*aXefOTh61BqVk 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≶skFs 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

k&&i6Pl_7jX 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 Date: Sun, 6 Nov 2022 18:55:02 +0100 Subject: [PATCH 10/17] Futility pruning Bench: 3161281 --- src/search.cpp | 8 +++++++- src/search.h | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/search.cpp b/src/search.cpp index 442a41b..0aef17d 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -71,7 +71,7 @@ void initLmr() { } Bitboard leastValuablePiece(const Position &pos, Bitboard attackers, Color stm, PieceType &type) { - for (PieceType t : PIECE_TYPES_BY_VALUE) { + for (PieceType t: PIECE_TYPES_BY_VALUE) { Bitboard s = attackers & pos.pieces(stm, t); if (s) { type = t; @@ -320,7 +320,13 @@ Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score // We can prune the move in some cases if (notRootNode && nonPvNode && !inCheck && alpha > -WORST_MATE) { + if (depth <= FUTILITY_DEPTH && m.isQuiet() && + staticEval + FUTILITY_MARGIN + FUTILITY_MARGIN_DEPTH * depth + FUTILITY_MARGIN_IMPROVING * improving < + alpha) + continue; + // Late move/movecount pruning + // This will also prune losing captures if (depth <= LMP_DEPTH && index >= LMP_MOVES + depth * depth && m.isQuiet()) break; } diff --git a/src/search.h b/src/search.h index f0aad17..7bdcb43 100644 --- a/src/search.h +++ b/src/search.h @@ -71,6 +71,11 @@ constexpr int LMR_INDEX = 2; constexpr Depth LMP_DEPTH = 4; constexpr int LMP_MOVES = 5; +constexpr Depth FUTILITY_DEPTH = 3; +constexpr Score FUTILITY_MARGIN = 30; +constexpr Score FUTILITY_MARGIN_DEPTH = 60; +constexpr Score FUTILITY_MARGIN_IMPROVING = 80; + constexpr Depth ASPIRATION_DEPTH = 9; constexpr Score ASPIRATION_DELTA = 28; constexpr Score ASPIRATION_BOUND = 3000; From ed2810d15327b103c0fa20248e1e58ebc4e2e9e5 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Mon, 7 Nov 2022 19:25:24 +0100 Subject: [PATCH 11/17] Futility pruning Bench: 2870680 --- src/move_ordering.cpp | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/move_ordering.cpp b/src/move_ordering.cpp index 790c346..5519e04 100644 --- a/src/move_ordering.cpp +++ b/src/move_ordering.cpp @@ -20,7 +20,7 @@ #include -constexpr Score winningCapture[6][6] = { +constexpr Score MVV_LVA[6][6] = { // KING PAWN KNIGHT BISHOP ROOK QUEEN {0, 0, 0, 0, 0, 0}, // KING {0, 800004, 800104, 800204, 800304, 800404}, // PAWN @@ -30,15 +30,8 @@ constexpr Score winningCapture[6][6] = { {0, 800000, 800100, 800200, 800300, 800400}, // QUEEN }; -constexpr Score losingCapture[6][6] = { -// KING PAWN KNIGHT BISHOP ROOK QUEEN - {0, 0, 0, 0, 0, 0}, // KING - {0, 200004, 200104, 200204, 200304, 200404}, // PAWN - {0, 200003, 200103, 200203, 200303, 200403}, // KNIGHT - {0, 200002, 200102, 200202, 200302, 200402}, // BISHOP - {0, 200001, 200101, 200201, 200301, 200401}, // ROOK - {0, 200000, 200100, 200200, 200300, 200400}, // QUEEN -}; +constexpr Score winningCapture = 800000; +constexpr Score losingCapture = 200000; Move killerMoves[MAX_PLY + 1][2]; @@ -70,10 +63,11 @@ Score scoreQMove(const Position &pos, Move m) { } } else { Score seeScore = see(pos, m); + if (seeScore >= 0) - return 800000 + seeScore; + return winningCapture + seeScore; else - return seeScore; + return losingCapture + seeScore; } } @@ -87,13 +81,12 @@ Score scoreMove(const Position &pos, Move m, Ply ply) { return -100000; } } else if (m.isCapture()) { - Square from = m.getFrom(); - Square to = m.getTo(); + Score seeScore = see(pos, m); if (see(pos, m) >= 0) - return winningCapture[pos.pieceAt(from).type][pos.pieceAt(to).type]; + return winningCapture + seeScore; else - return losingCapture[pos.pieceAt(from).type][pos.pieceAt(to).type]; + return losingCapture + seeScore; } else if (killerMoves[ply][0] == m) { return 750000; } else if (killerMoves[ply][1] == m) { From 985b65a8eec5851953f9a6cb0ce228a1bac0a150 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Tue, 8 Nov 2022 17:49:04 +0100 Subject: [PATCH 12/17] Fixed SEE with EP Bench: 2870227 --- src/search.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/search.cpp b/src/search.cpp index 0aef17d..d040cca 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -95,7 +95,7 @@ Score see(const Position &pos, Move move) { Square from = move.getFrom(); Square to = move.getTo(); - e[0] = PIECE_VALUES[pos.pieceAt(to).type]; + e[0] = move.equalFlag(EP_CAPTURE) ? PIECE_VALUES[PAWN] : PIECE_VALUES[pos.pieceAt(to).type]; Bitboard rooks = pos.pieces() | pos.pieces(); Bitboard bishops = pos.pieces() | pos.pieces(); From a7e0bf88f0781ff31b535c868d36da0882374158 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Tue, 8 Nov 2022 20:08:28 +0100 Subject: [PATCH 13/17] Many small changes Bench: 2870227 --- .github/workflows/build.yml | 56 ++++++++++++++++++------------------- src/Makefile | 9 +++--- src/timeman.cpp | 2 +- src/uci.cpp | 10 +++++-- 4 files changed, 40 insertions(+), 37 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f40bfc..e9914b5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,34 +13,34 @@ jobs: strategy: matrix: config: - - { - name: "Ubuntu g++ popcnt", - os: ubuntu-latest, - compiler: g++-11, - arch: popcnt, - target: BlackCore-popcnt-linux, - } - - { - name: "Ubuntu g++ modern", - os: ubuntu-latest, - compiler: g++-11, - arch: modern, - target: BlackCore-modern-linux, - } - - { - name: "Ubuntu g++ avx2", - os: ubuntu-latest, - compiler: g++-11, - arch: avx2, - target: BlackCore-avx2-linux, - } - - { - name: "Ubuntu g++ bmi2", - os: ubuntu-latest, - compiler: g++-11, - arch: bmi2, - target: BlackCore-bmi2-linux, - } + #- { + # name: "Ubuntu g++ popcnt", + # os: ubuntu-latest, + # compiler: g++-11, + # arch: popcnt, + # target: BlackCore-popcnt-linux, + #} + #- { + # name: "Ubuntu g++ modern", + # os: ubuntu-latest, + # compiler: g++-11, + # arch: modern, + # target: BlackCore-modern-linux, + #} + #- { + # name: "Ubuntu g++ avx2", + # os: ubuntu-latest, + # compiler: g++-11, + # arch: avx2, + # target: BlackCore-avx2-linux, + #} + #- { + # name: "Ubuntu g++ bmi2", + # os: ubuntu-latest, + # compiler: g++-11, + # arch: bmi2, + # target: BlackCore-bmi2-linux, + #} - { name: "Windows g++ popcnt", os: windows-latest, diff --git a/src/Makefile b/src/Makefile index 818d24e..3303477 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,8 +2,8 @@ CXX = g++ TARGET_FLAGS = -static -static-libgcc -static-libstdc++ ARCH=native NAME = BlackCore -VERSION_MAJOR = 2 -VERSION_MINOR = 1 +VERSION_MAJOR = 3 +VERSION_MINOR = 0 OBJECT_DIR = objects SOURCES := $(wildcard *.cpp) OBJECTS := $(patsubst %.cpp, $(OBJECT_DIR)/%.o, $(SOURCES)) @@ -14,7 +14,6 @@ else uname_S := $(shell uname -s) endif - ifeq ($(uname_S), Windows) SUFFIX = .exe else @@ -44,8 +43,8 @@ ifeq ($(ARCH), popcnt) ARCH_FLAGS = -march=x86-64 -mpopcnt endif -CXXFLAGS = -std=c++20 -O3 -flto -pthread -Wall -Wno-class-memaccess $(DEFINE_FLAGS) $(ARCH_FLAGS) -EXE = $(NAME)_v$(VERSION_MAJOR)-$(VERSION_MINOR)$(SUFFIX) +CXXFLAGS = -std=c++20 -O3 -flto -pthread -Wall -Wno-class-memaccess -DVERSION=\"v$(VERSION_MAJOR).$(VERSION_MINOR)\" $(DEFINE_FLAGS) $(ARCH_FLAGS) +EXE = $(NAME)-v$(VERSION_MAJOR)-$(VERSION_MINOR)$(SUFFIX) default: $(EXE) diff --git a/src/timeman.cpp b/src/timeman.cpp index 6ae64e8..d82e226 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -55,7 +55,7 @@ void initTimeMan(U64 time, U64 inc, U64 movesToGo, U64 moveTime, U64 nodes) { } else { U64 panicTime = time / (movesToGo + 10) + 2 * inc; - stabilityTime = time / 400; + stabilityTime = time / 500; shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 1) + inc * 3 / 4 - MOVE_OVERHEAD); maxSearch = std::min(time - MOVE_OVERHEAD, shouldSearch + panicTime); diff --git a/src/uci.cpp b/src/uci.cpp index 62fe974..d85b788 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -67,12 +67,16 @@ Move stringToMove(const Position &pos, const std::string &s) { void uciLoop() { // Identifying ourselves - out("id", "name", "BlackCore_v2-1"); +#ifdef VERSION + out("id", "name", "BlackCore", VERSION); +#else + out("id", "name", "BlackCore"); +#endif out("id", "author", "SzilBalazs"); // We tell the GUI what options we have - out("option", "name", "Hash", "type", "spin", "default", 16, "min", 1, "max", 1024); + out("option", "name", "Hash", "type", "spin", "default", 32, "min", 1, "max", 4096); out("option", "name", "Threads", "type", "spin", "default", 1, "min", 1, "max", 1); out("option", "name", "Ponder", "type", "check", "default", "false"); out("option", "name", "Move Overhead", "type", "spin", "default", 10, "min", 0, "max", 10000); @@ -102,7 +106,7 @@ void uciLoop() { tuneOut("LMR_SCALE", 17, 10, 40); #endif - ttResize(16); + ttResize(32); // We have sent all the parameters out("uciok"); From 972a01712be39293f0fa2f45feb2cf4cfd5e1060 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Tue, 8 Nov 2022 20:34:07 +0100 Subject: [PATCH 14/17] Added clang format & reformatted code base Bench: 2870227 --- .clang-format | 65 +++ src/bench.cpp | 118 +++--- src/bench.h | 31 +- src/bitboard.cpp | 350 +++++++-------- src/bitboard.h | 668 ++++++++++++++++------------- src/constants.h | 957 +++++++++++++++++++++++------------------- src/eval.cpp | 3 +- src/eval.h | 7 +- src/main.cpp | 56 +-- src/move.cpp | 25 +- src/move.h | 83 ++-- src/move_ordering.cpp | 96 ++--- src/move_ordering.h | 2 +- src/movegen.cpp | 711 ++++++++++++++++--------------- src/movegen.h | 96 ++--- src/nnue.cpp | 289 +++++++------ src/nnue.h | 79 ++-- src/position.cpp | 365 ++++++++-------- src/position.h | 564 +++++++++++++------------ src/search.cpp | 713 ++++++++++++++++--------------- src/search.h | 14 +- src/timeman.cpp | 73 ++-- src/timeman.h | 2 +- src/tt.cpp | 117 +++--- src/tt.h | 35 +- src/tuner.cpp | 466 ++++++++++---------- src/tuner.h | 18 +- src/uci.cpp | 424 +++++++++---------- src/uci.h | 38 +- src/utils.cpp | 174 ++++---- src/utils.h | 32 +- 31 files changed, 3506 insertions(+), 3165 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..5988b68 --- /dev/null +++ b/.clang-format @@ -0,0 +1,65 @@ +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: None +AlignOperands: Align +AllowAllArgumentsOnNextLine: false +AllowAllConstructorInitializersOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: Always +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterReturnType: None +AlwaysBreakTemplateDeclarations: Yes +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: true +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +ColumnLimit: 0 +CompactNamespaces: false +ContinuationIndentWidth: 8 +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 4 +KeepEmptyLinesAtTheStartOfBlocks: true +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: All +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PointerAlignment: Right +ReflowComments: false +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 0 +SpacesInAngles: Never +SpacesInCStyleCastParentheses: false +SpacesInContainerLiterals: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +TabWidth: 4 +UseTab: Always diff --git a/src/bench.cpp b/src/bench.cpp index ad7d591..622d225 100644 --- a/src/bench.cpp +++ b/src/bench.cpp @@ -14,19 +14,19 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#include -#include -#include -#include #include "bench.h" -#include "tt.h" #include "search.h" #include "timeman.h" +#include "tt.h" +#include +#include +#include +#include struct TestPosition { - std::string fen; - Depth perftDepth; - U64 perftResult; + std::string fen; + Depth perftDepth; + U64 perftResult; }; const unsigned int posCount = 10; @@ -36,66 +36,66 @@ const unsigned int searchTestHashSize = 32; const Depth SEARCH_DEPTH = 15; const TestPosition testPositions[posCount] = { - // Positions from CPW - {"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 ", 6, 119060324}, - {"r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - ", 5, 193690690}, - {"8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -", 7, 178633661}, - {"r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1", 5, 15833292}, - {"r2q1rk1/pP1p2pp/Q4n2/bbp1p3/Np6/1B3NBn/pPPP1PPP/R3K2R b KQ - 0 1 ", 5, 15833292}, - {"rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8 ", 5, 89941194}, - {"r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10 ", 5, 164075551}, + // Positions from CPW + {"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 ", 6, 119060324}, + {"r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - ", 5, 193690690}, + {"8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -", 7, 178633661}, + {"r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1", 5, 15833292}, + {"r2q1rk1/pP1p2pp/Q4n2/bbp1p3/Np6/1B3NBn/pPPP1PPP/R3K2R b KQ - 0 1 ", 5, 15833292}, + {"rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8 ", 5, 89941194}, + {"r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10 ", 5, 164075551}, - // Own positions - {"r3kb1r/1p3ppp/pqn1pn2/1Bpp1b2/3P1B2/1QP1PN2/PP1N1PPP/R3K2R w KQkq - 0 9", 5, 140824446}, - {"rnb1k2r/pppp1ppp/5q2/2b5/2BNP3/2N5/PPP2KPP/R1BQ3R w kq - 1 8", 5, 19782759}, - {"8/pp5p/8/2p2kp1/2Pp4/3P1KPP/PP6/8 w - - 0 32", 7, 13312960} -}; + // Own positions + {"r3kb1r/1p3ppp/pqn1pn2/1Bpp1b2/3P1B2/1QP1PN2/PP1N1PPP/R3K2R w KQkq - 0 9", 5, 140824446}, + {"rnb1k2r/pppp1ppp/5q2/2b5/2BNP3/2N5/PPP2KPP/R1BQ3R w kq - 1 8", 5, 19782759}, + {"8/pp5p/8/2p2kp1/2Pp4/3P1KPP/PP6/8 w - - 0 32", 7, 13312960}}; void testPerft() { - initSearch(); - std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - U64 totalNodes = 0; - bool ok = true; - for (const TestPosition &tPos : testPositions) { - Position pos = {tPos.fen}; - U64 nodes = perft(pos, tPos.perftDepth); - totalNodes += nodes; - if (nodes != tPos.perftResult) { - ok = false; - std::cout << tPos.fen << " failed! Result: " << nodes << " Expected: " << tPos.perftResult << std::endl; - } - } + initSearch(); + std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); + U64 totalNodes = 0; + bool ok = true; + for (const TestPosition &tPos : testPositions) { + Position pos = {tPos.fen}; + U64 nodes = perft(pos, tPos.perftDepth); + totalNodes += nodes; + if (nodes != tPos.perftResult) { + ok = false; + std::cout << tPos.fen << " failed! Result: " << nodes << " Expected: " << tPos.perftResult << std::endl; + } + } - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - U64 elapsedTime = std::chrono::duration_cast(end - begin).count(); - U64 nps = totalNodes * 1000 / elapsedTime; + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); + U64 elapsedTime = std::chrono::duration_cast(end - begin).count(); + U64 nps = totalNodes * 1000 / elapsedTime; - if (ok) { - std::cout << "PERFT OK\n" << totalNodes << " nodes " << nps << " nps" << std::endl; - } else { - std::cout << "PERFT FAILED" << std::endl; - exit(1); - } + if (ok) { + std::cout << "PERFT OK\n" + << totalNodes << " nodes " << nps << " nps" << std::endl; + } else { + std::cout << "PERFT FAILED" << std::endl; + exit(1); + } } void testSearch() { - initSearch(); - ttResize(searchTestHashSize); + initSearch(); + ttResize(searchTestHashSize); - U64 totalNodes = 0; - U64 nps; + U64 totalNodes = 0; + U64 nps; - for (const TestPosition &tPos : testPositions) { - ttClear(); - Position pos = {tPos.fen}; - SearchInfo info; - info.maxDepth = SEARCH_DEPTH; - info.uciMode = false; - startSearch(info, pos, 1); - joinThread(true); - totalNodes += nodeCount; - nps += getNps(); - } + for (const TestPosition &tPos : testPositions) { + ttClear(); + Position pos = {tPos.fen}; + SearchInfo info; + info.maxDepth = SEARCH_DEPTH; + info.uciMode = false; + startSearch(info, pos, 1); + joinThread(true); + totalNodes += nodeCount; + nps += getNps(); + } - std::cout << totalNodes << " nodes " << nps / posCount << " nps" << std::endl; + std::cout << totalNodes << " nodes " << nps / posCount << " nps" << std::endl; } diff --git a/src/bench.h b/src/bench.h index 3c5e280..7e34668 100644 --- a/src/bench.h +++ b/src/bench.h @@ -22,24 +22,25 @@ template U64 perft(Position &position, Depth depth) { - Move moves[200]; - Move *movesEnd = generateMoves(position, moves, false); - if (depth == 1) return movesEnd - moves; - U64 nodes = 0; - for (Move *it = moves; it != movesEnd; it++) { - position.makeMove(*it); - U64 a = perft(position, depth - 1); - if constexpr (output) { - std::cout << *it << ": " << a << std::endl; - } - nodes += a; - position.undoMove(*it); - } - return nodes; + Move moves[200]; + Move *movesEnd = generateMoves(position, moves, false); + if (depth == 1) + return movesEnd - moves; + U64 nodes = 0; + for (Move *it = moves; it != movesEnd; it++) { + position.makeMove(*it); + U64 a = perft(position, depth - 1); + if constexpr (output) { + std::cout << *it << ": " << a << std::endl; + } + nodes += a; + position.undoMove(*it); + } + return nodes; } void testPerft(); void testSearch(); -#endif //BLACKCORE_BENCH_H +#endif//BLACKCORE_BENCH_H diff --git a/src/bitboard.cpp b/src/bitboard.cpp index ef3d805..8c99f79 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -14,198 +14,202 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#include -#include #include "bitboard.h" #include "utils.h" +#include +#include -Bitboard bitMasks[64], pawnMasks[64][2], knightMasks[64], kingMasks[64], fileMasks[64], rankMasks[64], rookMasks[64], diagonalMasks[64], antiDiagonalMasks[64], bishopMasks[64], - rookAttackTable[102400], bishopAttackTable[5248], commonRay[64][64], adjacentFileMasks[64], adjacentNorthMasks[64], adjacentSouthMasks[64]; +Bitboard bitMasks[64], pawnMasks[64][2], knightMasks[64], kingMasks[64], fileMasks[64], rankMasks[64], rookMasks[64], + diagonalMasks[64], antiDiagonalMasks[64], bishopMasks[64], + rookAttackTable[102400], bishopAttackTable[5248], commonRay[64][64], adjacentFileMasks[64], adjacentNorthMasks[64], + adjacentSouthMasks[64]; LineType lineType[64][64]; void initBitboard() { - for (Square sq = A1; sq < 64; sq += 1) { - bitMasks[sq] = 1ULL << sq; - - pawnMasks[sq][WHITE] = step(bitMasks[sq]) | step(bitMasks[sq]); - pawnMasks[sq][BLACK] = step(bitMasks[sq]) | step(bitMasks[sq]); - - knightMasks[sq] = - step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | - step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | - step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | - step(step(bitMasks[sq])) | step(step(bitMasks[sq])); - - kingMasks[sq] = - step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | - step(bitMasks[sq]) | - step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | - step(bitMasks[sq]); - - fileMasks[sq] = slide(sq) | slide(sq); - - rankMasks[sq] = slide(sq) | slide(sq); - - rookMasks[sq] = fileMasks[sq] | rankMasks[sq]; - - diagonalMasks[sq] = slide(sq) | slide(sq); - - antiDiagonalMasks[sq] = slide(sq) | slide(sq); - - bishopMasks[sq] = diagonalMasks[sq] | antiDiagonalMasks[sq]; - } - - for (Square sq = A1; sq < 64; sq += 1) { - unsigned int file = squareToFile(sq); - - adjacentNorthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | - (file != 7 ? slide(sq + EAST) : 0); - adjacentSouthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | - (file != 7 ? slide(sq + EAST) : 0); - adjacentFileMasks[sq] = - ~fileMask(sq) & (adjacentNorthMasks[sq] | adjacentSouthMasks[sq] | step(sq) | step(sq)); - - for (Square sq2 = A1; sq2 < 64; sq2 += 1) { - if (sq == sq2) continue; - for (Direction dir : DIRECTIONS) { - Bitboard value = slide(dir, sq) & slide(-dir, sq2); - - if (value) { - commonRay[sq][sq2] = value; - LineType type = HORIZONTAL; - switch (dir) { - case NORTH: - case SOUTH: - type = HORIZONTAL; - break; - case WEST: - case EAST: - type = VERTICAL; - break; - case NORTH_EAST: - case SOUTH_WEST: - type = DIAGONAL; - break; - case NORTH_WEST: - case SOUTH_EAST: - type = ANTI_DIAGONAL; - break; - } - lineType[sq][sq2] = type; - break; - } - } - } - } - - initMagic(rookMagics, ROOK); - initMagic(bishopMagics, BISHOP); - + for (Square sq = A1; sq < 64; sq += 1) { + bitMasks[sq] = 1ULL << sq; + + pawnMasks[sq][WHITE] = step(bitMasks[sq]) | step(bitMasks[sq]); + pawnMasks[sq][BLACK] = step(bitMasks[sq]) | step(bitMasks[sq]); + + knightMasks[sq] = + step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | + step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | + step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | + step(step(bitMasks[sq])) | step(step(bitMasks[sq])); + + kingMasks[sq] = + step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | + step(bitMasks[sq]) | + step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | + step(bitMasks[sq]); + + fileMasks[sq] = slide(sq) | slide(sq); + + rankMasks[sq] = slide(sq) | slide(sq); + + rookMasks[sq] = fileMasks[sq] | rankMasks[sq]; + + diagonalMasks[sq] = slide(sq) | slide(sq); + + antiDiagonalMasks[sq] = slide(sq) | slide(sq); + + bishopMasks[sq] = diagonalMasks[sq] | antiDiagonalMasks[sq]; + } + + for (Square sq = A1; sq < 64; sq += 1) { + unsigned int file = squareToFile(sq); + + adjacentNorthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | + (file != 7 ? slide(sq + EAST) : 0); + adjacentSouthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | + (file != 7 ? slide(sq + EAST) : 0); + adjacentFileMasks[sq] = + ~fileMask(sq) & (adjacentNorthMasks[sq] | adjacentSouthMasks[sq] | step(sq) | step(sq)); + + for (Square sq2 = A1; sq2 < 64; sq2 += 1) { + if (sq == sq2) + continue; + for (Direction dir : DIRECTIONS) { + Bitboard value = slide(dir, sq) & slide(-dir, sq2); + + if (value) { + commonRay[sq][sq2] = value; + LineType type = HORIZONTAL; + switch (dir) { + case NORTH: + case SOUTH: + type = HORIZONTAL; + break; + case WEST: + case EAST: + type = VERTICAL; + break; + case NORTH_EAST: + case SOUTH_WEST: + type = DIAGONAL; + break; + case NORTH_WEST: + case SOUTH_EAST: + type = ANTI_DIAGONAL; + break; + } + lineType[sq][sq2] = type; + break; + } + } + } + } + + initMagic(rookMagics, ROOK); + initMagic(bishopMagics, BISHOP); } Bitboard slidingAttacks(Square square, Bitboard occupied, PieceType type) { - switch (type) { - case ROOK: - return slide(square, occupied) | slide(square, occupied) | slide(square, occupied) | - slide(square, occupied); - case BISHOP: - return slide(square, occupied) | slide(square, occupied) | - slide(square, occupied) | slide(square, occupied); - default: - assert(0); - } + switch (type) { + case ROOK: + return slide(square, occupied) | slide(square, occupied) | slide(square, occupied) | + slide(square, occupied); + case BISHOP: + return slide(square, occupied) | slide(square, occupied) | + slide(square, occupied) | slide(square, occupied); + default: + assert(0); + } } void initMagic(const Magic *magics, PieceType type) { - assert((type == ROOK) | (type == BISHOP)); - Bitboard occupied[4096], attacked[4096]; + assert((type == ROOK) | (type == BISHOP)); + Bitboard occupied[4096], attacked[4096]; - for (Square square = A1; square < 64; square += 1) { - const Magic &magic = magics[square]; + for (Square square = A1; square < 64; square += 1) { + const Magic &magic = magics[square]; - unsigned int length = 0; - Bitboard occ = 0; - do { - occupied[length] = occ; - attacked[length] = slidingAttacks(square, occ, type); + unsigned int length = 0; + Bitboard occ = 0; + do { + occupied[length] = occ; + attacked[length] = slidingAttacks(square, occ, type); - length++; - occ = (occ - magic.mask) & magic.mask; - } while (occ != 0); + length++; + occ = (occ - magic.mask) & magic.mask; + } while (occ != 0); - for (unsigned int i = 0; i < length; i++) { - U64 index = getMagicIndex(magic, occupied[i]); + for (unsigned int i = 0; i < length; i++) { + U64 index = getMagicIndex(magic, occupied[i]); - magic.ptr[index] = attacked[i]; - } - } + magic.ptr[index] = attacked[i]; + } + } } void findMagics(Bitboard *attackTable, Magic *magics, PieceType type) { - assert((type == ROOK) | (type == BISHOP)); - Bitboard occupied[4096], attacked[4096]; - - if (type == ROOK) - std::cout << "Magic rookMagics[64] = {\n"; - else - std::cout << "Magic bishopMagics[64] = {\n"; - - unsigned int length = 0; - for (Square square = A1; square < 64; square += 1) { - Bitboard edge = (((rank1 | rank8) & ~rankMask(square)) | ((fileA | fileH) & ~fileMask(square))); - - Magic &magic = magics[square]; - - magic.mask = slidingAttacks(square, 0, type) & ~edge; - magic.shift = magic.mask.popCount(); - - if (square == A1) magic.ptr = attackTable; - else magic.ptr = magics[square - 1].ptr + length; - - // Carry-Ripler trick for reference check out: https://www.chessprogramming.org/Traversing_Subsets_of_a_Set - length = 0; - Bitboard occ = 0; - do { - occupied[length] = occ; - attacked[length] = slidingAttacks(square, occ, type); - - length++; - occ = (occ - magic.mask) & magic.mask; - } while (occ != 0); - - Bitboard used[4096]; - - while (true) { - magic.magic = randBB() & randBB() & randBB(); - if (((magic.magic * magic.mask) >> 56).popCount() < 6) continue; - - std::memset(used, 0, sizeof(used)); - - bool failed = false; - for (unsigned int i = 0; i < length; i++) { - U64 index = (((occupied[i] & magic.mask) * magic.magic) >> (64 - magic.shift)).bb; - if (used[index] == 0) { - used[index] = attacked[i]; - magic.ptr[index] = attacked[i]; - } else if (used[index] != attacked[i]) { - failed = true; - break; - } - } - if (!failed) { - break; - } - } - if (type == ROOK) - std::cout << " {rookAttackTable + " << magic.ptr - rookAttackTable << ", " << BBToHex(magic.mask) << ", " - << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; - else - std::cout << " {bishopAttackTable + " << magic.ptr - bishopAttackTable << ", " << BBToHex(magic.mask) - << ", " - << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; - - } - - std::cout << "};\n"; + assert((type == ROOK) | (type == BISHOP)); + Bitboard occupied[4096], attacked[4096]; + + if (type == ROOK) + std::cout << "Magic rookMagics[64] = {\n"; + else + std::cout << "Magic bishopMagics[64] = {\n"; + + unsigned int length = 0; + for (Square square = A1; square < 64; square += 1) { + Bitboard edge = (((rank1 | rank8) & ~rankMask(square)) | ((fileA | fileH) & ~fileMask(square))); + + Magic &magic = magics[square]; + + magic.mask = slidingAttacks(square, 0, type) & ~edge; + magic.shift = magic.mask.popCount(); + + if (square == A1) + magic.ptr = attackTable; + else + magic.ptr = magics[square - 1].ptr + length; + + // Carry-Ripler trick for reference check out: https://www.chessprogramming.org/Traversing_Subsets_of_a_Set + length = 0; + Bitboard occ = 0; + do { + occupied[length] = occ; + attacked[length] = slidingAttacks(square, occ, type); + + length++; + occ = (occ - magic.mask) & magic.mask; + } while (occ != 0); + + Bitboard used[4096]; + + while (true) { + magic.magic = randBB() & randBB() & randBB(); + if (((magic.magic * magic.mask) >> 56).popCount() < 6) + continue; + + std::memset(used, 0, sizeof(used)); + + bool failed = false; + for (unsigned int i = 0; i < length; i++) { + U64 index = (((occupied[i] & magic.mask) * magic.magic) >> (64 - magic.shift)).bb; + if (used[index] == 0) { + used[index] = attacked[i]; + magic.ptr[index] = attacked[i]; + } else if (used[index] != attacked[i]) { + failed = true; + break; + } + } + if (!failed) { + break; + } + } + if (type == ROOK) + std::cout << " {rookAttackTable + " << magic.ptr - rookAttackTable << ", " << BBToHex(magic.mask) << ", " + << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; + else + std::cout << " {bishopAttackTable + " << magic.ptr - bishopAttackTable << ", " << BBToHex(magic.mask) + << ", " + << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; + } + + std::cout << "};\n"; } \ No newline at end of file diff --git a/src/bitboard.h b/src/bitboard.h index 7f963c9..acaac1b 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -17,9 +17,9 @@ #ifndef BLACKCORE_BITBOARD_H #define BLACKCORE_BITBOARD_H +#include "constants.h" #include #include -#include "constants.h" #ifdef _MSC_VER #include @@ -28,92 +28,134 @@ struct Bitboard { - U64 bb = 0; + U64 bb = 0; - constexpr Bitboard(U64 value) { bb = value; } + constexpr Bitboard(U64 value) { + bb = value; + } - inline Bitboard(Square square); + inline Bitboard(Square square); - constexpr Bitboard() = default; + constexpr Bitboard() = default; - constexpr bool get(Square square) const { return (bb >> square) & 1; } + constexpr bool get(Square square) const { + return (bb >> square) & 1; + } - constexpr void set(Square square) { bb |= 1ULL << square; } + constexpr void set(Square square) { + bb |= 1ULL << square; + } - constexpr void clear(Square square) { bb &= ~(1ULL << square); } + constexpr void clear(Square square) { + bb &= ~(1ULL << square); + } - constexpr int popCount() const { + constexpr int popCount() const { #if defined(_MSC_VER) || defined(__INTEL_COMPILER) - return (int)_mm_popcnt_u64(bb); + return (int) _mm_popcnt_u64(bb); #else - return __builtin_popcountll(bb); + return __builtin_popcountll(bb); #endif + } - } - - constexpr Square lsb() const { + constexpr Square lsb() const { #ifdef __GNUC__ - return Square(__builtin_ctzll(bb)); + return Square(__builtin_ctzll(bb)); #elif defined(_MSC_VER) - unsigned long a; - _BitScanForward64(&a, bb); - return Square(a); + unsigned long a; + _BitScanForward64(&a, bb); + return Square(a); #else #error "Unsupported compiler!" #endif + } - } + constexpr Square popLsb() { + Square square = lsb(); + bb &= bb - 1; + return square; + } - constexpr Square popLsb() { - Square square = lsb(); - bb &= bb - 1; - return square; - } + constexpr Bitboard operator*(Bitboard a) const { + return bb * a.bb; + } - constexpr Bitboard operator*(Bitboard a) const { return bb * a.bb; } + constexpr bool operator==(Bitboard a) const { + return bb == a.bb; + } - constexpr bool operator==(Bitboard a) const { return bb == a.bb; } + constexpr bool operator!=(Bitboard a) const { + return bb != a.bb; + } - constexpr bool operator!=(Bitboard a) const { return bb != a.bb; } + constexpr Bitboard operator+(Bitboard a) const { + return bb + a.bb; + } - constexpr Bitboard operator+(Bitboard a) const { return bb + a.bb; } + constexpr Bitboard operator-(Bitboard a) const { + return bb - a.bb; + } - constexpr Bitboard operator-(Bitboard a) const { return bb - a.bb; } + constexpr Bitboard operator&(Bitboard a) const { + return bb & a.bb; + } - constexpr Bitboard operator&(Bitboard a) const { return bb & a.bb; } + constexpr Bitboard operator|(Bitboard a) const { + return bb | a.bb; + } - constexpr Bitboard operator|(Bitboard a) const { return bb | a.bb; } + constexpr Bitboard operator^(Bitboard a) const { + return bb ^ a.bb; + } - constexpr Bitboard operator^(Bitboard a) const { return bb ^ a.bb; } + constexpr Bitboard operator~() const { + return ~bb; + } - constexpr Bitboard operator~() const { return ~bb; } + constexpr Bitboard operator<<(const unsigned int a) const { + return bb << a; + } - constexpr Bitboard operator<<(const unsigned int a) const { return bb << a; } + constexpr Bitboard operator>>(const unsigned int a) const { + return bb >> a; + } - constexpr Bitboard operator>>(const unsigned int a) const { return bb >> a; } + constexpr void operator&=(Bitboard a) { + bb &= a.bb; + } - constexpr void operator&=(Bitboard a) { bb &= a.bb; } + constexpr void operator|=(Bitboard a) { + bb |= a.bb; + } - constexpr void operator|=(Bitboard a) { bb |= a.bb; } + constexpr void operator^=(Bitboard a) { + bb ^= a.bb; + } - constexpr void operator^=(Bitboard a) { bb ^= a.bb; } + constexpr void operator<<=(const unsigned int a) { + bb <<= a; + } - constexpr void operator<<=(const unsigned int a) { bb <<= a; } + constexpr void operator>>=(const unsigned int a) { + bb >>= a; + } - constexpr void operator>>=(const unsigned int a) { bb >>= a; } + constexpr explicit operator bool() const { + return bb; + } - constexpr explicit operator bool() const { return bb; } - - constexpr explicit operator U64() const { return bb; } + constexpr explicit operator U64() const { + return bb; + } }; struct Magic { - Bitboard *ptr; - Bitboard mask; - Bitboard magic; - unsigned int shift; + Bitboard *ptr; + Bitboard mask; + Bitboard magic; + unsigned int shift; }; extern Bitboard rookAttackTable[102400]; @@ -123,137 +165,137 @@ extern Bitboard bishopAttackTable[5248]; // To generate the attackTables from them use initMagic // To generate new magic numbers use findMagics constexpr Magic rookMagics[64] = { - {rookAttackTable + 0, 0x101010101017eULL, 0x200102084420100ULL, 12}, - {rookAttackTable + 4096, 0x202020202027cULL, 0x40200040001000ULL, 11}, - {rookAttackTable + 6144, 0x404040404047aULL, 0x4100082000104300ULL, 11}, - {rookAttackTable + 8192, 0x8080808080876ULL, 0x480049000080080ULL, 11}, - {rookAttackTable + 10240, 0x1010101010106eULL, 0x100040211000800ULL, 11}, - {rookAttackTable + 12288, 0x2020202020205eULL, 0x2500240002080100ULL, 11}, - {rookAttackTable + 14336, 0x4040404040403eULL, 0x280120001000080ULL, 11}, - {rookAttackTable + 16384, 0x8080808080807eULL, 0x200004086002b04ULL, 12}, - {rookAttackTable + 20480, 0x1010101017e00ULL, 0x401800280400020ULL, 11}, - {rookAttackTable + 22528, 0x2020202027c00ULL, 0x8601400050002000ULL, 10}, - {rookAttackTable + 23552, 0x4040404047a00ULL, 0x802801000200280ULL, 10}, - {rookAttackTable + 24576, 0x8080808087600ULL, 0x411001001002008ULL, 10}, - {rookAttackTable + 25600, 0x10101010106e00ULL, 0x11000410080300ULL, 10}, - {rookAttackTable + 26624, 0x20202020205e00ULL, 0x20a000804108200ULL, 10}, - {rookAttackTable + 27648, 0x40404040403e00ULL, 0x84006850240102ULL, 10}, - {rookAttackTable + 28672, 0x80808080807e00ULL, 0x24800049000080ULL, 11}, - {rookAttackTable + 30720, 0x10101017e0100ULL, 0x208000400080ULL, 11}, - {rookAttackTable + 32768, 0x20202027c0200ULL, 0x101020020804202ULL, 10}, - {rookAttackTable + 33792, 0x40404047a0400ULL, 0x20828010022000ULL, 10}, - {rookAttackTable + 34816, 0x8080808760800ULL, 0x801230009001000ULL, 10}, - {rookAttackTable + 35840, 0x101010106e1000ULL, 0x5608808004020801ULL, 10}, - {rookAttackTable + 36864, 0x202020205e2000ULL, 0x3086008080040002ULL, 10}, - {rookAttackTable + 37888, 0x404040403e4000ULL, 0x40041221008ULL, 10}, - {rookAttackTable + 38912, 0x808080807e8000ULL, 0x8000020000811044ULL, 11}, - {rookAttackTable + 40960, 0x101017e010100ULL, 0x21c00180002081ULL, 11}, - {rookAttackTable + 43008, 0x202027c020200ULL, 0xa010024140002000ULL, 10}, - {rookAttackTable + 44032, 0x404047a040400ULL, 0x1040200280100080ULL, 10}, - {rookAttackTable + 45056, 0x8080876080800ULL, 0x2100100200b00ULL, 10}, - {rookAttackTable + 46080, 0x1010106e101000ULL, 0x8014008080040800ULL, 10}, - {rookAttackTable + 47104, 0x2020205e202000ULL, 0x840200120008904cULL, 10}, - {rookAttackTable + 48128, 0x4040403e404000ULL, 0x10020400811058ULL, 10}, - {rookAttackTable + 49152, 0x8080807e808000ULL, 0x8280040200004081ULL, 11}, - {rookAttackTable + 51200, 0x1017e01010100ULL, 0xa000408001002100ULL, 11}, - {rookAttackTable + 53248, 0x2027c02020200ULL, 0x210904000802000ULL, 10}, - {rookAttackTable + 54272, 0x4047a04040400ULL, 0x200204082001200ULL, 10}, - {rookAttackTable + 55296, 0x8087608080800ULL, 0x2204201042000a00ULL, 10}, - {rookAttackTable + 56320, 0x10106e10101000ULL, 0x6c80040801001100ULL, 10}, - {rookAttackTable + 57344, 0x20205e20202000ULL, 0x8040080800200ULL, 10}, - {rookAttackTable + 58368, 0x40403e40404000ULL, 0x2b0900804001663ULL, 10}, - {rookAttackTable + 59392, 0x80807e80808000ULL, 0x4074800040800100ULL, 11}, - {rookAttackTable + 61440, 0x17e0101010100ULL, 0x4000400080208000ULL, 11}, - {rookAttackTable + 63488, 0x27c0202020200ULL, 0x1a40500020004001ULL, 10}, - {rookAttackTable + 64512, 0x47a0404040400ULL, 0x1004020010018ULL, 10}, - {rookAttackTable + 65536, 0x8760808080800ULL, 0x20201200420008ULL, 10}, - {rookAttackTable + 66560, 0x106e1010101000ULL, 0xc24008008008005ULL, 10}, - {rookAttackTable + 67584, 0x205e2020202000ULL, 0x4002010804020010ULL, 10}, - {rookAttackTable + 68608, 0x403e4040404000ULL, 0xb015081002040001ULL, 10}, - {rookAttackTable + 69632, 0x807e8080808000ULL, 0x4000408c020029ULL, 11}, - {rookAttackTable + 71680, 0x7e010101010100ULL, 0xb840004020800080ULL, 11}, - {rookAttackTable + 73728, 0x7c020202020200ULL, 0x60804001002100ULL, 10}, - {rookAttackTable + 74752, 0x7a040404040400ULL, 0x210810a285420200ULL, 10}, - {rookAttackTable + 75776, 0x76080808080800ULL, 0xa000080010008080ULL, 10}, - {rookAttackTable + 76800, 0x6e101010101000ULL, 0x800050010080100ULL, 10}, - {rookAttackTable + 77824, 0x5e202020202000ULL, 0x4040002008080ULL, 10}, - {rookAttackTable + 78848, 0x3e404040404000ULL, 0x80b4011042080400ULL, 10}, - {rookAttackTable + 79872, 0x7e808080808000ULL, 0x6014004114008200ULL, 11}, - {rookAttackTable + 81920, 0x7e01010101010100ULL, 0x1001002018408202ULL, 12}, - {rookAttackTable + 86016, 0x7c02020202020200ULL, 0x2400104128421ULL, 11}, - {rookAttackTable + 88064, 0x7a04040404040400ULL, 0x407600010408901ULL, 11}, - {rookAttackTable + 90112, 0x7608080808080800ULL, 0x108448a01001000dULL, 11}, - {rookAttackTable + 92160, 0x6e10101010101000ULL, 0x8402011008842002ULL, 11}, - {rookAttackTable + 94208, 0x5e20202020202000ULL, 0x11000204000801ULL, 11}, - {rookAttackTable + 96256, 0x3e40404040404000ULL, 0x4026000108208452ULL, 11}, - {rookAttackTable + 98304, 0x7e80808080808000ULL, 0x800081004c2c06ULL, 12}, + {rookAttackTable + 0, 0x101010101017eULL, 0x200102084420100ULL, 12}, + {rookAttackTable + 4096, 0x202020202027cULL, 0x40200040001000ULL, 11}, + {rookAttackTable + 6144, 0x404040404047aULL, 0x4100082000104300ULL, 11}, + {rookAttackTable + 8192, 0x8080808080876ULL, 0x480049000080080ULL, 11}, + {rookAttackTable + 10240, 0x1010101010106eULL, 0x100040211000800ULL, 11}, + {rookAttackTable + 12288, 0x2020202020205eULL, 0x2500240002080100ULL, 11}, + {rookAttackTable + 14336, 0x4040404040403eULL, 0x280120001000080ULL, 11}, + {rookAttackTable + 16384, 0x8080808080807eULL, 0x200004086002b04ULL, 12}, + {rookAttackTable + 20480, 0x1010101017e00ULL, 0x401800280400020ULL, 11}, + {rookAttackTable + 22528, 0x2020202027c00ULL, 0x8601400050002000ULL, 10}, + {rookAttackTable + 23552, 0x4040404047a00ULL, 0x802801000200280ULL, 10}, + {rookAttackTable + 24576, 0x8080808087600ULL, 0x411001001002008ULL, 10}, + {rookAttackTable + 25600, 0x10101010106e00ULL, 0x11000410080300ULL, 10}, + {rookAttackTable + 26624, 0x20202020205e00ULL, 0x20a000804108200ULL, 10}, + {rookAttackTable + 27648, 0x40404040403e00ULL, 0x84006850240102ULL, 10}, + {rookAttackTable + 28672, 0x80808080807e00ULL, 0x24800049000080ULL, 11}, + {rookAttackTable + 30720, 0x10101017e0100ULL, 0x208000400080ULL, 11}, + {rookAttackTable + 32768, 0x20202027c0200ULL, 0x101020020804202ULL, 10}, + {rookAttackTable + 33792, 0x40404047a0400ULL, 0x20828010022000ULL, 10}, + {rookAttackTable + 34816, 0x8080808760800ULL, 0x801230009001000ULL, 10}, + {rookAttackTable + 35840, 0x101010106e1000ULL, 0x5608808004020801ULL, 10}, + {rookAttackTable + 36864, 0x202020205e2000ULL, 0x3086008080040002ULL, 10}, + {rookAttackTable + 37888, 0x404040403e4000ULL, 0x40041221008ULL, 10}, + {rookAttackTable + 38912, 0x808080807e8000ULL, 0x8000020000811044ULL, 11}, + {rookAttackTable + 40960, 0x101017e010100ULL, 0x21c00180002081ULL, 11}, + {rookAttackTable + 43008, 0x202027c020200ULL, 0xa010024140002000ULL, 10}, + {rookAttackTable + 44032, 0x404047a040400ULL, 0x1040200280100080ULL, 10}, + {rookAttackTable + 45056, 0x8080876080800ULL, 0x2100100200b00ULL, 10}, + {rookAttackTable + 46080, 0x1010106e101000ULL, 0x8014008080040800ULL, 10}, + {rookAttackTable + 47104, 0x2020205e202000ULL, 0x840200120008904cULL, 10}, + {rookAttackTable + 48128, 0x4040403e404000ULL, 0x10020400811058ULL, 10}, + {rookAttackTable + 49152, 0x8080807e808000ULL, 0x8280040200004081ULL, 11}, + {rookAttackTable + 51200, 0x1017e01010100ULL, 0xa000408001002100ULL, 11}, + {rookAttackTable + 53248, 0x2027c02020200ULL, 0x210904000802000ULL, 10}, + {rookAttackTable + 54272, 0x4047a04040400ULL, 0x200204082001200ULL, 10}, + {rookAttackTable + 55296, 0x8087608080800ULL, 0x2204201042000a00ULL, 10}, + {rookAttackTable + 56320, 0x10106e10101000ULL, 0x6c80040801001100ULL, 10}, + {rookAttackTable + 57344, 0x20205e20202000ULL, 0x8040080800200ULL, 10}, + {rookAttackTable + 58368, 0x40403e40404000ULL, 0x2b0900804001663ULL, 10}, + {rookAttackTable + 59392, 0x80807e80808000ULL, 0x4074800040800100ULL, 11}, + {rookAttackTable + 61440, 0x17e0101010100ULL, 0x4000400080208000ULL, 11}, + {rookAttackTable + 63488, 0x27c0202020200ULL, 0x1a40500020004001ULL, 10}, + {rookAttackTable + 64512, 0x47a0404040400ULL, 0x1004020010018ULL, 10}, + {rookAttackTable + 65536, 0x8760808080800ULL, 0x20201200420008ULL, 10}, + {rookAttackTable + 66560, 0x106e1010101000ULL, 0xc24008008008005ULL, 10}, + {rookAttackTable + 67584, 0x205e2020202000ULL, 0x4002010804020010ULL, 10}, + {rookAttackTable + 68608, 0x403e4040404000ULL, 0xb015081002040001ULL, 10}, + {rookAttackTable + 69632, 0x807e8080808000ULL, 0x4000408c020029ULL, 11}, + {rookAttackTable + 71680, 0x7e010101010100ULL, 0xb840004020800080ULL, 11}, + {rookAttackTable + 73728, 0x7c020202020200ULL, 0x60804001002100ULL, 10}, + {rookAttackTable + 74752, 0x7a040404040400ULL, 0x210810a285420200ULL, 10}, + {rookAttackTable + 75776, 0x76080808080800ULL, 0xa000080010008080ULL, 10}, + {rookAttackTable + 76800, 0x6e101010101000ULL, 0x800050010080100ULL, 10}, + {rookAttackTable + 77824, 0x5e202020202000ULL, 0x4040002008080ULL, 10}, + {rookAttackTable + 78848, 0x3e404040404000ULL, 0x80b4011042080400ULL, 10}, + {rookAttackTable + 79872, 0x7e808080808000ULL, 0x6014004114008200ULL, 11}, + {rookAttackTable + 81920, 0x7e01010101010100ULL, 0x1001002018408202ULL, 12}, + {rookAttackTable + 86016, 0x7c02020202020200ULL, 0x2400104128421ULL, 11}, + {rookAttackTable + 88064, 0x7a04040404040400ULL, 0x407600010408901ULL, 11}, + {rookAttackTable + 90112, 0x7608080808080800ULL, 0x108448a01001000dULL, 11}, + {rookAttackTable + 92160, 0x6e10101010101000ULL, 0x8402011008842002ULL, 11}, + {rookAttackTable + 94208, 0x5e20202020202000ULL, 0x11000204000801ULL, 11}, + {rookAttackTable + 96256, 0x3e40404040404000ULL, 0x4026000108208452ULL, 11}, + {rookAttackTable + 98304, 0x7e80808080808000ULL, 0x800081004c2c06ULL, 12}, }; constexpr Magic bishopMagics[64] = { - {bishopAttackTable + 0, 0x40201008040200ULL, 0x4100216240212ULL, 6}, - {bishopAttackTable + 64, 0x402010080400ULL, 0x8080110420002ULL, 5}, - {bishopAttackTable + 96, 0x4020100a00ULL, 0x4280091000005ULL, 5}, - {bishopAttackTable + 128, 0x40221400ULL, 0x24410020801400ULL, 5}, - {bishopAttackTable + 160, 0x2442800ULL, 0x4242000000311ULL, 5}, - {bishopAttackTable + 192, 0x204085000ULL, 0x882021006148000ULL, 5}, - {bishopAttackTable + 224, 0x20408102000ULL, 0xb440a0210260800ULL, 5}, - {bishopAttackTable + 256, 0x2040810204000ULL, 0x80840c0a011c00ULL, 6}, - {bishopAttackTable + 320, 0x20100804020000ULL, 0x1000040488080100ULL, 5}, - {bishopAttackTable + 352, 0x40201008040000ULL, 0x800a200202284112ULL, 5}, - {bishopAttackTable + 384, 0x4020100a0000ULL, 0xcc00098401020000ULL, 5}, - {bishopAttackTable + 416, 0x4022140000ULL, 0x8000080a00202000ULL, 5}, - {bishopAttackTable + 448, 0x244280000ULL, 0x8821210000824ULL, 5}, - {bishopAttackTable + 480, 0x20408500000ULL, 0xc000088230400020ULL, 5}, - {bishopAttackTable + 512, 0x2040810200000ULL, 0x2904494808a41024ULL, 5}, - {bishopAttackTable + 544, 0x4081020400000ULL, 0x2302882301004ULL, 5}, - {bishopAttackTable + 576, 0x10080402000200ULL, 0x910200610100104ULL, 5}, - {bishopAttackTable + 608, 0x20100804000400ULL, 0x910800850008080ULL, 5}, - {bishopAttackTable + 640, 0x4020100a000a00ULL, 0x30080010004d4009ULL, 7}, - {bishopAttackTable + 768, 0x402214001400ULL, 0x4108000c20222001ULL, 7}, - {bishopAttackTable + 896, 0x24428002800ULL, 0x22000400942005ULL, 7}, - {bishopAttackTable + 1024, 0x2040850005000ULL, 0xa021100512400ULL, 7}, - {bishopAttackTable + 1152, 0x4081020002000ULL, 0xa001000041301024ULL, 5}, - {bishopAttackTable + 1184, 0x8102040004000ULL, 0x8000420206021981ULL, 5}, - {bishopAttackTable + 1216, 0x8040200020400ULL, 0x1008480004606800ULL, 5}, - {bishopAttackTable + 1248, 0x10080400040800ULL, 0x4a8280003100100ULL, 5}, - {bishopAttackTable + 1280, 0x20100a000a1000ULL, 0x3480010182240ULL, 7}, - {bishopAttackTable + 1408, 0x40221400142200ULL, 0x2048080102820042ULL, 9}, - {bishopAttackTable + 1920, 0x2442800284400ULL, 0x4001020004008400ULL, 9}, - {bishopAttackTable + 2432, 0x4085000500800ULL, 0x204004048080200ULL, 7}, - {bishopAttackTable + 2560, 0x8102000201000ULL, 0x2008200040212a0ULL, 5}, - {bishopAttackTable + 2592, 0x10204000402000ULL, 0x10c013002430400ULL, 5}, - {bishopAttackTable + 2624, 0x4020002040800ULL, 0x4300a5082214480ULL, 5}, - {bishopAttackTable + 2656, 0x8040004081000ULL, 0x401041000215900ULL, 5}, - {bishopAttackTable + 2688, 0x100a000a102000ULL, 0x104804048040408ULL, 7}, - {bishopAttackTable + 2816, 0x22140014224000ULL, 0x800400808208200ULL, 9}, - {bishopAttackTable + 3328, 0x44280028440200ULL, 0x8002400054101ULL, 9}, - {bishopAttackTable + 3840, 0x8500050080400ULL, 0x2001004502020102ULL, 7}, - {bishopAttackTable + 3968, 0x10200020100800ULL, 0x1988080110006100ULL, 5}, - {bishopAttackTable + 4000, 0x20400040201000ULL, 0x1282009200102201ULL, 5}, - {bishopAttackTable + 4032, 0x2000204081000ULL, 0xa208010420001280ULL, 5}, - {bishopAttackTable + 4064, 0x4000408102000ULL, 0x4004010809000200ULL, 5}, - {bishopAttackTable + 4096, 0xa000a10204000ULL, 0x43008150006100ULL, 7}, - {bishopAttackTable + 4224, 0x14001422400000ULL, 0x2410145000801ULL, 7}, - {bishopAttackTable + 4352, 0x28002844020000ULL, 0x280104006040ULL, 7}, - {bishopAttackTable + 4480, 0x50005008040200ULL, 0x4012042000902ULL, 7}, - {bishopAttackTable + 4608, 0x20002010080400ULL, 0x28100482080a82ULL, 5}, - {bishopAttackTable + 4640, 0x40004020100800ULL, 0x80040c2400240240ULL, 5}, - {bishopAttackTable + 4672, 0x20408102000ULL, 0x80c1101101044a0ULL, 5}, - {bishopAttackTable + 4704, 0x40810204000ULL, 0x180804802310808ULL, 5}, - {bishopAttackTable + 4736, 0xa1020400000ULL, 0x8048080064ULL, 5}, - {bishopAttackTable + 4768, 0x142240000000ULL, 0x8c8400020880000ULL, 5}, - {bishopAttackTable + 4800, 0x284402000000ULL, 0x30001010020a2000ULL, 5}, - {bishopAttackTable + 4832, 0x500804020000ULL, 0x80600282220010ULL, 5}, - {bishopAttackTable + 4864, 0x201008040200ULL, 0x120228228010000ULL, 5}, - {bishopAttackTable + 4896, 0x402010080400ULL, 0xc08020802042300ULL, 5}, - {bishopAttackTable + 4928, 0x2040810204000ULL, 0x2a008048221000ULL, 6}, - {bishopAttackTable + 4992, 0x4081020400000ULL, 0x4601204100901002ULL, 5}, - {bishopAttackTable + 5024, 0xa102040000000ULL, 0x821200104052400ULL, 5}, - {bishopAttackTable + 5056, 0x14224000000000ULL, 0x8200084208810ULL, 5}, - {bishopAttackTable + 5088, 0x28440200000000ULL, 0x8c022040a80b0408ULL, 5}, - {bishopAttackTable + 5120, 0x50080402000000ULL, 0x2140201012100512ULL, 5}, - {bishopAttackTable + 5152, 0x20100804020000ULL, 0x10210240128120aULL, 5}, - {bishopAttackTable + 5184, 0x40201008040200ULL, 0x208600082060020ULL, 6}, + {bishopAttackTable + 0, 0x40201008040200ULL, 0x4100216240212ULL, 6}, + {bishopAttackTable + 64, 0x402010080400ULL, 0x8080110420002ULL, 5}, + {bishopAttackTable + 96, 0x4020100a00ULL, 0x4280091000005ULL, 5}, + {bishopAttackTable + 128, 0x40221400ULL, 0x24410020801400ULL, 5}, + {bishopAttackTable + 160, 0x2442800ULL, 0x4242000000311ULL, 5}, + {bishopAttackTable + 192, 0x204085000ULL, 0x882021006148000ULL, 5}, + {bishopAttackTable + 224, 0x20408102000ULL, 0xb440a0210260800ULL, 5}, + {bishopAttackTable + 256, 0x2040810204000ULL, 0x80840c0a011c00ULL, 6}, + {bishopAttackTable + 320, 0x20100804020000ULL, 0x1000040488080100ULL, 5}, + {bishopAttackTable + 352, 0x40201008040000ULL, 0x800a200202284112ULL, 5}, + {bishopAttackTable + 384, 0x4020100a0000ULL, 0xcc00098401020000ULL, 5}, + {bishopAttackTable + 416, 0x4022140000ULL, 0x8000080a00202000ULL, 5}, + {bishopAttackTable + 448, 0x244280000ULL, 0x8821210000824ULL, 5}, + {bishopAttackTable + 480, 0x20408500000ULL, 0xc000088230400020ULL, 5}, + {bishopAttackTable + 512, 0x2040810200000ULL, 0x2904494808a41024ULL, 5}, + {bishopAttackTable + 544, 0x4081020400000ULL, 0x2302882301004ULL, 5}, + {bishopAttackTable + 576, 0x10080402000200ULL, 0x910200610100104ULL, 5}, + {bishopAttackTable + 608, 0x20100804000400ULL, 0x910800850008080ULL, 5}, + {bishopAttackTable + 640, 0x4020100a000a00ULL, 0x30080010004d4009ULL, 7}, + {bishopAttackTable + 768, 0x402214001400ULL, 0x4108000c20222001ULL, 7}, + {bishopAttackTable + 896, 0x24428002800ULL, 0x22000400942005ULL, 7}, + {bishopAttackTable + 1024, 0x2040850005000ULL, 0xa021100512400ULL, 7}, + {bishopAttackTable + 1152, 0x4081020002000ULL, 0xa001000041301024ULL, 5}, + {bishopAttackTable + 1184, 0x8102040004000ULL, 0x8000420206021981ULL, 5}, + {bishopAttackTable + 1216, 0x8040200020400ULL, 0x1008480004606800ULL, 5}, + {bishopAttackTable + 1248, 0x10080400040800ULL, 0x4a8280003100100ULL, 5}, + {bishopAttackTable + 1280, 0x20100a000a1000ULL, 0x3480010182240ULL, 7}, + {bishopAttackTable + 1408, 0x40221400142200ULL, 0x2048080102820042ULL, 9}, + {bishopAttackTable + 1920, 0x2442800284400ULL, 0x4001020004008400ULL, 9}, + {bishopAttackTable + 2432, 0x4085000500800ULL, 0x204004048080200ULL, 7}, + {bishopAttackTable + 2560, 0x8102000201000ULL, 0x2008200040212a0ULL, 5}, + {bishopAttackTable + 2592, 0x10204000402000ULL, 0x10c013002430400ULL, 5}, + {bishopAttackTable + 2624, 0x4020002040800ULL, 0x4300a5082214480ULL, 5}, + {bishopAttackTable + 2656, 0x8040004081000ULL, 0x401041000215900ULL, 5}, + {bishopAttackTable + 2688, 0x100a000a102000ULL, 0x104804048040408ULL, 7}, + {bishopAttackTable + 2816, 0x22140014224000ULL, 0x800400808208200ULL, 9}, + {bishopAttackTable + 3328, 0x44280028440200ULL, 0x8002400054101ULL, 9}, + {bishopAttackTable + 3840, 0x8500050080400ULL, 0x2001004502020102ULL, 7}, + {bishopAttackTable + 3968, 0x10200020100800ULL, 0x1988080110006100ULL, 5}, + {bishopAttackTable + 4000, 0x20400040201000ULL, 0x1282009200102201ULL, 5}, + {bishopAttackTable + 4032, 0x2000204081000ULL, 0xa208010420001280ULL, 5}, + {bishopAttackTable + 4064, 0x4000408102000ULL, 0x4004010809000200ULL, 5}, + {bishopAttackTable + 4096, 0xa000a10204000ULL, 0x43008150006100ULL, 7}, + {bishopAttackTable + 4224, 0x14001422400000ULL, 0x2410145000801ULL, 7}, + {bishopAttackTable + 4352, 0x28002844020000ULL, 0x280104006040ULL, 7}, + {bishopAttackTable + 4480, 0x50005008040200ULL, 0x4012042000902ULL, 7}, + {bishopAttackTable + 4608, 0x20002010080400ULL, 0x28100482080a82ULL, 5}, + {bishopAttackTable + 4640, 0x40004020100800ULL, 0x80040c2400240240ULL, 5}, + {bishopAttackTable + 4672, 0x20408102000ULL, 0x80c1101101044a0ULL, 5}, + {bishopAttackTable + 4704, 0x40810204000ULL, 0x180804802310808ULL, 5}, + {bishopAttackTable + 4736, 0xa1020400000ULL, 0x8048080064ULL, 5}, + {bishopAttackTable + 4768, 0x142240000000ULL, 0x8c8400020880000ULL, 5}, + {bishopAttackTable + 4800, 0x284402000000ULL, 0x30001010020a2000ULL, 5}, + {bishopAttackTable + 4832, 0x500804020000ULL, 0x80600282220010ULL, 5}, + {bishopAttackTable + 4864, 0x201008040200ULL, 0x120228228010000ULL, 5}, + {bishopAttackTable + 4896, 0x402010080400ULL, 0xc08020802042300ULL, 5}, + {bishopAttackTable + 4928, 0x2040810204000ULL, 0x2a008048221000ULL, 6}, + {bishopAttackTable + 4992, 0x4081020400000ULL, 0x4601204100901002ULL, 5}, + {bishopAttackTable + 5024, 0xa102040000000ULL, 0x821200104052400ULL, 5}, + {bishopAttackTable + 5056, 0x14224000000000ULL, 0x8200084208810ULL, 5}, + {bishopAttackTable + 5088, 0x28440200000000ULL, 0x8c022040a80b0408ULL, 5}, + {bishopAttackTable + 5120, 0x50080402000000ULL, 0x2140201012100512ULL, 5}, + {bishopAttackTable + 5152, 0x20100804020000ULL, 0x10210240128120aULL, 5}, + {bishopAttackTable + 5184, 0x40201008040200ULL, 0x208600082060020ULL, 6}, }; constexpr Bitboard fileA = 0x101010101010101ULL; @@ -307,185 +349,211 @@ extern LineType lineType[64][64]; void initBitboard(); -inline Bitboard::Bitboard(Square square) { bb = bitMasks[square].bb; } +inline Bitboard::Bitboard(Square square) { + bb = bitMasks[square].bb; +} -inline Bitboard adjacentFileMask(Square square) { return adjacentFileMasks[square]; } +inline Bitboard adjacentFileMask(Square square) { + return adjacentFileMasks[square]; +} -inline Bitboard adjacentNorthMask(Square square) { return adjacentNorthMasks[square]; } +inline Bitboard adjacentNorthMask(Square square) { + return adjacentNorthMasks[square]; +} -inline Bitboard adjacentSouthMask(Square square) { return adjacentSouthMasks[square]; } +inline Bitboard adjacentSouthMask(Square square) { + return adjacentSouthMasks[square]; +} -inline Bitboard pawnMask(Square square, Color color) { return pawnMasks[square][color]; } +inline Bitboard pawnMask(Square square, Color color) { + return pawnMasks[square][color]; +} -inline Bitboard knightMask(Square square) { return knightMasks[square]; } +inline Bitboard knightMask(Square square) { + return knightMasks[square]; +} -inline Bitboard kingMask(Square square) { return kingMasks[square]; } +inline Bitboard kingMask(Square square) { + return kingMasks[square]; +} -inline Bitboard fileMask(Square square) { return fileMasks[square]; } +inline Bitboard fileMask(Square square) { + return fileMasks[square]; +} -inline Bitboard rankMask(Square square) { return rankMasks[square]; } +inline Bitboard rankMask(Square square) { + return rankMasks[square]; +} -inline Bitboard rookMask(Square square) { return rookMasks[square]; } +inline Bitboard rookMask(Square square) { + return rookMasks[square]; +} -inline Bitboard diagonalMask(Square square) { return diagonalMasks[square]; } +inline Bitboard diagonalMask(Square square) { + return diagonalMasks[square]; +} -inline Bitboard antiDiagonalMask(Square square) { return antiDiagonalMasks[square]; } +inline Bitboard antiDiagonalMask(Square square) { + return antiDiagonalMasks[square]; +} -inline Bitboard bishopMask(Square square) { return bishopMasks[square]; } +inline Bitboard bishopMask(Square square) { + return bishopMasks[square]; +} inline unsigned int getMagicIndex(const Magic &m, Bitboard occ) { #ifdef BMI2 - return _pext_u64(occ.bb, m.mask.bb); + return _pext_u64(occ.bb, m.mask.bb); #else - return (((occ & m.mask) * m.magic) >> (64 - m.shift)).bb; + return (((occ & m.mask) * m.magic) >> (64 - m.shift)).bb; #endif } inline Bitboard rookAttacks(Square square, Bitboard occ) { - const Magic &m = rookMagics[square]; - return m.ptr[getMagicIndex(m, occ)]; + const Magic &m = rookMagics[square]; + return m.ptr[getMagicIndex(m, occ)]; } inline Bitboard bishopAttacks(Square square, Bitboard occ) { - const Magic &m = bishopMagics[square]; - return m.ptr[getMagicIndex(m, occ)]; + const Magic &m = bishopMagics[square]; + return m.ptr[getMagicIndex(m, occ)]; } inline Bitboard queenAttacks(Square square, Bitboard occ) { - return rookAttacks(square, occ) | bishopAttacks(square, occ); + return rookAttacks(square, occ) | bishopAttacks(square, occ); } template constexpr Bitboard pieceAttacks(Square square, Bitboard occupied) { - switch (type) { - case KNIGHT: - return knightMask(square); - case BISHOP: - return bishopAttacks(square, occupied); - case ROOK: - return rookAttacks(square, occupied); - case QUEEN: - return queenAttacks(square, occupied); - case KING: - return kingMask(square); - default: - assert(0); - return 0; - } + switch (type) { + case KNIGHT: + return knightMask(square); + case BISHOP: + return bishopAttacks(square, occupied); + case ROOK: + return rookAttacks(square, occupied); + case QUEEN: + return queenAttacks(square, occupied); + case KING: + return kingMask(square); + default: + assert(0); + return 0; + } } inline Bitboard pieceAttacks(PieceType type, Square square, Bitboard occupied) { - switch (type) { - case KNIGHT: - return knightMask(square); - case BISHOP: - return bishopAttacks(square, occupied); - case ROOK: - return rookAttacks(square, occupied); - case QUEEN: - return queenAttacks(square, occupied); - case KING: - return kingMask(square); - default: - assert(0); - } + switch (type) { + case KNIGHT: + return knightMask(square); + case BISHOP: + return bishopAttacks(square, occupied); + case ROOK: + return rookAttacks(square, occupied); + case QUEEN: + return queenAttacks(square, occupied); + case KING: + return kingMask(square); + default: + assert(0); + } } template inline Bitboard pieceAttacks(PieceType type, Square square, Bitboard occupied) { - switch (type) { - case PAWN: - return pawnMask(square, color); - case KNIGHT: - return knightMask(square); - case BISHOP: - return bishopAttacks(square, occupied); - case ROOK: - return rookAttacks(square, occupied); - case QUEEN: - return queenAttacks(square, occupied); - case KING: - return kingMask(square); - default: - assert(0); - return 0; - } + switch (type) { + case PAWN: + return pawnMask(square, color); + case KNIGHT: + return knightMask(square); + case BISHOP: + return bishopAttacks(square, occupied); + case ROOK: + return rookAttacks(square, occupied); + case QUEEN: + return queenAttacks(square, occupied); + case KING: + return kingMask(square); + default: + assert(0); + return 0; + } } template constexpr Bitboard step(Bitboard b) { - switch (direction) { - case NORTH: - return b << 8; - case SOUTH: - return b >> 8; - case NORTH_WEST: - return (b & notFileA) << 7; - case WEST: - return (b & notFileA) >> 1; - case SOUTH_WEST: - return (b & notFileA) >> 9; - case NORTH_EAST: - return (b & notFileH) << 9; - case EAST: - return (b & notFileH) << 1; - case SOUTH_EAST: - return (b & notFileH) >> 7; - } + switch (direction) { + case NORTH: + return b << 8; + case SOUTH: + return b >> 8; + case NORTH_WEST: + return (b & notFileA) << 7; + case WEST: + return (b & notFileA) >> 1; + case SOUTH_WEST: + return (b & notFileA) >> 9; + case NORTH_EAST: + return (b & notFileH) << 9; + case EAST: + return (b & notFileH) << 1; + case SOUTH_EAST: + return (b & notFileH) >> 7; + } } constexpr Bitboard step(Direction direction, Bitboard b) { - switch (direction) { - case NORTH: - return b << 8; - case SOUTH: - return b >> 8; - case NORTH_WEST: - return (b & notFileA) << 7; - case WEST: - return (b & notFileA) >> 1; - case SOUTH_WEST: - return (b & notFileA) >> 9; - case NORTH_EAST: - return (b & notFileH) << 9; - case EAST: - return (b & notFileH) << 1; - case SOUTH_EAST: - return (b & notFileH) >> 7; - } - return 0; + switch (direction) { + case NORTH: + return b << 8; + case SOUTH: + return b >> 8; + case NORTH_WEST: + return (b & notFileA) << 7; + case WEST: + return (b & notFileA) >> 1; + case SOUTH_WEST: + return (b & notFileA) >> 9; + case NORTH_EAST: + return (b & notFileH) << 9; + case EAST: + return (b & notFileH) << 1; + case SOUTH_EAST: + return (b & notFileH) >> 7; + } + return 0; } template constexpr Bitboard slide(Square square) { - Bitboard result; - Bitboard temp = {square}; - while (temp) { - temp = step(temp); - result |= temp; - } - return result; + Bitboard result; + Bitboard temp = {square}; + while (temp) { + temp = step(temp); + result |= temp; + } + return result; } inline Bitboard slide(Direction direction, Square square) { - Bitboard result; - Bitboard temp = {square}; - while (temp) { - temp = step(direction, temp); - result |= temp; - } - return result; + Bitboard result; + Bitboard temp = {square}; + while (temp) { + temp = step(direction, temp); + result |= temp; + } + return result; } template constexpr Bitboard slide(Square square, Bitboard occupied) { - Bitboard result; - Bitboard temp = {square}; - while (temp && !occupied.get(temp.lsb())) { - temp = step(temp); - result |= temp; - } - return result; + Bitboard result; + Bitboard temp = {square}; + while (temp && !occupied.get(temp.lsb())) { + temp = step(temp); + result |= temp; + } + return result; } Bitboard slidingAttacks(Square square, Bitboard occupied, PieceType type); @@ -494,4 +562,4 @@ void initMagic(const Magic *magics, PieceType type); void findMagics(Bitboard *attackTable, Magic *magics, PieceType type); -#endif //BLACKCORE_BITBOARD_H +#endif//BLACKCORE_BITBOARD_H diff --git a/src/constants.h b/src/constants.h index 8720b33..fdd763b 100644 --- a/src/constants.h +++ b/src/constants.h @@ -29,7 +29,6 @@ #define AVX2 #endif - typedef uint64_t U64; typedef int32_t Score; typedef int32_t Depth; @@ -48,15 +47,71 @@ const std::string STARTING_FEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w constexpr unsigned int RANDOM_SEED = 1254383; enum Square : int { - A1 = 0, B1 = 1, C1 = 2, D1 = 3, E1 = 4, F1 = 5, G1 = 6, H1 = 7, - A2 = 8, B2 = 9, C2 = 10, D2 = 11, E2 = 12, F2 = 13, G2 = 14, H2 = 15, - A3 = 16, B3 = 17, C3 = 18, D3 = 19, E3 = 20, F3 = 21, G3 = 22, H3 = 23, - A4 = 24, B4 = 25, C4 = 26, D4 = 27, E4 = 28, F4 = 29, G4 = 30, H4 = 31, - A5 = 32, B5 = 33, C5 = 34, D5 = 35, E5 = 36, F5 = 37, G5 = 38, H5 = 39, - A6 = 40, B6 = 41, C6 = 42, D6 = 43, E6 = 44, F6 = 45, G6 = 46, H6 = 47, - A7 = 48, B7 = 49, C7 = 50, D7 = 51, E7 = 52, F7 = 53, G7 = 54, H7 = 55, - A8 = 56, B8 = 57, C8 = 58, D8 = 59, E8 = 60, F8 = 61, G8 = 62, H8 = 63, - NULL_SQUARE = 64 + A1 = 0, + B1 = 1, + C1 = 2, + D1 = 3, + E1 = 4, + F1 = 5, + G1 = 6, + H1 = 7, + A2 = 8, + B2 = 9, + C2 = 10, + D2 = 11, + E2 = 12, + F2 = 13, + G2 = 14, + H2 = 15, + A3 = 16, + B3 = 17, + C3 = 18, + D3 = 19, + E3 = 20, + F3 = 21, + G3 = 22, + H3 = 23, + A4 = 24, + B4 = 25, + C4 = 26, + D4 = 27, + E4 = 28, + F4 = 29, + G4 = 30, + H4 = 31, + A5 = 32, + B5 = 33, + C5 = 34, + D5 = 35, + E5 = 36, + F5 = 37, + G5 = 38, + H5 = 39, + A6 = 40, + B6 = 41, + C6 = 42, + D6 = 43, + E6 = 44, + F6 = 45, + G6 = 46, + H6 = 47, + A7 = 48, + B7 = 49, + C7 = 50, + D7 = 51, + E7 = 52, + F7 = 53, + G7 = 54, + H7 = 55, + A8 = 56, + B8 = 57, + C8 = 58, + D8 = 59, + E8 = 60, + F8 = 61, + G8 = 62, + H8 = 63, + NULL_SQUARE = 64 }; constexpr unsigned char WK_MASK = 1; @@ -64,75 +119,109 @@ constexpr unsigned char WQ_MASK = 2; constexpr unsigned char BK_MASK = 4; constexpr unsigned char BQ_MASK = 8; -inline Square operator+(Square &a, int b) { return Square(int(a) + b); } +inline Square operator+(Square &a, int b) { + return Square(int(a) + b); +} -inline Square operator-(Square &a, int b) { return Square(int(a) - b); } +inline Square operator-(Square &a, int b) { + return Square(int(a) - b); +} -inline Square operator+=(Square &a, int b) { return a = a + b; } +inline Square operator+=(Square &a, int b) { + return a = a + b; +} -inline Square operator-=(Square &a, int b) { return a = a - b; } +inline Square operator-=(Square &a, int b) { + return a = a - b; +} inline Square stringToSquare(std::string s) { - if (s[0] == '-') { - return NULL_SQUARE; - } else if ('a' <= s[0] && s[0] <= 'z') { - return Square((s[0] - 'a') + (s[1] - '1') * 8); - } else if ('A' <= s[0] && s[0] <= 'Z') { - return Square((s[0] - 'A') + (s[1] - '1') * 8); - } - - return NULL_SQUARE; + if (s[0] == '-') { + return NULL_SQUARE; + } else if ('a' <= s[0] && s[0] <= 'z') { + return Square((s[0] - 'a') + (s[1] - '1') * 8); + } else if ('A' <= s[0] && s[0] <= 'Z') { + return Square((s[0] - 'A') + (s[1] - '1') * 8); + } + + return NULL_SQUARE; } inline std::istream &operator>>(std::istream &is, Square &square) { - std::string s; - is >> s; + std::string s; + is >> s; - square = stringToSquare(s); + square = stringToSquare(s); - return is; + return is; } enum LineType : int { - HORIZONTAL = 0, VERTICAL = 1, DIAGONAL = 2, ANTI_DIAGONAL = 3 + HORIZONTAL = 0, + VERTICAL = 1, + DIAGONAL = 2, + ANTI_DIAGONAL = 3 }; enum Direction : int { - NORTH = 8, WEST = -1, SOUTH = -8, EAST = 1, NORTH_EAST = 9, NORTH_WEST = 7, SOUTH_WEST = -9, SOUTH_EAST = -7 + NORTH = 8, + WEST = -1, + SOUTH = -8, + EAST = 1, + NORTH_EAST = 9, + NORTH_WEST = 7, + SOUTH_WEST = -9, + SOUTH_EAST = -7 }; constexpr Direction DIRECTIONS[8] = {NORTH, WEST, NORTH_EAST, NORTH_WEST, SOUTH, EAST, SOUTH_WEST, SOUTH_EAST}; -constexpr Direction opposite(Direction direction) { return Direction(-direction); } +constexpr Direction opposite(Direction direction) { + return Direction(-direction); +} -constexpr Direction operator-(Direction direction) { return opposite(direction); } +constexpr Direction operator-(Direction direction) { + return opposite(direction); +} enum PieceType { - PIECE_EMPTY = 6, KING = 0, PAWN = 1, KNIGHT = 2, BISHOP = 3, ROOK = 4, QUEEN = 5 + PIECE_EMPTY = 6, + KING = 0, + PAWN = 1, + KNIGHT = 2, + BISHOP = 3, + ROOK = 4, + QUEEN = 5 }; enum Color { - COLOR_EMPTY = 2, WHITE = 0, BLACK = 1 + COLOR_EMPTY = 2, + WHITE = 0, + BLACK = 1 }; enum NodeType { - ROOT_NODE, PV_NODE, NON_PV_NODE + ROOT_NODE, + PV_NODE, + NON_PV_NODE }; constexpr PieceType PIECE_TYPES_BY_VALUE[6] = {PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING}; struct Piece { - PieceType type = PIECE_EMPTY; - Color color = COLOR_EMPTY; + PieceType type = PIECE_EMPTY; + Color color = COLOR_EMPTY; - constexpr Piece() = default; + constexpr Piece() = default; - constexpr Piece(PieceType t, Color c) { - type = t; - color = c; - } + constexpr Piece(PieceType t, Color c) { + type = t; + color = c; + } - constexpr bool isNull() const { return type == PIECE_EMPTY || color == COLOR_EMPTY; } + constexpr bool isNull() const { + return type == PIECE_EMPTY || color == COLOR_EMPTY; + } }; // 2 colors * 6 types * 64 square = 768 @@ -141,401 +230,401 @@ struct Piece { // 1 number if the side is black const U64 randTable[781] = { - 0x4ef488bfae17abbaULL, 0x1b608e38d5cf7308ULL, - 0x851dabc8d9c029daULL, 0x62ff3fd5ca1fe189ULL, - 0xb58f435e51ec54d9ULL, 0xd6478aa5957c39eaULL, - 0x1a84642313330ed8ULL, 0x24b6ff164e7af0f7ULL, - 0x6be96adf24b3816cULL, 0xece099a9b0d53073ULL, - 0xdb8346d2cf6a823ULL, 0x7010f7da6962efd5ULL, - 0xc70fcf5e7ac61c40ULL, 0x69c81f400aacb213ULL, - 0x543deca39cd4669cULL, 0xbccbf8f1ac568f1aULL, - 0x1b657f6eb9085b4dULL, 0x8dbc14bcc7085c8eULL, - 0x31b11a994768a079ULL, 0xdb65d6222d174223ULL, - 0x69a37f411c1015ULL, 0x7277d9df84e80ce3ULL, - 0xffb2d94597293905ULL, 0xd6c7002205dad90aULL, - 0xec0979ba90e44095ULL, 0x8f7f5e9303057addULL, - 0x4ba8f1c0656c62a6ULL, 0x1b40d16f768690dcULL, - 0x51166315ea155c2cULL, 0x33aad4f2bc026d3fULL, - 0x54dafe930aa273d0ULL, 0x1d885cc020e4e77aULL, - 0xf8eb51befffbede4ULL, 0xefa21aa88e2ad467ULL, - 0x1e639296082a76b6ULL, 0x95d9c8ebce333424ULL, - 0x5ea0892946799861ULL, 0xc0930a65ce836ab4ULL, - 0x5a674325485b4e7fULL, 0x8b99f12278470c72ULL, - 0xa4e008d3283c94e8ULL, 0x6fbe24c1740a6981ULL, - 0xea1273d134b0f010ULL, 0x152d52d9c30c78efULL, - 0x9dc76a5d5c289ae0ULL, 0xc5c6dbe7f09411a7ULL, - 0x2073418d01c03687ULL, 0xa0c17a6f4f985f7ULL, - 0x7d9c1720beb9db73ULL, 0x6849424ca595606dULL, - 0xb29fba8417b80df4ULL, 0x61f12e84c28750aeULL, - 0x8bf8fcd9f3f1b1edULL, 0xd0ce225a433287c4ULL, - 0x775917e60886c9e3ULL, 0x486ada4af87cc0abULL, - 0xee6da9bca06fa88eULL, 0x24887e607e1c950dULL, - 0xbad992958c65ef8eULL, 0x66563aeb0c4728c8ULL, - 0x140f0bfc12d599c5ULL, 0x1a8a7286be1ad376ULL, - 0x965c145f47a5e3d8ULL, 0x3bfd4d07824890c4ULL, - 0x8e9e7a0370aa060eULL, 0xc8d523c52edd3d75ULL, - 0x3cfca5a158ac9985ULL, 0x9adc9ad634e45bcbULL, - 0x310f96adc5796c5cULL, 0x96b7c3b005c1d41bULL, - 0xefc6b36f68cd44b9ULL, 0xb9e32448740802e0ULL, - 0xe41875586b23a7ccULL, 0xdf11200a2af368eeULL, - 0xccce23fb87e01cb9ULL, 0x6cd74548000380deULL, - 0x2068ab7c48d2ec38ULL, 0x3f8d34605d6d160dULL, - 0x2f81480ab31791beULL, 0x70dbffe0f42c55a9ULL, - 0x464b1ccca9b60873ULL, 0xd8197bb6610f4a26ULL, - 0xc9285e20789da7cULL, 0xd5735a684fc9656ULL, - 0x5b2c4e2fb331fd65ULL, 0x7c307e89787b59a1ULL, - 0xfd67c65dcf80bc5fULL, 0x89aca3d35d4f61e0ULL, - 0x67b203f3de779d44ULL, 0xa39d8dd5b5cbbc6ULL, - 0x33524df0e5afbd58ULL, 0x537f4763dc8ff6dULL, - 0x9a5798c41a86ae87ULL, 0x3794e55b391f0b97ULL, - 0xb154b14aac830d0ULL, 0x5caa36bbe5a0e263ULL, - 0x900f52b8661fcb0eULL, 0x957561cdd87be82fULL, - 0xdfbe8f1da18c3111ULL, 0x7a6f1024756f626bULL, - 0x5c4ab867aee28e4fULL, 0xbdaf1cd791244211ULL, - 0x2228f2f8d4f28439ULL, 0x4edd616d5aad4c8ULL, - 0xb27b2f3225769f69ULL, 0x1425c27823849280ULL, - 0xae76ce5d77c504eeULL, 0x2779747ca414ebc8ULL, - 0xe4ef214a300c5c0dULL, 0xed4c07343bd0d849ULL, - 0x4f9b26a8a371df7cULL, 0x303562d4fd5501bdULL, - 0x3f0e099b1dd1ab96ULL, 0x8500302b98f9de08ULL, - 0x7b9dad80e5c7b10ULL, 0x9ccdf0c5e8245906ULL, - 0xfee6417294e52bd3ULL, 0x6a85cc0e7dfd0defULL, - 0x4aab0010efaff4d7ULL, 0x8b0ac3450ebc6a6eULL, - 0xe5aaa01795063e90ULL, 0x87378e42e097549bULL, - 0x2f7942b8aada0a9dULL, 0x834bad7e2a7087a3ULL, - 0x2102570d02344402ULL, 0x15ccf7864011db09ULL, - 0x69a3f87974b90867ULL, 0xbc061d452ff48a89ULL, - 0xa8b23bf0a0ff3926ULL, 0x4eff3a36103d3ba0ULL, - 0x5d85348b3bcae7b2ULL, 0xb93e7a1145e5b5dcULL, - 0xa5d7fbf64201e5e4ULL, 0x16a0dc5777406be9ULL, - 0x11705137b3f7dbb1ULL, 0xf9c5c349d5216f0eULL, - 0x7ff95761cf184259ULL, 0x51a4d1ccb7afdeceULL, - 0x73e35224634a880ULL, 0x6486ba6de09e55b7ULL, - 0xec2e1735a409693bULL, 0x4a32aa8e00d54148ULL, - 0xd1ad6d6f57b14c0cULL, 0xbb8c972637c64696ULL, - 0xc1367bf134c6785cULL, 0x4f5fa35416f09e99ULL, - 0x8ff1a2f1c6a485acULL, 0x309e4941e7a51b39ULL, - 0xbb015739220065f7ULL, 0x15c93d157f460ca8ULL, - 0x9b5e446785a25be9ULL, 0xdf672b8e44dccffaULL, - 0xc6f0e8348fdde7a5ULL, 0xdb72d3ffa3740dabULL, - 0x27a907bf1d1aba62ULL, 0x4bfe65e196423003ULL, - 0xa52e8487e57ec77aULL, 0x2cb75b88afd3dbdfULL, - 0x15f1fe898c111f19ULL, 0x1d572ea679042ce0ULL, - 0xe130479b204d25dbULL, 0x412ce0d560b048f8ULL, - 0x941173a2d0c645f1ULL, 0xd4b541013f264760ULL, - 0x3427e4d5d1a2a27ULL, 0x4bcaa0619e8e733bULL, - 0xa13b6e82e52f1643ULL, 0x722ba71b722670cdULL, - 0x38eb0d3ec3e77f62ULL, 0x1e7bb16186c390fdULL, - 0x8b1fc3896dfcef99ULL, 0xa5e23c9ebed4e8fcULL, - 0x7cd15354990c856dULL, 0x808d16c17a97b916ULL, - 0x3653a3d7864d8bbaULL, 0x54b0b596cdeb0f82ULL, - 0xcf3f60ffd38fb97bULL, 0x72e37da591c9b91fULL, - 0x84e18873e75898e4ULL, 0xeff11a5af6809bb0ULL, - 0x8af4ebace6b714ecULL, 0xaa4b1e42d5d10f26ULL, - 0xbcceef4a1feb7b40ULL, 0xf9ebb16e54eaf81bULL, - 0xb9aef6775240c929ULL, 0xb540bc9e71416e61ULL, - 0x518fe188eded4203ULL, 0x221d99c8f8bfd5b7ULL, - 0xc38ba67f3a338066ULL, 0xabc5069a1d6cc43ULL, - 0x21b22c043f2a8875ULL, 0xd74c9c5103fbfb3fULL, - 0xffcc2122caa78d7bULL, 0x76451830ceddee8ULL, - 0x247a6f2c0dd1586cULL, 0x52eef33635cacc7aULL, - 0xabe97ca6f9662cabULL, 0xa276321ccf1259ceULL, - 0xcb839d28b380f78ULL, 0x8055e3152e35e57ULL, - 0xbf59fb51057f5ac8ULL, 0x1b7d309c100f5b9aULL, - 0xb70ab3b1362f7ec3ULL, 0x87348440973488e5ULL, - 0x6af83f6e1d775c42ULL, 0x6cb5ba286d550eeaULL, - 0xfeb0c55e4eb7c047ULL, 0x9e20a0a79e40278fULL, - 0x4c4c42865d7c8c56ULL, 0xa8c5aecd505a8285ULL, - 0xa416d49733947e17ULL, 0x703a72e0113b1b15ULL, - 0x39770e959139b6a8ULL, 0x323ef9a4a3b209d4ULL, - 0xa8789a6b73541e98ULL, 0xe48d2b3a77fc3f6dULL, - 0x9a53f3778b46625eULL, 0x451b14e0dbe2ba7eULL, - 0xff936fc73fcb562cULL, 0x563f1a92ac3dab96ULL, - 0x8009fd8127ce5dd4ULL, 0x1fe44b04b27c4d74ULL, - 0x1bddbcb6dfd04c66ULL, 0xd1d59cc480da1ee6ULL, - 0xe0b2a33234409fa0ULL, 0x65c413574467da90ULL, - 0x979ccc89e5cf4b63ULL, 0x98bd96a4a29b3f31ULL, - 0x9917a96a7861c6a8ULL, 0x86fb59d30d1749f7ULL, - 0xd24e0e1e46e13ffcULL, 0xef47c0e7cb34eacdULL, - 0x3c3d8ad364a19d9fULL, 0xe1adf5f2eb3c58b8ULL, - 0xf090b59acd76efe5ULL, 0x90fec91f5ff633d4ULL, - 0xe8bc857e3f52e36bULL, 0x4339fadb39b0c022ULL, - 0x48ca28afd56c6022ULL, 0xb883f7d594e5feb1ULL, - 0x60647e12153912baULL, 0xcfba643175b17b1eULL, - 0xf49e02ccf10b3b18ULL, 0xa87c62b52eb20c74ULL, - 0xa3fe6658bf250c0cULL, 0x7f96fb396d7ae7aULL, - 0x8a04813c94856826ULL, 0xb4658d520f23975eULL, - 0xde333be245da49c0ULL, 0x31dff5ce643f1702ULL, - 0x949af87a549dab18ULL, 0x63335e199039c685ULL, - 0xd3bfb1f85b631a2cULL, 0x83fe4b755fd13d82ULL, - 0x2b9a11c97d74d5c2ULL, 0x96c1075ca256561aULL, - 0x9bd796371a7471cULL, 0x255c487ca55fd070ULL, - 0xb9716816c0e0d528ULL, 0x248723c56eeb7720ULL, - 0x610c2245f1921cULL, 0x3dcd62eb1d233973ULL, - 0xf6312646440e81c4ULL, 0x11fd03c380eab5baULL, - 0x5e55d9b4c19e5653ULL, 0x5e1f9c64cbe206b8ULL, - 0xc95323b729adc6e3ULL, 0xa5c0221d0f783a2bULL, - 0xb04d620a4d82cfebULL, 0xaf19ed57ccb129d0ULL, - 0xb8822c82928dd3e0ULL, 0xff6fd0c799541911ULL, - 0x752aafc4d762a830ULL, 0xf1118eb988c18b1cULL, - 0x1a6329e05224a736ULL, 0x9245204314dcdfe7ULL, - 0xed767f78545355d2ULL, 0x815acab3feb7900eULL, - 0x47f22a0cd634bc40ULL, 0xec2150afe4587f5bULL, - 0x3c484edd3f6f92d8ULL, 0x34a09aeada42e7eULL, - 0x29a434cf85fbdb04ULL, 0xd6c13eacdba32fecULL, - 0xa32d234290c51672ULL, 0xd301f3ada78249feULL, - 0xcd811f1efc2eead5ULL, 0x835457b34bab9e68ULL, - 0x181d24352631d82cULL, 0x8b45b912ca31d58dULL, - 0x1d6848348ec4ace5ULL, 0xc0aaf998beb88726ULL, - 0x1e8b4967c5af7c04ULL, 0xce8936ee45eefed9ULL, - 0x783c919b02ed3b82ULL, 0x72ce2fe88e153173ULL, - 0xd378f6a2df2c2e0cULL, 0xfb08aac2ee4a9e63ULL, - 0x1ec016a3ac2dbe0fULL, 0x475781f94fcbb7e3ULL, - 0x80f62a1e4ba4c50ULL, 0x10cf614e7adfc50bULL, - 0x32f64cbb84baa644ULL, 0x4db0d9f741b5cc38ULL, - 0x504344a0d07fda24ULL, 0x31c6d96248e05180ULL, - 0x8aab53db86275cacULL, 0x7e54f242474170f2ULL, - 0xa0d66308bd7bd65eULL, 0x3bd7fac1b8e5862ULL, - 0x516a4699f8ef4795ULL, 0xf1c9819a81809c9bULL, - 0xbb179cb7b69be105ULL, 0xa2997c2f69adb7acULL, - 0x3e2b82eee227f520ULL, 0x7f4814295541eb88ULL, - 0x3f95131c7938ae98ULL, 0x8c794a88fdaa5c96ULL, - 0xe995bd6613be075eULL, 0x168ecc747d13e52cULL, - 0xf34ee3443dee4bf9ULL, 0x42d5973ad0c37a75ULL, - 0x7b7eaecd8b56fddULL, 0x2fe24f61a33fc790ULL, - 0x64f78049d9027152ULL, 0xe67199262c305f69ULL, - 0x713b1b64d2383435ULL, 0xfee8d25b603ce2ddULL, - 0xd9adba56036e1351ULL, 0x5f2e7b36093e3f88ULL, - 0x6f9e79d8c47598ffULL, 0xb2312be3bf2eea4aULL, - 0xf2f2332baee0350fULL, 0xc1ece6dc79ab182dULL, - 0x8fd06333941a9fd6ULL, 0x629474ad192cacd5ULL, - 0x437a75202034b018ULL, 0xf9b98f21eea6f0caULL, - 0x2bf74641859777cfULL, 0xa02e3f2a08f19ef3ULL, - 0x1428f18c2a0bc0c8ULL, 0x1eb7a4e58ad098e0ULL, - 0xaed59e19b84f986aULL, 0x8e3f5245dbb77ef4ULL, - 0x9375c5327eb7d476ULL, 0x32782fef06c0cac7ULL, - 0xfc1a5392d7a43a6dULL, 0x5a5b8cf9810dbd00ULL, - 0xa8d0616cc96fcb70ULL, 0xeba216f0c7c22ea3ULL, - 0xf35625f70bf7d031ULL, 0x9d56c654583ce93bULL, - 0x1ae33a218238ea27ULL, 0xb865584a0811f9d9ULL, - 0xf9065d696d85514cULL, 0xee33a2c5133d068eULL, - 0xb4b2ab633b2ecd38ULL, 0x9cdc9a04cdc594ffULL, - 0x2f745ae57a3f043ULL, 0x1ede01f5037a92d2ULL, - 0xcef5984903f8984fULL, 0x183a79488d33e3b2ULL, - 0x1f3b9bf5c525fcc9ULL, 0x4169c9bdc608ff1cULL, - 0x8fdf3ca348d00c21ULL, 0x2b472034fde89860ULL, - 0x94ac5ca7c6e93e80ULL, 0x70fe25941302b0d1ULL, - 0xa6269b60f21ba380ULL, 0xcb518e0ae9c0aae4ULL, - 0x6e80ae4af54b28afULL, 0x79ceb17e48189126ULL, - 0xad89b6f68254de83ULL, 0xdda2c183a04d3489ULL, - 0xf6a67b91699bbb14ULL, 0xb445c2b018a1700ULL, - 0x4a50f28f965c2c5fULL, 0x1153b066f4d3889aULL, - 0xc86ec6e3ac241950ULL, 0xfe910b08c2bb060dULL, - 0x867496fded3c83e3ULL, 0xaebac214a1d7a1b3ULL, - 0xd65fb3b895a6d20ULL, 0x58aafe1d13a3ac78ULL, - 0xf47ce780dc44cf25ULL, 0x3e56c3611756c1feULL, - 0x3fb3e4f6d0483849ULL, 0x1a5c6b2e10ce205ULL, - 0xa9c529fd702edd6eULL, 0x869649faa5a1aee9ULL, - 0x1b8d911c776ec17cULL, 0x4e43b5428c8ed2abULL, - 0x775b758b4d9b3c9aULL, 0x8804d262fc071badULL, - 0x61d4695f713793b5ULL, 0x2db7ec74f5c05479ULL, - 0x664a809299686590ULL, 0xa8d033c5115e487eULL, - 0xe619ef70eb5a16acULL, 0xcd8b964a4281bfd5ULL, - 0xcef1aeef7d350c7fULL, 0x4674942f573a9ce5ULL, - 0x6dc0b11b30519e13ULL, 0x93df9452b5dcd8cbULL, - 0x9448f6f930deea98ULL, 0xed6eebca0706f29fULL, - 0x902200e6d2a3eb8bULL, 0x8729df3b219138acULL, - 0xcfc2bc0b6c88e014ULL, 0x5238e41b26599129ULL, - 0xee293f799e223f91ULL, 0xb1a2ef20a726114fULL, - 0x5f691e62fde20700ULL, 0x40b288b5aa28284cULL, - 0x37e0deebffaee7faULL, 0xba19fa6bbe3807e3ULL, - 0x4c6b7bfb9e9686a8ULL, 0xc7c761ba0e630b0dULL, - 0x12dd354400a464dbULL, 0x3e6cd81067e4545bULL, - 0x62f6f8ab23cc7855ULL, 0x60ef3c823b23d03aULL, - 0x3b8f1621794f84baULL, 0x5f317bcf29799a35ULL, - 0xd486d926a75263bcULL, 0xfa08e546eeabf2b5ULL, - 0x2de31bb003cc3076ULL, 0xcfd849eabb6bf6f8ULL, - 0x94d2f96c14d03c4eULL, 0x7cb7390dc796f98dULL, - 0x978a9733a3c105b3ULL, 0x6c7026ef2197c422ULL, - 0xbeb427a113122ee8ULL, 0x8522cbae77bc3afbULL, - 0xa013ef165581a060ULL, 0xddd17ae26c8f83fdULL, - 0x20ec4adcd53f5e2cULL, 0xa2a0d6c8e11de5bULL, - 0xd540e3516ac796b3ULL, 0x2cb963a350f1853dULL, - 0x3faae45402362ce7ULL, 0x32bbfccb615eaab1ULL, - 0x7d0833ac51ad1830ULL, 0x99305a7a7134e457ULL, - 0x5b989947a49efe86ULL, 0x6a6782e86aadc279ULL, - 0x66c06c92963784a3ULL, 0x95d5ee699932c142ULL, - 0x7c85986f37b8c1fbULL, 0x9c4fe3c2608495d2ULL, - 0xfd949ca2a7fd6654ULL, 0x8cc451cc93362187ULL, - 0x4502ee450cd8f8deULL, 0x350ca2eba9c817f0ULL, - 0xe5ed9484ecd2865ULL, 0xd6d294e1a63e1bd4ULL, - 0x407fe7fc78bf4a42ULL, 0x5d1e54565e373e99ULL, - 0x8f4c8f1539335ed0ULL, 0x9435975634b24565ULL, - 0xc4c11eb58a8b5ac6ULL, 0x8cf964566edaa61dULL, - 0x603299d26fa4409fULL, 0x4eaec27e571f9478ULL, - 0x2da410afdc0c7c07ULL, 0xa7b1c3237a1f7653ULL, - 0xd790d29141a56a3aULL, 0x64824a6cfa39ff28ULL, - 0x51883faf43fd25b2ULL, 0x5a938601203e32cbULL, - 0x3809ed67f923807fULL, 0xa6bdfc79447d1306ULL, - 0x79a001afbc97a49bULL, 0x501f11ac9d772e2cULL, - 0xdb7a2355f1f1c913ULL, 0xf2e018fa0a676207ULL, - 0xd451eea58e08137dULL, 0xf13a570d5ef737d6ULL, - 0x3f4ed84b0708f566ULL, 0xdc06604f709bc7bdULL, - 0xc4d17abee8b007aULL, 0x89b6a700afad7f15ULL, - 0x72f4003abba3549fULL, 0x7c0f7ec5cf3865fbULL, - 0xde391dec54a0d797ULL, 0xb45067f02bfe4b3cULL, - 0xea09e08c94bb3acULL, 0x329493d1e58875ecULL, - 0x1f6188a0d0c9765cULL, 0xf9780f58c8656f56ULL, - 0x73c62a39f796f99aULL, 0xeb625a8da0599a07ULL, - 0xf6aaef39e7e2b217ULL, 0x5fc0de127ee8b4c7ULL, - 0xf57798668b86ac45ULL, 0x454dcf315d5fa2d6ULL, - 0x80af178025adf8d0ULL, 0xd65da73ed5ef923ULL, - 0xb7a2ebe31805fa2cULL, 0xd12f9282362b2304ULL, - 0xcdf6cdd669f87400ULL, 0xa250eabbcfc5d25fULL, - 0xae00b05fb2ae4014ULL, 0xebc9edc4206fa6cbULL, - 0x7689ed2cadd75ec1ULL, 0x4a7e124305d9e14cULL, - 0x2c3bdc6dd2f17394ULL, 0x55eaf991d6f0feabULL, - 0x26fc46b584950b50ULL, 0xd1fd62345d4ce0e8ULL, - 0x8a23992ea3d7e47bULL, 0x875e0896d407b09fULL, - 0xc643961123bf68d8ULL, 0x1a94d8f1b3b6396ULL, - 0x8c0298fb53f4f45eULL, 0xe2852828f7f9fa2dULL, - 0x21dcadd35862a95cULL, 0x1bb936f6bf48665aULL, - 0x7adc2a8b206b4cfeULL, 0xc505891fc46c54bcULL, - 0x1409e52ff1155b44ULL, 0x21205a745fc6f119ULL, - 0x3ace40e876181924ULL, 0x358d1c0927d5e6a6ULL, - 0xd9367a5805c967caULL, 0x30b9ea14a65d5166ULL, - 0xad641697fcb57c65ULL, 0x1e1935296140ce21ULL, - 0xf6cb4244858f5c0ULL, 0x5bc33c52c56e7adaULL, - 0x7c240347ad29ee9dULL, 0x38c3d7c57cc6ebf9ULL, - 0x3d11adba2060fbdaULL, 0x7559ead850090e06ULL, - 0xfd5e13ca4082b63dULL, 0x166a5bb6945d5ef7ULL, - 0x5546f01c2b69bd55ULL, 0x5fd08bb5eff91708ULL, - 0x58c1f08abbd41db4ULL, 0x9472e8384245280ULL, - 0x773b5b811184e9daULL, 0x36009938bdf09510ULL, - 0x2f423987abbd7897ULL, 0xc7a428ad2b40569bULL, - 0x2db547e5c4eac72fULL, 0xbcd4710dc0294b65ULL, - 0xa1ecbd582f58ab6dULL, 0xf45a55c2bf631c3fULL, - 0x79c87516d4f89dd6ULL, 0xe63e61780d389467ULL, - 0x53ae6a68eb68bf1bULL, 0x231d521de4ea3eabULL, - 0x98dcf370807e85edULL, 0xcbd18662ec57627bULL, - 0x17ccb5409b5be7c5ULL, 0x916858886ad455e8ULL, - 0x12d5cfd28093fa1bULL, 0x849433c93b78ae1bULL, - 0x483de1bbcd54588bULL, 0xc4542529e1400253ULL, - 0xe7ba10aaac73d3d4ULL, 0x60716cc47639c8c0ULL, - 0x8d0f798f8016db29ULL, 0xc7f540363e5d38c0ULL, - 0x71f8eb2cbde3f2a4ULL, 0x73f51915cfb11591ULL, - 0x8e368be8220fbed8ULL, 0xe6634d8d5481c274ULL, - 0xfded89783c7d7d45ULL, 0x3a14056f6fb7aad6ULL, - 0x9c004929888c348ULL, 0xb47cb32c65003d99ULL, - 0x544263587ab108beULL, 0xe86fe92c1f254ad8ULL, - 0x5a757f4aa565ba2fULL, 0x6821483d80e763ffULL, - 0xbceaf85474a4a459ULL, 0x1cd6e6d20c667900ULL, - 0xe7b38fccff113c7bULL, 0x20361c9a7ec6b064ULL, - 0x99ff2481edd18564ULL, 0xb616e25d79d6642cULL, - 0xdf0ce9291722e828ULL, 0x491db70eb9314fb4ULL, - 0xab2bff7e330d3061ULL, 0x4232ed0a2e93d8a8ULL, - 0x6d55fcf2098eca3eULL, 0x909d9001b58e3f5eULL, - 0x82065263e6c495b2ULL, 0x54c2239d9e98cd65ULL, - 0xb5253fdbb715a77eULL, 0x7d4abc24bc60a674ULL, - 0xab5b6ed65d25fa03ULL, 0x56c7311e57cbd8e6ULL, - 0x865e2030ff154748ULL, 0x7f4e6b4a04ac3248ULL, - 0xf42dd3d5244b697aULL, 0xd7ecc66e36dcfb01ULL, - 0x6f5a6edeaf36f57fULL, 0xfa2d8db39c449a39ULL, - 0xe71efc1684cf44beULL, 0x75d9c8cff2c9e1c2ULL, - 0xe36a2caf0087bf36ULL, 0x79d5716971860e60ULL, - 0xf73afb6d93e9fc40ULL, 0xe60ff6946b7cc27bULL, - 0xd7a71a4be5007a5aULL, 0x47d93d3126c8823ULL, - 0x8d988ee64bcc0e9fULL, 0x7c3b9f53e45af01ULL, - 0x4588669519b5b9bULL, 0x1cb3098aa4122760ULL, - 0xd7903ac6afc8390ULL, 0x44bd7b928dd8e7e5ULL, - 0x578ac5e77f09c3a3ULL, 0x847e04f37d6998b1ULL, - 0x6ec83dfbd780d189ULL, 0x490810c885fd662bULL, - 0xe25841c565edee7fULL, 0x144ba2ed46b28fe2ULL, - 0x1066ddb06e90ee12ULL, 0xf5c5d6f35fe8e694ULL, - 0x73f84c285181738fULL, 0x8c7881debcd4ad91ULL, - 0x33a961f1cd1b1c0aULL, 0xbc75c5755cfecb81ULL, - 0xb2ac5cadbb9d8fd3ULL, 0x5621d4ab21a9a722ULL, - 0x51ba2205bb14e851ULL, 0x851c873f570b9de6ULL, - 0x78eecadacb3d0202ULL, 0x8933104e7337b965ULL, - 0x1f28bc249a2e5b46ULL, 0x7fd5c88533cbe11aULL, - 0xde58e22c6fee97caULL, 0xe3da2f25b2385cfeULL, - 0xec06b46697321104ULL, 0x1ae0829b639db3d5ULL, - 0x4bba7d7b0ad568b6ULL, 0xfaa78fbef3360dbbULL, - 0x5406355e1e3eeee1ULL, 0xb30d43f36b0d336aULL, - 0x908138468353418eULL, 0x764588140320cd76ULL, - 0xe1fdb97f79b80f5fULL, 0xafe399bfebefd0bbULL, - 0x3cbb086534a2d737ULL, 0xc760bfb1dd2e9c86ULL, - 0xc7e1243ef55a3244ULL, 0xd23c79dfae649be1ULL, - 0x2a448538cff3775aULL, 0xb500f1e0a9cf2f32ULL, - 0x5dcc4652551b93fdULL, 0xb1dfbe4c3edf28f8ULL, - 0xdeacc3cef3bb91ebULL, 0x886954747fb0670ULL, - 0x48ec2d6ca735f31eULL, 0x962811e1a91ffa03ULL, - 0x79365c0ba13d9600ULL, 0x752b064e1bd2fb7fULL, - 0x890ee3c477c68a7bULL, 0xfdcfa023a56e033ULL, - 0x1bb1f4abd53199e5ULL, 0x859f4d596bdc5ab6ULL, - 0x99af21f32a7bece2ULL, 0x8a73819dc1e3f7b2ULL, - 0x3da444a53e35f28fULL, 0xcee7e684308c0feULL, - 0x71b1408fd594001eULL, 0xf5da0a879300fbdfULL, - 0x6ea7b7380012b246ULL, 0x4c7b72cfbdc8228dULL, - 0xc8cb6646a653b933ULL, 0xd3fbb9ade2b9feb8ULL, - 0x533a8ecd379f0dd0ULL, 0x3ef5457b34378f04ULL, - 0x87651fdd3d0b159aULL, 0xeebd3a5eebb0f0ceULL, - 0x11531f89e3ed7d68ULL, 0x7ae5b58ceb78b16dULL, - 0xc9e3a581ea33efa7ULL, 0xac2a0f2b5ac06ef5ULL, - 0xf54f28b7504910bULL, 0x7807dfb069a3ca1bULL, - 0xfcc62e9e523d30b6ULL, 0x4fcf6d75fbd87500ULL, - 0x3b6681f84208bd2eULL, 0xc77ed69c61596008ULL, - 0x861ec31b1f586860ULL, 0x7822a364440369feULL, - 0x5865491d0e8164c7ULL, 0x7e403b716a89d86cULL, - 0x2e5534cdda8f34e3ULL, 0xfa06ca2439fbf5f4ULL, - 0x70c81b894b6e8fd4ULL, 0xd20063c34f995724ULL, - 0xf26e99c897926a10ULL, 0x126137c4c96007e7ULL, - 0x93bf4a74d3405908ULL, 0xee8010a30dd8d633ULL, - 0x818014eb8f776c5dULL, 0x5bb1192a88c962f5ULL, - 0x66a463bf9f5959dbULL, 0xd9778f81dd99d12aULL, - 0x1a9205e5b0bcae1eULL, 0x7ece5109ac03179dULL, - 0x44ff33a9c60a6b1dULL, 0x105367e212cd41deULL, - 0x6db30ef47c51d9f3ULL, 0xf3d23f14de1869a0ULL, - 0x2eddf69342aadc16ULL, 0x6ab93de87fcd1c94ULL, - 0xd4807458fcd1ee30ULL, 0x441315f3ec898103ULL, - 0x7b8bd586463d6d0aULL, 0x3ab11730d027a985ULL, - 0x5d3a6817a2eacd94ULL, 0x1d67fb36206c20f3ULL, - 0x1a207d5964a14c0cULL, 0x8fe013141f09dc6cULL, - 0x4f24bd886150fb39ULL, 0x4d0a8d6dacfdf7a1ULL, - 0xdf0b2967bd24662dULL, 0x5a0e7797f5634c26ULL, - 0x4dcfdcaa68188063ULL, 0xb5c531731b4ac1b0ULL, - 0x8a439a9a1fefa498ULL, 0x6d8d7d11f87d9c1ULL, - 0x2f05ace7c92a8152ULL, 0x41778cee5a4657aeULL, - 0x10d99d02f2d45395ULL, 0x4f700895026a66abULL, - 0x9e246db9b23e0aaeULL, 0x1374c77af85addffULL, - 0xbebc332ea23244f5ULL, 0xf520d066946ff875ULL, - 0xbb1576d812de78f4ULL, 0x3e86396a9f486867ULL, - 0x74f3883b42ce24acULL, 0x77ab67069d070b39ULL, - 0xe2a7aaf3b7d94835ULL, 0xe84ae13797205d5aULL, - 0xe2648dcbd5ddb6fcULL, 0x52759b397cffb297ULL, - 0xcdcb3254edadbc7dULL, 0x70491bf210d6636fULL, - 0xc26219b62028e978ULL, 0x694888c14a279af7ULL, - 0x621b4168ce1d47b4ULL, 0xa51293dc220b650dULL, - 0x19b7dcb18d059455ULL, 0x53986527ca72f73fULL, - 0xd6cd4cfaf7da433dULL, 0xf5224a7d886d4b8ULL, - 0x359aadf992622582ULL, 0x619f2607707edd64ULL, - 0xc779e8a8015579e2ULL, 0x4cf471e6066af1ceULL, - 0xfae3bf76eae98dfcULL, 0xec5dd514eb595eccULL, - 0xef37b0a96d0aa083ULL, 0x4af11c6f39a6efb2ULL, - 0x59d87c4203827a45ULL, 0x23d3b3f6ec47e3ceULL, - 0x226c13cbd1250359ULL, 0x461bb153206c4873ULL, - 0xa4db6d1e7e5149c9ULL, 0x777fb8c818e291d3ULL, - 0xb0d6aa720023a65dULL, 0xc05627e6e6dc7e5aULL, - 0x94d4ffa4be9b396eULL, 0x4555350c053c2784ULL, - 0x64d2a6987f2dc66dULL, 0x9e559eb47d85fd3bULL, - 0xe88998a1757985ULL, 0x94e721fa69ef3f64ULL, - 0xe986b3827b29384ULL, 0x588d0a2e71b7eb7cULL, - 0xff160c9a2fd263c3ULL, 0xf981c0baf19691beULL, - 0x286a031935c089ccULL}; + 0x4ef488bfae17abbaULL, 0x1b608e38d5cf7308ULL, + 0x851dabc8d9c029daULL, 0x62ff3fd5ca1fe189ULL, + 0xb58f435e51ec54d9ULL, 0xd6478aa5957c39eaULL, + 0x1a84642313330ed8ULL, 0x24b6ff164e7af0f7ULL, + 0x6be96adf24b3816cULL, 0xece099a9b0d53073ULL, + 0xdb8346d2cf6a823ULL, 0x7010f7da6962efd5ULL, + 0xc70fcf5e7ac61c40ULL, 0x69c81f400aacb213ULL, + 0x543deca39cd4669cULL, 0xbccbf8f1ac568f1aULL, + 0x1b657f6eb9085b4dULL, 0x8dbc14bcc7085c8eULL, + 0x31b11a994768a079ULL, 0xdb65d6222d174223ULL, + 0x69a37f411c1015ULL, 0x7277d9df84e80ce3ULL, + 0xffb2d94597293905ULL, 0xd6c7002205dad90aULL, + 0xec0979ba90e44095ULL, 0x8f7f5e9303057addULL, + 0x4ba8f1c0656c62a6ULL, 0x1b40d16f768690dcULL, + 0x51166315ea155c2cULL, 0x33aad4f2bc026d3fULL, + 0x54dafe930aa273d0ULL, 0x1d885cc020e4e77aULL, + 0xf8eb51befffbede4ULL, 0xefa21aa88e2ad467ULL, + 0x1e639296082a76b6ULL, 0x95d9c8ebce333424ULL, + 0x5ea0892946799861ULL, 0xc0930a65ce836ab4ULL, + 0x5a674325485b4e7fULL, 0x8b99f12278470c72ULL, + 0xa4e008d3283c94e8ULL, 0x6fbe24c1740a6981ULL, + 0xea1273d134b0f010ULL, 0x152d52d9c30c78efULL, + 0x9dc76a5d5c289ae0ULL, 0xc5c6dbe7f09411a7ULL, + 0x2073418d01c03687ULL, 0xa0c17a6f4f985f7ULL, + 0x7d9c1720beb9db73ULL, 0x6849424ca595606dULL, + 0xb29fba8417b80df4ULL, 0x61f12e84c28750aeULL, + 0x8bf8fcd9f3f1b1edULL, 0xd0ce225a433287c4ULL, + 0x775917e60886c9e3ULL, 0x486ada4af87cc0abULL, + 0xee6da9bca06fa88eULL, 0x24887e607e1c950dULL, + 0xbad992958c65ef8eULL, 0x66563aeb0c4728c8ULL, + 0x140f0bfc12d599c5ULL, 0x1a8a7286be1ad376ULL, + 0x965c145f47a5e3d8ULL, 0x3bfd4d07824890c4ULL, + 0x8e9e7a0370aa060eULL, 0xc8d523c52edd3d75ULL, + 0x3cfca5a158ac9985ULL, 0x9adc9ad634e45bcbULL, + 0x310f96adc5796c5cULL, 0x96b7c3b005c1d41bULL, + 0xefc6b36f68cd44b9ULL, 0xb9e32448740802e0ULL, + 0xe41875586b23a7ccULL, 0xdf11200a2af368eeULL, + 0xccce23fb87e01cb9ULL, 0x6cd74548000380deULL, + 0x2068ab7c48d2ec38ULL, 0x3f8d34605d6d160dULL, + 0x2f81480ab31791beULL, 0x70dbffe0f42c55a9ULL, + 0x464b1ccca9b60873ULL, 0xd8197bb6610f4a26ULL, + 0xc9285e20789da7cULL, 0xd5735a684fc9656ULL, + 0x5b2c4e2fb331fd65ULL, 0x7c307e89787b59a1ULL, + 0xfd67c65dcf80bc5fULL, 0x89aca3d35d4f61e0ULL, + 0x67b203f3de779d44ULL, 0xa39d8dd5b5cbbc6ULL, + 0x33524df0e5afbd58ULL, 0x537f4763dc8ff6dULL, + 0x9a5798c41a86ae87ULL, 0x3794e55b391f0b97ULL, + 0xb154b14aac830d0ULL, 0x5caa36bbe5a0e263ULL, + 0x900f52b8661fcb0eULL, 0x957561cdd87be82fULL, + 0xdfbe8f1da18c3111ULL, 0x7a6f1024756f626bULL, + 0x5c4ab867aee28e4fULL, 0xbdaf1cd791244211ULL, + 0x2228f2f8d4f28439ULL, 0x4edd616d5aad4c8ULL, + 0xb27b2f3225769f69ULL, 0x1425c27823849280ULL, + 0xae76ce5d77c504eeULL, 0x2779747ca414ebc8ULL, + 0xe4ef214a300c5c0dULL, 0xed4c07343bd0d849ULL, + 0x4f9b26a8a371df7cULL, 0x303562d4fd5501bdULL, + 0x3f0e099b1dd1ab96ULL, 0x8500302b98f9de08ULL, + 0x7b9dad80e5c7b10ULL, 0x9ccdf0c5e8245906ULL, + 0xfee6417294e52bd3ULL, 0x6a85cc0e7dfd0defULL, + 0x4aab0010efaff4d7ULL, 0x8b0ac3450ebc6a6eULL, + 0xe5aaa01795063e90ULL, 0x87378e42e097549bULL, + 0x2f7942b8aada0a9dULL, 0x834bad7e2a7087a3ULL, + 0x2102570d02344402ULL, 0x15ccf7864011db09ULL, + 0x69a3f87974b90867ULL, 0xbc061d452ff48a89ULL, + 0xa8b23bf0a0ff3926ULL, 0x4eff3a36103d3ba0ULL, + 0x5d85348b3bcae7b2ULL, 0xb93e7a1145e5b5dcULL, + 0xa5d7fbf64201e5e4ULL, 0x16a0dc5777406be9ULL, + 0x11705137b3f7dbb1ULL, 0xf9c5c349d5216f0eULL, + 0x7ff95761cf184259ULL, 0x51a4d1ccb7afdeceULL, + 0x73e35224634a880ULL, 0x6486ba6de09e55b7ULL, + 0xec2e1735a409693bULL, 0x4a32aa8e00d54148ULL, + 0xd1ad6d6f57b14c0cULL, 0xbb8c972637c64696ULL, + 0xc1367bf134c6785cULL, 0x4f5fa35416f09e99ULL, + 0x8ff1a2f1c6a485acULL, 0x309e4941e7a51b39ULL, + 0xbb015739220065f7ULL, 0x15c93d157f460ca8ULL, + 0x9b5e446785a25be9ULL, 0xdf672b8e44dccffaULL, + 0xc6f0e8348fdde7a5ULL, 0xdb72d3ffa3740dabULL, + 0x27a907bf1d1aba62ULL, 0x4bfe65e196423003ULL, + 0xa52e8487e57ec77aULL, 0x2cb75b88afd3dbdfULL, + 0x15f1fe898c111f19ULL, 0x1d572ea679042ce0ULL, + 0xe130479b204d25dbULL, 0x412ce0d560b048f8ULL, + 0x941173a2d0c645f1ULL, 0xd4b541013f264760ULL, + 0x3427e4d5d1a2a27ULL, 0x4bcaa0619e8e733bULL, + 0xa13b6e82e52f1643ULL, 0x722ba71b722670cdULL, + 0x38eb0d3ec3e77f62ULL, 0x1e7bb16186c390fdULL, + 0x8b1fc3896dfcef99ULL, 0xa5e23c9ebed4e8fcULL, + 0x7cd15354990c856dULL, 0x808d16c17a97b916ULL, + 0x3653a3d7864d8bbaULL, 0x54b0b596cdeb0f82ULL, + 0xcf3f60ffd38fb97bULL, 0x72e37da591c9b91fULL, + 0x84e18873e75898e4ULL, 0xeff11a5af6809bb0ULL, + 0x8af4ebace6b714ecULL, 0xaa4b1e42d5d10f26ULL, + 0xbcceef4a1feb7b40ULL, 0xf9ebb16e54eaf81bULL, + 0xb9aef6775240c929ULL, 0xb540bc9e71416e61ULL, + 0x518fe188eded4203ULL, 0x221d99c8f8bfd5b7ULL, + 0xc38ba67f3a338066ULL, 0xabc5069a1d6cc43ULL, + 0x21b22c043f2a8875ULL, 0xd74c9c5103fbfb3fULL, + 0xffcc2122caa78d7bULL, 0x76451830ceddee8ULL, + 0x247a6f2c0dd1586cULL, 0x52eef33635cacc7aULL, + 0xabe97ca6f9662cabULL, 0xa276321ccf1259ceULL, + 0xcb839d28b380f78ULL, 0x8055e3152e35e57ULL, + 0xbf59fb51057f5ac8ULL, 0x1b7d309c100f5b9aULL, + 0xb70ab3b1362f7ec3ULL, 0x87348440973488e5ULL, + 0x6af83f6e1d775c42ULL, 0x6cb5ba286d550eeaULL, + 0xfeb0c55e4eb7c047ULL, 0x9e20a0a79e40278fULL, + 0x4c4c42865d7c8c56ULL, 0xa8c5aecd505a8285ULL, + 0xa416d49733947e17ULL, 0x703a72e0113b1b15ULL, + 0x39770e959139b6a8ULL, 0x323ef9a4a3b209d4ULL, + 0xa8789a6b73541e98ULL, 0xe48d2b3a77fc3f6dULL, + 0x9a53f3778b46625eULL, 0x451b14e0dbe2ba7eULL, + 0xff936fc73fcb562cULL, 0x563f1a92ac3dab96ULL, + 0x8009fd8127ce5dd4ULL, 0x1fe44b04b27c4d74ULL, + 0x1bddbcb6dfd04c66ULL, 0xd1d59cc480da1ee6ULL, + 0xe0b2a33234409fa0ULL, 0x65c413574467da90ULL, + 0x979ccc89e5cf4b63ULL, 0x98bd96a4a29b3f31ULL, + 0x9917a96a7861c6a8ULL, 0x86fb59d30d1749f7ULL, + 0xd24e0e1e46e13ffcULL, 0xef47c0e7cb34eacdULL, + 0x3c3d8ad364a19d9fULL, 0xe1adf5f2eb3c58b8ULL, + 0xf090b59acd76efe5ULL, 0x90fec91f5ff633d4ULL, + 0xe8bc857e3f52e36bULL, 0x4339fadb39b0c022ULL, + 0x48ca28afd56c6022ULL, 0xb883f7d594e5feb1ULL, + 0x60647e12153912baULL, 0xcfba643175b17b1eULL, + 0xf49e02ccf10b3b18ULL, 0xa87c62b52eb20c74ULL, + 0xa3fe6658bf250c0cULL, 0x7f96fb396d7ae7aULL, + 0x8a04813c94856826ULL, 0xb4658d520f23975eULL, + 0xde333be245da49c0ULL, 0x31dff5ce643f1702ULL, + 0x949af87a549dab18ULL, 0x63335e199039c685ULL, + 0xd3bfb1f85b631a2cULL, 0x83fe4b755fd13d82ULL, + 0x2b9a11c97d74d5c2ULL, 0x96c1075ca256561aULL, + 0x9bd796371a7471cULL, 0x255c487ca55fd070ULL, + 0xb9716816c0e0d528ULL, 0x248723c56eeb7720ULL, + 0x610c2245f1921cULL, 0x3dcd62eb1d233973ULL, + 0xf6312646440e81c4ULL, 0x11fd03c380eab5baULL, + 0x5e55d9b4c19e5653ULL, 0x5e1f9c64cbe206b8ULL, + 0xc95323b729adc6e3ULL, 0xa5c0221d0f783a2bULL, + 0xb04d620a4d82cfebULL, 0xaf19ed57ccb129d0ULL, + 0xb8822c82928dd3e0ULL, 0xff6fd0c799541911ULL, + 0x752aafc4d762a830ULL, 0xf1118eb988c18b1cULL, + 0x1a6329e05224a736ULL, 0x9245204314dcdfe7ULL, + 0xed767f78545355d2ULL, 0x815acab3feb7900eULL, + 0x47f22a0cd634bc40ULL, 0xec2150afe4587f5bULL, + 0x3c484edd3f6f92d8ULL, 0x34a09aeada42e7eULL, + 0x29a434cf85fbdb04ULL, 0xd6c13eacdba32fecULL, + 0xa32d234290c51672ULL, 0xd301f3ada78249feULL, + 0xcd811f1efc2eead5ULL, 0x835457b34bab9e68ULL, + 0x181d24352631d82cULL, 0x8b45b912ca31d58dULL, + 0x1d6848348ec4ace5ULL, 0xc0aaf998beb88726ULL, + 0x1e8b4967c5af7c04ULL, 0xce8936ee45eefed9ULL, + 0x783c919b02ed3b82ULL, 0x72ce2fe88e153173ULL, + 0xd378f6a2df2c2e0cULL, 0xfb08aac2ee4a9e63ULL, + 0x1ec016a3ac2dbe0fULL, 0x475781f94fcbb7e3ULL, + 0x80f62a1e4ba4c50ULL, 0x10cf614e7adfc50bULL, + 0x32f64cbb84baa644ULL, 0x4db0d9f741b5cc38ULL, + 0x504344a0d07fda24ULL, 0x31c6d96248e05180ULL, + 0x8aab53db86275cacULL, 0x7e54f242474170f2ULL, + 0xa0d66308bd7bd65eULL, 0x3bd7fac1b8e5862ULL, + 0x516a4699f8ef4795ULL, 0xf1c9819a81809c9bULL, + 0xbb179cb7b69be105ULL, 0xa2997c2f69adb7acULL, + 0x3e2b82eee227f520ULL, 0x7f4814295541eb88ULL, + 0x3f95131c7938ae98ULL, 0x8c794a88fdaa5c96ULL, + 0xe995bd6613be075eULL, 0x168ecc747d13e52cULL, + 0xf34ee3443dee4bf9ULL, 0x42d5973ad0c37a75ULL, + 0x7b7eaecd8b56fddULL, 0x2fe24f61a33fc790ULL, + 0x64f78049d9027152ULL, 0xe67199262c305f69ULL, + 0x713b1b64d2383435ULL, 0xfee8d25b603ce2ddULL, + 0xd9adba56036e1351ULL, 0x5f2e7b36093e3f88ULL, + 0x6f9e79d8c47598ffULL, 0xb2312be3bf2eea4aULL, + 0xf2f2332baee0350fULL, 0xc1ece6dc79ab182dULL, + 0x8fd06333941a9fd6ULL, 0x629474ad192cacd5ULL, + 0x437a75202034b018ULL, 0xf9b98f21eea6f0caULL, + 0x2bf74641859777cfULL, 0xa02e3f2a08f19ef3ULL, + 0x1428f18c2a0bc0c8ULL, 0x1eb7a4e58ad098e0ULL, + 0xaed59e19b84f986aULL, 0x8e3f5245dbb77ef4ULL, + 0x9375c5327eb7d476ULL, 0x32782fef06c0cac7ULL, + 0xfc1a5392d7a43a6dULL, 0x5a5b8cf9810dbd00ULL, + 0xa8d0616cc96fcb70ULL, 0xeba216f0c7c22ea3ULL, + 0xf35625f70bf7d031ULL, 0x9d56c654583ce93bULL, + 0x1ae33a218238ea27ULL, 0xb865584a0811f9d9ULL, + 0xf9065d696d85514cULL, 0xee33a2c5133d068eULL, + 0xb4b2ab633b2ecd38ULL, 0x9cdc9a04cdc594ffULL, + 0x2f745ae57a3f043ULL, 0x1ede01f5037a92d2ULL, + 0xcef5984903f8984fULL, 0x183a79488d33e3b2ULL, + 0x1f3b9bf5c525fcc9ULL, 0x4169c9bdc608ff1cULL, + 0x8fdf3ca348d00c21ULL, 0x2b472034fde89860ULL, + 0x94ac5ca7c6e93e80ULL, 0x70fe25941302b0d1ULL, + 0xa6269b60f21ba380ULL, 0xcb518e0ae9c0aae4ULL, + 0x6e80ae4af54b28afULL, 0x79ceb17e48189126ULL, + 0xad89b6f68254de83ULL, 0xdda2c183a04d3489ULL, + 0xf6a67b91699bbb14ULL, 0xb445c2b018a1700ULL, + 0x4a50f28f965c2c5fULL, 0x1153b066f4d3889aULL, + 0xc86ec6e3ac241950ULL, 0xfe910b08c2bb060dULL, + 0x867496fded3c83e3ULL, 0xaebac214a1d7a1b3ULL, + 0xd65fb3b895a6d20ULL, 0x58aafe1d13a3ac78ULL, + 0xf47ce780dc44cf25ULL, 0x3e56c3611756c1feULL, + 0x3fb3e4f6d0483849ULL, 0x1a5c6b2e10ce205ULL, + 0xa9c529fd702edd6eULL, 0x869649faa5a1aee9ULL, + 0x1b8d911c776ec17cULL, 0x4e43b5428c8ed2abULL, + 0x775b758b4d9b3c9aULL, 0x8804d262fc071badULL, + 0x61d4695f713793b5ULL, 0x2db7ec74f5c05479ULL, + 0x664a809299686590ULL, 0xa8d033c5115e487eULL, + 0xe619ef70eb5a16acULL, 0xcd8b964a4281bfd5ULL, + 0xcef1aeef7d350c7fULL, 0x4674942f573a9ce5ULL, + 0x6dc0b11b30519e13ULL, 0x93df9452b5dcd8cbULL, + 0x9448f6f930deea98ULL, 0xed6eebca0706f29fULL, + 0x902200e6d2a3eb8bULL, 0x8729df3b219138acULL, + 0xcfc2bc0b6c88e014ULL, 0x5238e41b26599129ULL, + 0xee293f799e223f91ULL, 0xb1a2ef20a726114fULL, + 0x5f691e62fde20700ULL, 0x40b288b5aa28284cULL, + 0x37e0deebffaee7faULL, 0xba19fa6bbe3807e3ULL, + 0x4c6b7bfb9e9686a8ULL, 0xc7c761ba0e630b0dULL, + 0x12dd354400a464dbULL, 0x3e6cd81067e4545bULL, + 0x62f6f8ab23cc7855ULL, 0x60ef3c823b23d03aULL, + 0x3b8f1621794f84baULL, 0x5f317bcf29799a35ULL, + 0xd486d926a75263bcULL, 0xfa08e546eeabf2b5ULL, + 0x2de31bb003cc3076ULL, 0xcfd849eabb6bf6f8ULL, + 0x94d2f96c14d03c4eULL, 0x7cb7390dc796f98dULL, + 0x978a9733a3c105b3ULL, 0x6c7026ef2197c422ULL, + 0xbeb427a113122ee8ULL, 0x8522cbae77bc3afbULL, + 0xa013ef165581a060ULL, 0xddd17ae26c8f83fdULL, + 0x20ec4adcd53f5e2cULL, 0xa2a0d6c8e11de5bULL, + 0xd540e3516ac796b3ULL, 0x2cb963a350f1853dULL, + 0x3faae45402362ce7ULL, 0x32bbfccb615eaab1ULL, + 0x7d0833ac51ad1830ULL, 0x99305a7a7134e457ULL, + 0x5b989947a49efe86ULL, 0x6a6782e86aadc279ULL, + 0x66c06c92963784a3ULL, 0x95d5ee699932c142ULL, + 0x7c85986f37b8c1fbULL, 0x9c4fe3c2608495d2ULL, + 0xfd949ca2a7fd6654ULL, 0x8cc451cc93362187ULL, + 0x4502ee450cd8f8deULL, 0x350ca2eba9c817f0ULL, + 0xe5ed9484ecd2865ULL, 0xd6d294e1a63e1bd4ULL, + 0x407fe7fc78bf4a42ULL, 0x5d1e54565e373e99ULL, + 0x8f4c8f1539335ed0ULL, 0x9435975634b24565ULL, + 0xc4c11eb58a8b5ac6ULL, 0x8cf964566edaa61dULL, + 0x603299d26fa4409fULL, 0x4eaec27e571f9478ULL, + 0x2da410afdc0c7c07ULL, 0xa7b1c3237a1f7653ULL, + 0xd790d29141a56a3aULL, 0x64824a6cfa39ff28ULL, + 0x51883faf43fd25b2ULL, 0x5a938601203e32cbULL, + 0x3809ed67f923807fULL, 0xa6bdfc79447d1306ULL, + 0x79a001afbc97a49bULL, 0x501f11ac9d772e2cULL, + 0xdb7a2355f1f1c913ULL, 0xf2e018fa0a676207ULL, + 0xd451eea58e08137dULL, 0xf13a570d5ef737d6ULL, + 0x3f4ed84b0708f566ULL, 0xdc06604f709bc7bdULL, + 0xc4d17abee8b007aULL, 0x89b6a700afad7f15ULL, + 0x72f4003abba3549fULL, 0x7c0f7ec5cf3865fbULL, + 0xde391dec54a0d797ULL, 0xb45067f02bfe4b3cULL, + 0xea09e08c94bb3acULL, 0x329493d1e58875ecULL, + 0x1f6188a0d0c9765cULL, 0xf9780f58c8656f56ULL, + 0x73c62a39f796f99aULL, 0xeb625a8da0599a07ULL, + 0xf6aaef39e7e2b217ULL, 0x5fc0de127ee8b4c7ULL, + 0xf57798668b86ac45ULL, 0x454dcf315d5fa2d6ULL, + 0x80af178025adf8d0ULL, 0xd65da73ed5ef923ULL, + 0xb7a2ebe31805fa2cULL, 0xd12f9282362b2304ULL, + 0xcdf6cdd669f87400ULL, 0xa250eabbcfc5d25fULL, + 0xae00b05fb2ae4014ULL, 0xebc9edc4206fa6cbULL, + 0x7689ed2cadd75ec1ULL, 0x4a7e124305d9e14cULL, + 0x2c3bdc6dd2f17394ULL, 0x55eaf991d6f0feabULL, + 0x26fc46b584950b50ULL, 0xd1fd62345d4ce0e8ULL, + 0x8a23992ea3d7e47bULL, 0x875e0896d407b09fULL, + 0xc643961123bf68d8ULL, 0x1a94d8f1b3b6396ULL, + 0x8c0298fb53f4f45eULL, 0xe2852828f7f9fa2dULL, + 0x21dcadd35862a95cULL, 0x1bb936f6bf48665aULL, + 0x7adc2a8b206b4cfeULL, 0xc505891fc46c54bcULL, + 0x1409e52ff1155b44ULL, 0x21205a745fc6f119ULL, + 0x3ace40e876181924ULL, 0x358d1c0927d5e6a6ULL, + 0xd9367a5805c967caULL, 0x30b9ea14a65d5166ULL, + 0xad641697fcb57c65ULL, 0x1e1935296140ce21ULL, + 0xf6cb4244858f5c0ULL, 0x5bc33c52c56e7adaULL, + 0x7c240347ad29ee9dULL, 0x38c3d7c57cc6ebf9ULL, + 0x3d11adba2060fbdaULL, 0x7559ead850090e06ULL, + 0xfd5e13ca4082b63dULL, 0x166a5bb6945d5ef7ULL, + 0x5546f01c2b69bd55ULL, 0x5fd08bb5eff91708ULL, + 0x58c1f08abbd41db4ULL, 0x9472e8384245280ULL, + 0x773b5b811184e9daULL, 0x36009938bdf09510ULL, + 0x2f423987abbd7897ULL, 0xc7a428ad2b40569bULL, + 0x2db547e5c4eac72fULL, 0xbcd4710dc0294b65ULL, + 0xa1ecbd582f58ab6dULL, 0xf45a55c2bf631c3fULL, + 0x79c87516d4f89dd6ULL, 0xe63e61780d389467ULL, + 0x53ae6a68eb68bf1bULL, 0x231d521de4ea3eabULL, + 0x98dcf370807e85edULL, 0xcbd18662ec57627bULL, + 0x17ccb5409b5be7c5ULL, 0x916858886ad455e8ULL, + 0x12d5cfd28093fa1bULL, 0x849433c93b78ae1bULL, + 0x483de1bbcd54588bULL, 0xc4542529e1400253ULL, + 0xe7ba10aaac73d3d4ULL, 0x60716cc47639c8c0ULL, + 0x8d0f798f8016db29ULL, 0xc7f540363e5d38c0ULL, + 0x71f8eb2cbde3f2a4ULL, 0x73f51915cfb11591ULL, + 0x8e368be8220fbed8ULL, 0xe6634d8d5481c274ULL, + 0xfded89783c7d7d45ULL, 0x3a14056f6fb7aad6ULL, + 0x9c004929888c348ULL, 0xb47cb32c65003d99ULL, + 0x544263587ab108beULL, 0xe86fe92c1f254ad8ULL, + 0x5a757f4aa565ba2fULL, 0x6821483d80e763ffULL, + 0xbceaf85474a4a459ULL, 0x1cd6e6d20c667900ULL, + 0xe7b38fccff113c7bULL, 0x20361c9a7ec6b064ULL, + 0x99ff2481edd18564ULL, 0xb616e25d79d6642cULL, + 0xdf0ce9291722e828ULL, 0x491db70eb9314fb4ULL, + 0xab2bff7e330d3061ULL, 0x4232ed0a2e93d8a8ULL, + 0x6d55fcf2098eca3eULL, 0x909d9001b58e3f5eULL, + 0x82065263e6c495b2ULL, 0x54c2239d9e98cd65ULL, + 0xb5253fdbb715a77eULL, 0x7d4abc24bc60a674ULL, + 0xab5b6ed65d25fa03ULL, 0x56c7311e57cbd8e6ULL, + 0x865e2030ff154748ULL, 0x7f4e6b4a04ac3248ULL, + 0xf42dd3d5244b697aULL, 0xd7ecc66e36dcfb01ULL, + 0x6f5a6edeaf36f57fULL, 0xfa2d8db39c449a39ULL, + 0xe71efc1684cf44beULL, 0x75d9c8cff2c9e1c2ULL, + 0xe36a2caf0087bf36ULL, 0x79d5716971860e60ULL, + 0xf73afb6d93e9fc40ULL, 0xe60ff6946b7cc27bULL, + 0xd7a71a4be5007a5aULL, 0x47d93d3126c8823ULL, + 0x8d988ee64bcc0e9fULL, 0x7c3b9f53e45af01ULL, + 0x4588669519b5b9bULL, 0x1cb3098aa4122760ULL, + 0xd7903ac6afc8390ULL, 0x44bd7b928dd8e7e5ULL, + 0x578ac5e77f09c3a3ULL, 0x847e04f37d6998b1ULL, + 0x6ec83dfbd780d189ULL, 0x490810c885fd662bULL, + 0xe25841c565edee7fULL, 0x144ba2ed46b28fe2ULL, + 0x1066ddb06e90ee12ULL, 0xf5c5d6f35fe8e694ULL, + 0x73f84c285181738fULL, 0x8c7881debcd4ad91ULL, + 0x33a961f1cd1b1c0aULL, 0xbc75c5755cfecb81ULL, + 0xb2ac5cadbb9d8fd3ULL, 0x5621d4ab21a9a722ULL, + 0x51ba2205bb14e851ULL, 0x851c873f570b9de6ULL, + 0x78eecadacb3d0202ULL, 0x8933104e7337b965ULL, + 0x1f28bc249a2e5b46ULL, 0x7fd5c88533cbe11aULL, + 0xde58e22c6fee97caULL, 0xe3da2f25b2385cfeULL, + 0xec06b46697321104ULL, 0x1ae0829b639db3d5ULL, + 0x4bba7d7b0ad568b6ULL, 0xfaa78fbef3360dbbULL, + 0x5406355e1e3eeee1ULL, 0xb30d43f36b0d336aULL, + 0x908138468353418eULL, 0x764588140320cd76ULL, + 0xe1fdb97f79b80f5fULL, 0xafe399bfebefd0bbULL, + 0x3cbb086534a2d737ULL, 0xc760bfb1dd2e9c86ULL, + 0xc7e1243ef55a3244ULL, 0xd23c79dfae649be1ULL, + 0x2a448538cff3775aULL, 0xb500f1e0a9cf2f32ULL, + 0x5dcc4652551b93fdULL, 0xb1dfbe4c3edf28f8ULL, + 0xdeacc3cef3bb91ebULL, 0x886954747fb0670ULL, + 0x48ec2d6ca735f31eULL, 0x962811e1a91ffa03ULL, + 0x79365c0ba13d9600ULL, 0x752b064e1bd2fb7fULL, + 0x890ee3c477c68a7bULL, 0xfdcfa023a56e033ULL, + 0x1bb1f4abd53199e5ULL, 0x859f4d596bdc5ab6ULL, + 0x99af21f32a7bece2ULL, 0x8a73819dc1e3f7b2ULL, + 0x3da444a53e35f28fULL, 0xcee7e684308c0feULL, + 0x71b1408fd594001eULL, 0xf5da0a879300fbdfULL, + 0x6ea7b7380012b246ULL, 0x4c7b72cfbdc8228dULL, + 0xc8cb6646a653b933ULL, 0xd3fbb9ade2b9feb8ULL, + 0x533a8ecd379f0dd0ULL, 0x3ef5457b34378f04ULL, + 0x87651fdd3d0b159aULL, 0xeebd3a5eebb0f0ceULL, + 0x11531f89e3ed7d68ULL, 0x7ae5b58ceb78b16dULL, + 0xc9e3a581ea33efa7ULL, 0xac2a0f2b5ac06ef5ULL, + 0xf54f28b7504910bULL, 0x7807dfb069a3ca1bULL, + 0xfcc62e9e523d30b6ULL, 0x4fcf6d75fbd87500ULL, + 0x3b6681f84208bd2eULL, 0xc77ed69c61596008ULL, + 0x861ec31b1f586860ULL, 0x7822a364440369feULL, + 0x5865491d0e8164c7ULL, 0x7e403b716a89d86cULL, + 0x2e5534cdda8f34e3ULL, 0xfa06ca2439fbf5f4ULL, + 0x70c81b894b6e8fd4ULL, 0xd20063c34f995724ULL, + 0xf26e99c897926a10ULL, 0x126137c4c96007e7ULL, + 0x93bf4a74d3405908ULL, 0xee8010a30dd8d633ULL, + 0x818014eb8f776c5dULL, 0x5bb1192a88c962f5ULL, + 0x66a463bf9f5959dbULL, 0xd9778f81dd99d12aULL, + 0x1a9205e5b0bcae1eULL, 0x7ece5109ac03179dULL, + 0x44ff33a9c60a6b1dULL, 0x105367e212cd41deULL, + 0x6db30ef47c51d9f3ULL, 0xf3d23f14de1869a0ULL, + 0x2eddf69342aadc16ULL, 0x6ab93de87fcd1c94ULL, + 0xd4807458fcd1ee30ULL, 0x441315f3ec898103ULL, + 0x7b8bd586463d6d0aULL, 0x3ab11730d027a985ULL, + 0x5d3a6817a2eacd94ULL, 0x1d67fb36206c20f3ULL, + 0x1a207d5964a14c0cULL, 0x8fe013141f09dc6cULL, + 0x4f24bd886150fb39ULL, 0x4d0a8d6dacfdf7a1ULL, + 0xdf0b2967bd24662dULL, 0x5a0e7797f5634c26ULL, + 0x4dcfdcaa68188063ULL, 0xb5c531731b4ac1b0ULL, + 0x8a439a9a1fefa498ULL, 0x6d8d7d11f87d9c1ULL, + 0x2f05ace7c92a8152ULL, 0x41778cee5a4657aeULL, + 0x10d99d02f2d45395ULL, 0x4f700895026a66abULL, + 0x9e246db9b23e0aaeULL, 0x1374c77af85addffULL, + 0xbebc332ea23244f5ULL, 0xf520d066946ff875ULL, + 0xbb1576d812de78f4ULL, 0x3e86396a9f486867ULL, + 0x74f3883b42ce24acULL, 0x77ab67069d070b39ULL, + 0xe2a7aaf3b7d94835ULL, 0xe84ae13797205d5aULL, + 0xe2648dcbd5ddb6fcULL, 0x52759b397cffb297ULL, + 0xcdcb3254edadbc7dULL, 0x70491bf210d6636fULL, + 0xc26219b62028e978ULL, 0x694888c14a279af7ULL, + 0x621b4168ce1d47b4ULL, 0xa51293dc220b650dULL, + 0x19b7dcb18d059455ULL, 0x53986527ca72f73fULL, + 0xd6cd4cfaf7da433dULL, 0xf5224a7d886d4b8ULL, + 0x359aadf992622582ULL, 0x619f2607707edd64ULL, + 0xc779e8a8015579e2ULL, 0x4cf471e6066af1ceULL, + 0xfae3bf76eae98dfcULL, 0xec5dd514eb595eccULL, + 0xef37b0a96d0aa083ULL, 0x4af11c6f39a6efb2ULL, + 0x59d87c4203827a45ULL, 0x23d3b3f6ec47e3ceULL, + 0x226c13cbd1250359ULL, 0x461bb153206c4873ULL, + 0xa4db6d1e7e5149c9ULL, 0x777fb8c818e291d3ULL, + 0xb0d6aa720023a65dULL, 0xc05627e6e6dc7e5aULL, + 0x94d4ffa4be9b396eULL, 0x4555350c053c2784ULL, + 0x64d2a6987f2dc66dULL, 0x9e559eb47d85fd3bULL, + 0xe88998a1757985ULL, 0x94e721fa69ef3f64ULL, + 0xe986b3827b29384ULL, 0x588d0a2e71b7eb7cULL, + 0xff160c9a2fd263c3ULL, 0xf981c0baf19691beULL, + 0x286a031935c089ccULL}; constexpr U64 const *pieceRandTable = randTable; constexpr U64 const *castlingRandTable = randTable + 768; constexpr U64 const *epRandTable = randTable + 772; constexpr U64 const *blackRand = randTable + 780; -#endif //BLACKCORE_CONSTANTS_H +#endif//BLACKCORE_CONSTANTS_H diff --git a/src/eval.cpp b/src/eval.cpp index be416fb..7e7aa46 100644 --- a/src/eval.cpp +++ b/src/eval.cpp @@ -19,7 +19,6 @@ #ifdef TUNE Score PIECE_VALUES[6] = { - 0, 170, 610, 660, 780, 1200 -}; + 0, 170, 610, 660, 780, 1200}; #endif diff --git a/src/eval.h b/src/eval.h index e45f9a5..c4e0a04 100644 --- a/src/eval.h +++ b/src/eval.h @@ -27,13 +27,12 @@ extern Score PIECE_VALUES[6]; #else constexpr Score PIECE_VALUES[6] = { - 0, 156, 561, 608, 736, 1022 -}; + 0, 156, 561, 608, 736, 1022}; #endif inline Score eval(const Position &pos) { - return pos.getState()->accumulator.forward(pos.getSideToMove()); + return pos.getState()->accumulator.forward(pos.getSideToMove()); } -#endif //BLACKCORE_EVAL_H +#endif//BLACKCORE_EVAL_H diff --git a/src/main.cpp b/src/main.cpp index 5c6d43f..0b6c6f4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,47 +14,47 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#include -#include "bitboard.h" #include "bench.h" -#include "uci.h" -#include "search.h" +#include "bitboard.h" #include "eval.h" -#include "tuner.h" #include "nnue.h" +#include "search.h" +#include "tuner.h" +#include "uci.h" +#include int main(int argc, char **argv) { #ifdef TUNE - std::cout << "This build is for tuning only, please uncomment the TUNE define in constants.h for regular use!" - << std::endl; + std::cout << "This build is for tuning only, please uncomment the TUNE define in constants.h for regular use!" + << std::endl; #endif - srand(RANDOM_SEED); - std::string mode; - if (argc >= 2) { - mode = std::string(argv[1]); - } + srand(RANDOM_SEED); + std::string mode; + if (argc >= 2) { + mode = std::string(argv[1]); + } - if (mode.empty()) { - std::cin >> mode; - } + if (mode.empty()) { + std::cin >> mode; + } - if (mode == "bench") { - testSearch(); - } else if (mode == "perft") { - testPerft(); - } else if (mode == "uci") { - uciLoop(); - } else if (mode == "tune") { + if (mode == "bench") { + testSearch(); + } else if (mode == "perft") { + testPerft(); + } else if (mode == "uci") { + uciLoop(); + } else if (mode == "tune") { #ifdef TUNE - tune("out.fen"); + tune("out.fen"); #else - std::cout << "This build doesn't support tuning!" << std::endl; + std::cout << "This build doesn't support tuning!" << std::endl; #endif - } else { - std::cout << "Invalid option! (uci/bench/perft)" << std::endl; - } + } else { + std::cout << "Invalid option! (uci/bench/perft)" << std::endl; + } - return 0; + return 0; } diff --git a/src/move.cpp b/src/move.cpp index c39748d..ca66787 100644 --- a/src/move.cpp +++ b/src/move.cpp @@ -18,18 +18,21 @@ #include "utils.h" std::string Move::str() const { - std::string token; - if (isPromo()) { - if (!isSpecial1() && !isSpecial2()) token += "n"; - else if (!isSpecial1() && isSpecial2()) token += "b"; - else if (isSpecial1() && !isSpecial2()) token += "r"; - else token += "q"; - } - return formatSquare(getFrom()) + formatSquare(getTo()) + token; + std::string token; + if (isPromo()) { + if (!isSpecial1() && !isSpecial2()) + token += "n"; + else if (!isSpecial1() && isSpecial2()) + token += "b"; + else if (isSpecial1() && !isSpecial2()) + token += "r"; + else + token += "q"; + } + return formatSquare(getFrom()) + formatSquare(getTo()) + token; } std::ostream &operator<<(std::ostream &os, const Move &move) { - os << move.str(); - return os; + os << move.str(); + return os; } - diff --git a/src/move.h b/src/move.h index 0ed6ed4..745b2ca 100644 --- a/src/move.h +++ b/src/move.h @@ -18,13 +18,13 @@ #ifndef CHESS_MOVE_H #define CHESS_MOVE_H -#include "utils.h" #include "constants.h" +#include "utils.h" -constexpr unsigned int PROMO_FLAG = 0x8; // 0b1000 -constexpr unsigned int CAPTURE_FLAG = 0x4; // 0b0100 -constexpr unsigned int SPECIAL1_FLAG = 0x2; // 0b0010 -constexpr unsigned int SPECIAL2_FLAG = 0x1; // 0b0001 +constexpr unsigned int PROMO_FLAG = 0x8; // 0b1000 +constexpr unsigned int CAPTURE_FLAG = 0x4; // 0b0100 +constexpr unsigned int SPECIAL1_FLAG = 0x2;// 0b0010 +constexpr unsigned int SPECIAL2_FLAG = 0x1;// 0b0001 constexpr unsigned int QUIET_MOVE = 0; constexpr unsigned int CAPTURE = CAPTURE_FLAG; @@ -45,51 +45,76 @@ constexpr unsigned int PROMO_CAPTURE_QUEEN = CAPTURE_FLAG | PROMO_FLAG | SPECIAL constexpr unsigned int KING_CASTLE = SPECIAL1_FLAG; constexpr unsigned int QUEEN_CASTLE = SPECIAL1_FLAG | SPECIAL2_FLAG; - class Move { public: - constexpr Move(Square from, Square to, unsigned int flags) { - data = (flags << 12) | (from << 6) | (to); - } + constexpr Move(Square from, Square to, unsigned int flags) { + data = (flags << 12) | (from << 6) | (to); + } - constexpr Move(Square from, Square to) { - data = (from << 6) | (to); - } + constexpr Move(Square from, Square to) { + data = (from << 6) | (to); + } - constexpr Move() = default; + constexpr Move() = default; - constexpr Square getTo() const { return Square(data & 0x3f); } + constexpr Square getTo() const { + return Square(data & 0x3f); + } - constexpr Square getFrom() const { return Square((data >> 6) & 0x3f); } + constexpr Square getFrom() const { + return Square((data >> 6) & 0x3f); + } - constexpr bool isFlag(unsigned int flag) const { return (data >> 12) & flag; } + constexpr bool isFlag(unsigned int flag) const { + return (data >> 12) & flag; + } - constexpr bool equalFlag(unsigned int flag) const { return (data >> 12) == flag; } + constexpr bool equalFlag(unsigned int flag) const { + return (data >> 12) == flag; + } - constexpr bool isNull() const { return data == 0; } + constexpr bool isNull() const { + return data == 0; + } - constexpr bool isCapture() const { return isFlag(CAPTURE_FLAG); } + constexpr bool isCapture() const { + return isFlag(CAPTURE_FLAG); + } - constexpr bool isPromo() const { return isFlag(PROMO_FLAG); } + constexpr bool isPromo() const { + return isFlag(PROMO_FLAG); + } - constexpr bool isSpecial1() const { return isFlag(SPECIAL1_FLAG); } + constexpr bool isSpecial1() const { + return isFlag(SPECIAL1_FLAG); + } - constexpr bool isSpecial2() const { return isFlag(SPECIAL2_FLAG); } + constexpr bool isSpecial2() const { + return isFlag(SPECIAL2_FLAG); + } - constexpr bool isQuiet() const { return !isCapture(); } + constexpr bool isQuiet() const { + return !isCapture(); + } - constexpr explicit operator bool() const { return !isNull(); } + constexpr explicit operator bool() const { + return !isNull(); + } - constexpr bool operator==(Move a) const { return (data & 0xFFFF) == (a.data & 0xFFFF); } + constexpr bool operator==(Move a) const { + return (data & 0xFFFF) == (a.data & 0xFFFF); + } - constexpr bool operator!=(Move a) const { return (data & 0xFFFF) != (a.data & 0xFFFF); } + constexpr bool operator!=(Move a) const { + return (data & 0xFFFF) != (a.data & 0xFFFF); + } - std::string str() const; + std::string str() const; private: - uint16_t data = 0; + uint16_t data = 0; }; std::ostream &operator<<(std::ostream &os, const Move &move); -#endif //CHESS_MOVE_H +#endif//CHESS_MOVE_H diff --git a/src/move_ordering.cpp b/src/move_ordering.cpp index 5519e04..4c2ee83 100644 --- a/src/move_ordering.cpp +++ b/src/move_ordering.cpp @@ -15,19 +15,19 @@ // along with this program. If not, see . #include "move_ordering.h" -#include "tt.h" #include "search.h" +#include "tt.h" #include constexpr Score MVV_LVA[6][6] = { -// KING PAWN KNIGHT BISHOP ROOK QUEEN - {0, 0, 0, 0, 0, 0}, // KING - {0, 800004, 800104, 800204, 800304, 800404}, // PAWN - {0, 800003, 800103, 800203, 800303, 800403}, // KNIGHT - {0, 800002, 800102, 800202, 800302, 800402}, // BISHOP - {0, 800001, 800101, 800201, 800301, 800401}, // ROOK - {0, 800000, 800100, 800200, 800300, 800400}, // QUEEN + // KING PAWN KNIGHT BISHOP ROOK QUEEN + {0, 0, 0, 0, 0, 0}, // KING + {0, 800004, 800104, 800204, 800304, 800404},// PAWN + {0, 800003, 800103, 800203, 800303, 800403},// KNIGHT + {0, 800002, 800102, 800202, 800302, 800402},// BISHOP + {0, 800001, 800101, 800201, 800301, 800401},// ROOK + {0, 800000, 800100, 800200, 800300, 800400},// QUEEN }; constexpr Score winningCapture = 800000; @@ -39,58 +39,58 @@ Move killerMoves[MAX_PLY + 1][2]; Score historyTable[2][64][64]; void clearTables() { - std::memset(killerMoves, 0, sizeof(killerMoves)); - std::memset(historyTable, 0, sizeof(historyTable)); + std::memset(killerMoves, 0, sizeof(killerMoves)); + std::memset(historyTable, 0, sizeof(historyTable)); } void recordKillerMove(Move m, Ply ply) { - killerMoves[ply][1] = killerMoves[ply][0]; - killerMoves[ply][0] = m; + killerMoves[ply][1] = killerMoves[ply][0]; + killerMoves[ply][0] = m; } void recordHHMove(Move move, Color color, Depth depth) { - historyTable[color][move.getFrom()][move.getTo()] += depth * depth; + historyTable[color][move.getFrom()][move.getTo()] += depth * depth; } Score scoreQMove(const Position &pos, Move m) { - if (m == getHashMove(pos.getHash())) { - return 1000000; - } else if (m.isPromo()) { - if (m.isSpecial1() && m.isSpecial2()) { // Queen promo - return 900000; - } else { // Anything else, under promotions should only be played in really few cases - return -100000; - } - } else { - Score seeScore = see(pos, m); + if (m == getHashMove(pos.getHash())) { + return 1000000; + } else if (m.isPromo()) { + if (m.isSpecial1() && m.isSpecial2()) {// Queen promo + return 900000; + } else {// Anything else, under promotions should only be played in really few cases + return -100000; + } + } else { + Score seeScore = see(pos, m); - if (seeScore >= 0) - return winningCapture + seeScore; - else - return losingCapture + seeScore; - } + if (seeScore >= 0) + return winningCapture + seeScore; + else + return losingCapture + seeScore; + } } Score scoreMove(const Position &pos, Move m, Ply ply) { - if (m == getHashMove(pos.getHash())) { - return 1000000; - } else if (m.isPromo()) { - if (m.isSpecial1() && m.isSpecial2()) { // Queen promo - return 900000; - } else { // Anything else, under promotions should only be played in really few cases - return -100000; - } - } else if (m.isCapture()) { - Score seeScore = see(pos, m); + if (m == getHashMove(pos.getHash())) { + return 1000000; + } else if (m.isPromo()) { + if (m.isSpecial1() && m.isSpecial2()) {// Queen promo + return 900000; + } else {// Anything else, under promotions should only be played in really few cases + return -100000; + } + } else if (m.isCapture()) { + Score seeScore = see(pos, m); - if (see(pos, m) >= 0) - return winningCapture + seeScore; - else - return losingCapture + seeScore; - } else if (killerMoves[ply][0] == m) { - return 750000; - } else if (killerMoves[ply][1] == m) { - return 700000; - } - return historyTable[pos.getSideToMove()][m.getFrom()][m.getTo()]; + if (see(pos, m) >= 0) + return winningCapture + seeScore; + else + return losingCapture + seeScore; + } else if (killerMoves[ply][0] == m) { + return 750000; + } else if (killerMoves[ply][1] == m) { + return 700000; + } + return historyTable[pos.getSideToMove()][m.getFrom()][m.getTo()]; } \ No newline at end of file diff --git a/src/move_ordering.h b/src/move_ordering.h index 82cbb05..6c218ef 100644 --- a/src/move_ordering.h +++ b/src/move_ordering.h @@ -32,4 +32,4 @@ void recordKillerMove(Move m, Ply ply); void recordHHMove(Move move, Color color, Depth depth); -#endif //BLACKCORE_MOVE_ORDERING_H +#endif//BLACKCORE_MOVE_ORDERING_H diff --git a/src/movegen.cpp b/src/movegen.cpp index d66550e..8207657 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -17,409 +17,408 @@ #include "movegen.h" inline Move *makePromo(Move *moves, Square from, Square to) { - *moves++ = Move(from, to, PROMO_KNIGHT); - *moves++ = Move(from, to, PROMO_BISHOP); - *moves++ = Move(from, to, PROMO_ROOK); - *moves++ = Move(from, to, PROMO_QUEEN); - return moves; + *moves++ = Move(from, to, PROMO_KNIGHT); + *moves++ = Move(from, to, PROMO_BISHOP); + *moves++ = Move(from, to, PROMO_ROOK); + *moves++ = Move(from, to, PROMO_QUEEN); + return moves; } inline Move *makePromoCapture(Move *moves, Square from, Square to) { - *moves++ = Move(from, to, PROMO_CAPTURE_KNIGHT); - *moves++ = Move(from, to, PROMO_CAPTURE_BISHOP); - *moves++ = Move(from, to, PROMO_CAPTURE_ROOK); - *moves++ = Move(from, to, PROMO_CAPTURE_QUEEN); - return moves; + *moves++ = Move(from, to, PROMO_CAPTURE_KNIGHT); + *moves++ = Move(from, to, PROMO_CAPTURE_BISHOP); + *moves++ = Move(from, to, PROMO_CAPTURE_ROOK); + *moves++ = Move(from, to, PROMO_CAPTURE_QUEEN); + return moves; } template inline Bitboard getAttackedSquares(const Position &pos, Bitboard occupied) { - constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; - constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; + constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; + constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; - Bitboard pawns = pos.pieces(); - Bitboard pieces = pos.friendly() & ~pawns; - Bitboard result = step(pawns) | step(pawns); + Bitboard pawns = pos.pieces(); + Bitboard pieces = pos.friendly() & ~pawns; + Bitboard result = step(pawns) | step(pawns); - while (pieces) { - Square from = pieces.popLsb(); - result |= pieceAttacks(pos.pieceAt(from).type, from, occupied); - } + while (pieces) { + Square from = pieces.popLsb(); + result |= pieceAttacks(pos.pieceAt(from).type, from, occupied); + } - return result; + return result; } template inline Move *generateMovesFromPieces(const Position &pos, Move *moves, Bitboard pieces, Bitboard specialMask, - Bitboard occupied, Bitboard empty, Bitboard enemy) { - - while (pieces) { - Square from = pieces.popLsb(); - PieceType type = pos.pieceAt(from).type; - Bitboard attacks = pieceAttacks(type, from, occupied) & specialMask; - if constexpr (pinHV) - attacks &= rookMask(from); - if constexpr (pinDA) - attacks &= bishopMask(from); - - if constexpr (!capturesOnly) { - Bitboard quiets = attacks & empty; - while (quiets) { - *moves++ = Move(from, quiets.popLsb()); - } - } - - Bitboard captures = attacks & enemy; - while (captures) { - Square to = captures.popLsb(); - *moves++ = Move(from, to, CAPTURE); - } - } - - return moves; - + Bitboard occupied, Bitboard empty, Bitboard enemy) { + + while (pieces) { + Square from = pieces.popLsb(); + PieceType type = pos.pieceAt(from).type; + Bitboard attacks = pieceAttacks(type, from, occupied) & specialMask; + if constexpr (pinHV) + attacks &= rookMask(from); + if constexpr (pinDA) + attacks &= bishopMask(from); + + if constexpr (!capturesOnly) { + Bitboard quiets = attacks & empty; + while (quiets) { + *moves++ = Move(from, quiets.popLsb()); + } + } + + Bitboard captures = attacks & enemy; + while (captures) { + Square to = captures.popLsb(); + *moves++ = Move(from, to, CAPTURE); + } + } + + return moves; } template Move *generatePawnMoves(const Position &pos, Move *moves, Square king, Bitboard checkMask, - Bitboard moveH, Bitboard moveV, Bitboard moveD, Bitboard moveA) { - constexpr Color enemyColor = EnemyColor(); - - constexpr Direction UP = color == WHITE ? NORTH : -NORTH; - constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; - constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; - constexpr Direction DOWN = -UP; - constexpr Direction DOWN_LEFT = -UP_RIGHT; - constexpr Direction DOWN_RIGHT = -UP_LEFT; - - constexpr Bitboard doublePushRank = (color == WHITE ? rank3 : rank6); - constexpr Bitboard beforePromoRank = (color == WHITE ? rank7 : rank2); - constexpr Bitboard notBeforePromo = ~beforePromoRank; - - Square epSquare = pos.getEpSquare(); - - Bitboard empty = pos.empty(); - Bitboard enemy = pos.enemy(); - - Bitboard pawns = pos.pieces(); - Bitboard pawnsBeforePromo = beforePromoRank & pawns; - pawns &= notBeforePromo; - - if constexpr (!capturesOnly) { - Bitboard singlePush = step(pawns & moveH) & empty; - Bitboard doublePush = step(singlePush & doublePushRank) & empty; - - singlePush &= checkMask; - doublePush &= checkMask; - - while (singlePush) { - Square to = singlePush.popLsb(); - *moves++ = Move(to + DOWN, to); - } - - while (doublePush) { - Square to = doublePush.popLsb(); - *moves++ = Move(to + (2 * DOWN), to, DOUBLE_PAWN_PUSH); - } - } - - Bitboard rightCapture = step(pawns & moveD) & enemy & checkMask; - Bitboard leftCapture = step(pawns & moveA) & enemy & checkMask; - - while (leftCapture) { - Square to = leftCapture.popLsb(); - *moves++ = Move(to + DOWN_RIGHT, to, CAPTURE); - } - - while (rightCapture) { - Square to = rightCapture.popLsb(); - *moves++ = Move(to + DOWN_LEFT, to, CAPTURE); - } - - if (pawnsBeforePromo) { - - if constexpr (!capturesOnly) { - Bitboard upPromo = step(pawnsBeforePromo & moveH) & empty & checkMask; - while (upPromo) { - Square to = upPromo.popLsb(); - moves = makePromo(moves, to + DOWN, to); - } - } - - Bitboard rightPromo = step(pawnsBeforePromo & moveD) & enemy & checkMask; - Bitboard leftPromo = step(pawnsBeforePromo & moveA) & enemy & checkMask; - while (rightPromo) { - Square to = rightPromo.popLsb(); - moves = makePromoCapture(moves, to + DOWN_LEFT, to); - } - - while (leftPromo) { - Square to = leftPromo.popLsb(); - moves = makePromoCapture(moves, to + DOWN_RIGHT, to); - } - } - - if ((epSquare != NULL_SQUARE) && (pawnMask(pos.getEpSquare(), enemyColor) & pawns) && - checkMask.get(epSquare + DOWN)) { - Bitboard occ = pos.occupied(); - bool rightEp = (step(pawns & moveD)).get(epSquare); - bool leftEp = (step(pawns & moveA)).get(epSquare); - - if (rightEp) { - Square attackingPawn = epSquare + DOWN_LEFT; - Square attackedPawn = epSquare + DOWN; - - occ.clear(attackingPawn); - occ.clear(attackedPawn); - - Bitboard rookAttack = rookAttacks(attackedPawn, occ); - Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); - - Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; - Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; - Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; - - Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; - Bitboard seenDiagSliders = - (pos.pieces() | pos.pieces()) & diagAttack; - Bitboard seenADiagSliders = - (pos.pieces() | pos.pieces()) & aDiagAttack; - - bool pinRank = rankAttack.get(king) && seenRankSliders; - bool pinDiag = diagAttack.get(king) && seenDiagSliders; - bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; - - if (!(pinRank || pinDiag || pinADiag)) - *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); - - occ.set(attackingPawn); - occ.set(attackedPawn); - } - - if (leftEp) { - Square attackingPawn = epSquare + DOWN_RIGHT; - Square attackedPawn = epSquare + DOWN; - - occ.clear(attackingPawn); - occ.clear(attackedPawn); - - Bitboard rookAttack = rookAttacks(attackedPawn, occ); - Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); - - Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; - Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; - Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; - - Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; - Bitboard seenDiagSliders = - (pos.pieces() | pos.pieces()) & diagAttack; - Bitboard seenADiagSliders = - (pos.pieces() | pos.pieces()) & aDiagAttack; - - bool pinRank = rankAttack.get(king) && seenRankSliders; - bool pinDiag = diagAttack.get(king) && seenDiagSliders; - bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; - - if (!(pinRank || pinDiag || pinADiag)) - *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); - - occ.set(attackingPawn); - occ.set(attackedPawn); - } - } - - return moves; + Bitboard moveH, Bitboard moveV, Bitboard moveD, Bitboard moveA) { + constexpr Color enemyColor = EnemyColor(); + + constexpr Direction UP = color == WHITE ? NORTH : -NORTH; + constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; + constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; + constexpr Direction DOWN = -UP; + constexpr Direction DOWN_LEFT = -UP_RIGHT; + constexpr Direction DOWN_RIGHT = -UP_LEFT; + + constexpr Bitboard doublePushRank = (color == WHITE ? rank3 : rank6); + constexpr Bitboard beforePromoRank = (color == WHITE ? rank7 : rank2); + constexpr Bitboard notBeforePromo = ~beforePromoRank; + + Square epSquare = pos.getEpSquare(); + + Bitboard empty = pos.empty(); + Bitboard enemy = pos.enemy(); + + Bitboard pawns = pos.pieces(); + Bitboard pawnsBeforePromo = beforePromoRank & pawns; + pawns &= notBeforePromo; + + if constexpr (!capturesOnly) { + Bitboard singlePush = step(pawns & moveH) & empty; + Bitboard doublePush = step(singlePush & doublePushRank) & empty; + + singlePush &= checkMask; + doublePush &= checkMask; + + while (singlePush) { + Square to = singlePush.popLsb(); + *moves++ = Move(to + DOWN, to); + } + + while (doublePush) { + Square to = doublePush.popLsb(); + *moves++ = Move(to + (2 * DOWN), to, DOUBLE_PAWN_PUSH); + } + } + + Bitboard rightCapture = step(pawns & moveD) & enemy & checkMask; + Bitboard leftCapture = step(pawns & moveA) & enemy & checkMask; + + while (leftCapture) { + Square to = leftCapture.popLsb(); + *moves++ = Move(to + DOWN_RIGHT, to, CAPTURE); + } + + while (rightCapture) { + Square to = rightCapture.popLsb(); + *moves++ = Move(to + DOWN_LEFT, to, CAPTURE); + } + + if (pawnsBeforePromo) { + + if constexpr (!capturesOnly) { + Bitboard upPromo = step(pawnsBeforePromo & moveH) & empty & checkMask; + while (upPromo) { + Square to = upPromo.popLsb(); + moves = makePromo(moves, to + DOWN, to); + } + } + + Bitboard rightPromo = step(pawnsBeforePromo & moveD) & enemy & checkMask; + Bitboard leftPromo = step(pawnsBeforePromo & moveA) & enemy & checkMask; + while (rightPromo) { + Square to = rightPromo.popLsb(); + moves = makePromoCapture(moves, to + DOWN_LEFT, to); + } + + while (leftPromo) { + Square to = leftPromo.popLsb(); + moves = makePromoCapture(moves, to + DOWN_RIGHT, to); + } + } + + if ((epSquare != NULL_SQUARE) && (pawnMask(pos.getEpSquare(), enemyColor) & pawns) && + checkMask.get(epSquare + DOWN)) { + Bitboard occ = pos.occupied(); + bool rightEp = (step(pawns & moveD)).get(epSquare); + bool leftEp = (step(pawns & moveA)).get(epSquare); + + if (rightEp) { + Square attackingPawn = epSquare + DOWN_LEFT; + Square attackedPawn = epSquare + DOWN; + + occ.clear(attackingPawn); + occ.clear(attackedPawn); + + Bitboard rookAttack = rookAttacks(attackedPawn, occ); + Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); + + Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; + Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; + Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; + + Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; + Bitboard seenDiagSliders = + (pos.pieces() | pos.pieces()) & diagAttack; + Bitboard seenADiagSliders = + (pos.pieces() | pos.pieces()) & aDiagAttack; + + bool pinRank = rankAttack.get(king) && seenRankSliders; + bool pinDiag = diagAttack.get(king) && seenDiagSliders; + bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; + + if (!(pinRank || pinDiag || pinADiag)) + *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); + + occ.set(attackingPawn); + occ.set(attackedPawn); + } + + if (leftEp) { + Square attackingPawn = epSquare + DOWN_RIGHT; + Square attackedPawn = epSquare + DOWN; + + occ.clear(attackingPawn); + occ.clear(attackedPawn); + + Bitboard rookAttack = rookAttacks(attackedPawn, occ); + Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); + + Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; + Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; + Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; + + Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; + Bitboard seenDiagSliders = + (pos.pieces() | pos.pieces()) & diagAttack; + Bitboard seenADiagSliders = + (pos.pieces() | pos.pieces()) & aDiagAttack; + + bool pinRank = rankAttack.get(king) && seenRankSliders; + bool pinDiag = diagAttack.get(king) && seenDiagSliders; + bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; + + if (!(pinRank || pinDiag || pinADiag)) + *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); + + occ.set(attackingPawn); + occ.set(attackedPawn); + } + } + + return moves; } template inline Move *generateKingMoves(const Position &pos, Move *moves, Square king, - Bitboard safeSquares, Bitboard empty, Bitboard enemy) { + Bitboard safeSquares, Bitboard empty, Bitboard enemy) { - Bitboard kingTarget = kingMask(king) & safeSquares; + Bitboard kingTarget = kingMask(king) & safeSquares; - if constexpr (!capturesOnly) { - Bitboard kingQuiets = kingTarget & empty; - while (kingQuiets) { - *moves++ = Move(king, kingQuiets.popLsb()); - } - } + if constexpr (!capturesOnly) { + Bitboard kingQuiets = kingTarget & empty; + while (kingQuiets) { + *moves++ = Move(king, kingQuiets.popLsb()); + } + } - Bitboard kingCaptures = kingTarget & enemy; - while (kingCaptures) { - Square to = kingCaptures.popLsb(); - *moves++ = Move(king, to, CAPTURE); - } + Bitboard kingCaptures = kingTarget & enemy; + while (kingCaptures) { + Square to = kingCaptures.popLsb(); + *moves++ = Move(king, to, CAPTURE); + } - return moves; + return moves; } inline Bitboard generateCheckMask(const Position &pos, Square king, Bitboard checkers) { - unsigned int checks = checkers.popCount(); - if (checks == 0) { - return 0xffffffffffffffffULL; - } else if (checks == 1) { - Square checker = checkers.lsb(); - PieceType type = pos.pieceAt(checker).type; - if (type == ROOK || type == BISHOP || type == QUEEN) { - return checkers | commonRay[king][checker]; - } else { - return checkers; - } - } else { - return 0; - } + unsigned int checks = checkers.popCount(); + if (checks == 0) { + return 0xffffffffffffffffULL; + } else if (checks == 1) { + Square checker = checkers.lsb(); + PieceType type = pos.pieceAt(checker).type; + if (type == ROOK || type == BISHOP || type == QUEEN) { + return checkers | commonRay[king][checker]; + } else { + return checkers; + } + } else { + return 0; + } } template inline Move *generateSliderAndJumpMoves(const Position &pos, Move *moves, Bitboard pieces, - Bitboard occupied, Bitboard empty, Bitboard enemy, Bitboard checkMask, - Bitboard pinHV, Bitboard pinDA) { - Bitboard pinnedHV = pinHV & pieces; - Bitboard pinnedDA = pinDA & pieces; - pieces &= ~(pinnedHV | pinnedDA); - - moves = generateMovesFromPieces(pos, moves, pieces, checkMask, occupied, empty, enemy); + Bitboard occupied, Bitboard empty, Bitboard enemy, Bitboard checkMask, + Bitboard pinHV, Bitboard pinDA) { + Bitboard pinnedHV = pinHV & pieces; + Bitboard pinnedDA = pinDA & pieces; + pieces &= ~(pinnedHV | pinnedDA); - moves = generateMovesFromPieces(pos, moves, pinnedHV, checkMask & pinHV, occupied, empty, - enemy); + moves = generateMovesFromPieces(pos, moves, pieces, checkMask, occupied, empty, enemy); - moves = generateMovesFromPieces(pos, moves, pinnedDA, checkMask & pinDA, occupied, empty, - enemy); + moves = generateMovesFromPieces(pos, moves, pinnedHV, checkMask & pinHV, occupied, empty, + enemy); + moves = generateMovesFromPieces(pos, moves, pinnedDA, checkMask & pinDA, occupied, empty, + enemy); - return moves; + return moves; } template Move *generateMoves(const Position &pos, Move *moves) { - constexpr Color enemyColor = EnemyColor(); - - Square king = pos.pieces().lsb(); - assert(king != NULL_SQUARE); - - Bitboard friendlyPieces = pos.friendly(); - Bitboard empty = pos.empty(); - Bitboard enemy = pos.enemy(); - Bitboard occupied = pos.occupied(); - Bitboard checkers = getAttackers(pos, king); - - occupied.clear(king); - Bitboard safeSquares = ~getAttackedSquares(pos, occupied); - occupied.set(king); - - // Generating checkMask - Bitboard checkMask = generateCheckMask(pos, king, checkers); - - // Generating king moves - moves = generateKingMoves(pos, moves, king, safeSquares, empty, enemy); - - // If we are in a double check, only king moves are legal - if (checkMask == 0) - return moves; - - // Generating pinMasks - Bitboard seenSquares = pieceAttacks(king, occupied); - Bitboard possiblePins = seenSquares & friendlyPieces; - - occupied ^= possiblePins; - - Bitboard possiblePinners = (pieceAttacks(king, occupied) ^ seenSquares) & enemy; - Bitboard pinners = ((pieceAttacks(king, occupied) & pos.pieces()) | - (pieceAttacks(king, occupied) & pos.pieces()) | - (pieceAttacks(king, occupied) & pos.pieces())) & possiblePinners; - - Bitboard pinH, pinV, pinD, pinA, pinHV, pinDA, moveH, moveV, moveD, moveA; - - while (pinners) { - Square pinner = pinners.popLsb(); - LineType type = lineType[king][pinner]; - switch (type) { - case HORIZONTAL: - pinH |= commonRay[king][pinner] | pinner; - break; - case VERTICAL: - pinV |= commonRay[king][pinner] | pinner; - break; - case DIAGONAL: - pinD |= commonRay[king][pinner] | pinner; - break; - case ANTI_DIAGONAL: - pinA |= commonRay[king][pinner] | pinner; - break; - } - } - - pinHV = pinH | pinV; - pinDA = pinD | pinA; - - pinH &= friendlyPieces; - pinV &= friendlyPieces; - pinD &= friendlyPieces; - pinA &= friendlyPieces; - - moveH = ~(pinV | pinD | pinA); - moveV = ~(pinH | pinD | pinA); - moveD = ~(pinH | pinV | pinA); - moveA = ~(pinH | pinV | pinD); - - occupied ^= possiblePins; - - // Generating pawn moves - moves = generatePawnMoves(pos, moves, king, checkMask, moveH, moveV, moveD, moveA); - - // Generating knight and slider moves - Bitboard sliderAndJumperPieces = friendlyPieces & ~pos.pieces(); - sliderAndJumperPieces.clear(king); - - moves = generateSliderAndJumpMoves(pos, moves, sliderAndJumperPieces, occupied, empty, enemy, - checkMask, pinHV, pinDA); - - // Generating castling moves - if constexpr (!capturesOnly) { - if constexpr (color == WHITE) { - if (pos.getCastleRight(WK_MASK) && - (safeSquares & WK_CASTLE_SAFE) == WK_CASTLE_SAFE && (empty & WK_CASTLE_EMPTY) == WK_CASTLE_EMPTY) { - - *moves++ = Move(E1, G1, KING_CASTLE); - } - - if (pos.getCastleRight(WQ_MASK) && - (safeSquares & WQ_CASTLE_SAFE) == WQ_CASTLE_SAFE && (empty & WQ_CASTLE_EMPTY) == WQ_CASTLE_EMPTY) { - - *moves++ = Move(E1, C1, QUEEN_CASTLE); - } - } else { - if (pos.getCastleRight(BK_MASK) && - (safeSquares & BK_CASTLE_SAFE) == BK_CASTLE_SAFE && (empty & BK_CASTLE_EMPTY) == BK_CASTLE_EMPTY) { - - *moves++ = Move(E8, G8, KING_CASTLE); - } - - if (pos.getCastleRight(BQ_MASK) && - (safeSquares & BQ_CASTLE_SAFE) == BQ_CASTLE_SAFE && (empty & BQ_CASTLE_EMPTY) == BQ_CASTLE_EMPTY) { - - *moves++ = Move(E8, C8, QUEEN_CASTLE); - } - } - } - - return moves; + constexpr Color enemyColor = EnemyColor(); + + Square king = pos.pieces().lsb(); + assert(king != NULL_SQUARE); + + Bitboard friendlyPieces = pos.friendly(); + Bitboard empty = pos.empty(); + Bitboard enemy = pos.enemy(); + Bitboard occupied = pos.occupied(); + Bitboard checkers = getAttackers(pos, king); + + occupied.clear(king); + Bitboard safeSquares = ~getAttackedSquares(pos, occupied); + occupied.set(king); + + // Generating checkMask + Bitboard checkMask = generateCheckMask(pos, king, checkers); + + // Generating king moves + moves = generateKingMoves(pos, moves, king, safeSquares, empty, enemy); + + // If we are in a double check, only king moves are legal + if (checkMask == 0) + return moves; + + // Generating pinMasks + Bitboard seenSquares = pieceAttacks(king, occupied); + Bitboard possiblePins = seenSquares & friendlyPieces; + + occupied ^= possiblePins; + + Bitboard possiblePinners = (pieceAttacks(king, occupied) ^ seenSquares) & enemy; + Bitboard pinners = ((pieceAttacks(king, occupied) & pos.pieces()) | + (pieceAttacks(king, occupied) & pos.pieces()) | + (pieceAttacks(king, occupied) & pos.pieces())) & + possiblePinners; + + Bitboard pinH, pinV, pinD, pinA, pinHV, pinDA, moveH, moveV, moveD, moveA; + + while (pinners) { + Square pinner = pinners.popLsb(); + LineType type = lineType[king][pinner]; + switch (type) { + case HORIZONTAL: + pinH |= commonRay[king][pinner] | pinner; + break; + case VERTICAL: + pinV |= commonRay[king][pinner] | pinner; + break; + case DIAGONAL: + pinD |= commonRay[king][pinner] | pinner; + break; + case ANTI_DIAGONAL: + pinA |= commonRay[king][pinner] | pinner; + break; + } + } + + pinHV = pinH | pinV; + pinDA = pinD | pinA; + + pinH &= friendlyPieces; + pinV &= friendlyPieces; + pinD &= friendlyPieces; + pinA &= friendlyPieces; + + moveH = ~(pinV | pinD | pinA); + moveV = ~(pinH | pinD | pinA); + moveD = ~(pinH | pinV | pinA); + moveA = ~(pinH | pinV | pinD); + + occupied ^= possiblePins; + + // Generating pawn moves + moves = generatePawnMoves(pos, moves, king, checkMask, moveH, moveV, moveD, moveA); + + // Generating knight and slider moves + Bitboard sliderAndJumperPieces = friendlyPieces & ~pos.pieces(); + sliderAndJumperPieces.clear(king); + + moves = generateSliderAndJumpMoves(pos, moves, sliderAndJumperPieces, occupied, empty, enemy, + checkMask, pinHV, pinDA); + + // Generating castling moves + if constexpr (!capturesOnly) { + if constexpr (color == WHITE) { + if (pos.getCastleRight(WK_MASK) && + (safeSquares & WK_CASTLE_SAFE) == WK_CASTLE_SAFE && (empty & WK_CASTLE_EMPTY) == WK_CASTLE_EMPTY) { + + *moves++ = Move(E1, G1, KING_CASTLE); + } + + if (pos.getCastleRight(WQ_MASK) && + (safeSquares & WQ_CASTLE_SAFE) == WQ_CASTLE_SAFE && (empty & WQ_CASTLE_EMPTY) == WQ_CASTLE_EMPTY) { + + *moves++ = Move(E1, C1, QUEEN_CASTLE); + } + } else { + if (pos.getCastleRight(BK_MASK) && + (safeSquares & BK_CASTLE_SAFE) == BK_CASTLE_SAFE && (empty & BK_CASTLE_EMPTY) == BK_CASTLE_EMPTY) { + + *moves++ = Move(E8, G8, KING_CASTLE); + } + + if (pos.getCastleRight(BQ_MASK) && + (safeSquares & BQ_CASTLE_SAFE) == BQ_CASTLE_SAFE && (empty & BQ_CASTLE_EMPTY) == BQ_CASTLE_EMPTY) { + + *moves++ = Move(E8, C8, QUEEN_CASTLE); + } + } + } + + return moves; } template Move *generateMoves(const Position &pos, Move *moves) { - if (pos.getSideToMove() == WHITE) { - return generateMoves(pos, moves); - } else { - return generateMoves(pos, moves); - } + if (pos.getSideToMove() == WHITE) { + return generateMoves(pos, moves); + } else { + return generateMoves(pos, moves); + } } Move *generateMoves(const Position &pos, Move *moves, bool capturesOnly) { - if (capturesOnly) { - return generateMoves(pos, moves); - } else { - return generateMoves(pos, moves); - } + if (capturesOnly) { + return generateMoves(pos, moves); + } else { + return generateMoves(pos, moves); + } } \ No newline at end of file diff --git a/src/movegen.h b/src/movegen.h index 4c8f462..02b14af 100644 --- a/src/movegen.h +++ b/src/movegen.h @@ -17,73 +17,73 @@ #ifndef BLACKCORE_MOVEGEN_H #define BLACKCORE_MOVEGEN_H -#include "position.h" #include "move.h" #include "move_ordering.h" +#include "position.h" template inline Bitboard getAttackers(const Position &pos, Square square) { - Bitboard occupied = pos.occupied(); - Bitboard enemy = pos.enemy(); - return ((pawnMask(square, color) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces())) & enemy; + Bitboard occupied = pos.occupied(); + Bitboard enemy = pos.enemy(); + return ((pawnMask(square, color) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces())) & + enemy; } inline Bitboard getAttackers(const Position &pos, Square square) { - if (pos.getSideToMove() == WHITE) - return getAttackers(pos, square); - else - return getAttackers(pos, square); + if (pos.getSideToMove() == WHITE) + return getAttackers(pos, square); + else + return getAttackers(pos, square); } Move *generateMoves(const Position &pos, Move *moves, bool capturesOnly); struct MoveList { - Move moves[200]; - Move *movesEnd; - unsigned int index; + Move moves[200]; + Move *movesEnd; + unsigned int index; - Score scores[200]; + Score scores[200]; - unsigned int count; + unsigned int count; - MoveList(const Position &pos, Ply ply, bool capturesOnly) { - movesEnd = generateMoves(pos, moves, capturesOnly); - index = 0; - count = movesEnd - moves; + MoveList(const Position &pos, Ply ply, bool capturesOnly) { + movesEnd = generateMoves(pos, moves, capturesOnly); + index = 0; + count = movesEnd - moves; - // Scoring moves - if (capturesOnly) { - for (unsigned int i = 0; i < count; i++) { - scores[i] = scoreQMove(pos, moves[i]); - } - } else { - for (unsigned int i = 0; i < count; i++) { - scores[i] = scoreMove(pos, moves[i], ply); - } - } - } + // Scoring moves + if (capturesOnly) { + for (unsigned int i = 0; i < count; i++) { + scores[i] = scoreQMove(pos, moves[i]); + } + } else { + for (unsigned int i = 0; i < count; i++) { + scores[i] = scoreMove(pos, moves[i], ply); + } + } + } - inline bool empty() const { - return index == count; - } + inline bool empty() const { + return index == count; + } - inline Move nextMove() { - unsigned int best = index; - for (unsigned int i = index; i < count; i++) { - if (scores[i] > scores[best]) { - best = i; - } - } - std::swap(moves[index], moves[best]); - std::swap(scores[index], scores[best]); + inline Move nextMove() { + unsigned int best = index; + for (unsigned int i = index; i < count; i++) { + if (scores[i] > scores[best]) { + best = i; + } + } + std::swap(moves[index], moves[best]); + std::swap(scores[index], scores[best]); - return moves[index++]; - } + return moves[index++]; + } }; - -#endif //BLACKCORE_MOVEGEN_H +#endif//BLACKCORE_MOVEGEN_H diff --git a/src/nnue.cpp b/src/nnue.cpp index 23a56b8..e99ad9a 100644 --- a/src/nnue.cpp +++ b/src/nnue.cpp @@ -14,180 +14,179 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +#include "nnue.h" +#include "position.h" #include #include #include -#include "nnue.h" -#include "position.h" #include "incbin/incbin.h" namespace NNUE { - INCBIN(Net, "corenet.bin"); + INCBIN(Net, "corenet.bin"); - alignas(64) int16_t L_0_WEIGHTS[L_0_SIZE * L_1_SIZE]; - alignas(64) int16_t L_0_BIASES[L_1_SIZE]; + alignas(64) int16_t L_0_WEIGHTS[L_0_SIZE * L_1_SIZE]; + alignas(64) int16_t L_0_BIASES[L_1_SIZE]; - alignas(64) int16_t L_1_WEIGHTS[L_1_SIZE * 2]; - alignas(64) int16_t L_1_BIASES[1]; + alignas(64) int16_t L_1_WEIGHTS[L_1_SIZE * 2]; + alignas(64) int16_t L_1_BIASES[1]; - void Accumulator::loadAccumulator(NNUE::Accumulator &accumulator) { - for (Color perspective : {WHITE, BLACK}) { + void Accumulator::loadAccumulator(NNUE::Accumulator &accumulator) { + for (Color perspective : {WHITE, BLACK}) { #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset4]); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], ac1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], ac2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], ac3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], ac4); - } + for (int i = 0; i < chunkNum; i += 4) { + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset4]); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], ac1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], ac2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], ac3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], ac4); + } #else - std::memcpy(hiddenLayer[perspective], accumulator.hiddenLayer[perspective], sizeof(int16_t) * L_1_SIZE * 1); + std::memcpy(hiddenLayer[perspective], accumulator.hiddenLayer[perspective], sizeof(int16_t) * L_1_SIZE * 1); #endif - } - - } - - void Accumulator::refresh(const Position &pos) { - for (Color perspective : {WHITE, BLACK}) { - std::memcpy(hiddenLayer[perspective], L_0_BIASES, sizeof(int16_t) * L_1_SIZE); - } - - for (Square sq = A1; sq < 64; sq += 1) { - Piece p = pos.pieceAt(sq); - if (!p.isNull()) { - addFeature(p.color, p.type, sq); - } - } - } - - void Accumulator::addFeature(Color pieceColor, PieceType pieceType, Square sq) { - for (Color perspective : {WHITE, BLACK}) { - unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); + } + } + + void Accumulator::refresh(const Position &pos) { + for (Color perspective : {WHITE, BLACK}) { + std::memcpy(hiddenLayer[perspective], L_0_BIASES, sizeof(int16_t) * L_1_SIZE); + } + + for (Square sq = A1; sq < 64; sq += 1) { + Piece p = pos.pieceAt(sq); + if (!p.isNull()) { + addFeature(p.color, p.type, sq); + } + } + } + + void Accumulator::addFeature(Color pieceColor, PieceType pieceType, Square sq) { + for (Color perspective : {WHITE, BLACK}) { + unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); - - __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); - __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); - __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); - __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); - - __m256i sum1 = _mm256_add_epi16(ac1, we1); - __m256i sum2 = _mm256_add_epi16(ac2, we2); - __m256i sum3 = _mm256_add_epi16(ac3, we3); - __m256i sum4 = _mm256_add_epi16(ac4, we4); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); - } + for (int i = 0; i < chunkNum; i += 4) { + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); + + __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); + __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); + __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); + __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); + + __m256i sum1 = _mm256_add_epi16(ac1, we1); + __m256i sum2 = _mm256_add_epi16(ac2, we2); + __m256i sum3 = _mm256_add_epi16(ac3, we3); + __m256i sum4 = _mm256_add_epi16(ac4, we4); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); + } #else - for (int i = 0; i < L_1_SIZE; i++) { - hiddenLayer[perspective][i] += L_0_WEIGHTS[index * L_1_SIZE + i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + hiddenLayer[perspective][i] += L_0_WEIGHTS[index * L_1_SIZE + i]; + } #endif - } - } + } + } - void Accumulator::removeFeature(Color pieceColor, PieceType pieceType, Square sq) { - for (Color perspective : {WHITE, BLACK}) { - unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); + void Accumulator::removeFeature(Color pieceColor, PieceType pieceType, Square sq) { + for (Color perspective : {WHITE, BLACK}) { + unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); - - __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); - __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); - __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); - __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); - - __m256i sum1 = _mm256_sub_epi16(ac1, we1); - __m256i sum2 = _mm256_sub_epi16(ac2, we2); - __m256i sum3 = _mm256_sub_epi16(ac3, we3); - __m256i sum4 = _mm256_sub_epi16(ac4, we4); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); - } + for (int i = 0; i < chunkNum; i += 4) { + + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); + + __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); + __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); + __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); + __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); + + __m256i sum1 = _mm256_sub_epi16(ac1, we1); + __m256i sum2 = _mm256_sub_epi16(ac2, we2); + __m256i sum3 = _mm256_sub_epi16(ac3, we3); + __m256i sum4 = _mm256_sub_epi16(ac4, we4); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); + } #else - for (int i = 0; i < L_1_SIZE; i++) { - hiddenLayer[perspective][i] -= L_0_WEIGHTS[index * L_1_SIZE + i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + hiddenLayer[perspective][i] -= L_0_WEIGHTS[index * L_1_SIZE + i]; + } #endif - } - } + } + } - Score Accumulator::forward(Color stm) { + Score Accumulator::forward(Color stm) { - int32_t output = L_1_BIASES[0]; + int32_t output = L_1_BIASES[0]; - if (stm == WHITE) { - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[i]; - } + if (stm == WHITE) { + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[i]; + } - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[L_1_SIZE + i]; - } - } else { - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[L_1_SIZE + i]; + } + } else { + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[i]; + } - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[L_1_SIZE + i]; - } - } + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[L_1_SIZE + i]; + } + } - return output * 400 / (255 * 255); - } + return output * 400 / (255 * 255); + } - void init() { + void init() { - int ptr = 0; - std::memcpy(L_0_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_0_SIZE * L_1_SIZE); - ptr += sizeof(int16_t) * L_0_SIZE * L_1_SIZE; - std::memcpy(L_0_BIASES, gNetData + ptr, sizeof(int16_t) * L_1_SIZE); - ptr += sizeof(int16_t) * L_1_SIZE; - std::memcpy(L_1_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_1_SIZE * 2); - ptr += sizeof(int16_t) * L_1_SIZE * 2; - std::memcpy(L_1_BIASES, gNetData + ptr, sizeof(int16_t) * 1); + int ptr = 0; + std::memcpy(L_0_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_0_SIZE * L_1_SIZE); + ptr += sizeof(int16_t) * L_0_SIZE * L_1_SIZE; + std::memcpy(L_0_BIASES, gNetData + ptr, sizeof(int16_t) * L_1_SIZE); + ptr += sizeof(int16_t) * L_1_SIZE; + std::memcpy(L_1_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_1_SIZE * 2); + ptr += sizeof(int16_t) * L_1_SIZE * 2; + std::memcpy(L_1_BIASES, gNetData + ptr, sizeof(int16_t) * 1); - // Currently loading net from a file is not supported - // Legacy code: + // Currently loading net from a file is not supported + // Legacy code: - /*FILE *file = fopen(filename.c_str(), "rb"); + /*FILE *file = fopen(filename.c_str(), "rb"); if (file != nullptr) { @@ -197,5 +196,5 @@ namespace NNUE { fread(L_1_BIASES, sizeof(int16_t), 1, file); }*/ - } -} + } +}// namespace NNUE diff --git a/src/nnue.h b/src/nnue.h index 28cf950..63a6c7d 100644 --- a/src/nnue.h +++ b/src/nnue.h @@ -23,56 +23,57 @@ class Position; namespace NNUE { - /* - * +-----------------------+ - * | NNUE Architecture | - * | 2x(768->256)->1 | - * | Activation: ReLU | - * +-----------------------+ - * - * L_0_SIZE = features count - * - * L_0_WEIGHTS = in features -> L_1 (768 -> 256) - * L_0_BIASES = L_1 biases - * - * L_1_WEIGHTS = 2xL_1 -> L_2 (2x256 -> 1) - * L_1_BIASES = L_2 biases - * - */ + /* + * +-----------------------+ + * | NNUE Architecture | + * | 2x(768->256)->1 | + * | Activation: ReLU | + * +-----------------------+ + * + * L_0_SIZE = features count + * + * L_0_WEIGHTS = in features -> L_1 (768 -> 256) + * L_0_BIASES = L_1 biases + * + * L_1_WEIGHTS = 2xL_1 -> L_2 (2x256 -> 1) + * L_1_BIASES = L_2 biases + * + */ - constexpr int L_0_SIZE = 768; - constexpr int L_1_SIZE = 256; + constexpr int L_0_SIZE = 768; + constexpr int L_1_SIZE = 256; - constexpr int regWidth = 256 / 16; - constexpr int chunkNum = 256 / regWidth; + constexpr int regWidth = 256 / 16; + constexpr int chunkNum = 256 / regWidth; - struct Accumulator { - alignas(32) int16_t hiddenLayer[2][L_1_SIZE]; + struct Accumulator { + alignas(32) int16_t hiddenLayer[2][L_1_SIZE]; - constexpr Accumulator() {} + constexpr Accumulator() { + } - void loadAccumulator(Accumulator &accumulator); + void loadAccumulator(Accumulator &accumulator); - void refresh(const Position &pos); + void refresh(const Position &pos); - void addFeature(Color pieceColor, PieceType pieceType, Square sq); + void addFeature(Color pieceColor, PieceType pieceType, Square sq); - void removeFeature(Color pieceColor, PieceType pieceType, Square sq); + void removeFeature(Color pieceColor, PieceType pieceType, Square sq); - Score forward(Color stm); - }; + Score forward(Color stm); + }; - constexpr int getAccumulatorIndex(Color perspective, Color pieceColor, PieceType pieceType, Square square) { - return (perspective == WHITE ? pieceColor : 1 - pieceColor) * 384 + pieceType * 64 + - (perspective == WHITE ? square : square ^ 56); - } + constexpr int getAccumulatorIndex(Color perspective, Color pieceColor, PieceType pieceType, Square square) { + return (perspective == WHITE ? pieceColor : 1 - pieceColor) * 384 + pieceType * 64 + + (perspective == WHITE ? square : square ^ 56); + } - constexpr int16_t ReLU(int16_t in) { - return std::max((int16_t) 0, in); - } + constexpr int16_t ReLU(int16_t in) { + return std::max((int16_t) 0, in); + } - void init(); -} + void init(); +}// namespace NNUE -#endif //BLACKCORE_NNUE_H +#endif//BLACKCORE_NNUE_H diff --git a/src/position.cpp b/src/position.cpp index 2251c9a..a51e280 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -17,9 +17,9 @@ #include "position.h" #include "eval.h" +#include #include #include -#include #define state states.top() @@ -28,221 +28,228 @@ using std::cout, std::string; U64 nodeCount = 0; void Position::clearPosition() { - for (auto &i : pieceBB) { - i = 0; - } + for (auto &i : pieceBB) { + i = 0; + } - for (Square square = A1; square < 64; square += 1) { - board[square] = {}; - } + for (Square square = A1; square < 64; square += 1) { + board[square] = {}; + } - allPieceBB[WHITE] = 0; - allPieceBB[BLACK] = 0; + allPieceBB[WHITE] = 0; + allPieceBB[BLACK] = 0; - states.clear(); - state->lastIrreversibleMove = state; + states.clear(); + state->lastIrreversibleMove = state; } void Position::makeNullMove() { - BoardState newState; + BoardState newState; - newState.stm = state->stm == WHITE ? BLACK : WHITE; - newState.castlingRights = state->castlingRights; - newState.hash = state->hash ^ *blackRand; - newState.lastIrreversibleMove = state->lastIrreversibleMove; + newState.stm = state->stm == WHITE ? BLACK : WHITE; + newState.castlingRights = state->castlingRights; + newState.hash = state->hash ^ *blackRand; + newState.lastIrreversibleMove = state->lastIrreversibleMove; - if (state->epSquare != NULL_SQUARE) { - newState.hash ^= epRandTable[squareToFile(state->epSquare)]; - } + if (state->epSquare != NULL_SQUARE) { + newState.hash ^= epRandTable[squareToFile(state->epSquare)]; + } - states.push(newState); + states.push(newState); } void Position::undoNullMove() { - states.pop(); + states.pop(); } bool Position::isRepetition() { - // TODO we can make this faster, because we only have to check every second ply - for (BoardState *ptr = state->lastIrreversibleMove; ptr != state; ptr++) { - if (state->hash == ptr->hash) { - return true; - } - } - return false; + // TODO we can make this faster, because we only have to check every second ply + for (BoardState *ptr = state->lastIrreversibleMove; ptr != state; ptr++) { + if (state->hash == ptr->hash) { + return true; + } + } + return false; } void Position::display() const { - std::vector text; - text.emplace_back(string("Hash: ") + std::to_string(state->hash)); - if (getEpSquare() != NULL_SQUARE) - text.emplace_back(string("En passant square: ") + formatSquare(getEpSquare())); - string cr; - if (getCastleRight(WK_MASK)) cr += 'K'; - if (getCastleRight(WQ_MASK)) cr += 'Q'; - if (getCastleRight(BK_MASK)) cr += 'k'; - if (getCastleRight(BQ_MASK)) cr += 'q'; - if (cr.empty()) cr = "None"; - text.emplace_back(string("Castling rights: ") + cr); - text.emplace_back(string("Side to move: ") + string(getSideToMove() == WHITE ? "White" : "Black")); - // TODO FEN, full-half move counter - - cout << "\n A B C D E F G H \n"; - for (int i = 8; i >= 1; i--) { - cout << " +---+---+---+---+---+---+---+---+"; - if (i <= 7 && !text.empty()) { - cout << " " << text.back(); - text.pop_back(); - } - cout << "\n " << i << " |"; - for (int j = 1; j <= 8; j++) { - cout << " " << pieceToChar(pieceAt(Square((i - 1) * 8 + (j - 1)))) << " |"; - } - if (i <= 7 && !text.empty()) { - cout << " " << text.back(); - text.pop_back(); - } - cout << "\n"; - } - cout << " +---+---+---+---+---+---+---+---+\n\n" << std::endl; + std::vector text; + text.emplace_back(string("Hash: ") + std::to_string(state->hash)); + if (getEpSquare() != NULL_SQUARE) + text.emplace_back(string("En passant square: ") + formatSquare(getEpSquare())); + string cr; + if (getCastleRight(WK_MASK)) + cr += 'K'; + if (getCastleRight(WQ_MASK)) + cr += 'Q'; + if (getCastleRight(BK_MASK)) + cr += 'k'; + if (getCastleRight(BQ_MASK)) + cr += 'q'; + if (cr.empty()) + cr = "None"; + text.emplace_back(string("Castling rights: ") + cr); + text.emplace_back(string("Side to move: ") + string(getSideToMove() == WHITE ? "White" : "Black")); + // TODO FEN, full-half move counter + + cout << "\n A B C D E F G H \n"; + for (int i = 8; i >= 1; i--) { + cout << " +---+---+---+---+---+---+---+---+"; + if (i <= 7 && !text.empty()) { + cout << " " << text.back(); + text.pop_back(); + } + cout << "\n " << i << " |"; + for (int j = 1; j <= 8; j++) { + cout << " " << pieceToChar(pieceAt(Square((i - 1) * 8 + (j - 1)))) << " |"; + } + if (i <= 7 && !text.empty()) { + cout << " " << text.back(); + text.pop_back(); + } + cout << "\n"; + } + cout << " +---+---+---+---+---+---+---+---+\n\n" + << std::endl; } void Position::displayEval() { - Score score = eval(*this); - cout << "\n A B C D E F G H \n"; - for (int i = 8; i >= 1; i--) { - cout << " +-----+-----+-----+-----+-----+-----+-----+-----+"; - cout << "\n " << i << " |"; - for (int j = 1; j <= 8; j++) { - Square square = Square((i - 1) * 8 + (j - 1)); - cout << " " << pieceToChar(pieceAt(square)) << " |"; - } - cout << "\n |"; - for (int j = 1; j <= 8; j++) { - Square square = Square((i - 1) * 8 + (j - 1)); - Piece piece = pieceAt(square); - string evalStr = " "; - if (!piece.isNull() && piece.type != KING) { - clearSquare(square); - Score newScore = eval(*this); - Score scoreDiff = score - newScore; - evalStr = std::to_string(scoreDiff); - setSquare(square, piece); - } - cout << std::setw(5) << evalStr << "|"; - } - cout << "\n"; - } - cout << " +-----+-----+-----+-----+-----+-----+-----+-----+\n" << std::endl; - - cout << "Eval: " << score << std::endl; + Score score = eval(*this); + cout << "\n A B C D E F G H \n"; + for (int i = 8; i >= 1; i--) { + cout << " +-----+-----+-----+-----+-----+-----+-----+-----+"; + cout << "\n " << i << " |"; + for (int j = 1; j <= 8; j++) { + Square square = Square((i - 1) * 8 + (j - 1)); + cout << " " << pieceToChar(pieceAt(square)) << " |"; + } + cout << "\n |"; + for (int j = 1; j <= 8; j++) { + Square square = Square((i - 1) * 8 + (j - 1)); + Piece piece = pieceAt(square); + string evalStr = " "; + if (!piece.isNull() && piece.type != KING) { + clearSquare(square); + Score newScore = eval(*this); + Score scoreDiff = score - newScore; + evalStr = std::to_string(scoreDiff); + setSquare(square, piece); + } + cout << std::setw(5) << evalStr << "|"; + } + cout << "\n"; + } + cout << " +-----+-----+-----+-----+-----+-----+-----+-----+\n" + << std::endl; + + cout << "Eval: " << score << std::endl; } void Position::loadPositionFromFen(const string &fen) { - clearPosition(); - - std::stringstream ss; - string b; - ss << fen; - ss >> b; - Square square = A8; - for (char c : b) { - if ('1' <= c && c <= '8') { - square += c - '0'; - } else if (c == '/') { - square -= 16; - } else { - setSquare(square, charToPiece(c)); - square += 1; - } - } - - char c; - ss >> c; - switch (c) { - case 'w': - state->stm = WHITE; - break; - case 'b': - state->stm = BLACK; - state->hash ^= *blackRand; - break; - default: - assert(0); - } - string cr; - ss >> cr; - if (cr[0] != '-') { - for (char r : cr) { - switch (r) { - case 'K': - setCastleRight(WK_MASK); - break; - case 'Q': - setCastleRight(WQ_MASK); - break; - case 'k': - setCastleRight(BK_MASK); - break; - case 'q': - setCastleRight(BQ_MASK); - break; - default: - assert(0); - } - } - } - - ss >> state->epSquare; - - state->hash ^= castlingRandTable[state->castlingRights]; - state->hash ^= epRandTable[squareToFile(state->epSquare)]; - - state->accumulator.refresh(*this); + clearPosition(); + + std::stringstream ss; + string b; + ss << fen; + ss >> b; + Square square = A8; + for (char c : b) { + if ('1' <= c && c <= '8') { + square += c - '0'; + } else if (c == '/') { + square -= 16; + } else { + setSquare(square, charToPiece(c)); + square += 1; + } + } + + char c; + ss >> c; + switch (c) { + case 'w': + state->stm = WHITE; + break; + case 'b': + state->stm = BLACK; + state->hash ^= *blackRand; + break; + default: + assert(0); + } + string cr; + ss >> cr; + if (cr[0] != '-') { + for (char r : cr) { + switch (r) { + case 'K': + setCastleRight(WK_MASK); + break; + case 'Q': + setCastleRight(WQ_MASK); + break; + case 'k': + setCastleRight(BK_MASK); + break; + case 'q': + setCastleRight(BQ_MASK); + break; + default: + assert(0); + } + } + } + + ss >> state->epSquare; + + state->hash ^= castlingRandTable[state->castlingRights]; + state->hash ^= epRandTable[squareToFile(state->epSquare)]; + + state->accumulator.refresh(*this); } void Position::loadPositionFromRawState(const RawState &rawState) { - clearPosition(); - state->stm = rawState.stm; - state->epSquare = rawState.epSquare; - state->castlingRights = rawState.castlingRights; - allPieceBB[WHITE] = rawState.allPieceBB[WHITE]; - allPieceBB[BLACK] = rawState.allPieceBB[BLACK]; - - for (int i = 0; i < 6; i++) { - pieceBB[i] = rawState.pieceBB[i]; - } + clearPosition(); + state->stm = rawState.stm; + state->epSquare = rawState.epSquare; + state->castlingRights = rawState.castlingRights; + allPieceBB[WHITE] = rawState.allPieceBB[WHITE]; + allPieceBB[BLACK] = rawState.allPieceBB[BLACK]; + + for (int i = 0; i < 6; i++) { + pieceBB[i] = rawState.pieceBB[i]; + } #ifndef TUNE - for (Square sq = A1; sq < 64; sq += 1) { - board[sq] = rawState.board[sq]; - } + for (Square sq = A1; sq < 64; sq += 1) { + board[sq] = rawState.board[sq]; + } #endif } RawState Position::getRawState() { - RawState rawState; - rawState.stm = getSideToMove(); - rawState.epSquare = getEpSquare(); - rawState.castlingRights = getCastlingRights(); - rawState.allPieceBB[WHITE] = allPieceBB[WHITE]; - rawState.allPieceBB[BLACK] = allPieceBB[BLACK]; - - for (int i = 0; i < 6; i++) { - rawState.pieceBB[i] = pieceBB[i]; - } - - for (Square sq = A1; sq < 64; sq += 1) { - rawState.board[sq] = board[sq]; - } - - return rawState; + RawState rawState; + rawState.stm = getSideToMove(); + rawState.epSquare = getEpSquare(); + rawState.castlingRights = getCastlingRights(); + rawState.allPieceBB[WHITE] = allPieceBB[WHITE]; + rawState.allPieceBB[BLACK] = allPieceBB[BLACK]; + + for (int i = 0; i < 6; i++) { + rawState.pieceBB[i] = pieceBB[i]; + } + + for (Square sq = A1; sq < 64; sq += 1) { + rawState.board[sq] = board[sq]; + } + + return rawState; } Position::Position() { - clearPosition(); + clearPosition(); } Position::Position(const std::string &fen) { - loadPositionFromFen(fen); + loadPositionFromFen(fen); } \ No newline at end of file diff --git a/src/position.h b/src/position.h index 3f32d34..6dd4cf7 100644 --- a/src/position.h +++ b/src/position.h @@ -17,370 +17,420 @@ #ifndef BLACKCORE_POSITION_H #define BLACKCORE_POSITION_H -#include #include "bitboard.h" -#include "utils.h" #include "move.h" #include "nnue.h" +#include "utils.h" +#include extern U64 nodeCount; struct BoardState { - Color stm = COLOR_EMPTY; - Square epSquare = NULL_SQUARE; - unsigned char castlingRights = 0; - U64 hash = 0; + Color stm = COLOR_EMPTY; + Square epSquare = NULL_SQUARE; + unsigned char castlingRights = 0; + U64 hash = 0; - Piece capturedPiece = {}; + Piece capturedPiece = {}; - BoardState *lastIrreversibleMove = nullptr; + BoardState *lastIrreversibleMove = nullptr; - NNUE::Accumulator accumulator = {}; + NNUE::Accumulator accumulator = {}; - constexpr BoardState() = default; + constexpr BoardState() = default; }; struct RawState { - Piece board[64]; - Bitboard pieceBB[6] = {0}, allPieceBB[2] = {0}; - Color stm = COLOR_EMPTY; - Square epSquare = NULL_SQUARE; - unsigned char castlingRights = 0; + Piece board[64]; + Bitboard pieceBB[6] = {0}, allPieceBB[2] = {0}; + Color stm = COLOR_EMPTY; + Square epSquare = NULL_SQUARE; + unsigned char castlingRights = 0; }; struct StateStack { - BoardState stateStart[1000]; - BoardState *currState; - - StateStack() { - currState = stateStart; - currState->lastIrreversibleMove = currState; - } - - inline void push(BoardState newState) { - newState.lastIrreversibleMove = currState->lastIrreversibleMove; - newState.accumulator.loadAccumulator(currState->accumulator); - currState++; - *currState = newState; - } - - inline void pop() { - currState--; - } - - inline BoardState *top() const { return currState; } - - inline void clear() { - currState = stateStart; - *currState = {}; - } - - inline Ply getMove50() const { return currState - currState->lastIrreversibleMove; } - + BoardState stateStart[1000]; + BoardState *currState; + + StateStack() { + currState = stateStart; + currState->lastIrreversibleMove = currState; + } + + inline void push(BoardState newState) { + newState.lastIrreversibleMove = currState->lastIrreversibleMove; + newState.accumulator.loadAccumulator(currState->accumulator); + currState++; + *currState = newState; + } + + inline void pop() { + currState--; + } + + inline BoardState *top() const { + return currState; + } + + inline void clear() { + currState = stateStart; + *currState = {}; + } + + inline Ply getMove50() const { + return currState - currState->lastIrreversibleMove; + } }; #define state states.top() class Position { public: + constexpr Piece pieceAt(Square square) const { + return board[square]; + } - constexpr Piece pieceAt(Square square) const { return board[square]; } - - // This will be mostly used with constant color and type so this will result a nicer code - // pieces<{ROOK, WHITE}>() --> pieces() - template - constexpr Bitboard pieces() const { return pieceBB[type] & allPieceBB[color]; } + // This will be mostly used with constant color and type so this will result a nicer code + // pieces<{ROOK, WHITE}>() --> pieces() + template + constexpr Bitboard pieces() const { + return pieceBB[type] & allPieceBB[color]; + } - template - constexpr Bitboard pieces(PieceType type) const { return pieceBB[type] & allPieceBB[color]; } + template + constexpr Bitboard pieces(PieceType type) const { + return pieceBB[type] & allPieceBB[color]; + } - template - constexpr Bitboard pieces(Color color) const { return pieceBB[type] & allPieceBB[color]; } + template + constexpr Bitboard pieces(Color color) const { + return pieceBB[type] & allPieceBB[color]; + } - constexpr Bitboard pieces(Color color, PieceType type) const { return pieceBB[type] & allPieceBB[color]; } + constexpr Bitboard pieces(Color color, PieceType type) const { + return pieceBB[type] & allPieceBB[color]; + } - template - constexpr Bitboard pieces() const { return pieceBB[type]; } + template + constexpr Bitboard pieces() const { + return pieceBB[type]; + } - constexpr Bitboard pieces(PieceType type) const { return pieceBB[type]; } + constexpr Bitboard pieces(PieceType type) const { + return pieceBB[type]; + } - template - constexpr Bitboard friendly() const { return allPieceBB[color]; } + template + constexpr Bitboard friendly() const { + return allPieceBB[color]; + } - constexpr Bitboard friendly(Color color) const { return allPieceBB[color]; } + constexpr Bitboard friendly(Color color) const { + return allPieceBB[color]; + } - template - constexpr Bitboard enemy() const { return allPieceBB[EnemyColor()]; } + template + constexpr Bitboard enemy() const { + return allPieceBB[EnemyColor()]; + } - template - constexpr Bitboard enemyOrEmpty() const { return ~friendly(); } + template + constexpr Bitboard enemyOrEmpty() const { + return ~friendly(); + } - inline Bitboard occupied() const { return allPieceBB[WHITE] | allPieceBB[BLACK]; } + inline Bitboard occupied() const { + return allPieceBB[WHITE] | allPieceBB[BLACK]; + } - inline Bitboard empty() const { return ~occupied(); } + inline Bitboard empty() const { + return ~occupied(); + } - inline Color getSideToMove() const { return state->stm; } + inline Color getSideToMove() const { + return state->stm; + } - inline Square getEpSquare() const { return state->epSquare; } + inline Square getEpSquare() const { + return state->epSquare; + } - inline bool getCastleRight(unsigned char castleRight) const { return castleRight & state->castlingRights; } + inline bool getCastleRight(unsigned char castleRight) const { + return castleRight & state->castlingRights; + } - inline unsigned char getCastlingRights() const { return state->castlingRights; } + inline unsigned char getCastlingRights() const { + return state->castlingRights; + } - inline BoardState *getState() { return state; } + inline BoardState *getState() { + return state; + } - inline BoardState *getState() const { return state; } + inline BoardState *getState() const { + return state; + } - inline U64 getHash() const { return state->hash; } + inline U64 getHash() const { + return state->hash; + } - inline Ply getMove50() const { return states.getMove50(); } + inline Ply getMove50() const { + return states.getMove50(); + } - inline void makeMove(Move move); + inline void makeMove(Move move); - inline void undoMove(Move move); + inline void undoMove(Move move); - void makeNullMove(); + void makeNullMove(); - void undoNullMove(); + void undoNullMove(); - bool isRepetition(); + bool isRepetition(); - void display() const; + void display() const; - void displayEval(); + void displayEval(); - void loadPositionFromFen(const std::string &fen); + void loadPositionFromFen(const std::string &fen); - void loadPositionFromRawState(const RawState &rawState); + void loadPositionFromRawState(const RawState &rawState); - RawState getRawState(); + RawState getRawState(); - Position(); + Position(); - Position(const std::string &fen); + Position(const std::string &fen); private: + template + void clearSquare(Square square); - template - void clearSquare(Square square); - - template - void setSquare(Square square, Piece piece); + template + void setSquare(Square square, Piece piece); - template - void movePiece(Square from, Square to); + template + void movePiece(Square from, Square to); - inline void setCastleRight(unsigned char castleRight) { state->castlingRights |= castleRight; } + inline void setCastleRight(unsigned char castleRight) { + state->castlingRights |= castleRight; + } - inline void removeCastleRight(unsigned char castleRight) { state->castlingRights &= ~castleRight; } + inline void removeCastleRight(unsigned char castleRight) { + state->castlingRights &= ~castleRight; + } - void clearPosition(); + void clearPosition(); - template - void makeMove(Move move); + template + void makeMove(Move move); - template - void undoMove(Move move); + template + void undoMove(Move move); - Piece board[64]; + Piece board[64]; - Bitboard pieceBB[6], allPieceBB[2]; + Bitboard pieceBB[6], allPieceBB[2]; - StateStack states; + StateStack states; }; template void Position::clearSquare(Square square) { - if (pieceAt(square).isNull()) - return; + if (pieceAt(square).isNull()) + return; - Piece piece = pieceAt(square); + Piece piece = pieceAt(square); - pieceBB[piece.type].clear(square); - allPieceBB[piece.color].clear(square); + pieceBB[piece.type].clear(square); + allPieceBB[piece.color].clear(square); - board[square] = {}; + board[square] = {}; - state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; + state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; - if constexpr (updateAccumulator) { - state->accumulator.removeFeature(piece.color, piece.type, square); - } + if constexpr (updateAccumulator) { + state->accumulator.removeFeature(piece.color, piece.type, square); + } } template void Position::setSquare(Square square, Piece piece) { - if (!pieceAt(square).isNull()) { - Piece p = pieceAt(square); + if (!pieceAt(square).isNull()) { + Piece p = pieceAt(square); - pieceBB[p.type].clear(square); - allPieceBB[p.color].clear(square); + pieceBB[p.type].clear(square); + allPieceBB[p.color].clear(square); - state->hash ^= pieceRandTable[12 * square + 6 * p.color + p.type]; + state->hash ^= pieceRandTable[12 * square + 6 * p.color + p.type]; - if constexpr (updateAccumulator) { - state->accumulator.removeFeature(p.color, p.type, square); - } - } + if constexpr (updateAccumulator) { + state->accumulator.removeFeature(p.color, p.type, square); + } + } - pieceBB[piece.type].set(square); - allPieceBB[piece.color].set(square); - board[square] = piece; + pieceBB[piece.type].set(square); + allPieceBB[piece.color].set(square); + board[square] = piece; - state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; + state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; - if constexpr (updateAccumulator) { - state->accumulator.addFeature(piece.color, piece.type, square); - } + if constexpr (updateAccumulator) { + state->accumulator.addFeature(piece.color, piece.type, square); + } } template void Position::movePiece(Square from, Square to) { - setSquare(to, pieceAt(from)); - clearSquare(from); + setSquare(to, pieceAt(from)); + clearSquare(from); } template void Position::makeMove(Move move) { - nodeCount++; - - BoardState newState; - - constexpr Color enemyColor = EnemyColor(); - constexpr Direction UP = color == WHITE ? NORTH : -NORTH; - constexpr Direction DOWN = -UP; - - Square from = move.getFrom(); - Square to = move.getTo(); - - if (move.equalFlag(EP_CAPTURE)) { - newState.capturedPiece = {PAWN, enemyColor}; - } else { - newState.capturedPiece = pieceAt(to); - } - newState.castlingRights = state->castlingRights; - newState.stm = enemyColor; - newState.hash = state->hash ^ *blackRand; - - // Removing ep from hash - if (state->epSquare != NULL_SQUARE) { - newState.hash ^= epRandTable[squareToFile(state->epSquare)]; - } - - if (move.equalFlag(DOUBLE_PAWN_PUSH)) { - newState.epSquare = from + UP; - newState.hash ^= epRandTable[squareToFile(newState.epSquare)]; - } else { - newState.epSquare = NULL_SQUARE; - } - - states.push(newState); - - if (move.equalFlag(EP_CAPTURE)) { - clearSquare(to + DOWN); - } - - if (move.isCapture() || pieceAt(from).type == PAWN) { - state->lastIrreversibleMove = state; - } - - // Removing castling rights - state->hash ^= castlingRandTable[state->castlingRights]; - if (getCastleRight(WK_MASK) && (from == E1 || from == H1 || to == H1)) { - removeCastleRight(WK_MASK); - } - if (getCastleRight(WQ_MASK) && (from == E1 || from == A1 || to == A1)) { - removeCastleRight(WQ_MASK); - } - if (getCastleRight(BK_MASK) && (from == E8 || from == H8 || to == H8)) { - removeCastleRight(BK_MASK); - } - if (getCastleRight(BQ_MASK) && (from == E8 || from == A8 || to == A8)) { - removeCastleRight(BQ_MASK); - } - state->hash ^= castlingRandTable[state->castlingRights]; - - // Moving rook in case of a castle - if (move.equalFlag(KING_CASTLE)) { - if constexpr (color == WHITE) { - movePiece(H1, F1); - } else { - movePiece(H8, F8); - } - } else if (move.equalFlag(QUEEN_CASTLE)) { - if constexpr (color == WHITE) { - movePiece(A1, D1); - } else { - movePiece(A8, D8); - } - } - - movePiece(from, to); - - if (move.isFlag(PROMO_FLAG)) { - Piece piece = {PIECE_EMPTY, color}; - if (move.equalFlag(PROMO_KNIGHT) || move.equalFlag(PROMO_CAPTURE_KNIGHT)) { - piece.type = KNIGHT; - } else if (move.equalFlag(PROMO_BISHOP) || move.equalFlag(PROMO_CAPTURE_BISHOP)) { - piece.type = BISHOP; - } else if (move.equalFlag(PROMO_ROOK) || move.equalFlag(PROMO_CAPTURE_ROOK)) { - piece.type = ROOK; - } else if (move.equalFlag(PROMO_QUEEN) || move.equalFlag(PROMO_CAPTURE_QUEEN)) { - piece.type = QUEEN; - } - setSquare(to, piece); - } + nodeCount++; + + BoardState newState; + + constexpr Color enemyColor = EnemyColor(); + constexpr Direction UP = color == WHITE ? NORTH : -NORTH; + constexpr Direction DOWN = -UP; + + Square from = move.getFrom(); + Square to = move.getTo(); + + if (move.equalFlag(EP_CAPTURE)) { + newState.capturedPiece = {PAWN, enemyColor}; + } else { + newState.capturedPiece = pieceAt(to); + } + newState.castlingRights = state->castlingRights; + newState.stm = enemyColor; + newState.hash = state->hash ^ *blackRand; + + // Removing ep from hash + if (state->epSquare != NULL_SQUARE) { + newState.hash ^= epRandTable[squareToFile(state->epSquare)]; + } + + if (move.equalFlag(DOUBLE_PAWN_PUSH)) { + newState.epSquare = from + UP; + newState.hash ^= epRandTable[squareToFile(newState.epSquare)]; + } else { + newState.epSquare = NULL_SQUARE; + } + + states.push(newState); + + if (move.equalFlag(EP_CAPTURE)) { + clearSquare(to + DOWN); + } + + if (move.isCapture() || pieceAt(from).type == PAWN) { + state->lastIrreversibleMove = state; + } + + // Removing castling rights + state->hash ^= castlingRandTable[state->castlingRights]; + if (getCastleRight(WK_MASK) && (from == E1 || from == H1 || to == H1)) { + removeCastleRight(WK_MASK); + } + if (getCastleRight(WQ_MASK) && (from == E1 || from == A1 || to == A1)) { + removeCastleRight(WQ_MASK); + } + if (getCastleRight(BK_MASK) && (from == E8 || from == H8 || to == H8)) { + removeCastleRight(BK_MASK); + } + if (getCastleRight(BQ_MASK) && (from == E8 || from == A8 || to == A8)) { + removeCastleRight(BQ_MASK); + } + state->hash ^= castlingRandTable[state->castlingRights]; + + // Moving rook in case of a castle + if (move.equalFlag(KING_CASTLE)) { + if constexpr (color == WHITE) { + movePiece(H1, F1); + } else { + movePiece(H8, F8); + } + } else if (move.equalFlag(QUEEN_CASTLE)) { + if constexpr (color == WHITE) { + movePiece(A1, D1); + } else { + movePiece(A8, D8); + } + } + + movePiece(from, to); + + if (move.isFlag(PROMO_FLAG)) { + Piece piece = {PIECE_EMPTY, color}; + if (move.equalFlag(PROMO_KNIGHT) || move.equalFlag(PROMO_CAPTURE_KNIGHT)) { + piece.type = KNIGHT; + } else if (move.equalFlag(PROMO_BISHOP) || move.equalFlag(PROMO_CAPTURE_BISHOP)) { + piece.type = BISHOP; + } else if (move.equalFlag(PROMO_ROOK) || move.equalFlag(PROMO_CAPTURE_ROOK)) { + piece.type = ROOK; + } else if (move.equalFlag(PROMO_QUEEN) || move.equalFlag(PROMO_CAPTURE_QUEEN)) { + piece.type = QUEEN; + } + setSquare(to, piece); + } } template void Position::undoMove(Move move) { - constexpr Color enemyColor = EnemyColor(); - constexpr Direction UP = enemyColor == WHITE ? NORTH : -NORTH; - constexpr Direction DOWN = -UP; - - Square from = move.getFrom(); - Square to = move.getTo(); - - movePiece(to, from); - - - if (move.equalFlag(KING_CASTLE)) { - if constexpr (enemyColor == WHITE) { - movePiece(F1, H1); - } else { - movePiece(F8, H8); - } - } else if (move.equalFlag(QUEEN_CASTLE)) { - if constexpr (enemyColor == WHITE) { - movePiece(D1, A1); - } else { - movePiece(D8, A8); - } - } - - if (move.equalFlag(EP_CAPTURE)) - setSquare(to + DOWN, state->capturedPiece); - else if (move.isCapture()) - setSquare(to, state->capturedPiece); - - if (move.isPromo()) - setSquare(from, {PAWN, enemyColor}); - - states.pop(); + constexpr Color enemyColor = EnemyColor(); + constexpr Direction UP = enemyColor == WHITE ? NORTH : -NORTH; + constexpr Direction DOWN = -UP; + + Square from = move.getFrom(); + Square to = move.getTo(); + + movePiece(to, from); + + if (move.equalFlag(KING_CASTLE)) { + if constexpr (enemyColor == WHITE) { + movePiece(F1, H1); + } else { + movePiece(F8, H8); + } + } else if (move.equalFlag(QUEEN_CASTLE)) { + if constexpr (enemyColor == WHITE) { + movePiece(D1, A1); + } else { + movePiece(D8, A8); + } + } + + if (move.equalFlag(EP_CAPTURE)) + setSquare(to + DOWN, state->capturedPiece); + else if (move.isCapture()) + setSquare(to, state->capturedPiece); + + if (move.isPromo()) + setSquare(from, {PAWN, enemyColor}); + + states.pop(); } inline void Position::makeMove(Move move) { - if (getSideToMove() == WHITE) makeMove(move); - else makeMove(move); + if (getSideToMove() == WHITE) + makeMove(move); + else + makeMove(move); } inline void Position::undoMove(Move move) { - if (getSideToMove() == WHITE) undoMove(move); - else undoMove(move); + if (getSideToMove() == WHITE) + undoMove(move); + else + undoMove(move); } #undef state -#endif //BLACKCORE_POSITION_H +#endif//BLACKCORE_POSITION_H diff --git a/src/search.cpp b/src/search.cpp index d040cca..dfd9412 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -15,13 +15,13 @@ // along with this program. If not, see . #include "search.h" +#include "eval.h" #include "timeman.h" #include "tt.h" -#include "eval.h" #include "uci.h" -#include #include +#include #ifdef TUNE @@ -60,446 +60,461 @@ Move bestPV; Depth reductions[200][MAX_PLY + 1]; void initLmr() { - for (int moveIndex = 0; moveIndex < 200; moveIndex++) { - for (Depth depth = 0; depth < MAX_PLY; depth++) { + for (int moveIndex = 0; moveIndex < 200; moveIndex++) { + for (Depth depth = 0; depth < MAX_PLY; depth++) { - reductions[moveIndex][depth] = std::max(2, Depth( - LMR_BASE + (log((double) moveIndex) * log((double) depth) / LMR_SCALE))); - - } - } + reductions[moveIndex][depth] = std::max(2, Depth( + LMR_BASE + (log((double) moveIndex) * log((double) depth) / LMR_SCALE))); + } + } } Bitboard leastValuablePiece(const Position &pos, Bitboard attackers, Color stm, PieceType &type) { - for (PieceType t: PIECE_TYPES_BY_VALUE) { - Bitboard s = attackers & pos.pieces(stm, t); - if (s) { - type = t; - return s & -s.bb; - } - } - return 0; + for (PieceType t : PIECE_TYPES_BY_VALUE) { + Bitboard s = attackers & pos.pieces(stm, t); + if (s) { + type = t; + return s & -s.bb; + } + } + return 0; } Bitboard getAllAttackers(const Position &pos, Square square, Bitboard occ) { - return (((pawnMask(square, WHITE) | pawnMask(square, BLACK)) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces())) & occ; + return (((pawnMask(square, WHITE) | pawnMask(square, BLACK)) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces())) & + occ; } Score see(const Position &pos, Move move) { - Score e[32]; - Depth d = 0; - Square from = move.getFrom(); - Square to = move.getTo(); + Score e[32]; + Depth d = 0; + Square from = move.getFrom(); + Square to = move.getTo(); - e[0] = move.equalFlag(EP_CAPTURE) ? PIECE_VALUES[PAWN] : PIECE_VALUES[pos.pieceAt(to).type]; + e[0] = move.equalFlag(EP_CAPTURE) ? PIECE_VALUES[PAWN] : PIECE_VALUES[pos.pieceAt(to).type]; - Bitboard rooks = pos.pieces() | pos.pieces(); - Bitboard bishops = pos.pieces() | pos.pieces(); - Bitboard occ = pos.occupied() ^ Bitboard(to); - Bitboard attacker = from; - Bitboard attackers = getAllAttackers(pos, to, occ); + Bitboard rooks = pos.pieces() | pos.pieces(); + Bitboard bishops = pos.pieces() | pos.pieces(); + Bitboard occ = pos.occupied() ^ Bitboard(to); + Bitboard attacker = from; + Bitboard attackers = getAllAttackers(pos, to, occ); - Color stm = pos.pieceAt(to).color; - PieceType type = pos.pieceAt(from).type; + Color stm = pos.pieceAt(to).color; + PieceType type = pos.pieceAt(from).type; - do { - d++; - e[d] = PIECE_VALUES[type] - e[d - 1]; + do { + d++; + e[d] = PIECE_VALUES[type] - e[d - 1]; - if (std::max(-e[d - 1], e[d]) < 0) break; + if (std::max(-e[d - 1], e[d]) < 0) + break; - occ ^= attacker; - attackers ^= attacker; - if (type == ROOK || type == QUEEN) - attackers |= rookAttacks(to, occ) & rooks & occ; - if (type == PAWN || type == BISHOP || type == QUEEN) - attackers |= bishopAttacks(to, occ) & bishops & occ; - attacker = leastValuablePiece(pos, attackers, stm, type); - stm = EnemyColor(stm); + occ ^= attacker; + attackers ^= attacker; + if (type == ROOK || type == QUEEN) + attackers |= rookAttacks(to, occ) & rooks & occ; + if (type == PAWN || type == BISHOP || type == QUEEN) + attackers |= bishopAttacks(to, occ) & bishops & occ; + attacker = leastValuablePiece(pos, attackers, stm, type); + stm = EnemyColor(stm); - } while (attacker); + } while (attacker); - while (--d) { - e[d - 1] = -std::max(-e[d - 1], e[d]); - } + while (--d) { + e[d - 1] = -std::max(-e[d - 1], e[d]); + } - return e[0]; + return e[0]; } template Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { - constexpr bool pvNode = type != NON_PV_NODE; - constexpr bool nonPvNode = !pvNode; - - if (shouldEnd()) return UNKNOWN_SCORE; + constexpr bool pvNode = type != NON_PV_NODE; + constexpr bool nonPvNode = !pvNode; - if (ply > selectiveDepth) { - selectiveDepth = ply; - } + if (shouldEnd()) + return UNKNOWN_SCORE; - bool ttHit = false; - TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, 0, alpha, beta); - if (ttHit && nonPvNode && (ttEntry->flag == EXACT || - (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || - (ttEntry->flag == BETA && ttEntry->eval >= beta))) { - return ttEntry->eval; - } + if (ply > selectiveDepth) { + selectiveDepth = ply; + } - Score staticEval = eval(pos); + bool ttHit = false; + TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, 0, alpha, beta); + if (ttHit && nonPvNode && (ttEntry->flag == EXACT || (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || (ttEntry->flag == BETA && ttEntry->eval >= beta))) { + return ttEntry->eval; + } - if (ply >= MAX_PLY) { - return staticEval; - } + Score staticEval = eval(pos); - if (staticEval >= beta) { - return beta; - } + if (ply >= MAX_PLY) { + return staticEval; + } - if (staticEval > alpha) { - alpha = staticEval; - } + if (staticEval >= beta) { + return beta; + } - MoveList moves = {pos, ply, true}; - EntryFlag ttFlag = ALPHA; - Move bestMove; + if (staticEval > alpha) { + alpha = staticEval; + } - while (!moves.empty()) { + MoveList moves = {pos, ply, true}; + EntryFlag ttFlag = ALPHA; + Move bestMove; - Move m = moves.nextMove(); + while (!moves.empty()) { - // Delta pruning - if (m.isPromo() * PIECE_VALUES[QUEEN] + PIECE_VALUES[pos.pieceAt(m.getTo()).type] + - staticEval + DELTA_MARGIN < alpha) - continue; + Move m = moves.nextMove(); - // SEE pruning - if (alpha > -WORST_MATE && see(pos, m) < -SEE_MARGIN) - continue; + // Delta pruning + if (m.isPromo() * PIECE_VALUES[QUEEN] + PIECE_VALUES[pos.pieceAt(m.getTo()).type] + + staticEval + DELTA_MARGIN < + alpha) + continue; - pos.makeMove(m); + // SEE pruning + if (alpha > -WORST_MATE && see(pos, m) < -SEE_MARGIN) + continue; - Score score = -quiescence(pos, -beta, -alpha, ply + 1); + pos.makeMove(m); - pos.undoMove(m); + Score score = -quiescence(pos, -beta, -alpha, ply + 1); - if (shouldEnd()) return UNKNOWN_SCORE; + pos.undoMove(m); - if (score >= beta) { - ttSave(pos.getHash(), 0, score, BETA, m); - return beta; - } + if (shouldEnd()) + return UNKNOWN_SCORE; - if (score > alpha) { - alpha = score; - ttFlag = EXACT; - bestMove = m; - } + if (score >= beta) { + ttSave(pos.getHash(), 0, score, BETA, m); + return beta; + } - } + if (score > alpha) { + alpha = score; + ttFlag = EXACT; + bestMove = m; + } + } - ttSave(pos.getHash(), 0, alpha, ttFlag, bestMove); - return alpha; + ttSave(pos.getHash(), 0, alpha, ttFlag, bestMove); + return alpha; } template Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score beta, Ply ply) { - constexpr bool rootNode = type == ROOT_NODE; - constexpr bool pvNode = type != NON_PV_NODE; - constexpr bool notRootNode = !rootNode; - constexpr bool nonPvNode = !pvNode; - constexpr NodeType nextPv = rootNode ? PV_NODE : type; - - if (shouldEnd()) return UNKNOWN_SCORE; - - if (notRootNode && pos.getMove50() >= 3 && pos.isRepetition()) { - alpha = DRAW_VALUE; - if (alpha >= beta) return alpha; - } - - bool ttHit = false; - Score matePly = MATE_VALUE - ply; - TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, depth, alpha, beta); - - if (ttHit && nonPvNode && - ttEntry->depth >= depth && (ttEntry->flag == EXACT || - (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || - (ttEntry->flag == BETA && ttEntry->eval >= beta))) { - return ttEntry->eval; - } - - // Mate distance pruning - if (notRootNode) { - if (alpha < -matePly) alpha = -matePly; - if (beta > matePly - 1) beta = matePly - 1; - if (alpha >= beta) return alpha; - } - - if (ply >= MAX_PLY) { - return eval(pos); - } - - if (depth <= 0) return quiescence(pos, alpha, beta, ply); - - Color color = pos.getSideToMove(); - bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); - - Score staticEval = stack->eval = eval(pos); - - bool improving = ply >= 2 && staticEval >= (stack - 2)->eval; + constexpr bool rootNode = type == ROOT_NODE; + constexpr bool pvNode = type != NON_PV_NODE; + constexpr bool notRootNode = !rootNode; + constexpr bool nonPvNode = !pvNode; + constexpr NodeType nextPv = rootNode ? PV_NODE : type; + + if (shouldEnd()) + return UNKNOWN_SCORE; + + if (notRootNode && pos.getMove50() >= 3 && pos.isRepetition()) { + alpha = DRAW_VALUE; + if (alpha >= beta) + return alpha; + } + + bool ttHit = false; + Score matePly = MATE_VALUE - ply; + TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, depth, alpha, beta); + + if (ttHit && nonPvNode && + ttEntry->depth >= depth && (ttEntry->flag == EXACT || (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || (ttEntry->flag == BETA && ttEntry->eval >= beta))) { + return ttEntry->eval; + } + + // Mate distance pruning + if (notRootNode) { + if (alpha < -matePly) + alpha = -matePly; + if (beta > matePly - 1) + beta = matePly - 1; + if (alpha >= beta) + return alpha; + } + + if (ply >= MAX_PLY) { + return eval(pos); + } + + if (depth <= 0) + return quiescence(pos, alpha, beta, ply); + + Color color = pos.getSideToMove(); + bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); + + Score staticEval = stack->eval = eval(pos); - if (notRootNode && !inCheck) { + bool improving = ply >= 2 && staticEval >= (stack - 2)->eval; - // Razoring - if (depth == 1 && nonPvNode && staticEval + RAZOR_MARGIN < alpha) { - return quiescence(pos, alpha, beta, ply); - } + if (notRootNode && !inCheck) { - // Reverse futility pruning - if (depth <= RFP_DEPTH && - staticEval - RFP_DEPTH_MULTIPLIER * depth + RFP_IMPROVING_MULTIPLIER * improving >= beta && - std::abs(beta) < WORST_MATE) - return beta; + // Razoring + if (depth == 1 && nonPvNode && staticEval + RAZOR_MARGIN < alpha) { + return quiescence(pos, alpha, beta, ply); + } + + // Reverse futility pruning + if (depth <= RFP_DEPTH && + staticEval - RFP_DEPTH_MULTIPLIER * depth + RFP_IMPROVING_MULTIPLIER * improving >= beta && + std::abs(beta) < WORST_MATE) + return beta; - // Null move pruning - if (nonPvNode && !(stack - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { - // We don't want to make a null move in a Zugzwang position - if (pos.pieces(color) | pos.pieces(color) | pos.pieces(color) | - pos.pieces(color)) { + // Null move pruning + if (nonPvNode && !(stack - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { + // We don't want to make a null move in a Zugzwang position + if (pos.pieces(color) | pos.pieces(color) | pos.pieces(color) | + pos.pieces(color)) { - Depth R = NULL_MOVE_BASE_R + depth / NULL_MOVE_R_SCALE; + Depth R = NULL_MOVE_BASE_R + depth / NULL_MOVE_R_SCALE; - stack->move = Move(); - pos.makeNullMove(); - Score score = -search(pos, stack + 1, depth - R, -beta, -beta + 1, ply + 1); - pos.undoNullMove(); + stack->move = Move(); + pos.makeNullMove(); + Score score = -search(pos, stack + 1, depth - R, -beta, -beta + 1, ply + 1); + pos.undoNullMove(); - if (score >= beta) { - if (std::abs(score) > WORST_MATE) return beta; - return score; - } - } - } + if (score >= beta) { + if (std::abs(score) > WORST_MATE) + return beta; + return score; + } + } + } - // Internal iterative deepening - if (!ttHit && pvNode) depth--; - if (!ttHit && depth >= 5) depth--; + // Internal iterative deepening + if (!ttHit && pvNode) + depth--; + if (!ttHit && depth >= 5) + depth--; - if (depth <= 0) return quiescence(pos, alpha, beta, ply); - } + if (depth <= 0) + return quiescence(pos, alpha, beta, ply); + } - // Check extension - if (inCheck) - depth++; + // Check extension + if (inCheck) + depth++; - MoveList moves = {pos, ply, false}; - if (moves.count == 0) { - if (inCheck) { - return -matePly; - } else { - return DRAW_VALUE; - } - } + MoveList moves = {pos, ply, false}; + if (moves.count == 0) { + if (inCheck) { + return -matePly; + } else { + return DRAW_VALUE; + } + } - Move bestMove; - EntryFlag ttFlag = ALPHA; - int index = 0; + Move bestMove; + EntryFlag ttFlag = ALPHA; + int index = 0; - while (!moves.empty()) { + while (!moves.empty()) { - Move m = moves.nextMove(); - stack->move = m; + Move m = moves.nextMove(); + stack->move = m; - Score score; + Score score; - // We can prune the move in some cases - if (notRootNode && nonPvNode && !inCheck && alpha > -WORST_MATE) { + // We can prune the move in some cases + if (notRootNode && nonPvNode && !inCheck && alpha > -WORST_MATE) { - if (depth <= FUTILITY_DEPTH && m.isQuiet() && - staticEval + FUTILITY_MARGIN + FUTILITY_MARGIN_DEPTH * depth + FUTILITY_MARGIN_IMPROVING * improving < - alpha) - continue; + if (depth <= FUTILITY_DEPTH && m.isQuiet() && + staticEval + FUTILITY_MARGIN + FUTILITY_MARGIN_DEPTH * depth + FUTILITY_MARGIN_IMPROVING * improving < + alpha) + continue; - // Late move/movecount pruning - // This will also prune losing captures - if (depth <= LMP_DEPTH && index >= LMP_MOVES + depth * depth && m.isQuiet()) - break; - } + // Late move/movecount pruning + // This will also prune losing captures + if (depth <= LMP_DEPTH && index >= LMP_MOVES + depth * depth && m.isQuiet()) + break; + } - pos.makeMove(m); + pos.makeMove(m); - ttPrefetch(pos.getHash()); + ttPrefetch(pos.getHash()); - // Late move reduction - if (!inCheck && depth >= LMR_DEPTH && index >= LMR_INDEX && !m.isPromo() && - m.isQuiet()) { + // Late move reduction + if (!inCheck && depth >= LMR_DEPTH && index >= LMR_INDEX && !m.isPromo() && + m.isQuiet()) { - Depth R = reductions[index][depth]; + Depth R = reductions[index][depth]; - R += improving; - R -= pvNode; + R += improving; + R -= pvNode; - Depth newDepth = std::clamp(depth - R, 1, depth - 1); + Depth newDepth = std::clamp(depth - R, 1, depth - 1); - score = -search(pos, stack + 1, newDepth, - -alpha - 1, -alpha, ply + 1); + score = -search(pos, stack + 1, newDepth, + -alpha - 1, -alpha, ply + 1); - if (score > alpha && R > 1) { - score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); - } + if (score > alpha && R > 1) { + score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + } - } else if (nonPvNode || index != 0) { - score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); - } + } else if (nonPvNode || index != 0) { + score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + } - if (pvNode && (index == 0 || (score > alpha && score < beta))) { - score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); - } + if (pvNode && (index == 0 || (score > alpha && score < beta))) { + score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); + } - pos.undoMove(m); + pos.undoMove(m); - if (shouldEnd()) return UNKNOWN_SCORE; + if (shouldEnd()) + return UNKNOWN_SCORE; - if (score >= beta) { + if (score >= beta) { - if (m.isQuiet()) { - recordKillerMove(m, ply); - recordHHMove(m, color, depth); - } + if (m.isQuiet()) { + recordKillerMove(m, ply); + recordHHMove(m, color, depth); + } - ttSave(pos.getHash(), depth, beta, BETA, m); - return beta; - } + ttSave(pos.getHash(), depth, beta, BETA, m); + return beta; + } - if (score > alpha) { - alpha = score; - bestMove = m; - ttFlag = EXACT; - } + if (score > alpha) { + alpha = score; + bestMove = m; + ttFlag = EXACT; + } - index++; - } + index++; + } - ttSave(pos.getHash(), depth, alpha, ttFlag, bestMove); + ttSave(pos.getHash(), depth, alpha, ttFlag, bestMove); - return alpha; + return alpha; } std::string getPvLine(Position &pos) { - Move m = getHashMove(pos.getHash()); - if (!pos.isRepetition() && !m.isNull()) { - pos.makeMove(m); - std::string str = m.str() + " " + getPvLine(pos); - pos.undoMove(m); - return str; - } else { - return ""; - } + Move m = getHashMove(pos.getHash()); + if (!pos.isRepetition() && !m.isNull()) { + pos.makeMove(m); + std::string str = m.str() + " " + getPvLine(pos); + pos.undoMove(m); + return str; + } else { + return ""; + } } Score searchRoot(Position &pos, Score prevScore, Depth depth, bool uci) { - globalAge++; - clearTables(); - selectiveDepth = 0; - SearchStack stateStack[MAX_PLY + 1]; - Score alpha = -INF_SCORE; - Score beta = INF_SCORE; - - if (depth >= ASPIRATION_DEPTH) { - alpha = prevScore - ASPIRATION_DELTA; - beta = prevScore + ASPIRATION_DELTA; - } - - int iter = 1; - while (true) { - if (shouldEnd()) return UNKNOWN_SCORE; - - if (alpha < -ASPIRATION_BOUND) alpha = -INF_SCORE; - if (beta > ASPIRATION_BOUND) beta = INF_SCORE; - - Score score = search(pos, stateStack + 1, depth, alpha, beta, 0); - - if (score == UNKNOWN_SCORE) return UNKNOWN_SCORE; - - if (score <= alpha) { - alpha = std::max(alpha - iter * iter * ASPIRATION_DELTA, -INF_SCORE); - } else if (score >= beta) { - beta = std::min(beta + iter * iter * ASPIRATION_DELTA, INF_SCORE); - } else { - bestPV = getHashMove(pos.getHash()); - - std::string pvLine = getPvLine(pos); - if (uci) { - Score absScore = std::abs(score); - int mateDepth = MATE_VALUE - absScore; - std::string scoreStr = "cp " + std::to_string(score); - - if (mateDepth <= 64) { - int matePly; - // We are giving the mate - if (score > 0) { - matePly = mateDepth / 2 + 1; - - } else { - matePly = -(mateDepth / 2); - } - scoreStr = "mate " + std::to_string(matePly); - } - - out("info", "depth", depth, "seldepth", selectiveDepth, "nodes", nodeCount, "score", scoreStr, "time", - getSearchTime(), "nps", getNps(), "pv", pvLine); - } - - return score; - } - - iter++; - } + globalAge++; + clearTables(); + selectiveDepth = 0; + SearchStack stateStack[MAX_PLY + 1]; + Score alpha = -INF_SCORE; + Score beta = INF_SCORE; + + if (depth >= ASPIRATION_DEPTH) { + alpha = prevScore - ASPIRATION_DELTA; + beta = prevScore + ASPIRATION_DELTA; + } + + int iter = 1; + while (true) { + if (shouldEnd()) + return UNKNOWN_SCORE; + + if (alpha < -ASPIRATION_BOUND) + alpha = -INF_SCORE; + if (beta > ASPIRATION_BOUND) + beta = INF_SCORE; + + Score score = search(pos, stateStack + 1, depth, alpha, beta, 0); + + if (score == UNKNOWN_SCORE) + return UNKNOWN_SCORE; + + if (score <= alpha) { + alpha = std::max(alpha - iter * iter * ASPIRATION_DELTA, -INF_SCORE); + } else if (score >= beta) { + beta = std::min(beta + iter * iter * ASPIRATION_DELTA, INF_SCORE); + } else { + bestPV = getHashMove(pos.getHash()); + + std::string pvLine = getPvLine(pos); + if (uci) { + Score absScore = std::abs(score); + int mateDepth = MATE_VALUE - absScore; + std::string scoreStr = "cp " + std::to_string(score); + + if (mateDepth <= 64) { + int matePly; + // We are giving the mate + if (score > 0) { + matePly = mateDepth / 2 + 1; + + } else { + matePly = -(mateDepth / 2); + } + scoreStr = "mate " + std::to_string(matePly); + } + + out("info", "depth", depth, "seldepth", selectiveDepth, "nodes", nodeCount, "score", scoreStr, "time", + getSearchTime(), "nps", getNps(), "pv", pvLine); + } + + return score; + } + + iter++; + } } void iterativeDeepening(Position pos, Depth depth, bool uci) { - pos.getState()->accumulator.refresh(pos); + pos.getState()->accumulator.refresh(pos); - Score prevScore; - Move bestMove; + Score prevScore; + Move bestMove; - int stability = 0; + int stability = 0; - for (Depth currDepth = 1; currDepth <= depth; currDepth++) { - Score score = searchRoot(pos, prevScore, currDepth, uci); - if (score == UNKNOWN_SCORE) break; + for (Depth currDepth = 1; currDepth <= depth; currDepth++) { + Score score = searchRoot(pos, prevScore, currDepth, uci); + if (score == UNKNOWN_SCORE) + break; - // We only care about stability if we searched enough depth - if (currDepth >= 12) { - if (bestMove != bestPV) { - stability -= 6; - } else { - if (std::abs(prevScore - score) >= std::max(prevScore / 10, 50)) { - stability -= 4; - } else { - stability += 1; - } - } + // We only care about stability if we searched enough depth + if (currDepth >= 12) { + if (bestMove != bestPV) { + stability -= 6; + } else { + if (std::abs(prevScore - score) >= std::max(prevScore / 10, 50)) { + stability -= 4; + } else { + stability += 1; + } + } - allocateTime(stability); - } + allocateTime(stability); + } - prevScore = score; - bestMove = bestPV; - } + prevScore = score; + bestMove = bestPV; + } - if (uci) { - out("bestmove", bestMove); - } + if (uci) { + out("bestmove", bestMove); + } - searchStopped() = true; + searchStopped() = true; } #include @@ -507,21 +522,23 @@ void iterativeDeepening(Position pos, Depth depth, bool uci) { std::thread th; void joinThread(bool waitToFinish) { - if (!waitToFinish) stopSearch(); + if (!waitToFinish) + stopSearch(); - if (th.joinable()) th.join(); + if (th.joinable()) + th.join(); } void startSearch(SearchInfo &searchInfo, Position &pos, int threadCount) { - joinThread(false); + joinThread(false); - Color stm = pos.getSideToMove(); - if (stm == WHITE) { - initTimeMan(searchInfo.wtime, searchInfo.winc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); - } else { - initTimeMan(searchInfo.btime, searchInfo.binc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); - } + Color stm = pos.getSideToMove(); + if (stm == WHITE) { + initTimeMan(searchInfo.wtime, searchInfo.winc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); + } else { + initTimeMan(searchInfo.btime, searchInfo.binc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); + } - th = std::thread(iterativeDeepening, pos, searchInfo.maxDepth, searchInfo.uciMode); + th = std::thread(iterativeDeepening, pos, searchInfo.maxDepth, searchInfo.uciMode); } \ No newline at end of file diff --git a/src/search.h b/src/search.h index 7bdcb43..9aca0bb 100644 --- a/src/search.h +++ b/src/search.h @@ -17,9 +17,9 @@ #ifndef BLACKCORE_SEARCH_H #define BLACKCORE_SEARCH_H -#include #include "movegen.h" #include "uci.h" +#include #ifdef TUNE @@ -85,16 +85,16 @@ constexpr Score SEE_MARGIN = 2; #endif struct SearchStack { - Move move; - Score eval = 0; + Move move; + Score eval = 0; }; void initLmr(); inline void initSearch() { - initBitboard(); - initLmr(); - NNUE::init(); + initBitboard(); + initLmr(); + NNUE::init(); } Score see(const Position &pos, Move move); @@ -103,4 +103,4 @@ void joinThread(bool waitToFinish); void startSearch(SearchInfo &searchInfo, Position &pos, int threadCount); -#endif //BLACKCORE_SEARCH_H +#endif//BLACKCORE_SEARCH_H diff --git a/src/timeman.cpp b/src/timeman.cpp index d82e226..7bcf82d 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -28,65 +28,68 @@ bool stopping = true; bool stopped = true; U64 getTime() { - return std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count(); + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(); } void initTimeMan(U64 time, U64 inc, U64 movesToGo, U64 moveTime, U64 nodes) { - nodeCount = 0; + nodeCount = 0; - movesToGo = movesToGo == 0 ? 15 : movesToGo; + movesToGo = movesToGo == 0 ? 15 : movesToGo; - startedSearch = getTime(); - stabilityTime = 0; - stopping = false; - stopped = false; + startedSearch = getTime(); + stabilityTime = 0; + stopping = false; + stopped = false; - maxNodes = nodes; + maxNodes = nodes; - if (moveTime != 0) { - // We are limited how much can we search - shouldSearch = moveTime - MOVE_OVERHEAD; - maxSearch = moveTime - MOVE_OVERHEAD; - } else if (time == 0) { - // We have infinite time - shouldSearch = 0; - maxSearch = 0; - } else { + if (moveTime != 0) { + // We are limited how much can we search + shouldSearch = moveTime - MOVE_OVERHEAD; + maxSearch = moveTime - MOVE_OVERHEAD; + } else if (time == 0) { + // We have infinite time + shouldSearch = 0; + maxSearch = 0; + } else { - U64 panicTime = time / (movesToGo + 10) + 2 * inc; - stabilityTime = time / 500; + U64 panicTime = time / (movesToGo + 10) + 2 * inc; + stabilityTime = time / 500; - shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 1) + inc * 3 / 4 - MOVE_OVERHEAD); - maxSearch = std::min(time - MOVE_OVERHEAD, shouldSearch + panicTime); - } + shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 1) + inc * 3 / 4 - MOVE_OVERHEAD); + maxSearch = std::min(time - MOVE_OVERHEAD, shouldSearch + panicTime); + } - searchTime = shouldSearch; + searchTime = shouldSearch; } void stopSearch() { - stopping = true; + stopping = true; } -bool &searchStopped() { return stopped; } +bool &searchStopped() { + return stopped; +} void allocateTime(int stability) { - U64 newSearchTime = shouldSearch - stability * stabilityTime; - searchTime = std::min(maxSearch, newSearchTime); + U64 newSearchTime = shouldSearch - stability * stabilityTime; + searchTime = std::min(maxSearch, newSearchTime); } bool shouldEnd() { - if ((nodeCount & mask) == 0 && !stopping) { - stopping = (maxSearch != 0 && getSearchTime() >= searchTime) || (maxNodes != 0 && nodeCount > maxNodes); - } - return stopping; + if ((nodeCount & mask) == 0 && !stopping) { + stopping = (maxSearch != 0 && getSearchTime() >= searchTime) || (maxNodes != 0 && nodeCount > maxNodes); + } + return stopping; } U64 getSearchTime() { - return getTime() - startedSearch; + return getTime() - startedSearch; } U64 getNps() { - U64 millis = getSearchTime(); - return millis == 0 ? 0 : nodeCount * 1000 / millis; + U64 millis = getSearchTime(); + return millis == 0 ? 0 : nodeCount * 1000 / millis; } diff --git a/src/timeman.h b/src/timeman.h index d4439b4..ef6d339 100644 --- a/src/timeman.h +++ b/src/timeman.h @@ -35,4 +35,4 @@ U64 getSearchTime(); U64 getNps(); -#endif //BLACKCORE_TIMEMAN_H +#endif//BLACKCORE_TIMEMAN_H diff --git a/src/tt.cpp b/src/tt.cpp index dd0662d..c953de2 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -14,8 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#include #include "tt.h" +#include #ifdef __linux__ @@ -27,91 +27,92 @@ TTable tt; uint16_t globalAge = 0; TTBucket *getBucket(U64 hash) { - return tt.table + (hash & tt.mask); + return tt.table + (hash & tt.mask); } void ttClear() { - std::memset(tt.table, 0, tt.bucketCount * sizeof(TTBucket)); - globalAge = 0; + std::memset(tt.table, 0, tt.bucketCount * sizeof(TTBucket)); + globalAge = 0; } void ttFree() { - free(tt.table); + free(tt.table); } void ttResize(unsigned int MBSize) { - if (tt.bucketCount) - ttFree(); - - unsigned int i = 10; - while ((1ULL << i) <= MBSize * 1024 * 1024 / sizeof(TTBucket)) i++; + if (tt.bucketCount) + ttFree(); - tt.bucketCount = (1ULL << (i - 1)); - tt.mask = tt.bucketCount - 1ULL; + unsigned int i = 10; + while ((1ULL << i) <= MBSize * 1024 * 1024 / sizeof(TTBucket)) + i++; + tt.bucketCount = (1ULL << (i - 1)); + tt.mask = tt.bucketCount - 1ULL; #ifdef __linux__ - // Allocate memory with 1MB alignment - tt.table = static_cast(aligned_alloc((1ULL << 20), tt.bucketCount * sizeof(TTBucket))); + // Allocate memory with 1MB alignment + tt.table = static_cast(aligned_alloc((1ULL << 20), tt.bucketCount * sizeof(TTBucket))); - // For reference see https://man7.org/linux/man-pages/man2/madvise.2.html on MADV HUGEPAGE - madvise(tt.table, tt.bucketCount * sizeof(TTBucket), MADV_HUGEPAGE); + // For reference see https://man7.org/linux/man-pages/man2/madvise.2.html on MADV HUGEPAGE + madvise(tt.table, tt.bucketCount * sizeof(TTBucket), MADV_HUGEPAGE); #else - tt.table = (TTBucket*)malloc(tt.bucketCount * sizeof(TTBucket)); + tt.table = (TTBucket *) malloc(tt.bucketCount * sizeof(TTBucket)); #endif - ttClear(); - + ttClear(); } TTEntry *ttProbe(U64 hash, bool &ttHit, Depth depth, Score alpha, Score beta) { - TTBucket *bucket = getBucket(hash); - TTEntry *entry; - if (bucket->entryA.hash == hash) { - entry = &bucket->entryA; - entry->age = globalAge; - } else if (bucket->entryB.hash == hash) { - entry = &bucket->entryB; - } else { - return nullptr; - } - - if (std::abs(entry->eval) > MATE_VALUE - 100) return nullptr; - - ttHit = true; - return entry; + TTBucket *bucket = getBucket(hash); + TTEntry *entry; + if (bucket->entryA.hash == hash) { + entry = &bucket->entryA; + entry->age = globalAge; + } else if (bucket->entryB.hash == hash) { + entry = &bucket->entryB; + } else { + return nullptr; + } + + if (std::abs(entry->eval) > MATE_VALUE - 100) + return nullptr; + + ttHit = true; + return entry; } void ttSave(U64 hash, Depth depth, Score eval, EntryFlag flag, Move bestMove) { - TTBucket *bucket = getBucket(hash); - TTEntry *entry; - - if (bucket->entryA.hash == hash || bucket->entryA.depth * 2 / 3 <= depth || - globalAge - bucket->entryA.age >= 3) { - entry = &bucket->entryA; - } else { - entry = &bucket->entryB; - } - - if (entry->hash != hash || flag == EXACT || entry->depth * 2 / 3 <= depth) { - entry->hash = hash; - entry->depth = depth; - entry->eval = eval; - entry->flag = flag; - entry->hashMove = bestMove; - entry->age = globalAge; - } - + TTBucket *bucket = getBucket(hash); + TTEntry *entry; + + if (bucket->entryA.hash == hash || bucket->entryA.depth * 2 / 3 <= depth || + globalAge - bucket->entryA.age >= 3) { + entry = &bucket->entryA; + } else { + entry = &bucket->entryB; + } + + if (entry->hash != hash || flag == EXACT || entry->depth * 2 / 3 <= depth) { + entry->hash = hash; + entry->depth = depth; + entry->eval = eval; + entry->flag = flag; + entry->hashMove = bestMove; + entry->age = globalAge; + } } Move getHashMove(U64 hash) { - TTBucket *bucket = getBucket(hash); - if (bucket->entryA.hash == hash) return bucket->entryA.hashMove; - else if (bucket->entryB.hash == hash) return bucket->entryB.hashMove; - return {}; + TTBucket *bucket = getBucket(hash); + if (bucket->entryA.hash == hash) + return bucket->entryA.hashMove; + else if (bucket->entryB.hash == hash) + return bucket->entryB.hashMove; + return {}; } void ttPrefetch(U64 hash) { - __builtin_prefetch(&tt.table[hash & tt.mask], 0, 1); + __builtin_prefetch(&tt.table[hash & tt.mask], 0, 1); } \ No newline at end of file diff --git a/src/tt.h b/src/tt.h index 29106a1..694020d 100644 --- a/src/tt.h +++ b/src/tt.h @@ -23,28 +23,31 @@ extern uint16_t globalAge; enum EntryFlag : uint16_t { - NONE = 0, EXACT = 1, ALPHA = 2, BETA = 3 + NONE = 0, + EXACT = 1, + ALPHA = 2, + BETA = 3 }; -struct TTEntry { // Total: 21 bytes -> compiler makes it 24 - U64 hash; // 8 bytes - Depth depth; // 4 bytes - Score eval; // 4 bytes - Move hashMove; // 2 bytes - EntryFlag flag; // 1 bytes - uint16_t age; // 2 bytes +struct TTEntry { // Total: 21 bytes -> compiler makes it 24 + U64 hash; // 8 bytes + Depth depth; // 4 bytes + Score eval; // 4 bytes + Move hashMove; // 2 bytes + EntryFlag flag;// 1 bytes + uint16_t age; // 2 bytes }; -struct TTBucket { // 64 bytes - TTEntry entryA; // 24 bytes - TTEntry entryB; // 24 bytes - U64 _padding1, _padding2; // 16 bytes +struct TTBucket { // 64 bytes + TTEntry entryA; // 24 bytes + TTEntry entryB; // 24 bytes + U64 _padding1, _padding2;// 16 bytes }; struct TTable { - TTBucket *table; - unsigned int bucketCount; - U64 mask; + TTBucket *table; + unsigned int bucketCount; + U64 mask; }; void ttResize(unsigned int MBSize); @@ -61,4 +64,4 @@ Move getHashMove(U64 hash); void ttPrefetch(U64 hash); -#endif //BLACKCORE_TT_H +#endif//BLACKCORE_TT_H diff --git a/src/tuner.cpp b/src/tuner.cpp index 79f4e4c..6b798d0 100644 --- a/src/tuner.cpp +++ b/src/tuner.cpp @@ -14,264 +14,260 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#include -#include -#include #include "tuner.h" #include "eval.h" +#include +#include +#include double K = 0.2; double E(const std::vector &data) { - double error = 0; - - Position pos; - - for (const DataEntry &entry : data) { + double error = 0; - pos.loadPositionFromRawState(entry.pos); + Position pos; - auto score = double(eval(pos)); + for (const DataEntry &entry : data) { - double predicted = 1 / double(1 + pow(10, -K * score / 400)); + pos.loadPositionFromRawState(entry.pos); - error += (entry.result - predicted) * (entry.result - predicted); + auto score = double(eval(pos)); - } + double predicted = 1 / double(1 + pow(10, -K * score / 400)); - error /= double(data.size()); + error += (entry.result - predicted) * (entry.result - predicted); + } - return error; + error /= double(data.size()); + return error; } void saveResults(const unsigned int paramCnt, EvalParameter *evalParameters) { #ifdef TUNE_ - std::ofstream params("params.txt"); - - for (unsigned int i = 0; i < paramCnt; i++) { - params << "\nconstexpr Value " - << evalParameters[i].name << " = {" - << evalParameters[i].mgScore << ", " - << evalParameters[i].egScore << "};\n"; - } - - params << "\n"; - - for (unsigned int type = 0; type < 6; type++) { - params << "\nconstexpr Score " << typeToString(static_cast(type)) - << "MgPSQT[64] = {\n\t"; - for (Square sq = A1; sq < 64; sq += 1) { - params << std::setw(4) << PSQT[BLACK][type][sq].mg << ", "; - if (squareToFile(sq) == 7) { - params << "\n"; - if (squareToRank(sq) != 7) { - params << "\t"; - } - } - } - params << "};\n"; - - params << "\nconstexpr Score " << typeToString(static_cast(type)) - << "EgPSQT[64] = {\n\t"; - for (Square sq = A1; sq < 64; sq += 1) { - params << std::setw(4) << PSQT[BLACK][type][sq].eg << ", "; - if (squareToFile(sq) == 7) { - params << "\n"; - if (squareToRank(sq) != 7) { - params << "\t"; - } - } - - } - params << "};\n"; - } - - params.close(); + std::ofstream params("params.txt"); + + for (unsigned int i = 0; i < paramCnt; i++) { + params << "\nconstexpr Value " + << evalParameters[i].name << " = {" + << evalParameters[i].mgScore << ", " + << evalParameters[i].egScore << "};\n"; + } + + params << "\n"; + + for (unsigned int type = 0; type < 6; type++) { + params << "\nconstexpr Score " << typeToString(static_cast(type)) + << "MgPSQT[64] = {\n\t"; + for (Square sq = A1; sq < 64; sq += 1) { + params << std::setw(4) << PSQT[BLACK][type][sq].mg << ", "; + if (squareToFile(sq) == 7) { + params << "\n"; + if (squareToRank(sq) != 7) { + params << "\t"; + } + } + } + params << "};\n"; + + params << "\nconstexpr Score " << typeToString(static_cast(type)) + << "EgPSQT[64] = {\n\t"; + for (Square sq = A1; sq < 64; sq += 1) { + params << std::setw(4) << PSQT[BLACK][type][sq].eg << ", "; + if (squareToFile(sq) == 7) { + params << "\n"; + if (squareToRank(sq) != 7) { + params << "\t"; + } + } + } + params << "};\n"; + } + + params.close(); #endif } void tune(const std::string &inputFile) { #ifdef TUNE_ - std::vector trainingData; - std::cout << "Loading training data..." << std::endl; - std::ifstream f(inputFile); - std::string line; - Position position; - while (std::getline(f, line)) { - std::stringstream ss(line); - std::string fen; - int result; - std::getline(ss, fen, ';'); - ss >> result; - position.loadPositionFromFen(fen); - DataEntry entry = {position.getRawState(), result == 0 ? 0 : (result == 1 ? 1 : 0.5)}; - - trainingData.emplace_back(entry); - } - std::cout << trainingData.size() << " entry was loaded successfully!\nOptimizing K..." << std::endl; - - double bestK = 0; - double bestError = 2; - while (K <= 2) { - double newE = E(trainingData); - std::cout << "K = " << K << " E = " << newE << std::endl; - if (newE < bestError) { - bestError = newE; - bestK = K; - } - K += 0.1; - } - - K = bestK; - std::cout << "Best K = " << K << " with an error of " << bestError << std::endl; - - // Local optimize algorithms - bool improved = true; - double bestE = E(trainingData); - unsigned int iterationCount = 0; - - const unsigned int PSQTparamCnt = 768; - const unsigned int paramCnt = 0; - - EvalParameter params[paramCnt] = { - }; - - - while (improved) { - improved = false; - - // Tuning the PSQT table - - for (unsigned int idx = 0; idx < PSQTparamCnt; idx++) { - iterationCount++; - - unsigned int index = idx; - - auto pieceType = static_cast(int(index / 128)); - index %= 128; - - bool isMgScore = 1 - int(index / 64); - index %= 64; - - auto whiteSquare = static_cast(index); - - unsigned int rank = squareToRank(whiteSquare), file = squareToFile(whiteSquare); - auto blackSquare = Square((7 - rank) * 8 + file); - - - if (isMgScore) { - PSQT[WHITE][pieceType][whiteSquare].mg += 1; - PSQT[BLACK][pieceType][blackSquare].mg += 1; - } else { - PSQT[WHITE][pieceType][whiteSquare].eg += 1; - PSQT[BLACK][pieceType][blackSquare].eg += 1; - } - - double newE = E(trainingData); - int change = 0; - if (newE < bestE) { - bestE = newE; - improved = true; - change = 1; - } else { - - if (isMgScore) { - PSQT[WHITE][pieceType][whiteSquare].mg -= 2; - PSQT[BLACK][pieceType][blackSquare].mg -= 2; - } else { - PSQT[WHITE][pieceType][whiteSquare].eg -= 2; - PSQT[BLACK][pieceType][blackSquare].eg -= 2; - } - - - newE = E(trainingData); - if (newE < bestE) { - bestE = newE; - improved = true; - change = -1; - } else { - if (isMgScore) { - PSQT[WHITE][pieceType][whiteSquare].mg += 1; - PSQT[BLACK][pieceType][blackSquare].mg += 1; - } else { - PSQT[WHITE][pieceType][whiteSquare].eg += 1; - PSQT[BLACK][pieceType][blackSquare].eg += 1; - } - } - } - - std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " - << (int) pieceType << " " << formatSquare(whiteSquare) - << (isMgScore ? " midgame (" : " endgame (") << change << ")" << std::endl; - - if (iterationCount % 10 == 0) { - saveResults(paramCnt, params); - } - } - - // Tuning other eval params - for (auto ¶m : params) { - // Tuning the midgame part of the value - iterationCount++; - - param.mgScore += 1; - double newE = E(trainingData); - int change = 0; - - if (newE < bestE) { - bestE = newE; - improved = true; - change = 1; - } else { - param.mgScore -= 2; - newE = E(trainingData); - - if (newE < bestE) { - bestE = newE; - improved = true; - change = -1; - } else { - param.mgScore += 1; - } - } - - std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " - << param.name << " midgame (" << change << ")" << std::endl; - - - // Tuning the endgame part of the value - iterationCount++; - - param.egScore += 1; - newE = E(trainingData); - change = 0; - - if (newE < bestE) { - bestE = newE; - improved = true; - change = 1; - } else { - param.egScore -= 2; - newE = E(trainingData); - - if (newE < bestE) { - bestE = newE; - improved = true; - change = -1; - } else { - param.egScore += 1; - } - } - - std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " - << param.name << " endgame (" << change << ")" << std::endl; - - if (iterationCount % 10 == 0) { - saveResults(paramCnt, params); - } - } - } + std::vector trainingData; + std::cout << "Loading training data..." << std::endl; + std::ifstream f(inputFile); + std::string line; + Position position; + while (std::getline(f, line)) { + std::stringstream ss(line); + std::string fen; + int result; + std::getline(ss, fen, ';'); + ss >> result; + position.loadPositionFromFen(fen); + DataEntry entry = {position.getRawState(), result == 0 ? 0 : (result == 1 ? 1 : 0.5)}; + + trainingData.emplace_back(entry); + } + std::cout << trainingData.size() << " entry was loaded successfully!\nOptimizing K..." << std::endl; + + double bestK = 0; + double bestError = 2; + while (K <= 2) { + double newE = E(trainingData); + std::cout << "K = " << K << " E = " << newE << std::endl; + if (newE < bestError) { + bestError = newE; + bestK = K; + } + K += 0.1; + } + + K = bestK; + std::cout << "Best K = " << K << " with an error of " << bestError << std::endl; + + // Local optimize algorithms + bool improved = true; + double bestE = E(trainingData); + unsigned int iterationCount = 0; + + const unsigned int PSQTparamCnt = 768; + const unsigned int paramCnt = 0; + + EvalParameter params[paramCnt] = {}; + + + while (improved) { + improved = false; + + // Tuning the PSQT table + + for (unsigned int idx = 0; idx < PSQTparamCnt; idx++) { + iterationCount++; + + unsigned int index = idx; + + auto pieceType = static_cast(int(index / 128)); + index %= 128; + + bool isMgScore = 1 - int(index / 64); + index %= 64; + + auto whiteSquare = static_cast(index); + + unsigned int rank = squareToRank(whiteSquare), file = squareToFile(whiteSquare); + auto blackSquare = Square((7 - rank) * 8 + file); + + + if (isMgScore) { + PSQT[WHITE][pieceType][whiteSquare].mg += 1; + PSQT[BLACK][pieceType][blackSquare].mg += 1; + } else { + PSQT[WHITE][pieceType][whiteSquare].eg += 1; + PSQT[BLACK][pieceType][blackSquare].eg += 1; + } + + double newE = E(trainingData); + int change = 0; + if (newE < bestE) { + bestE = newE; + improved = true; + change = 1; + } else { + + if (isMgScore) { + PSQT[WHITE][pieceType][whiteSquare].mg -= 2; + PSQT[BLACK][pieceType][blackSquare].mg -= 2; + } else { + PSQT[WHITE][pieceType][whiteSquare].eg -= 2; + PSQT[BLACK][pieceType][blackSquare].eg -= 2; + } + + + newE = E(trainingData); + if (newE < bestE) { + bestE = newE; + improved = true; + change = -1; + } else { + if (isMgScore) { + PSQT[WHITE][pieceType][whiteSquare].mg += 1; + PSQT[BLACK][pieceType][blackSquare].mg += 1; + } else { + PSQT[WHITE][pieceType][whiteSquare].eg += 1; + PSQT[BLACK][pieceType][blackSquare].eg += 1; + } + } + } + + std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " + << (int) pieceType << " " << formatSquare(whiteSquare) + << (isMgScore ? " midgame (" : " endgame (") << change << ")" << std::endl; + + if (iterationCount % 10 == 0) { + saveResults(paramCnt, params); + } + } + + // Tuning other eval params + for (auto ¶m : params) { + // Tuning the midgame part of the value + iterationCount++; + + param.mgScore += 1; + double newE = E(trainingData); + int change = 0; + + if (newE < bestE) { + bestE = newE; + improved = true; + change = 1; + } else { + param.mgScore -= 2; + newE = E(trainingData); + + if (newE < bestE) { + bestE = newE; + improved = true; + change = -1; + } else { + param.mgScore += 1; + } + } + + std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " + << param.name << " midgame (" << change << ")" << std::endl; + + + // Tuning the endgame part of the value + iterationCount++; + + param.egScore += 1; + newE = E(trainingData); + change = 0; + + if (newE < bestE) { + bestE = newE; + improved = true; + change = 1; + } else { + param.egScore -= 2; + newE = E(trainingData); + + if (newE < bestE) { + bestE = newE; + improved = true; + change = -1; + } else { + param.egScore += 1; + } + } + + std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " + << param.name << " endgame (" << change << ")" << std::endl; + + if (iterationCount % 10 == 0) { + saveResults(paramCnt, params); + } + } + } #endif } diff --git a/src/tuner.h b/src/tuner.h index ec118c4..3003fd1 100644 --- a/src/tuner.h +++ b/src/tuner.h @@ -17,23 +17,23 @@ #ifndef BLACKCORE_TUNER_H #define BLACKCORE_TUNER_H -#include -#include +#include "position.h" #include #include -#include "position.h" +#include +#include struct DataEntry { - RawState pos; - double result; + RawState pos; + double result; }; struct EvalParameter { - const std::string name; - Score &mgScore; - Score &egScore; + const std::string name; + Score &mgScore; + Score &egScore; }; void tune(const std::string &inputFile); -#endif //BLACKCORE_TUNER_H +#endif//BLACKCORE_TUNER_H diff --git a/src/uci.cpp b/src/uci.cpp index d85b788..2f88df0 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -14,256 +14,256 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#include -#include #include "uci.h" +#include "bench.h" #include "eval.h" -#include "tt.h" +#include "position.h" #include "search.h" #include "timeman.h" -#include "position.h" -#include "bench.h" +#include "tt.h" +#include +#include Move stringToMove(const Position &pos, const std::string &s) { - Square from = stringToSquare(s.substr(0, 2)); - Square to = stringToSquare(s.substr(2, 2)); - Piece piece = pos.pieceAt(from); - Piece capturedPiece = pos.pieceAt(to); - unsigned int flags = QUIET_MOVE; - if (!capturedPiece.isNull()) - flags = CAPTURE_FLAG; + Square from = stringToSquare(s.substr(0, 2)); + Square to = stringToSquare(s.substr(2, 2)); + Piece piece = pos.pieceAt(from); + Piece capturedPiece = pos.pieceAt(to); + unsigned int flags = QUIET_MOVE; + if (!capturedPiece.isNull()) + flags = CAPTURE_FLAG; - if (s.size() == 5) { - PieceType type = charToPiece(s[4]).type; - switch (type) { - case QUEEN: - return {from, to, flags | PROMO_QUEEN}; - case ROOK: - return {from, to, flags | PROMO_ROOK}; - case BISHOP: - return {from, to, flags | PROMO_BISHOP}; - case KNIGHT: - return {from, to, flags | PROMO_KNIGHT}; - default: - out("Invalid move!"); - return {}; - } - } + if (s.size() == 5) { + PieceType type = charToPiece(s[4]).type; + switch (type) { + case QUEEN: + return {from, to, flags | PROMO_QUEEN}; + case ROOK: + return {from, to, flags | PROMO_ROOK}; + case BISHOP: + return {from, to, flags | PROMO_BISHOP}; + case KNIGHT: + return {from, to, flags | PROMO_KNIGHT}; + default: + out("Invalid move!"); + return {}; + } + } - if (piece.type == PAWN && pos.getEpSquare() == to) { - flags = EP_CAPTURE; - } else if (piece.type == PAWN && std::abs((long) squareToRank(from) - (long) squareToRank(to)) == 2) { - flags = DOUBLE_PAWN_PUSH; - } else if (piece.type == KING && squareToFile(from) == 4) { - if (squareToFile(to) == 6) { - flags = KING_CASTLE; - } else if (squareToFile(to) == 2) { - flags = QUEEN_CASTLE; - } - } + if (piece.type == PAWN && pos.getEpSquare() == to) { + flags = EP_CAPTURE; + } else if (piece.type == PAWN && std::abs((long) squareToRank(from) - (long) squareToRank(to)) == 2) { + flags = DOUBLE_PAWN_PUSH; + } else if (piece.type == KING && squareToFile(from) == 4) { + if (squareToFile(to) == 6) { + flags = KING_CASTLE; + } else if (squareToFile(to) == 2) { + flags = QUEEN_CASTLE; + } + } - return {from, to, flags}; + return {from, to, flags}; } void uciLoop() { - // Identifying ourselves + // Identifying ourselves #ifdef VERSION - out("id", "name", "BlackCore", VERSION); + out("id", "name", "BlackCore", VERSION); #else - out("id", "name", "BlackCore"); + out("id", "name", "BlackCore"); #endif - out("id", "author", "SzilBalazs"); + out("id", "author", "SzilBalazs"); - // We tell the GUI what options we have - out("option", "name", "Hash", "type", "spin", "default", 32, "min", 1, "max", 4096); - out("option", "name", "Threads", "type", "spin", "default", 1, "min", 1, "max", 1); - out("option", "name", "Ponder", "type", "check", "default", "false"); - out("option", "name", "Move Overhead", "type", "spin", "default", 10, "min", 0, "max", 10000); + // We tell the GUI what options we have + out("option", "name", "Hash", "type", "spin", "default", 32, "min", 1, "max", 4096); + out("option", "name", "Threads", "type", "spin", "default", 1, "min", 1, "max", 1); + out("option", "name", "Ponder", "type", "check", "default", "false"); + out("option", "name", "Move Overhead", "type", "spin", "default", 10, "min", 0, "max", 10000); #ifdef TUNE - tuneOut("DELTA_MARGIN", 400, 200, 500); - tuneOut("RAZOR_MARGIN", 130, 50, 200); - tuneOut("RFP_DEPTH", 5, 3, 10); - tuneOut("RFP_DEPTH_MULTIPLIER", 70, 30, 200); - tuneOut("RFP_IMPROVING_MULTIPLIER", 80, 30, 200); - tuneOut("NULL_MOVE_DEPTH", 3, 1, 6); - tuneOut("NULL_MOVE_BASE_R", 4, 2, 6); - tuneOut("NULL_MOVE_R_SCALE", 5, 2, 10); - tuneOut("LMR_DEPTH", 4, 2, 10); - tuneOut("LMR_INDEX", 3, 1, 10); - tuneOut("LMP_DEPTH", 4, 1, 10); - tuneOut("LMP_MOVES", 5, 1, 10); - tuneOut("ASPIRATION_DEPTH", 9, 5, 20); - tuneOut("ASPIRATION_DELTA", 30, 10, 100); - tuneOut("SEE_MARGIN", 0, 0, 200); - tuneOut("PAWN_VALUE", 150, 100, 200); - tuneOut("KNIGHT_VALUE", 750, 300, 1000); - tuneOut("BISHOP_VALUE", 850, 300, 1000); - tuneOut("ROOK_VALUE", 800, 300, 1000); - tuneOut("QUEEN_VALUE", 1000, 500, 1500); - tuneOut("LMR_BASE", 10, 1, 30); - tuneOut("LMR_SCALE", 17, 10, 40); + tuneOut("DELTA_MARGIN", 400, 200, 500); + tuneOut("RAZOR_MARGIN", 130, 50, 200); + tuneOut("RFP_DEPTH", 5, 3, 10); + tuneOut("RFP_DEPTH_MULTIPLIER", 70, 30, 200); + tuneOut("RFP_IMPROVING_MULTIPLIER", 80, 30, 200); + tuneOut("NULL_MOVE_DEPTH", 3, 1, 6); + tuneOut("NULL_MOVE_BASE_R", 4, 2, 6); + tuneOut("NULL_MOVE_R_SCALE", 5, 2, 10); + tuneOut("LMR_DEPTH", 4, 2, 10); + tuneOut("LMR_INDEX", 3, 1, 10); + tuneOut("LMP_DEPTH", 4, 1, 10); + tuneOut("LMP_MOVES", 5, 1, 10); + tuneOut("ASPIRATION_DEPTH", 9, 5, 20); + tuneOut("ASPIRATION_DELTA", 30, 10, 100); + tuneOut("SEE_MARGIN", 0, 0, 200); + tuneOut("PAWN_VALUE", 150, 100, 200); + tuneOut("KNIGHT_VALUE", 750, 300, 1000); + tuneOut("BISHOP_VALUE", 850, 300, 1000); + tuneOut("ROOK_VALUE", 800, 300, 1000); + tuneOut("QUEEN_VALUE", 1000, 500, 1500); + tuneOut("LMR_BASE", 10, 1, 30); + tuneOut("LMR_SCALE", 17, 10, 40); #endif - ttResize(32); + ttResize(32); - // We have sent all the parameters - out("uciok"); + // We have sent all the parameters + out("uciok"); - // Only now we initialize stuff - initSearch(); + // Only now we initialize stuff + initSearch(); - Position pos = {STARTING_FEN}; - int threadCount = 1; + Position pos = {STARTING_FEN}; + int threadCount = 1; - while (true) { - std::string line, command, token; - std::getline(std::cin, line); + while (true) { + std::string line, command, token; + std::getline(std::cin, line); - std::stringstream ss(line); + std::stringstream ss(line); - std::getline(ss, command, ' '); + std::getline(ss, command, ' '); - std::vector tokens; - while (std::getline(ss, token, ' ')) { - tokens.emplace_back(token); - } + std::vector tokens; + while (std::getline(ss, token, ' ')) { + tokens.emplace_back(token); + } - if (command == "isready") { - out("readyok"); - } else if (command == "quit") { - joinThread(false); - break; - } else if (command == "stop") { - joinThread(false); - } else if (command == "ucinewgame") { - ttClear(); - } else if (command == "setoption") { - if (tokens.size() >= 4) { - if (tokens[1] == "Hash") { - ttResize(std::stoi(tokens[3])); - } else if (tokens[1] == "Move" && tokens[2] == "Overhead") { - MOVE_OVERHEAD = std::stoi(tokens[4]); - } else if (tokens[1] == "Ponder") { + if (command == "isready") { + out("readyok"); + } else if (command == "quit") { + joinThread(false); + break; + } else if (command == "stop") { + joinThread(false); + } else if (command == "ucinewgame") { + ttClear(); + } else if (command == "setoption") { + if (tokens.size() >= 4) { + if (tokens[1] == "Hash") { + ttResize(std::stoi(tokens[3])); + } else if (tokens[1] == "Move" && tokens[2] == "Overhead") { + MOVE_OVERHEAD = std::stoi(tokens[4]); + } else if (tokens[1] == "Ponder") { - } else { + } else { #ifdef TUNE - if (tokens[1] == "DELTA_MARGIN") { - DELTA_MARGIN = std::stoi(tokens[3]); - } else if (tokens[1] == "RAZOR_MARGIN") { - RAZOR_MARGIN = std::stoi(tokens[3]); - } else if (tokens[1] == "RFP_DEPTH") { - RFP_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "RFP_DEPTH_MULTIPLIER") { - RFP_DEPTH_MULTIPLIER = std::stoi(tokens[3]); - } else if (tokens[1] == "RFP_IMPROVING_MULTIPLIER") { - RFP_IMPROVING_MULTIPLIER = std::stoi(tokens[3]); - } else if (tokens[1] == "NULL_MOVE_DEPTH") { - NULL_MOVE_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "NULL_MOVE_BASE_R") { - NULL_MOVE_BASE_R = std::stoi(tokens[3]); - } else if (tokens[1] == "NULL_MOVE_R_SCALE") { - NULL_MOVE_R_SCALE = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_DEPTH") { - LMR_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_INDEX") { - LMR_INDEX = std::stoi(tokens[3]); - } else if (tokens[1] == "LMP_DEPTH") { - LMP_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "LMP_MOVES") { - LMP_MOVES = std::stoi(tokens[3]); - } else if (tokens[1] == "ASPIRATION_DEPTH") { - ASPIRATION_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "ASPIRATION_DELTA") { - ASPIRATION_DELTA = std::stoi(tokens[3]); - } else if (tokens[1] == "SEE_MARGIN") { - SEE_MARGIN = std::stoi(tokens[3]); - } else if (tokens[1] == "PAWN_VALUE") { - PIECE_VALUES[PAWN] = std::stoi(tokens[3]); - } else if (tokens[1] == "KNIGHT_VALUE") { - PIECE_VALUES[KNIGHT] = std::stoi(tokens[3]); - } else if (tokens[1] == "BISHOP_VALUE") { - PIECE_VALUES[BISHOP] = std::stoi(tokens[3]); - } else if (tokens[1] == "ROOK_VALUE") { - PIECE_VALUES[ROOK] = std::stoi(tokens[3]); - } else if (tokens[1] == "QUEEN_VALUE") { - PIECE_VALUES[QUEEN] = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_BASE") { - LMR_BASE = double(std::stoi(tokens[3])) / 10; - } else if (tokens[1] == "LMR_SCALE") { - LMR_SCALE = double(std::stoi(tokens[3])) / 10; - } + if (tokens[1] == "DELTA_MARGIN") { + DELTA_MARGIN = std::stoi(tokens[3]); + } else if (tokens[1] == "RAZOR_MARGIN") { + RAZOR_MARGIN = std::stoi(tokens[3]); + } else if (tokens[1] == "RFP_DEPTH") { + RFP_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "RFP_DEPTH_MULTIPLIER") { + RFP_DEPTH_MULTIPLIER = std::stoi(tokens[3]); + } else if (tokens[1] == "RFP_IMPROVING_MULTIPLIER") { + RFP_IMPROVING_MULTIPLIER = std::stoi(tokens[3]); + } else if (tokens[1] == "NULL_MOVE_DEPTH") { + NULL_MOVE_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "NULL_MOVE_BASE_R") { + NULL_MOVE_BASE_R = std::stoi(tokens[3]); + } else if (tokens[1] == "NULL_MOVE_R_SCALE") { + NULL_MOVE_R_SCALE = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_DEPTH") { + LMR_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_INDEX") { + LMR_INDEX = std::stoi(tokens[3]); + } else if (tokens[1] == "LMP_DEPTH") { + LMP_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "LMP_MOVES") { + LMP_MOVES = std::stoi(tokens[3]); + } else if (tokens[1] == "ASPIRATION_DEPTH") { + ASPIRATION_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "ASPIRATION_DELTA") { + ASPIRATION_DELTA = std::stoi(tokens[3]); + } else if (tokens[1] == "SEE_MARGIN") { + SEE_MARGIN = std::stoi(tokens[3]); + } else if (tokens[1] == "PAWN_VALUE") { + PIECE_VALUES[PAWN] = std::stoi(tokens[3]); + } else if (tokens[1] == "KNIGHT_VALUE") { + PIECE_VALUES[KNIGHT] = std::stoi(tokens[3]); + } else if (tokens[1] == "BISHOP_VALUE") { + PIECE_VALUES[BISHOP] = std::stoi(tokens[3]); + } else if (tokens[1] == "ROOK_VALUE") { + PIECE_VALUES[ROOK] = std::stoi(tokens[3]); + } else if (tokens[1] == "QUEEN_VALUE") { + PIECE_VALUES[QUEEN] = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_BASE") { + LMR_BASE = double(std::stoi(tokens[3])) / 10; + } else if (tokens[1] == "LMR_SCALE") { + LMR_SCALE = double(std::stoi(tokens[3])) / 10; + } #endif - } - } - } else if (command == "position" || command == "pos") { - - if (tokens[0] == "fen") { - std::string fen; - for (unsigned int i = 1; i < tokens.size() && tokens[i] != "moves"; i++) { - fen += tokens[i] + ' '; - } - pos.loadPositionFromFen(fen); - } else if (tokens[0] == "startpos") { - pos.loadPositionFromFen(STARTING_FEN); - } + } + } + } else if (command == "position" || command == "pos") { - if (line.find("moves") != std::string::npos) { - unsigned int i = 0; - bool move = false; - while (i < tokens.size()) { - if (tokens[i] == "moves") move = true; - else if (move) { - pos.makeMove(stringToMove(pos, tokens[i])); - } - i++; - } - } + if (tokens[0] == "fen") { + std::string fen; + for (unsigned int i = 1; i < tokens.size() && tokens[i] != "moves"; i++) { + fen += tokens[i] + ' '; + } + pos.loadPositionFromFen(fen); + } else if (tokens[0] == "startpos") { + pos.loadPositionFromFen(STARTING_FEN); + } - pos.getState()->accumulator.refresh(pos); + if (line.find("moves") != std::string::npos) { + unsigned int i = 0; + bool move = false; + while (i < tokens.size()) { + if (tokens[i] == "moves") + move = true; + else if (move) { + pos.makeMove(stringToMove(pos, tokens[i])); + } + i++; + } + } - } else if (command == "go") { + pos.getState()->accumulator.refresh(pos); - SearchInfo searchInfo; + } else if (command == "go") { - for (unsigned int i = 0; i < tokens.size(); i += 2) { - if (tokens[i] == "wtime") { - searchInfo.wtime = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "btime") { - searchInfo.btime = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "winc") { - searchInfo.winc = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "binc") { - searchInfo.binc = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "movestogo") { - searchInfo.movestogo = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "depth") { - searchInfo.maxDepth = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "movetime") { - searchInfo.movetime = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "nodes") { - searchInfo.maxNodes = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "infinite") { + SearchInfo searchInfo; - } - } + for (unsigned int i = 0; i < tokens.size(); i += 2) { + if (tokens[i] == "wtime") { + searchInfo.wtime = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "btime") { + searchInfo.btime = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "winc") { + searchInfo.winc = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "binc") { + searchInfo.binc = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "movestogo") { + searchInfo.movestogo = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "depth") { + searchInfo.maxDepth = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "movetime") { + searchInfo.movetime = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "nodes") { + searchInfo.maxNodes = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "infinite") { + } + } - startSearch(searchInfo, pos, threadCount); + startSearch(searchInfo, pos, threadCount); - } else if (command == "d" || command == "display") { - pos.display(); - } else if (command == "e" || command == "eval") { - pos.displayEval(); - } else if (command == "moves") { - Move moves[200]; - Move *movesEnd = generateMoves(pos, moves, false); - for (Move *it = moves; it != movesEnd; it++) { - out(*it); - } - } else if (command == "perft") { - out("Total nodes:", perft(pos, std::stoi(tokens[0]))); - } - } - ttFree(); + } else if (command == "d" || command == "display") { + pos.display(); + } else if (command == "e" || command == "eval") { + pos.displayEval(); + } else if (command == "moves") { + Move moves[200]; + Move *movesEnd = generateMoves(pos, moves, false); + for (Move *it = moves; it != movesEnd; it++) { + out(*it); + } + } else if (command == "perft") { + out("Total nodes:", perft(pos, std::stoi(tokens[0]))); + } + } + ttFree(); } \ No newline at end of file diff --git a/src/uci.h b/src/uci.h index 4309627..4adecbb 100644 --- a/src/uci.h +++ b/src/uci.h @@ -17,39 +17,39 @@ #ifndef BLACKCORE_UCI_H #define BLACKCORE_UCI_H -#include #include "constants.h" +#include struct SearchInfo { - U64 wtime = 0, btime = 0, winc = 0, binc = 0, movestogo = 0, movetime = 0, maxNodes = 0; - Depth maxDepth = MAX_PLY; - bool uciMode = true; + U64 wtime = 0, btime = 0, winc = 0, binc = 0, movestogo = 0, movetime = 0, maxNodes = 0; + Depth maxDepth = MAX_PLY; + bool uciMode = true; }; namespace BlackCore { - inline void _out() { - std::cout << std::endl; - } - - template - inline void _out(T a, Args... args) { - std::cout << " " << a; - _out(args...); - } -} + inline void _out() { + std::cout << std::endl; + } + + template + inline void _out(T a, Args... args) { + std::cout << " " << a; + _out(args...); + } +}// namespace BlackCore template inline void out(T a, Args... args) { - std::cout << a; - BlackCore::_out(args...); + std::cout << a; + BlackCore::_out(args...); } inline void tuneOut(const std::string &name, int value, int min, int max) { - out("option", "name", name, "type", "spin", "default", value, "min", min, "max", max); + out("option", "name", name, "type", "spin", "default", value, "min", min, "max", max); - // std::cout << "else if (tokens[1] == \"" << name << "\") {\n" << name << " = std::stoi(tokens[3]);\n}"; + // std::cout << "else if (tokens[1] == \"" << name << "\") {\n" << name << " = std::stoi(tokens[3]);\n}"; } void uciLoop(); -#endif //BLACKCORE_UCI_H +#endif//BLACKCORE_UCI_H diff --git a/src/utils.cpp b/src/utils.cpp index bc5ca08..cc6c223 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -14,115 +14,117 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +#include "utils.h" #include #include -#include "utils.h" std::string formatSquare(Square square) { - return std::string() + (char) ('a' + (char) square % 8) + (char) ('1' + (char) (square / 8)); + return std::string() + (char) ('a' + (char) square % 8) + (char) ('1' + (char) (square / 8)); } char pieceToChar(Piece piece) { - char base; - switch (piece.type) { - case PAWN: - base = 'p'; - break; - case ROOK: - base = 'r'; - break; - case KNIGHT: - base = 'n'; - break; - case BISHOP: - base = 'b'; - break; - case QUEEN: - base = 'q'; - break; - case KING: - base = 'k'; - break; - default: - base = ' '; - } - if (base != ' ' && piece.color == WHITE) base -= 32; - return base; + char base; + switch (piece.type) { + case PAWN: + base = 'p'; + break; + case ROOK: + base = 'r'; + break; + case KNIGHT: + base = 'n'; + break; + case BISHOP: + base = 'b'; + break; + case QUEEN: + base = 'q'; + break; + case KING: + base = 'k'; + break; + default: + base = ' '; + } + if (base != ' ' && piece.color == WHITE) + base -= 32; + return base; } std::string typeToString(PieceType type) { - switch (type) { - case KING: - return "king"; - case PAWN: - return "pawn"; - case KNIGHT: - return "knight"; - case BISHOP: - return "bishop"; - case ROOK: - return "rook"; - case QUEEN: - return "queen"; - default: - return "empty"; - } + switch (type) { + case KING: + return "king"; + case PAWN: + return "pawn"; + case KNIGHT: + return "knight"; + case BISHOP: + return "bishop"; + case ROOK: + return "rook"; + case QUEEN: + return "queen"; + default: + return "empty"; + } } Piece charToPiece(char c) { - Piece piece; + Piece piece; - if ('a' <= c && c <= 'z') { - piece.color = BLACK; - } else if ('A' <= c && c <= 'Z') { - piece.color = WHITE; - c += 32; - } + if ('a' <= c && c <= 'z') { + piece.color = BLACK; + } else if ('A' <= c && c <= 'Z') { + piece.color = WHITE; + c += 32; + } - switch (c) { - case 'p': - piece.type = PAWN; - break; - case 'r': - piece.type = ROOK; - break; - case 'n': - piece.type = KNIGHT; - break; - case 'b': - piece.type = BISHOP; - break; - case 'q': - piece.type = QUEEN; - break; - case 'k': - piece.type = KING; - break; - } - return piece; + switch (c) { + case 'p': + piece.type = PAWN; + break; + case 'r': + piece.type = ROOK; + break; + case 'n': + piece.type = KNIGHT; + break; + case 'b': + piece.type = BISHOP; + break; + case 'q': + piece.type = QUEEN; + break; + case 'k': + piece.type = KING; + break; + } + return piece; } void displayBB(Bitboard b) { - std::cout << " A B C D E F G H \n"; - for (int i = 8; i >= 1; i--) { - std::cout << " +---+---+---+---+---+---+---+---+\n"; - std::cout << i << " |"; - for (int j = 1; j <= 8; j++) { - std::cout << " " << b.get(Square((i - 1) * 8 + (j - 1))) << " |"; - } - std::cout << "\n"; - } - std::cout << " +---+---+---+---+---+---+---+---+\n\n" << std::endl; + std::cout << " A B C D E F G H \n"; + for (int i = 8; i >= 1; i--) { + std::cout << " +---+---+---+---+---+---+---+---+\n"; + std::cout << i << " |"; + for (int j = 1; j <= 8; j++) { + std::cout << " " << b.get(Square((i - 1) * 8 + (j - 1))) << " |"; + } + std::cout << "\n"; + } + std::cout << " +---+---+---+---+---+---+---+---+\n\n" + << std::endl; } // source: https://web.archive.org/web/20071031100138/http://www.brucemo.com/compchess/programming/zobrist.htm Bitboard randBB() { - return rand() ^ ((U64) rand() << 15) ^ ((U64) rand() << 30) ^ - ((U64) rand() << 45) ^ ((U64) rand() << 60); + return rand() ^ ((U64) rand() << 15) ^ ((U64) rand() << 30) ^ + ((U64) rand() << 45) ^ ((U64) rand() << 60); } std::string BBToHex(Bitboard bb) { - std::stringstream ss; - ss << std::hex << bb.bb; - return "0x" + ss.str() + "ULL"; + std::stringstream ss; + ss << std::hex << bb.bb; + return "0x" + ss.str() + "ULL"; } \ No newline at end of file diff --git a/src/utils.h b/src/utils.h index 1850201..4a38ca4 100644 --- a/src/utils.h +++ b/src/utils.h @@ -17,33 +17,43 @@ #ifndef BLACKCORE_UTILS_H #define BLACKCORE_UTILS_H -#include -#include "constants.h" #include "bitboard.h" +#include "constants.h" +#include constexpr PieceType indexToType[7] = {KING, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, PIECE_EMPTY}; constexpr Color indexToColor[3] = {WHITE, BLACK, COLOR_EMPTY}; template constexpr Color EnemyColor() { - if constexpr (color == WHITE) return BLACK; - else return WHITE; + if constexpr (color == WHITE) + return BLACK; + else + return WHITE; } -inline Color EnemyColor(Color color) { return color == WHITE ? BLACK : WHITE; } +inline Color EnemyColor(Color color) { + return color == WHITE ? BLACK : WHITE; +} -constexpr unsigned int squareToRank(Square square) { return square >> 3; } +constexpr unsigned int squareToRank(Square square) { + return square >> 3; +} -constexpr unsigned int squareToFile(Square square) { return square & 7; } +constexpr unsigned int squareToFile(Square square) { + return square & 7; +} constexpr Square mirrorSquare(Square square) { - return Square(56 - square + squareToFile(square)); + return Square(56 - square + squareToFile(square)); } -constexpr unsigned char encodePiece(Piece piece) { return (piece.color << 3) | piece.type; } +constexpr unsigned char encodePiece(Piece piece) { + return (piece.color << 3) | piece.type; +} constexpr Piece decodePiece(unsigned char encodedPiece) { - return {indexToType[encodedPiece & 7], indexToColor[encodedPiece >> 3]}; + return {indexToType[encodedPiece & 7], indexToColor[encodedPiece >> 3]}; } std::string formatSquare(Square square); @@ -60,4 +70,4 @@ Bitboard randBB(); std::string BBToHex(Bitboard bb); -#endif //BLACKCORE_UTILS_H +#endif//BLACKCORE_UTILS_H From 302257f1accded49d17a65dac24ca208e11e7dda Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Tue, 8 Nov 2022 20:36:06 +0100 Subject: [PATCH 15/17] Fixed code not compiling Bench: 2870227 --- src/bench.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bench.h b/src/bench.h index 7e34668..cee1fcb 100644 --- a/src/bench.h +++ b/src/bench.h @@ -20,6 +20,8 @@ #include "movegen.h" +#include + template U64 perft(Position &position, Depth depth) { Move moves[200]; From 404b8a4688460fec808cae086691836ce8c067f9 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Tue, 8 Nov 2022 20:42:55 +0100 Subject: [PATCH 16/17] Switched back to spaces Bench: 2870227 --- .clang-format | 2 +- src/bench.cpp | 108 ++--- src/bench.h | 30 +- src/bitboard.cpp | 348 +++++++------- src/bitboard.h | 680 +++++++++++++-------------- src/constants.h | 1020 ++++++++++++++++++++--------------------- src/eval.cpp | 2 +- src/eval.h | 4 +- src/main.cpp | 46 +- src/move.cpp | 28 +- src/move.h | 96 ++-- src/move_ordering.cpp | 94 ++-- src/movegen.cpp | 710 ++++++++++++++-------------- src/movegen.h | 92 ++-- src/nnue.cpp | 282 ++++++------ src/nnue.h | 46 +- src/position.cpp | 370 +++++++-------- src/position.h | 608 ++++++++++++------------ src/search.cpp | 725 +++++++++++++++-------------- src/search.h | 10 +- src/timeman.cpp | 72 +-- src/tt.cpp | 116 ++--- src/tt.h | 34 +- src/tuner.cpp | 456 +++++++++--------- src/tuner.h | 10 +- src/uci.cpp | 414 ++++++++--------- src/uci.h | 32 +- src/utils.cpp | 174 +++---- src/utils.h | 20 +- 29 files changed, 3314 insertions(+), 3315 deletions(-) diff --git a/.clang-format b/.clang-format index 5988b68..a431afa 100644 --- a/.clang-format +++ b/.clang-format @@ -62,4 +62,4 @@ SpacesInContainerLiterals: false SpacesInParentheses: false SpacesInSquareBrackets: false TabWidth: 4 -UseTab: Always +UseTab: Never diff --git a/src/bench.cpp b/src/bench.cpp index 622d225..08d05d9 100644 --- a/src/bench.cpp +++ b/src/bench.cpp @@ -24,9 +24,9 @@ #include struct TestPosition { - std::string fen; - Depth perftDepth; - U64 perftResult; + std::string fen; + Depth perftDepth; + U64 perftResult; }; const unsigned int posCount = 10; @@ -36,66 +36,66 @@ const unsigned int searchTestHashSize = 32; const Depth SEARCH_DEPTH = 15; const TestPosition testPositions[posCount] = { - // Positions from CPW - {"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 ", 6, 119060324}, - {"r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - ", 5, 193690690}, - {"8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -", 7, 178633661}, - {"r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1", 5, 15833292}, - {"r2q1rk1/pP1p2pp/Q4n2/bbp1p3/Np6/1B3NBn/pPPP1PPP/R3K2R b KQ - 0 1 ", 5, 15833292}, - {"rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8 ", 5, 89941194}, - {"r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10 ", 5, 164075551}, + // Positions from CPW + {"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 ", 6, 119060324}, + {"r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - ", 5, 193690690}, + {"8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -", 7, 178633661}, + {"r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1", 5, 15833292}, + {"r2q1rk1/pP1p2pp/Q4n2/bbp1p3/Np6/1B3NBn/pPPP1PPP/R3K2R b KQ - 0 1 ", 5, 15833292}, + {"rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8 ", 5, 89941194}, + {"r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10 ", 5, 164075551}, - // Own positions - {"r3kb1r/1p3ppp/pqn1pn2/1Bpp1b2/3P1B2/1QP1PN2/PP1N1PPP/R3K2R w KQkq - 0 9", 5, 140824446}, - {"rnb1k2r/pppp1ppp/5q2/2b5/2BNP3/2N5/PPP2KPP/R1BQ3R w kq - 1 8", 5, 19782759}, - {"8/pp5p/8/2p2kp1/2Pp4/3P1KPP/PP6/8 w - - 0 32", 7, 13312960}}; + // Own positions + {"r3kb1r/1p3ppp/pqn1pn2/1Bpp1b2/3P1B2/1QP1PN2/PP1N1PPP/R3K2R w KQkq - 0 9", 5, 140824446}, + {"rnb1k2r/pppp1ppp/5q2/2b5/2BNP3/2N5/PPP2KPP/R1BQ3R w kq - 1 8", 5, 19782759}, + {"8/pp5p/8/2p2kp1/2Pp4/3P1KPP/PP6/8 w - - 0 32", 7, 13312960}}; void testPerft() { - initSearch(); - std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - U64 totalNodes = 0; - bool ok = true; - for (const TestPosition &tPos : testPositions) { - Position pos = {tPos.fen}; - U64 nodes = perft(pos, tPos.perftDepth); - totalNodes += nodes; - if (nodes != tPos.perftResult) { - ok = false; - std::cout << tPos.fen << " failed! Result: " << nodes << " Expected: " << tPos.perftResult << std::endl; - } - } + initSearch(); + std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); + U64 totalNodes = 0; + bool ok = true; + for (const TestPosition &tPos : testPositions) { + Position pos = {tPos.fen}; + U64 nodes = perft(pos, tPos.perftDepth); + totalNodes += nodes; + if (nodes != tPos.perftResult) { + ok = false; + std::cout << tPos.fen << " failed! Result: " << nodes << " Expected: " << tPos.perftResult << std::endl; + } + } - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - U64 elapsedTime = std::chrono::duration_cast(end - begin).count(); - U64 nps = totalNodes * 1000 / elapsedTime; + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); + U64 elapsedTime = std::chrono::duration_cast(end - begin).count(); + U64 nps = totalNodes * 1000 / elapsedTime; - if (ok) { - std::cout << "PERFT OK\n" - << totalNodes << " nodes " << nps << " nps" << std::endl; - } else { - std::cout << "PERFT FAILED" << std::endl; - exit(1); - } + if (ok) { + std::cout << "PERFT OK\n" + << totalNodes << " nodes " << nps << " nps" << std::endl; + } else { + std::cout << "PERFT FAILED" << std::endl; + exit(1); + } } void testSearch() { - initSearch(); - ttResize(searchTestHashSize); + initSearch(); + ttResize(searchTestHashSize); - U64 totalNodes = 0; - U64 nps; + U64 totalNodes = 0; + U64 nps; - for (const TestPosition &tPos : testPositions) { - ttClear(); - Position pos = {tPos.fen}; - SearchInfo info; - info.maxDepth = SEARCH_DEPTH; - info.uciMode = false; - startSearch(info, pos, 1); - joinThread(true); - totalNodes += nodeCount; - nps += getNps(); - } + for (const TestPosition &tPos : testPositions) { + ttClear(); + Position pos = {tPos.fen}; + SearchInfo info; + info.maxDepth = SEARCH_DEPTH; + info.uciMode = false; + startSearch(info, pos, 1); + joinThread(true); + totalNodes += nodeCount; + nps += getNps(); + } - std::cout << totalNodes << " nodes " << nps / posCount << " nps" << std::endl; + std::cout << totalNodes << " nodes " << nps / posCount << " nps" << std::endl; } diff --git a/src/bench.h b/src/bench.h index cee1fcb..a2be07b 100644 --- a/src/bench.h +++ b/src/bench.h @@ -24,21 +24,21 @@ template U64 perft(Position &position, Depth depth) { - Move moves[200]; - Move *movesEnd = generateMoves(position, moves, false); - if (depth == 1) - return movesEnd - moves; - U64 nodes = 0; - for (Move *it = moves; it != movesEnd; it++) { - position.makeMove(*it); - U64 a = perft(position, depth - 1); - if constexpr (output) { - std::cout << *it << ": " << a << std::endl; - } - nodes += a; - position.undoMove(*it); - } - return nodes; + Move moves[200]; + Move *movesEnd = generateMoves(position, moves, false); + if (depth == 1) + return movesEnd - moves; + U64 nodes = 0; + for (Move *it = moves; it != movesEnd; it++) { + position.makeMove(*it); + U64 a = perft(position, depth - 1); + if constexpr (output) { + std::cout << *it << ": " << a << std::endl; + } + nodes += a; + position.undoMove(*it); + } + return nodes; } void testPerft(); diff --git a/src/bitboard.cpp b/src/bitboard.cpp index 8c99f79..fb5605a 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -20,196 +20,196 @@ #include Bitboard bitMasks[64], pawnMasks[64][2], knightMasks[64], kingMasks[64], fileMasks[64], rankMasks[64], rookMasks[64], - diagonalMasks[64], antiDiagonalMasks[64], bishopMasks[64], - rookAttackTable[102400], bishopAttackTable[5248], commonRay[64][64], adjacentFileMasks[64], adjacentNorthMasks[64], - adjacentSouthMasks[64]; + diagonalMasks[64], antiDiagonalMasks[64], bishopMasks[64], + rookAttackTable[102400], bishopAttackTable[5248], commonRay[64][64], adjacentFileMasks[64], adjacentNorthMasks[64], + adjacentSouthMasks[64]; LineType lineType[64][64]; void initBitboard() { - for (Square sq = A1; sq < 64; sq += 1) { - bitMasks[sq] = 1ULL << sq; - - pawnMasks[sq][WHITE] = step(bitMasks[sq]) | step(bitMasks[sq]); - pawnMasks[sq][BLACK] = step(bitMasks[sq]) | step(bitMasks[sq]); - - knightMasks[sq] = - step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | - step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | - step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | - step(step(bitMasks[sq])) | step(step(bitMasks[sq])); - - kingMasks[sq] = - step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | - step(bitMasks[sq]) | - step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | - step(bitMasks[sq]); - - fileMasks[sq] = slide(sq) | slide(sq); - - rankMasks[sq] = slide(sq) | slide(sq); - - rookMasks[sq] = fileMasks[sq] | rankMasks[sq]; - - diagonalMasks[sq] = slide(sq) | slide(sq); - - antiDiagonalMasks[sq] = slide(sq) | slide(sq); - - bishopMasks[sq] = diagonalMasks[sq] | antiDiagonalMasks[sq]; - } - - for (Square sq = A1; sq < 64; sq += 1) { - unsigned int file = squareToFile(sq); - - adjacentNorthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | - (file != 7 ? slide(sq + EAST) : 0); - adjacentSouthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | - (file != 7 ? slide(sq + EAST) : 0); - adjacentFileMasks[sq] = - ~fileMask(sq) & (adjacentNorthMasks[sq] | adjacentSouthMasks[sq] | step(sq) | step(sq)); - - for (Square sq2 = A1; sq2 < 64; sq2 += 1) { - if (sq == sq2) - continue; - for (Direction dir : DIRECTIONS) { - Bitboard value = slide(dir, sq) & slide(-dir, sq2); - - if (value) { - commonRay[sq][sq2] = value; - LineType type = HORIZONTAL; - switch (dir) { - case NORTH: - case SOUTH: - type = HORIZONTAL; - break; - case WEST: - case EAST: - type = VERTICAL; - break; - case NORTH_EAST: - case SOUTH_WEST: - type = DIAGONAL; - break; - case NORTH_WEST: - case SOUTH_EAST: - type = ANTI_DIAGONAL; - break; - } - lineType[sq][sq2] = type; - break; - } - } - } - } - - initMagic(rookMagics, ROOK); - initMagic(bishopMagics, BISHOP); + for (Square sq = A1; sq < 64; sq += 1) { + bitMasks[sq] = 1ULL << sq; + + pawnMasks[sq][WHITE] = step(bitMasks[sq]) | step(bitMasks[sq]); + pawnMasks[sq][BLACK] = step(bitMasks[sq]) | step(bitMasks[sq]); + + knightMasks[sq] = + step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | + step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | + step(step(bitMasks[sq])) | step(step(bitMasks[sq])) | + step(step(bitMasks[sq])) | step(step(bitMasks[sq])); + + kingMasks[sq] = + step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | + step(bitMasks[sq]) | + step(bitMasks[sq]) | step(bitMasks[sq]) | step(bitMasks[sq]) | + step(bitMasks[sq]); + + fileMasks[sq] = slide(sq) | slide(sq); + + rankMasks[sq] = slide(sq) | slide(sq); + + rookMasks[sq] = fileMasks[sq] | rankMasks[sq]; + + diagonalMasks[sq] = slide(sq) | slide(sq); + + antiDiagonalMasks[sq] = slide(sq) | slide(sq); + + bishopMasks[sq] = diagonalMasks[sq] | antiDiagonalMasks[sq]; + } + + for (Square sq = A1; sq < 64; sq += 1) { + unsigned int file = squareToFile(sq); + + adjacentNorthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | + (file != 7 ? slide(sq + EAST) : 0); + adjacentSouthMasks[sq] = slide(sq) | (file != 0 ? slide(sq + WEST) : 0) | + (file != 7 ? slide(sq + EAST) : 0); + adjacentFileMasks[sq] = + ~fileMask(sq) & (adjacentNorthMasks[sq] | adjacentSouthMasks[sq] | step(sq) | step(sq)); + + for (Square sq2 = A1; sq2 < 64; sq2 += 1) { + if (sq == sq2) + continue; + for (Direction dir : DIRECTIONS) { + Bitboard value = slide(dir, sq) & slide(-dir, sq2); + + if (value) { + commonRay[sq][sq2] = value; + LineType type = HORIZONTAL; + switch (dir) { + case NORTH: + case SOUTH: + type = HORIZONTAL; + break; + case WEST: + case EAST: + type = VERTICAL; + break; + case NORTH_EAST: + case SOUTH_WEST: + type = DIAGONAL; + break; + case NORTH_WEST: + case SOUTH_EAST: + type = ANTI_DIAGONAL; + break; + } + lineType[sq][sq2] = type; + break; + } + } + } + } + + initMagic(rookMagics, ROOK); + initMagic(bishopMagics, BISHOP); } Bitboard slidingAttacks(Square square, Bitboard occupied, PieceType type) { - switch (type) { - case ROOK: - return slide(square, occupied) | slide(square, occupied) | slide(square, occupied) | - slide(square, occupied); - case BISHOP: - return slide(square, occupied) | slide(square, occupied) | - slide(square, occupied) | slide(square, occupied); - default: - assert(0); - } + switch (type) { + case ROOK: + return slide(square, occupied) | slide(square, occupied) | slide(square, occupied) | + slide(square, occupied); + case BISHOP: + return slide(square, occupied) | slide(square, occupied) | + slide(square, occupied) | slide(square, occupied); + default: + assert(0); + } } void initMagic(const Magic *magics, PieceType type) { - assert((type == ROOK) | (type == BISHOP)); - Bitboard occupied[4096], attacked[4096]; + assert((type == ROOK) | (type == BISHOP)); + Bitboard occupied[4096], attacked[4096]; - for (Square square = A1; square < 64; square += 1) { - const Magic &magic = magics[square]; + for (Square square = A1; square < 64; square += 1) { + const Magic &magic = magics[square]; - unsigned int length = 0; - Bitboard occ = 0; - do { - occupied[length] = occ; - attacked[length] = slidingAttacks(square, occ, type); + unsigned int length = 0; + Bitboard occ = 0; + do { + occupied[length] = occ; + attacked[length] = slidingAttacks(square, occ, type); - length++; - occ = (occ - magic.mask) & magic.mask; - } while (occ != 0); + length++; + occ = (occ - magic.mask) & magic.mask; + } while (occ != 0); - for (unsigned int i = 0; i < length; i++) { - U64 index = getMagicIndex(magic, occupied[i]); + for (unsigned int i = 0; i < length; i++) { + U64 index = getMagicIndex(magic, occupied[i]); - magic.ptr[index] = attacked[i]; - } - } + magic.ptr[index] = attacked[i]; + } + } } void findMagics(Bitboard *attackTable, Magic *magics, PieceType type) { - assert((type == ROOK) | (type == BISHOP)); - Bitboard occupied[4096], attacked[4096]; - - if (type == ROOK) - std::cout << "Magic rookMagics[64] = {\n"; - else - std::cout << "Magic bishopMagics[64] = {\n"; - - unsigned int length = 0; - for (Square square = A1; square < 64; square += 1) { - Bitboard edge = (((rank1 | rank8) & ~rankMask(square)) | ((fileA | fileH) & ~fileMask(square))); - - Magic &magic = magics[square]; - - magic.mask = slidingAttacks(square, 0, type) & ~edge; - magic.shift = magic.mask.popCount(); - - if (square == A1) - magic.ptr = attackTable; - else - magic.ptr = magics[square - 1].ptr + length; - - // Carry-Ripler trick for reference check out: https://www.chessprogramming.org/Traversing_Subsets_of_a_Set - length = 0; - Bitboard occ = 0; - do { - occupied[length] = occ; - attacked[length] = slidingAttacks(square, occ, type); - - length++; - occ = (occ - magic.mask) & magic.mask; - } while (occ != 0); - - Bitboard used[4096]; - - while (true) { - magic.magic = randBB() & randBB() & randBB(); - if (((magic.magic * magic.mask) >> 56).popCount() < 6) - continue; - - std::memset(used, 0, sizeof(used)); - - bool failed = false; - for (unsigned int i = 0; i < length; i++) { - U64 index = (((occupied[i] & magic.mask) * magic.magic) >> (64 - magic.shift)).bb; - if (used[index] == 0) { - used[index] = attacked[i]; - magic.ptr[index] = attacked[i]; - } else if (used[index] != attacked[i]) { - failed = true; - break; - } - } - if (!failed) { - break; - } - } - if (type == ROOK) - std::cout << " {rookAttackTable + " << magic.ptr - rookAttackTable << ", " << BBToHex(magic.mask) << ", " - << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; - else - std::cout << " {bishopAttackTable + " << magic.ptr - bishopAttackTable << ", " << BBToHex(magic.mask) - << ", " - << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; - } - - std::cout << "};\n"; + assert((type == ROOK) | (type == BISHOP)); + Bitboard occupied[4096], attacked[4096]; + + if (type == ROOK) + std::cout << "Magic rookMagics[64] = {\n"; + else + std::cout << "Magic bishopMagics[64] = {\n"; + + unsigned int length = 0; + for (Square square = A1; square < 64; square += 1) { + Bitboard edge = (((rank1 | rank8) & ~rankMask(square)) | ((fileA | fileH) & ~fileMask(square))); + + Magic &magic = magics[square]; + + magic.mask = slidingAttacks(square, 0, type) & ~edge; + magic.shift = magic.mask.popCount(); + + if (square == A1) + magic.ptr = attackTable; + else + magic.ptr = magics[square - 1].ptr + length; + + // Carry-Ripler trick for reference check out: https://www.chessprogramming.org/Traversing_Subsets_of_a_Set + length = 0; + Bitboard occ = 0; + do { + occupied[length] = occ; + attacked[length] = slidingAttacks(square, occ, type); + + length++; + occ = (occ - magic.mask) & magic.mask; + } while (occ != 0); + + Bitboard used[4096]; + + while (true) { + magic.magic = randBB() & randBB() & randBB(); + if (((magic.magic * magic.mask) >> 56).popCount() < 6) + continue; + + std::memset(used, 0, sizeof(used)); + + bool failed = false; + for (unsigned int i = 0; i < length; i++) { + U64 index = (((occupied[i] & magic.mask) * magic.magic) >> (64 - magic.shift)).bb; + if (used[index] == 0) { + used[index] = attacked[i]; + magic.ptr[index] = attacked[i]; + } else if (used[index] != attacked[i]) { + failed = true; + break; + } + } + if (!failed) { + break; + } + } + if (type == ROOK) + std::cout << " {rookAttackTable + " << magic.ptr - rookAttackTable << ", " << BBToHex(magic.mask) << ", " + << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; + else + std::cout << " {bishopAttackTable + " << magic.ptr - bishopAttackTable << ", " << BBToHex(magic.mask) + << ", " + << BBToHex(magic.magic) << ", " << magic.shift << "},\n"; + } + + std::cout << "};\n"; } \ No newline at end of file diff --git a/src/bitboard.h b/src/bitboard.h index acaac1b..31f7cc1 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -28,134 +28,134 @@ struct Bitboard { - U64 bb = 0; + U64 bb = 0; - constexpr Bitboard(U64 value) { - bb = value; - } + constexpr Bitboard(U64 value) { + bb = value; + } - inline Bitboard(Square square); + inline Bitboard(Square square); - constexpr Bitboard() = default; + constexpr Bitboard() = default; - constexpr bool get(Square square) const { - return (bb >> square) & 1; - } + constexpr bool get(Square square) const { + return (bb >> square) & 1; + } - constexpr void set(Square square) { - bb |= 1ULL << square; - } + constexpr void set(Square square) { + bb |= 1ULL << square; + } - constexpr void clear(Square square) { - bb &= ~(1ULL << square); - } + constexpr void clear(Square square) { + bb &= ~(1ULL << square); + } - constexpr int popCount() const { + constexpr int popCount() const { #if defined(_MSC_VER) || defined(__INTEL_COMPILER) - return (int) _mm_popcnt_u64(bb); + return (int) _mm_popcnt_u64(bb); #else - return __builtin_popcountll(bb); + return __builtin_popcountll(bb); #endif - } + } - constexpr Square lsb() const { + constexpr Square lsb() const { #ifdef __GNUC__ - return Square(__builtin_ctzll(bb)); + return Square(__builtin_ctzll(bb)); #elif defined(_MSC_VER) - unsigned long a; - _BitScanForward64(&a, bb); - return Square(a); + unsigned long a; + _BitScanForward64(&a, bb); + return Square(a); #else #error "Unsupported compiler!" #endif - } + } - constexpr Square popLsb() { - Square square = lsb(); - bb &= bb - 1; - return square; - } + constexpr Square popLsb() { + Square square = lsb(); + bb &= bb - 1; + return square; + } - constexpr Bitboard operator*(Bitboard a) const { - return bb * a.bb; - } + constexpr Bitboard operator*(Bitboard a) const { + return bb * a.bb; + } - constexpr bool operator==(Bitboard a) const { - return bb == a.bb; - } + constexpr bool operator==(Bitboard a) const { + return bb == a.bb; + } - constexpr bool operator!=(Bitboard a) const { - return bb != a.bb; - } + constexpr bool operator!=(Bitboard a) const { + return bb != a.bb; + } - constexpr Bitboard operator+(Bitboard a) const { - return bb + a.bb; - } + constexpr Bitboard operator+(Bitboard a) const { + return bb + a.bb; + } - constexpr Bitboard operator-(Bitboard a) const { - return bb - a.bb; - } + constexpr Bitboard operator-(Bitboard a) const { + return bb - a.bb; + } - constexpr Bitboard operator&(Bitboard a) const { - return bb & a.bb; - } + constexpr Bitboard operator&(Bitboard a) const { + return bb & a.bb; + } - constexpr Bitboard operator|(Bitboard a) const { - return bb | a.bb; - } + constexpr Bitboard operator|(Bitboard a) const { + return bb | a.bb; + } - constexpr Bitboard operator^(Bitboard a) const { - return bb ^ a.bb; - } + constexpr Bitboard operator^(Bitboard a) const { + return bb ^ a.bb; + } - constexpr Bitboard operator~() const { - return ~bb; - } + constexpr Bitboard operator~() const { + return ~bb; + } - constexpr Bitboard operator<<(const unsigned int a) const { - return bb << a; - } + constexpr Bitboard operator<<(const unsigned int a) const { + return bb << a; + } - constexpr Bitboard operator>>(const unsigned int a) const { - return bb >> a; - } + constexpr Bitboard operator>>(const unsigned int a) const { + return bb >> a; + } - constexpr void operator&=(Bitboard a) { - bb &= a.bb; - } + constexpr void operator&=(Bitboard a) { + bb &= a.bb; + } - constexpr void operator|=(Bitboard a) { - bb |= a.bb; - } + constexpr void operator|=(Bitboard a) { + bb |= a.bb; + } - constexpr void operator^=(Bitboard a) { - bb ^= a.bb; - } + constexpr void operator^=(Bitboard a) { + bb ^= a.bb; + } - constexpr void operator<<=(const unsigned int a) { - bb <<= a; - } + constexpr void operator<<=(const unsigned int a) { + bb <<= a; + } - constexpr void operator>>=(const unsigned int a) { - bb >>= a; - } + constexpr void operator>>=(const unsigned int a) { + bb >>= a; + } - constexpr explicit operator bool() const { - return bb; - } + constexpr explicit operator bool() const { + return bb; + } - constexpr explicit operator U64() const { - return bb; - } + constexpr explicit operator U64() const { + return bb; + } }; struct Magic { - Bitboard *ptr; - Bitboard mask; - Bitboard magic; - unsigned int shift; + Bitboard *ptr; + Bitboard mask; + Bitboard magic; + unsigned int shift; }; extern Bitboard rookAttackTable[102400]; @@ -165,137 +165,137 @@ extern Bitboard bishopAttackTable[5248]; // To generate the attackTables from them use initMagic // To generate new magic numbers use findMagics constexpr Magic rookMagics[64] = { - {rookAttackTable + 0, 0x101010101017eULL, 0x200102084420100ULL, 12}, - {rookAttackTable + 4096, 0x202020202027cULL, 0x40200040001000ULL, 11}, - {rookAttackTable + 6144, 0x404040404047aULL, 0x4100082000104300ULL, 11}, - {rookAttackTable + 8192, 0x8080808080876ULL, 0x480049000080080ULL, 11}, - {rookAttackTable + 10240, 0x1010101010106eULL, 0x100040211000800ULL, 11}, - {rookAttackTable + 12288, 0x2020202020205eULL, 0x2500240002080100ULL, 11}, - {rookAttackTable + 14336, 0x4040404040403eULL, 0x280120001000080ULL, 11}, - {rookAttackTable + 16384, 0x8080808080807eULL, 0x200004086002b04ULL, 12}, - {rookAttackTable + 20480, 0x1010101017e00ULL, 0x401800280400020ULL, 11}, - {rookAttackTable + 22528, 0x2020202027c00ULL, 0x8601400050002000ULL, 10}, - {rookAttackTable + 23552, 0x4040404047a00ULL, 0x802801000200280ULL, 10}, - {rookAttackTable + 24576, 0x8080808087600ULL, 0x411001001002008ULL, 10}, - {rookAttackTable + 25600, 0x10101010106e00ULL, 0x11000410080300ULL, 10}, - {rookAttackTable + 26624, 0x20202020205e00ULL, 0x20a000804108200ULL, 10}, - {rookAttackTable + 27648, 0x40404040403e00ULL, 0x84006850240102ULL, 10}, - {rookAttackTable + 28672, 0x80808080807e00ULL, 0x24800049000080ULL, 11}, - {rookAttackTable + 30720, 0x10101017e0100ULL, 0x208000400080ULL, 11}, - {rookAttackTable + 32768, 0x20202027c0200ULL, 0x101020020804202ULL, 10}, - {rookAttackTable + 33792, 0x40404047a0400ULL, 0x20828010022000ULL, 10}, - {rookAttackTable + 34816, 0x8080808760800ULL, 0x801230009001000ULL, 10}, - {rookAttackTable + 35840, 0x101010106e1000ULL, 0x5608808004020801ULL, 10}, - {rookAttackTable + 36864, 0x202020205e2000ULL, 0x3086008080040002ULL, 10}, - {rookAttackTable + 37888, 0x404040403e4000ULL, 0x40041221008ULL, 10}, - {rookAttackTable + 38912, 0x808080807e8000ULL, 0x8000020000811044ULL, 11}, - {rookAttackTable + 40960, 0x101017e010100ULL, 0x21c00180002081ULL, 11}, - {rookAttackTable + 43008, 0x202027c020200ULL, 0xa010024140002000ULL, 10}, - {rookAttackTable + 44032, 0x404047a040400ULL, 0x1040200280100080ULL, 10}, - {rookAttackTable + 45056, 0x8080876080800ULL, 0x2100100200b00ULL, 10}, - {rookAttackTable + 46080, 0x1010106e101000ULL, 0x8014008080040800ULL, 10}, - {rookAttackTable + 47104, 0x2020205e202000ULL, 0x840200120008904cULL, 10}, - {rookAttackTable + 48128, 0x4040403e404000ULL, 0x10020400811058ULL, 10}, - {rookAttackTable + 49152, 0x8080807e808000ULL, 0x8280040200004081ULL, 11}, - {rookAttackTable + 51200, 0x1017e01010100ULL, 0xa000408001002100ULL, 11}, - {rookAttackTable + 53248, 0x2027c02020200ULL, 0x210904000802000ULL, 10}, - {rookAttackTable + 54272, 0x4047a04040400ULL, 0x200204082001200ULL, 10}, - {rookAttackTable + 55296, 0x8087608080800ULL, 0x2204201042000a00ULL, 10}, - {rookAttackTable + 56320, 0x10106e10101000ULL, 0x6c80040801001100ULL, 10}, - {rookAttackTable + 57344, 0x20205e20202000ULL, 0x8040080800200ULL, 10}, - {rookAttackTable + 58368, 0x40403e40404000ULL, 0x2b0900804001663ULL, 10}, - {rookAttackTable + 59392, 0x80807e80808000ULL, 0x4074800040800100ULL, 11}, - {rookAttackTable + 61440, 0x17e0101010100ULL, 0x4000400080208000ULL, 11}, - {rookAttackTable + 63488, 0x27c0202020200ULL, 0x1a40500020004001ULL, 10}, - {rookAttackTable + 64512, 0x47a0404040400ULL, 0x1004020010018ULL, 10}, - {rookAttackTable + 65536, 0x8760808080800ULL, 0x20201200420008ULL, 10}, - {rookAttackTable + 66560, 0x106e1010101000ULL, 0xc24008008008005ULL, 10}, - {rookAttackTable + 67584, 0x205e2020202000ULL, 0x4002010804020010ULL, 10}, - {rookAttackTable + 68608, 0x403e4040404000ULL, 0xb015081002040001ULL, 10}, - {rookAttackTable + 69632, 0x807e8080808000ULL, 0x4000408c020029ULL, 11}, - {rookAttackTable + 71680, 0x7e010101010100ULL, 0xb840004020800080ULL, 11}, - {rookAttackTable + 73728, 0x7c020202020200ULL, 0x60804001002100ULL, 10}, - {rookAttackTable + 74752, 0x7a040404040400ULL, 0x210810a285420200ULL, 10}, - {rookAttackTable + 75776, 0x76080808080800ULL, 0xa000080010008080ULL, 10}, - {rookAttackTable + 76800, 0x6e101010101000ULL, 0x800050010080100ULL, 10}, - {rookAttackTable + 77824, 0x5e202020202000ULL, 0x4040002008080ULL, 10}, - {rookAttackTable + 78848, 0x3e404040404000ULL, 0x80b4011042080400ULL, 10}, - {rookAttackTable + 79872, 0x7e808080808000ULL, 0x6014004114008200ULL, 11}, - {rookAttackTable + 81920, 0x7e01010101010100ULL, 0x1001002018408202ULL, 12}, - {rookAttackTable + 86016, 0x7c02020202020200ULL, 0x2400104128421ULL, 11}, - {rookAttackTable + 88064, 0x7a04040404040400ULL, 0x407600010408901ULL, 11}, - {rookAttackTable + 90112, 0x7608080808080800ULL, 0x108448a01001000dULL, 11}, - {rookAttackTable + 92160, 0x6e10101010101000ULL, 0x8402011008842002ULL, 11}, - {rookAttackTable + 94208, 0x5e20202020202000ULL, 0x11000204000801ULL, 11}, - {rookAttackTable + 96256, 0x3e40404040404000ULL, 0x4026000108208452ULL, 11}, - {rookAttackTable + 98304, 0x7e80808080808000ULL, 0x800081004c2c06ULL, 12}, + {rookAttackTable + 0, 0x101010101017eULL, 0x200102084420100ULL, 12}, + {rookAttackTable + 4096, 0x202020202027cULL, 0x40200040001000ULL, 11}, + {rookAttackTable + 6144, 0x404040404047aULL, 0x4100082000104300ULL, 11}, + {rookAttackTable + 8192, 0x8080808080876ULL, 0x480049000080080ULL, 11}, + {rookAttackTable + 10240, 0x1010101010106eULL, 0x100040211000800ULL, 11}, + {rookAttackTable + 12288, 0x2020202020205eULL, 0x2500240002080100ULL, 11}, + {rookAttackTable + 14336, 0x4040404040403eULL, 0x280120001000080ULL, 11}, + {rookAttackTable + 16384, 0x8080808080807eULL, 0x200004086002b04ULL, 12}, + {rookAttackTable + 20480, 0x1010101017e00ULL, 0x401800280400020ULL, 11}, + {rookAttackTable + 22528, 0x2020202027c00ULL, 0x8601400050002000ULL, 10}, + {rookAttackTable + 23552, 0x4040404047a00ULL, 0x802801000200280ULL, 10}, + {rookAttackTable + 24576, 0x8080808087600ULL, 0x411001001002008ULL, 10}, + {rookAttackTable + 25600, 0x10101010106e00ULL, 0x11000410080300ULL, 10}, + {rookAttackTable + 26624, 0x20202020205e00ULL, 0x20a000804108200ULL, 10}, + {rookAttackTable + 27648, 0x40404040403e00ULL, 0x84006850240102ULL, 10}, + {rookAttackTable + 28672, 0x80808080807e00ULL, 0x24800049000080ULL, 11}, + {rookAttackTable + 30720, 0x10101017e0100ULL, 0x208000400080ULL, 11}, + {rookAttackTable + 32768, 0x20202027c0200ULL, 0x101020020804202ULL, 10}, + {rookAttackTable + 33792, 0x40404047a0400ULL, 0x20828010022000ULL, 10}, + {rookAttackTable + 34816, 0x8080808760800ULL, 0x801230009001000ULL, 10}, + {rookAttackTable + 35840, 0x101010106e1000ULL, 0x5608808004020801ULL, 10}, + {rookAttackTable + 36864, 0x202020205e2000ULL, 0x3086008080040002ULL, 10}, + {rookAttackTable + 37888, 0x404040403e4000ULL, 0x40041221008ULL, 10}, + {rookAttackTable + 38912, 0x808080807e8000ULL, 0x8000020000811044ULL, 11}, + {rookAttackTable + 40960, 0x101017e010100ULL, 0x21c00180002081ULL, 11}, + {rookAttackTable + 43008, 0x202027c020200ULL, 0xa010024140002000ULL, 10}, + {rookAttackTable + 44032, 0x404047a040400ULL, 0x1040200280100080ULL, 10}, + {rookAttackTable + 45056, 0x8080876080800ULL, 0x2100100200b00ULL, 10}, + {rookAttackTable + 46080, 0x1010106e101000ULL, 0x8014008080040800ULL, 10}, + {rookAttackTable + 47104, 0x2020205e202000ULL, 0x840200120008904cULL, 10}, + {rookAttackTable + 48128, 0x4040403e404000ULL, 0x10020400811058ULL, 10}, + {rookAttackTable + 49152, 0x8080807e808000ULL, 0x8280040200004081ULL, 11}, + {rookAttackTable + 51200, 0x1017e01010100ULL, 0xa000408001002100ULL, 11}, + {rookAttackTable + 53248, 0x2027c02020200ULL, 0x210904000802000ULL, 10}, + {rookAttackTable + 54272, 0x4047a04040400ULL, 0x200204082001200ULL, 10}, + {rookAttackTable + 55296, 0x8087608080800ULL, 0x2204201042000a00ULL, 10}, + {rookAttackTable + 56320, 0x10106e10101000ULL, 0x6c80040801001100ULL, 10}, + {rookAttackTable + 57344, 0x20205e20202000ULL, 0x8040080800200ULL, 10}, + {rookAttackTable + 58368, 0x40403e40404000ULL, 0x2b0900804001663ULL, 10}, + {rookAttackTable + 59392, 0x80807e80808000ULL, 0x4074800040800100ULL, 11}, + {rookAttackTable + 61440, 0x17e0101010100ULL, 0x4000400080208000ULL, 11}, + {rookAttackTable + 63488, 0x27c0202020200ULL, 0x1a40500020004001ULL, 10}, + {rookAttackTable + 64512, 0x47a0404040400ULL, 0x1004020010018ULL, 10}, + {rookAttackTable + 65536, 0x8760808080800ULL, 0x20201200420008ULL, 10}, + {rookAttackTable + 66560, 0x106e1010101000ULL, 0xc24008008008005ULL, 10}, + {rookAttackTable + 67584, 0x205e2020202000ULL, 0x4002010804020010ULL, 10}, + {rookAttackTable + 68608, 0x403e4040404000ULL, 0xb015081002040001ULL, 10}, + {rookAttackTable + 69632, 0x807e8080808000ULL, 0x4000408c020029ULL, 11}, + {rookAttackTable + 71680, 0x7e010101010100ULL, 0xb840004020800080ULL, 11}, + {rookAttackTable + 73728, 0x7c020202020200ULL, 0x60804001002100ULL, 10}, + {rookAttackTable + 74752, 0x7a040404040400ULL, 0x210810a285420200ULL, 10}, + {rookAttackTable + 75776, 0x76080808080800ULL, 0xa000080010008080ULL, 10}, + {rookAttackTable + 76800, 0x6e101010101000ULL, 0x800050010080100ULL, 10}, + {rookAttackTable + 77824, 0x5e202020202000ULL, 0x4040002008080ULL, 10}, + {rookAttackTable + 78848, 0x3e404040404000ULL, 0x80b4011042080400ULL, 10}, + {rookAttackTable + 79872, 0x7e808080808000ULL, 0x6014004114008200ULL, 11}, + {rookAttackTable + 81920, 0x7e01010101010100ULL, 0x1001002018408202ULL, 12}, + {rookAttackTable + 86016, 0x7c02020202020200ULL, 0x2400104128421ULL, 11}, + {rookAttackTable + 88064, 0x7a04040404040400ULL, 0x407600010408901ULL, 11}, + {rookAttackTable + 90112, 0x7608080808080800ULL, 0x108448a01001000dULL, 11}, + {rookAttackTable + 92160, 0x6e10101010101000ULL, 0x8402011008842002ULL, 11}, + {rookAttackTable + 94208, 0x5e20202020202000ULL, 0x11000204000801ULL, 11}, + {rookAttackTable + 96256, 0x3e40404040404000ULL, 0x4026000108208452ULL, 11}, + {rookAttackTable + 98304, 0x7e80808080808000ULL, 0x800081004c2c06ULL, 12}, }; constexpr Magic bishopMagics[64] = { - {bishopAttackTable + 0, 0x40201008040200ULL, 0x4100216240212ULL, 6}, - {bishopAttackTable + 64, 0x402010080400ULL, 0x8080110420002ULL, 5}, - {bishopAttackTable + 96, 0x4020100a00ULL, 0x4280091000005ULL, 5}, - {bishopAttackTable + 128, 0x40221400ULL, 0x24410020801400ULL, 5}, - {bishopAttackTable + 160, 0x2442800ULL, 0x4242000000311ULL, 5}, - {bishopAttackTable + 192, 0x204085000ULL, 0x882021006148000ULL, 5}, - {bishopAttackTable + 224, 0x20408102000ULL, 0xb440a0210260800ULL, 5}, - {bishopAttackTable + 256, 0x2040810204000ULL, 0x80840c0a011c00ULL, 6}, - {bishopAttackTable + 320, 0x20100804020000ULL, 0x1000040488080100ULL, 5}, - {bishopAttackTable + 352, 0x40201008040000ULL, 0x800a200202284112ULL, 5}, - {bishopAttackTable + 384, 0x4020100a0000ULL, 0xcc00098401020000ULL, 5}, - {bishopAttackTable + 416, 0x4022140000ULL, 0x8000080a00202000ULL, 5}, - {bishopAttackTable + 448, 0x244280000ULL, 0x8821210000824ULL, 5}, - {bishopAttackTable + 480, 0x20408500000ULL, 0xc000088230400020ULL, 5}, - {bishopAttackTable + 512, 0x2040810200000ULL, 0x2904494808a41024ULL, 5}, - {bishopAttackTable + 544, 0x4081020400000ULL, 0x2302882301004ULL, 5}, - {bishopAttackTable + 576, 0x10080402000200ULL, 0x910200610100104ULL, 5}, - {bishopAttackTable + 608, 0x20100804000400ULL, 0x910800850008080ULL, 5}, - {bishopAttackTable + 640, 0x4020100a000a00ULL, 0x30080010004d4009ULL, 7}, - {bishopAttackTable + 768, 0x402214001400ULL, 0x4108000c20222001ULL, 7}, - {bishopAttackTable + 896, 0x24428002800ULL, 0x22000400942005ULL, 7}, - {bishopAttackTable + 1024, 0x2040850005000ULL, 0xa021100512400ULL, 7}, - {bishopAttackTable + 1152, 0x4081020002000ULL, 0xa001000041301024ULL, 5}, - {bishopAttackTable + 1184, 0x8102040004000ULL, 0x8000420206021981ULL, 5}, - {bishopAttackTable + 1216, 0x8040200020400ULL, 0x1008480004606800ULL, 5}, - {bishopAttackTable + 1248, 0x10080400040800ULL, 0x4a8280003100100ULL, 5}, - {bishopAttackTable + 1280, 0x20100a000a1000ULL, 0x3480010182240ULL, 7}, - {bishopAttackTable + 1408, 0x40221400142200ULL, 0x2048080102820042ULL, 9}, - {bishopAttackTable + 1920, 0x2442800284400ULL, 0x4001020004008400ULL, 9}, - {bishopAttackTable + 2432, 0x4085000500800ULL, 0x204004048080200ULL, 7}, - {bishopAttackTable + 2560, 0x8102000201000ULL, 0x2008200040212a0ULL, 5}, - {bishopAttackTable + 2592, 0x10204000402000ULL, 0x10c013002430400ULL, 5}, - {bishopAttackTable + 2624, 0x4020002040800ULL, 0x4300a5082214480ULL, 5}, - {bishopAttackTable + 2656, 0x8040004081000ULL, 0x401041000215900ULL, 5}, - {bishopAttackTable + 2688, 0x100a000a102000ULL, 0x104804048040408ULL, 7}, - {bishopAttackTable + 2816, 0x22140014224000ULL, 0x800400808208200ULL, 9}, - {bishopAttackTable + 3328, 0x44280028440200ULL, 0x8002400054101ULL, 9}, - {bishopAttackTable + 3840, 0x8500050080400ULL, 0x2001004502020102ULL, 7}, - {bishopAttackTable + 3968, 0x10200020100800ULL, 0x1988080110006100ULL, 5}, - {bishopAttackTable + 4000, 0x20400040201000ULL, 0x1282009200102201ULL, 5}, - {bishopAttackTable + 4032, 0x2000204081000ULL, 0xa208010420001280ULL, 5}, - {bishopAttackTable + 4064, 0x4000408102000ULL, 0x4004010809000200ULL, 5}, - {bishopAttackTable + 4096, 0xa000a10204000ULL, 0x43008150006100ULL, 7}, - {bishopAttackTable + 4224, 0x14001422400000ULL, 0x2410145000801ULL, 7}, - {bishopAttackTable + 4352, 0x28002844020000ULL, 0x280104006040ULL, 7}, - {bishopAttackTable + 4480, 0x50005008040200ULL, 0x4012042000902ULL, 7}, - {bishopAttackTable + 4608, 0x20002010080400ULL, 0x28100482080a82ULL, 5}, - {bishopAttackTable + 4640, 0x40004020100800ULL, 0x80040c2400240240ULL, 5}, - {bishopAttackTable + 4672, 0x20408102000ULL, 0x80c1101101044a0ULL, 5}, - {bishopAttackTable + 4704, 0x40810204000ULL, 0x180804802310808ULL, 5}, - {bishopAttackTable + 4736, 0xa1020400000ULL, 0x8048080064ULL, 5}, - {bishopAttackTable + 4768, 0x142240000000ULL, 0x8c8400020880000ULL, 5}, - {bishopAttackTable + 4800, 0x284402000000ULL, 0x30001010020a2000ULL, 5}, - {bishopAttackTable + 4832, 0x500804020000ULL, 0x80600282220010ULL, 5}, - {bishopAttackTable + 4864, 0x201008040200ULL, 0x120228228010000ULL, 5}, - {bishopAttackTable + 4896, 0x402010080400ULL, 0xc08020802042300ULL, 5}, - {bishopAttackTable + 4928, 0x2040810204000ULL, 0x2a008048221000ULL, 6}, - {bishopAttackTable + 4992, 0x4081020400000ULL, 0x4601204100901002ULL, 5}, - {bishopAttackTable + 5024, 0xa102040000000ULL, 0x821200104052400ULL, 5}, - {bishopAttackTable + 5056, 0x14224000000000ULL, 0x8200084208810ULL, 5}, - {bishopAttackTable + 5088, 0x28440200000000ULL, 0x8c022040a80b0408ULL, 5}, - {bishopAttackTable + 5120, 0x50080402000000ULL, 0x2140201012100512ULL, 5}, - {bishopAttackTable + 5152, 0x20100804020000ULL, 0x10210240128120aULL, 5}, - {bishopAttackTable + 5184, 0x40201008040200ULL, 0x208600082060020ULL, 6}, + {bishopAttackTable + 0, 0x40201008040200ULL, 0x4100216240212ULL, 6}, + {bishopAttackTable + 64, 0x402010080400ULL, 0x8080110420002ULL, 5}, + {bishopAttackTable + 96, 0x4020100a00ULL, 0x4280091000005ULL, 5}, + {bishopAttackTable + 128, 0x40221400ULL, 0x24410020801400ULL, 5}, + {bishopAttackTable + 160, 0x2442800ULL, 0x4242000000311ULL, 5}, + {bishopAttackTable + 192, 0x204085000ULL, 0x882021006148000ULL, 5}, + {bishopAttackTable + 224, 0x20408102000ULL, 0xb440a0210260800ULL, 5}, + {bishopAttackTable + 256, 0x2040810204000ULL, 0x80840c0a011c00ULL, 6}, + {bishopAttackTable + 320, 0x20100804020000ULL, 0x1000040488080100ULL, 5}, + {bishopAttackTable + 352, 0x40201008040000ULL, 0x800a200202284112ULL, 5}, + {bishopAttackTable + 384, 0x4020100a0000ULL, 0xcc00098401020000ULL, 5}, + {bishopAttackTable + 416, 0x4022140000ULL, 0x8000080a00202000ULL, 5}, + {bishopAttackTable + 448, 0x244280000ULL, 0x8821210000824ULL, 5}, + {bishopAttackTable + 480, 0x20408500000ULL, 0xc000088230400020ULL, 5}, + {bishopAttackTable + 512, 0x2040810200000ULL, 0x2904494808a41024ULL, 5}, + {bishopAttackTable + 544, 0x4081020400000ULL, 0x2302882301004ULL, 5}, + {bishopAttackTable + 576, 0x10080402000200ULL, 0x910200610100104ULL, 5}, + {bishopAttackTable + 608, 0x20100804000400ULL, 0x910800850008080ULL, 5}, + {bishopAttackTable + 640, 0x4020100a000a00ULL, 0x30080010004d4009ULL, 7}, + {bishopAttackTable + 768, 0x402214001400ULL, 0x4108000c20222001ULL, 7}, + {bishopAttackTable + 896, 0x24428002800ULL, 0x22000400942005ULL, 7}, + {bishopAttackTable + 1024, 0x2040850005000ULL, 0xa021100512400ULL, 7}, + {bishopAttackTable + 1152, 0x4081020002000ULL, 0xa001000041301024ULL, 5}, + {bishopAttackTable + 1184, 0x8102040004000ULL, 0x8000420206021981ULL, 5}, + {bishopAttackTable + 1216, 0x8040200020400ULL, 0x1008480004606800ULL, 5}, + {bishopAttackTable + 1248, 0x10080400040800ULL, 0x4a8280003100100ULL, 5}, + {bishopAttackTable + 1280, 0x20100a000a1000ULL, 0x3480010182240ULL, 7}, + {bishopAttackTable + 1408, 0x40221400142200ULL, 0x2048080102820042ULL, 9}, + {bishopAttackTable + 1920, 0x2442800284400ULL, 0x4001020004008400ULL, 9}, + {bishopAttackTable + 2432, 0x4085000500800ULL, 0x204004048080200ULL, 7}, + {bishopAttackTable + 2560, 0x8102000201000ULL, 0x2008200040212a0ULL, 5}, + {bishopAttackTable + 2592, 0x10204000402000ULL, 0x10c013002430400ULL, 5}, + {bishopAttackTable + 2624, 0x4020002040800ULL, 0x4300a5082214480ULL, 5}, + {bishopAttackTable + 2656, 0x8040004081000ULL, 0x401041000215900ULL, 5}, + {bishopAttackTable + 2688, 0x100a000a102000ULL, 0x104804048040408ULL, 7}, + {bishopAttackTable + 2816, 0x22140014224000ULL, 0x800400808208200ULL, 9}, + {bishopAttackTable + 3328, 0x44280028440200ULL, 0x8002400054101ULL, 9}, + {bishopAttackTable + 3840, 0x8500050080400ULL, 0x2001004502020102ULL, 7}, + {bishopAttackTable + 3968, 0x10200020100800ULL, 0x1988080110006100ULL, 5}, + {bishopAttackTable + 4000, 0x20400040201000ULL, 0x1282009200102201ULL, 5}, + {bishopAttackTable + 4032, 0x2000204081000ULL, 0xa208010420001280ULL, 5}, + {bishopAttackTable + 4064, 0x4000408102000ULL, 0x4004010809000200ULL, 5}, + {bishopAttackTable + 4096, 0xa000a10204000ULL, 0x43008150006100ULL, 7}, + {bishopAttackTable + 4224, 0x14001422400000ULL, 0x2410145000801ULL, 7}, + {bishopAttackTable + 4352, 0x28002844020000ULL, 0x280104006040ULL, 7}, + {bishopAttackTable + 4480, 0x50005008040200ULL, 0x4012042000902ULL, 7}, + {bishopAttackTable + 4608, 0x20002010080400ULL, 0x28100482080a82ULL, 5}, + {bishopAttackTable + 4640, 0x40004020100800ULL, 0x80040c2400240240ULL, 5}, + {bishopAttackTable + 4672, 0x20408102000ULL, 0x80c1101101044a0ULL, 5}, + {bishopAttackTable + 4704, 0x40810204000ULL, 0x180804802310808ULL, 5}, + {bishopAttackTable + 4736, 0xa1020400000ULL, 0x8048080064ULL, 5}, + {bishopAttackTable + 4768, 0x142240000000ULL, 0x8c8400020880000ULL, 5}, + {bishopAttackTable + 4800, 0x284402000000ULL, 0x30001010020a2000ULL, 5}, + {bishopAttackTable + 4832, 0x500804020000ULL, 0x80600282220010ULL, 5}, + {bishopAttackTable + 4864, 0x201008040200ULL, 0x120228228010000ULL, 5}, + {bishopAttackTable + 4896, 0x402010080400ULL, 0xc08020802042300ULL, 5}, + {bishopAttackTable + 4928, 0x2040810204000ULL, 0x2a008048221000ULL, 6}, + {bishopAttackTable + 4992, 0x4081020400000ULL, 0x4601204100901002ULL, 5}, + {bishopAttackTable + 5024, 0xa102040000000ULL, 0x821200104052400ULL, 5}, + {bishopAttackTable + 5056, 0x14224000000000ULL, 0x8200084208810ULL, 5}, + {bishopAttackTable + 5088, 0x28440200000000ULL, 0x8c022040a80b0408ULL, 5}, + {bishopAttackTable + 5120, 0x50080402000000ULL, 0x2140201012100512ULL, 5}, + {bishopAttackTable + 5152, 0x20100804020000ULL, 0x10210240128120aULL, 5}, + {bishopAttackTable + 5184, 0x40201008040200ULL, 0x208600082060020ULL, 6}, }; constexpr Bitboard fileA = 0x101010101010101ULL; @@ -350,210 +350,210 @@ extern LineType lineType[64][64]; void initBitboard(); inline Bitboard::Bitboard(Square square) { - bb = bitMasks[square].bb; + bb = bitMasks[square].bb; } inline Bitboard adjacentFileMask(Square square) { - return adjacentFileMasks[square]; + return adjacentFileMasks[square]; } inline Bitboard adjacentNorthMask(Square square) { - return adjacentNorthMasks[square]; + return adjacentNorthMasks[square]; } inline Bitboard adjacentSouthMask(Square square) { - return adjacentSouthMasks[square]; + return adjacentSouthMasks[square]; } inline Bitboard pawnMask(Square square, Color color) { - return pawnMasks[square][color]; + return pawnMasks[square][color]; } inline Bitboard knightMask(Square square) { - return knightMasks[square]; + return knightMasks[square]; } inline Bitboard kingMask(Square square) { - return kingMasks[square]; + return kingMasks[square]; } inline Bitboard fileMask(Square square) { - return fileMasks[square]; + return fileMasks[square]; } inline Bitboard rankMask(Square square) { - return rankMasks[square]; + return rankMasks[square]; } inline Bitboard rookMask(Square square) { - return rookMasks[square]; + return rookMasks[square]; } inline Bitboard diagonalMask(Square square) { - return diagonalMasks[square]; + return diagonalMasks[square]; } inline Bitboard antiDiagonalMask(Square square) { - return antiDiagonalMasks[square]; + return antiDiagonalMasks[square]; } inline Bitboard bishopMask(Square square) { - return bishopMasks[square]; + return bishopMasks[square]; } inline unsigned int getMagicIndex(const Magic &m, Bitboard occ) { #ifdef BMI2 - return _pext_u64(occ.bb, m.mask.bb); + return _pext_u64(occ.bb, m.mask.bb); #else - return (((occ & m.mask) * m.magic) >> (64 - m.shift)).bb; + return (((occ & m.mask) * m.magic) >> (64 - m.shift)).bb; #endif } inline Bitboard rookAttacks(Square square, Bitboard occ) { - const Magic &m = rookMagics[square]; - return m.ptr[getMagicIndex(m, occ)]; + const Magic &m = rookMagics[square]; + return m.ptr[getMagicIndex(m, occ)]; } inline Bitboard bishopAttacks(Square square, Bitboard occ) { - const Magic &m = bishopMagics[square]; - return m.ptr[getMagicIndex(m, occ)]; + const Magic &m = bishopMagics[square]; + return m.ptr[getMagicIndex(m, occ)]; } inline Bitboard queenAttacks(Square square, Bitboard occ) { - return rookAttacks(square, occ) | bishopAttacks(square, occ); + return rookAttacks(square, occ) | bishopAttacks(square, occ); } template constexpr Bitboard pieceAttacks(Square square, Bitboard occupied) { - switch (type) { - case KNIGHT: - return knightMask(square); - case BISHOP: - return bishopAttacks(square, occupied); - case ROOK: - return rookAttacks(square, occupied); - case QUEEN: - return queenAttacks(square, occupied); - case KING: - return kingMask(square); - default: - assert(0); - return 0; - } + switch (type) { + case KNIGHT: + return knightMask(square); + case BISHOP: + return bishopAttacks(square, occupied); + case ROOK: + return rookAttacks(square, occupied); + case QUEEN: + return queenAttacks(square, occupied); + case KING: + return kingMask(square); + default: + assert(0); + return 0; + } } inline Bitboard pieceAttacks(PieceType type, Square square, Bitboard occupied) { - switch (type) { - case KNIGHT: - return knightMask(square); - case BISHOP: - return bishopAttacks(square, occupied); - case ROOK: - return rookAttacks(square, occupied); - case QUEEN: - return queenAttacks(square, occupied); - case KING: - return kingMask(square); - default: - assert(0); - } + switch (type) { + case KNIGHT: + return knightMask(square); + case BISHOP: + return bishopAttacks(square, occupied); + case ROOK: + return rookAttacks(square, occupied); + case QUEEN: + return queenAttacks(square, occupied); + case KING: + return kingMask(square); + default: + assert(0); + } } template inline Bitboard pieceAttacks(PieceType type, Square square, Bitboard occupied) { - switch (type) { - case PAWN: - return pawnMask(square, color); - case KNIGHT: - return knightMask(square); - case BISHOP: - return bishopAttacks(square, occupied); - case ROOK: - return rookAttacks(square, occupied); - case QUEEN: - return queenAttacks(square, occupied); - case KING: - return kingMask(square); - default: - assert(0); - return 0; - } + switch (type) { + case PAWN: + return pawnMask(square, color); + case KNIGHT: + return knightMask(square); + case BISHOP: + return bishopAttacks(square, occupied); + case ROOK: + return rookAttacks(square, occupied); + case QUEEN: + return queenAttacks(square, occupied); + case KING: + return kingMask(square); + default: + assert(0); + return 0; + } } template constexpr Bitboard step(Bitboard b) { - switch (direction) { - case NORTH: - return b << 8; - case SOUTH: - return b >> 8; - case NORTH_WEST: - return (b & notFileA) << 7; - case WEST: - return (b & notFileA) >> 1; - case SOUTH_WEST: - return (b & notFileA) >> 9; - case NORTH_EAST: - return (b & notFileH) << 9; - case EAST: - return (b & notFileH) << 1; - case SOUTH_EAST: - return (b & notFileH) >> 7; - } + switch (direction) { + case NORTH: + return b << 8; + case SOUTH: + return b >> 8; + case NORTH_WEST: + return (b & notFileA) << 7; + case WEST: + return (b & notFileA) >> 1; + case SOUTH_WEST: + return (b & notFileA) >> 9; + case NORTH_EAST: + return (b & notFileH) << 9; + case EAST: + return (b & notFileH) << 1; + case SOUTH_EAST: + return (b & notFileH) >> 7; + } } constexpr Bitboard step(Direction direction, Bitboard b) { - switch (direction) { - case NORTH: - return b << 8; - case SOUTH: - return b >> 8; - case NORTH_WEST: - return (b & notFileA) << 7; - case WEST: - return (b & notFileA) >> 1; - case SOUTH_WEST: - return (b & notFileA) >> 9; - case NORTH_EAST: - return (b & notFileH) << 9; - case EAST: - return (b & notFileH) << 1; - case SOUTH_EAST: - return (b & notFileH) >> 7; - } - return 0; + switch (direction) { + case NORTH: + return b << 8; + case SOUTH: + return b >> 8; + case NORTH_WEST: + return (b & notFileA) << 7; + case WEST: + return (b & notFileA) >> 1; + case SOUTH_WEST: + return (b & notFileA) >> 9; + case NORTH_EAST: + return (b & notFileH) << 9; + case EAST: + return (b & notFileH) << 1; + case SOUTH_EAST: + return (b & notFileH) >> 7; + } + return 0; } template constexpr Bitboard slide(Square square) { - Bitboard result; - Bitboard temp = {square}; - while (temp) { - temp = step(temp); - result |= temp; - } - return result; + Bitboard result; + Bitboard temp = {square}; + while (temp) { + temp = step(temp); + result |= temp; + } + return result; } inline Bitboard slide(Direction direction, Square square) { - Bitboard result; - Bitboard temp = {square}; - while (temp) { - temp = step(direction, temp); - result |= temp; - } - return result; + Bitboard result; + Bitboard temp = {square}; + while (temp) { + temp = step(direction, temp); + result |= temp; + } + return result; } template constexpr Bitboard slide(Square square, Bitboard occupied) { - Bitboard result; - Bitboard temp = {square}; - while (temp && !occupied.get(temp.lsb())) { - temp = step(temp); - result |= temp; - } - return result; + Bitboard result; + Bitboard temp = {square}; + while (temp && !occupied.get(temp.lsb())) { + temp = step(temp); + result |= temp; + } + return result; } Bitboard slidingAttacks(Square square, Bitboard occupied, PieceType type); diff --git a/src/constants.h b/src/constants.h index fdd763b..397647a 100644 --- a/src/constants.h +++ b/src/constants.h @@ -47,71 +47,71 @@ const std::string STARTING_FEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w constexpr unsigned int RANDOM_SEED = 1254383; enum Square : int { - A1 = 0, - B1 = 1, - C1 = 2, - D1 = 3, - E1 = 4, - F1 = 5, - G1 = 6, - H1 = 7, - A2 = 8, - B2 = 9, - C2 = 10, - D2 = 11, - E2 = 12, - F2 = 13, - G2 = 14, - H2 = 15, - A3 = 16, - B3 = 17, - C3 = 18, - D3 = 19, - E3 = 20, - F3 = 21, - G3 = 22, - H3 = 23, - A4 = 24, - B4 = 25, - C4 = 26, - D4 = 27, - E4 = 28, - F4 = 29, - G4 = 30, - H4 = 31, - A5 = 32, - B5 = 33, - C5 = 34, - D5 = 35, - E5 = 36, - F5 = 37, - G5 = 38, - H5 = 39, - A6 = 40, - B6 = 41, - C6 = 42, - D6 = 43, - E6 = 44, - F6 = 45, - G6 = 46, - H6 = 47, - A7 = 48, - B7 = 49, - C7 = 50, - D7 = 51, - E7 = 52, - F7 = 53, - G7 = 54, - H7 = 55, - A8 = 56, - B8 = 57, - C8 = 58, - D8 = 59, - E8 = 60, - F8 = 61, - G8 = 62, - H8 = 63, - NULL_SQUARE = 64 + A1 = 0, + B1 = 1, + C1 = 2, + D1 = 3, + E1 = 4, + F1 = 5, + G1 = 6, + H1 = 7, + A2 = 8, + B2 = 9, + C2 = 10, + D2 = 11, + E2 = 12, + F2 = 13, + G2 = 14, + H2 = 15, + A3 = 16, + B3 = 17, + C3 = 18, + D3 = 19, + E3 = 20, + F3 = 21, + G3 = 22, + H3 = 23, + A4 = 24, + B4 = 25, + C4 = 26, + D4 = 27, + E4 = 28, + F4 = 29, + G4 = 30, + H4 = 31, + A5 = 32, + B5 = 33, + C5 = 34, + D5 = 35, + E5 = 36, + F5 = 37, + G5 = 38, + H5 = 39, + A6 = 40, + B6 = 41, + C6 = 42, + D6 = 43, + E6 = 44, + F6 = 45, + G6 = 46, + H6 = 47, + A7 = 48, + B7 = 49, + C7 = 50, + D7 = 51, + E7 = 52, + F7 = 53, + G7 = 54, + H7 = 55, + A8 = 56, + B8 = 57, + C8 = 58, + D8 = 59, + E8 = 60, + F8 = 61, + G8 = 62, + H8 = 63, + NULL_SQUARE = 64 }; constexpr unsigned char WK_MASK = 1; @@ -120,108 +120,108 @@ constexpr unsigned char BK_MASK = 4; constexpr unsigned char BQ_MASK = 8; inline Square operator+(Square &a, int b) { - return Square(int(a) + b); + return Square(int(a) + b); } inline Square operator-(Square &a, int b) { - return Square(int(a) - b); + return Square(int(a) - b); } inline Square operator+=(Square &a, int b) { - return a = a + b; + return a = a + b; } inline Square operator-=(Square &a, int b) { - return a = a - b; + return a = a - b; } inline Square stringToSquare(std::string s) { - if (s[0] == '-') { - return NULL_SQUARE; - } else if ('a' <= s[0] && s[0] <= 'z') { - return Square((s[0] - 'a') + (s[1] - '1') * 8); - } else if ('A' <= s[0] && s[0] <= 'Z') { - return Square((s[0] - 'A') + (s[1] - '1') * 8); - } - - return NULL_SQUARE; + if (s[0] == '-') { + return NULL_SQUARE; + } else if ('a' <= s[0] && s[0] <= 'z') { + return Square((s[0] - 'a') + (s[1] - '1') * 8); + } else if ('A' <= s[0] && s[0] <= 'Z') { + return Square((s[0] - 'A') + (s[1] - '1') * 8); + } + + return NULL_SQUARE; } inline std::istream &operator>>(std::istream &is, Square &square) { - std::string s; - is >> s; + std::string s; + is >> s; - square = stringToSquare(s); + square = stringToSquare(s); - return is; + return is; } enum LineType : int { - HORIZONTAL = 0, - VERTICAL = 1, - DIAGONAL = 2, - ANTI_DIAGONAL = 3 + HORIZONTAL = 0, + VERTICAL = 1, + DIAGONAL = 2, + ANTI_DIAGONAL = 3 }; enum Direction : int { - NORTH = 8, - WEST = -1, - SOUTH = -8, - EAST = 1, - NORTH_EAST = 9, - NORTH_WEST = 7, - SOUTH_WEST = -9, - SOUTH_EAST = -7 + NORTH = 8, + WEST = -1, + SOUTH = -8, + EAST = 1, + NORTH_EAST = 9, + NORTH_WEST = 7, + SOUTH_WEST = -9, + SOUTH_EAST = -7 }; constexpr Direction DIRECTIONS[8] = {NORTH, WEST, NORTH_EAST, NORTH_WEST, SOUTH, EAST, SOUTH_WEST, SOUTH_EAST}; constexpr Direction opposite(Direction direction) { - return Direction(-direction); + return Direction(-direction); } constexpr Direction operator-(Direction direction) { - return opposite(direction); + return opposite(direction); } enum PieceType { - PIECE_EMPTY = 6, - KING = 0, - PAWN = 1, - KNIGHT = 2, - BISHOP = 3, - ROOK = 4, - QUEEN = 5 + PIECE_EMPTY = 6, + KING = 0, + PAWN = 1, + KNIGHT = 2, + BISHOP = 3, + ROOK = 4, + QUEEN = 5 }; enum Color { - COLOR_EMPTY = 2, - WHITE = 0, - BLACK = 1 + COLOR_EMPTY = 2, + WHITE = 0, + BLACK = 1 }; enum NodeType { - ROOT_NODE, - PV_NODE, - NON_PV_NODE + ROOT_NODE, + PV_NODE, + NON_PV_NODE }; constexpr PieceType PIECE_TYPES_BY_VALUE[6] = {PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING}; struct Piece { - PieceType type = PIECE_EMPTY; - Color color = COLOR_EMPTY; + PieceType type = PIECE_EMPTY; + Color color = COLOR_EMPTY; - constexpr Piece() = default; + constexpr Piece() = default; - constexpr Piece(PieceType t, Color c) { - type = t; - color = c; - } + constexpr Piece(PieceType t, Color c) { + type = t; + color = c; + } - constexpr bool isNull() const { - return type == PIECE_EMPTY || color == COLOR_EMPTY; - } + constexpr bool isNull() const { + return type == PIECE_EMPTY || color == COLOR_EMPTY; + } }; // 2 colors * 6 types * 64 square = 768 @@ -230,397 +230,397 @@ struct Piece { // 1 number if the side is black const U64 randTable[781] = { - 0x4ef488bfae17abbaULL, 0x1b608e38d5cf7308ULL, - 0x851dabc8d9c029daULL, 0x62ff3fd5ca1fe189ULL, - 0xb58f435e51ec54d9ULL, 0xd6478aa5957c39eaULL, - 0x1a84642313330ed8ULL, 0x24b6ff164e7af0f7ULL, - 0x6be96adf24b3816cULL, 0xece099a9b0d53073ULL, - 0xdb8346d2cf6a823ULL, 0x7010f7da6962efd5ULL, - 0xc70fcf5e7ac61c40ULL, 0x69c81f400aacb213ULL, - 0x543deca39cd4669cULL, 0xbccbf8f1ac568f1aULL, - 0x1b657f6eb9085b4dULL, 0x8dbc14bcc7085c8eULL, - 0x31b11a994768a079ULL, 0xdb65d6222d174223ULL, - 0x69a37f411c1015ULL, 0x7277d9df84e80ce3ULL, - 0xffb2d94597293905ULL, 0xd6c7002205dad90aULL, - 0xec0979ba90e44095ULL, 0x8f7f5e9303057addULL, - 0x4ba8f1c0656c62a6ULL, 0x1b40d16f768690dcULL, - 0x51166315ea155c2cULL, 0x33aad4f2bc026d3fULL, - 0x54dafe930aa273d0ULL, 0x1d885cc020e4e77aULL, - 0xf8eb51befffbede4ULL, 0xefa21aa88e2ad467ULL, - 0x1e639296082a76b6ULL, 0x95d9c8ebce333424ULL, - 0x5ea0892946799861ULL, 0xc0930a65ce836ab4ULL, - 0x5a674325485b4e7fULL, 0x8b99f12278470c72ULL, - 0xa4e008d3283c94e8ULL, 0x6fbe24c1740a6981ULL, - 0xea1273d134b0f010ULL, 0x152d52d9c30c78efULL, - 0x9dc76a5d5c289ae0ULL, 0xc5c6dbe7f09411a7ULL, - 0x2073418d01c03687ULL, 0xa0c17a6f4f985f7ULL, - 0x7d9c1720beb9db73ULL, 0x6849424ca595606dULL, - 0xb29fba8417b80df4ULL, 0x61f12e84c28750aeULL, - 0x8bf8fcd9f3f1b1edULL, 0xd0ce225a433287c4ULL, - 0x775917e60886c9e3ULL, 0x486ada4af87cc0abULL, - 0xee6da9bca06fa88eULL, 0x24887e607e1c950dULL, - 0xbad992958c65ef8eULL, 0x66563aeb0c4728c8ULL, - 0x140f0bfc12d599c5ULL, 0x1a8a7286be1ad376ULL, - 0x965c145f47a5e3d8ULL, 0x3bfd4d07824890c4ULL, - 0x8e9e7a0370aa060eULL, 0xc8d523c52edd3d75ULL, - 0x3cfca5a158ac9985ULL, 0x9adc9ad634e45bcbULL, - 0x310f96adc5796c5cULL, 0x96b7c3b005c1d41bULL, - 0xefc6b36f68cd44b9ULL, 0xb9e32448740802e0ULL, - 0xe41875586b23a7ccULL, 0xdf11200a2af368eeULL, - 0xccce23fb87e01cb9ULL, 0x6cd74548000380deULL, - 0x2068ab7c48d2ec38ULL, 0x3f8d34605d6d160dULL, - 0x2f81480ab31791beULL, 0x70dbffe0f42c55a9ULL, - 0x464b1ccca9b60873ULL, 0xd8197bb6610f4a26ULL, - 0xc9285e20789da7cULL, 0xd5735a684fc9656ULL, - 0x5b2c4e2fb331fd65ULL, 0x7c307e89787b59a1ULL, - 0xfd67c65dcf80bc5fULL, 0x89aca3d35d4f61e0ULL, - 0x67b203f3de779d44ULL, 0xa39d8dd5b5cbbc6ULL, - 0x33524df0e5afbd58ULL, 0x537f4763dc8ff6dULL, - 0x9a5798c41a86ae87ULL, 0x3794e55b391f0b97ULL, - 0xb154b14aac830d0ULL, 0x5caa36bbe5a0e263ULL, - 0x900f52b8661fcb0eULL, 0x957561cdd87be82fULL, - 0xdfbe8f1da18c3111ULL, 0x7a6f1024756f626bULL, - 0x5c4ab867aee28e4fULL, 0xbdaf1cd791244211ULL, - 0x2228f2f8d4f28439ULL, 0x4edd616d5aad4c8ULL, - 0xb27b2f3225769f69ULL, 0x1425c27823849280ULL, - 0xae76ce5d77c504eeULL, 0x2779747ca414ebc8ULL, - 0xe4ef214a300c5c0dULL, 0xed4c07343bd0d849ULL, - 0x4f9b26a8a371df7cULL, 0x303562d4fd5501bdULL, - 0x3f0e099b1dd1ab96ULL, 0x8500302b98f9de08ULL, - 0x7b9dad80e5c7b10ULL, 0x9ccdf0c5e8245906ULL, - 0xfee6417294e52bd3ULL, 0x6a85cc0e7dfd0defULL, - 0x4aab0010efaff4d7ULL, 0x8b0ac3450ebc6a6eULL, - 0xe5aaa01795063e90ULL, 0x87378e42e097549bULL, - 0x2f7942b8aada0a9dULL, 0x834bad7e2a7087a3ULL, - 0x2102570d02344402ULL, 0x15ccf7864011db09ULL, - 0x69a3f87974b90867ULL, 0xbc061d452ff48a89ULL, - 0xa8b23bf0a0ff3926ULL, 0x4eff3a36103d3ba0ULL, - 0x5d85348b3bcae7b2ULL, 0xb93e7a1145e5b5dcULL, - 0xa5d7fbf64201e5e4ULL, 0x16a0dc5777406be9ULL, - 0x11705137b3f7dbb1ULL, 0xf9c5c349d5216f0eULL, - 0x7ff95761cf184259ULL, 0x51a4d1ccb7afdeceULL, - 0x73e35224634a880ULL, 0x6486ba6de09e55b7ULL, - 0xec2e1735a409693bULL, 0x4a32aa8e00d54148ULL, - 0xd1ad6d6f57b14c0cULL, 0xbb8c972637c64696ULL, - 0xc1367bf134c6785cULL, 0x4f5fa35416f09e99ULL, - 0x8ff1a2f1c6a485acULL, 0x309e4941e7a51b39ULL, - 0xbb015739220065f7ULL, 0x15c93d157f460ca8ULL, - 0x9b5e446785a25be9ULL, 0xdf672b8e44dccffaULL, - 0xc6f0e8348fdde7a5ULL, 0xdb72d3ffa3740dabULL, - 0x27a907bf1d1aba62ULL, 0x4bfe65e196423003ULL, - 0xa52e8487e57ec77aULL, 0x2cb75b88afd3dbdfULL, - 0x15f1fe898c111f19ULL, 0x1d572ea679042ce0ULL, - 0xe130479b204d25dbULL, 0x412ce0d560b048f8ULL, - 0x941173a2d0c645f1ULL, 0xd4b541013f264760ULL, - 0x3427e4d5d1a2a27ULL, 0x4bcaa0619e8e733bULL, - 0xa13b6e82e52f1643ULL, 0x722ba71b722670cdULL, - 0x38eb0d3ec3e77f62ULL, 0x1e7bb16186c390fdULL, - 0x8b1fc3896dfcef99ULL, 0xa5e23c9ebed4e8fcULL, - 0x7cd15354990c856dULL, 0x808d16c17a97b916ULL, - 0x3653a3d7864d8bbaULL, 0x54b0b596cdeb0f82ULL, - 0xcf3f60ffd38fb97bULL, 0x72e37da591c9b91fULL, - 0x84e18873e75898e4ULL, 0xeff11a5af6809bb0ULL, - 0x8af4ebace6b714ecULL, 0xaa4b1e42d5d10f26ULL, - 0xbcceef4a1feb7b40ULL, 0xf9ebb16e54eaf81bULL, - 0xb9aef6775240c929ULL, 0xb540bc9e71416e61ULL, - 0x518fe188eded4203ULL, 0x221d99c8f8bfd5b7ULL, - 0xc38ba67f3a338066ULL, 0xabc5069a1d6cc43ULL, - 0x21b22c043f2a8875ULL, 0xd74c9c5103fbfb3fULL, - 0xffcc2122caa78d7bULL, 0x76451830ceddee8ULL, - 0x247a6f2c0dd1586cULL, 0x52eef33635cacc7aULL, - 0xabe97ca6f9662cabULL, 0xa276321ccf1259ceULL, - 0xcb839d28b380f78ULL, 0x8055e3152e35e57ULL, - 0xbf59fb51057f5ac8ULL, 0x1b7d309c100f5b9aULL, - 0xb70ab3b1362f7ec3ULL, 0x87348440973488e5ULL, - 0x6af83f6e1d775c42ULL, 0x6cb5ba286d550eeaULL, - 0xfeb0c55e4eb7c047ULL, 0x9e20a0a79e40278fULL, - 0x4c4c42865d7c8c56ULL, 0xa8c5aecd505a8285ULL, - 0xa416d49733947e17ULL, 0x703a72e0113b1b15ULL, - 0x39770e959139b6a8ULL, 0x323ef9a4a3b209d4ULL, - 0xa8789a6b73541e98ULL, 0xe48d2b3a77fc3f6dULL, - 0x9a53f3778b46625eULL, 0x451b14e0dbe2ba7eULL, - 0xff936fc73fcb562cULL, 0x563f1a92ac3dab96ULL, - 0x8009fd8127ce5dd4ULL, 0x1fe44b04b27c4d74ULL, - 0x1bddbcb6dfd04c66ULL, 0xd1d59cc480da1ee6ULL, - 0xe0b2a33234409fa0ULL, 0x65c413574467da90ULL, - 0x979ccc89e5cf4b63ULL, 0x98bd96a4a29b3f31ULL, - 0x9917a96a7861c6a8ULL, 0x86fb59d30d1749f7ULL, - 0xd24e0e1e46e13ffcULL, 0xef47c0e7cb34eacdULL, - 0x3c3d8ad364a19d9fULL, 0xe1adf5f2eb3c58b8ULL, - 0xf090b59acd76efe5ULL, 0x90fec91f5ff633d4ULL, - 0xe8bc857e3f52e36bULL, 0x4339fadb39b0c022ULL, - 0x48ca28afd56c6022ULL, 0xb883f7d594e5feb1ULL, - 0x60647e12153912baULL, 0xcfba643175b17b1eULL, - 0xf49e02ccf10b3b18ULL, 0xa87c62b52eb20c74ULL, - 0xa3fe6658bf250c0cULL, 0x7f96fb396d7ae7aULL, - 0x8a04813c94856826ULL, 0xb4658d520f23975eULL, - 0xde333be245da49c0ULL, 0x31dff5ce643f1702ULL, - 0x949af87a549dab18ULL, 0x63335e199039c685ULL, - 0xd3bfb1f85b631a2cULL, 0x83fe4b755fd13d82ULL, - 0x2b9a11c97d74d5c2ULL, 0x96c1075ca256561aULL, - 0x9bd796371a7471cULL, 0x255c487ca55fd070ULL, - 0xb9716816c0e0d528ULL, 0x248723c56eeb7720ULL, - 0x610c2245f1921cULL, 0x3dcd62eb1d233973ULL, - 0xf6312646440e81c4ULL, 0x11fd03c380eab5baULL, - 0x5e55d9b4c19e5653ULL, 0x5e1f9c64cbe206b8ULL, - 0xc95323b729adc6e3ULL, 0xa5c0221d0f783a2bULL, - 0xb04d620a4d82cfebULL, 0xaf19ed57ccb129d0ULL, - 0xb8822c82928dd3e0ULL, 0xff6fd0c799541911ULL, - 0x752aafc4d762a830ULL, 0xf1118eb988c18b1cULL, - 0x1a6329e05224a736ULL, 0x9245204314dcdfe7ULL, - 0xed767f78545355d2ULL, 0x815acab3feb7900eULL, - 0x47f22a0cd634bc40ULL, 0xec2150afe4587f5bULL, - 0x3c484edd3f6f92d8ULL, 0x34a09aeada42e7eULL, - 0x29a434cf85fbdb04ULL, 0xd6c13eacdba32fecULL, - 0xa32d234290c51672ULL, 0xd301f3ada78249feULL, - 0xcd811f1efc2eead5ULL, 0x835457b34bab9e68ULL, - 0x181d24352631d82cULL, 0x8b45b912ca31d58dULL, - 0x1d6848348ec4ace5ULL, 0xc0aaf998beb88726ULL, - 0x1e8b4967c5af7c04ULL, 0xce8936ee45eefed9ULL, - 0x783c919b02ed3b82ULL, 0x72ce2fe88e153173ULL, - 0xd378f6a2df2c2e0cULL, 0xfb08aac2ee4a9e63ULL, - 0x1ec016a3ac2dbe0fULL, 0x475781f94fcbb7e3ULL, - 0x80f62a1e4ba4c50ULL, 0x10cf614e7adfc50bULL, - 0x32f64cbb84baa644ULL, 0x4db0d9f741b5cc38ULL, - 0x504344a0d07fda24ULL, 0x31c6d96248e05180ULL, - 0x8aab53db86275cacULL, 0x7e54f242474170f2ULL, - 0xa0d66308bd7bd65eULL, 0x3bd7fac1b8e5862ULL, - 0x516a4699f8ef4795ULL, 0xf1c9819a81809c9bULL, - 0xbb179cb7b69be105ULL, 0xa2997c2f69adb7acULL, - 0x3e2b82eee227f520ULL, 0x7f4814295541eb88ULL, - 0x3f95131c7938ae98ULL, 0x8c794a88fdaa5c96ULL, - 0xe995bd6613be075eULL, 0x168ecc747d13e52cULL, - 0xf34ee3443dee4bf9ULL, 0x42d5973ad0c37a75ULL, - 0x7b7eaecd8b56fddULL, 0x2fe24f61a33fc790ULL, - 0x64f78049d9027152ULL, 0xe67199262c305f69ULL, - 0x713b1b64d2383435ULL, 0xfee8d25b603ce2ddULL, - 0xd9adba56036e1351ULL, 0x5f2e7b36093e3f88ULL, - 0x6f9e79d8c47598ffULL, 0xb2312be3bf2eea4aULL, - 0xf2f2332baee0350fULL, 0xc1ece6dc79ab182dULL, - 0x8fd06333941a9fd6ULL, 0x629474ad192cacd5ULL, - 0x437a75202034b018ULL, 0xf9b98f21eea6f0caULL, - 0x2bf74641859777cfULL, 0xa02e3f2a08f19ef3ULL, - 0x1428f18c2a0bc0c8ULL, 0x1eb7a4e58ad098e0ULL, - 0xaed59e19b84f986aULL, 0x8e3f5245dbb77ef4ULL, - 0x9375c5327eb7d476ULL, 0x32782fef06c0cac7ULL, - 0xfc1a5392d7a43a6dULL, 0x5a5b8cf9810dbd00ULL, - 0xa8d0616cc96fcb70ULL, 0xeba216f0c7c22ea3ULL, - 0xf35625f70bf7d031ULL, 0x9d56c654583ce93bULL, - 0x1ae33a218238ea27ULL, 0xb865584a0811f9d9ULL, - 0xf9065d696d85514cULL, 0xee33a2c5133d068eULL, - 0xb4b2ab633b2ecd38ULL, 0x9cdc9a04cdc594ffULL, - 0x2f745ae57a3f043ULL, 0x1ede01f5037a92d2ULL, - 0xcef5984903f8984fULL, 0x183a79488d33e3b2ULL, - 0x1f3b9bf5c525fcc9ULL, 0x4169c9bdc608ff1cULL, - 0x8fdf3ca348d00c21ULL, 0x2b472034fde89860ULL, - 0x94ac5ca7c6e93e80ULL, 0x70fe25941302b0d1ULL, - 0xa6269b60f21ba380ULL, 0xcb518e0ae9c0aae4ULL, - 0x6e80ae4af54b28afULL, 0x79ceb17e48189126ULL, - 0xad89b6f68254de83ULL, 0xdda2c183a04d3489ULL, - 0xf6a67b91699bbb14ULL, 0xb445c2b018a1700ULL, - 0x4a50f28f965c2c5fULL, 0x1153b066f4d3889aULL, - 0xc86ec6e3ac241950ULL, 0xfe910b08c2bb060dULL, - 0x867496fded3c83e3ULL, 0xaebac214a1d7a1b3ULL, - 0xd65fb3b895a6d20ULL, 0x58aafe1d13a3ac78ULL, - 0xf47ce780dc44cf25ULL, 0x3e56c3611756c1feULL, - 0x3fb3e4f6d0483849ULL, 0x1a5c6b2e10ce205ULL, - 0xa9c529fd702edd6eULL, 0x869649faa5a1aee9ULL, - 0x1b8d911c776ec17cULL, 0x4e43b5428c8ed2abULL, - 0x775b758b4d9b3c9aULL, 0x8804d262fc071badULL, - 0x61d4695f713793b5ULL, 0x2db7ec74f5c05479ULL, - 0x664a809299686590ULL, 0xa8d033c5115e487eULL, - 0xe619ef70eb5a16acULL, 0xcd8b964a4281bfd5ULL, - 0xcef1aeef7d350c7fULL, 0x4674942f573a9ce5ULL, - 0x6dc0b11b30519e13ULL, 0x93df9452b5dcd8cbULL, - 0x9448f6f930deea98ULL, 0xed6eebca0706f29fULL, - 0x902200e6d2a3eb8bULL, 0x8729df3b219138acULL, - 0xcfc2bc0b6c88e014ULL, 0x5238e41b26599129ULL, - 0xee293f799e223f91ULL, 0xb1a2ef20a726114fULL, - 0x5f691e62fde20700ULL, 0x40b288b5aa28284cULL, - 0x37e0deebffaee7faULL, 0xba19fa6bbe3807e3ULL, - 0x4c6b7bfb9e9686a8ULL, 0xc7c761ba0e630b0dULL, - 0x12dd354400a464dbULL, 0x3e6cd81067e4545bULL, - 0x62f6f8ab23cc7855ULL, 0x60ef3c823b23d03aULL, - 0x3b8f1621794f84baULL, 0x5f317bcf29799a35ULL, - 0xd486d926a75263bcULL, 0xfa08e546eeabf2b5ULL, - 0x2de31bb003cc3076ULL, 0xcfd849eabb6bf6f8ULL, - 0x94d2f96c14d03c4eULL, 0x7cb7390dc796f98dULL, - 0x978a9733a3c105b3ULL, 0x6c7026ef2197c422ULL, - 0xbeb427a113122ee8ULL, 0x8522cbae77bc3afbULL, - 0xa013ef165581a060ULL, 0xddd17ae26c8f83fdULL, - 0x20ec4adcd53f5e2cULL, 0xa2a0d6c8e11de5bULL, - 0xd540e3516ac796b3ULL, 0x2cb963a350f1853dULL, - 0x3faae45402362ce7ULL, 0x32bbfccb615eaab1ULL, - 0x7d0833ac51ad1830ULL, 0x99305a7a7134e457ULL, - 0x5b989947a49efe86ULL, 0x6a6782e86aadc279ULL, - 0x66c06c92963784a3ULL, 0x95d5ee699932c142ULL, - 0x7c85986f37b8c1fbULL, 0x9c4fe3c2608495d2ULL, - 0xfd949ca2a7fd6654ULL, 0x8cc451cc93362187ULL, - 0x4502ee450cd8f8deULL, 0x350ca2eba9c817f0ULL, - 0xe5ed9484ecd2865ULL, 0xd6d294e1a63e1bd4ULL, - 0x407fe7fc78bf4a42ULL, 0x5d1e54565e373e99ULL, - 0x8f4c8f1539335ed0ULL, 0x9435975634b24565ULL, - 0xc4c11eb58a8b5ac6ULL, 0x8cf964566edaa61dULL, - 0x603299d26fa4409fULL, 0x4eaec27e571f9478ULL, - 0x2da410afdc0c7c07ULL, 0xa7b1c3237a1f7653ULL, - 0xd790d29141a56a3aULL, 0x64824a6cfa39ff28ULL, - 0x51883faf43fd25b2ULL, 0x5a938601203e32cbULL, - 0x3809ed67f923807fULL, 0xa6bdfc79447d1306ULL, - 0x79a001afbc97a49bULL, 0x501f11ac9d772e2cULL, - 0xdb7a2355f1f1c913ULL, 0xf2e018fa0a676207ULL, - 0xd451eea58e08137dULL, 0xf13a570d5ef737d6ULL, - 0x3f4ed84b0708f566ULL, 0xdc06604f709bc7bdULL, - 0xc4d17abee8b007aULL, 0x89b6a700afad7f15ULL, - 0x72f4003abba3549fULL, 0x7c0f7ec5cf3865fbULL, - 0xde391dec54a0d797ULL, 0xb45067f02bfe4b3cULL, - 0xea09e08c94bb3acULL, 0x329493d1e58875ecULL, - 0x1f6188a0d0c9765cULL, 0xf9780f58c8656f56ULL, - 0x73c62a39f796f99aULL, 0xeb625a8da0599a07ULL, - 0xf6aaef39e7e2b217ULL, 0x5fc0de127ee8b4c7ULL, - 0xf57798668b86ac45ULL, 0x454dcf315d5fa2d6ULL, - 0x80af178025adf8d0ULL, 0xd65da73ed5ef923ULL, - 0xb7a2ebe31805fa2cULL, 0xd12f9282362b2304ULL, - 0xcdf6cdd669f87400ULL, 0xa250eabbcfc5d25fULL, - 0xae00b05fb2ae4014ULL, 0xebc9edc4206fa6cbULL, - 0x7689ed2cadd75ec1ULL, 0x4a7e124305d9e14cULL, - 0x2c3bdc6dd2f17394ULL, 0x55eaf991d6f0feabULL, - 0x26fc46b584950b50ULL, 0xd1fd62345d4ce0e8ULL, - 0x8a23992ea3d7e47bULL, 0x875e0896d407b09fULL, - 0xc643961123bf68d8ULL, 0x1a94d8f1b3b6396ULL, - 0x8c0298fb53f4f45eULL, 0xe2852828f7f9fa2dULL, - 0x21dcadd35862a95cULL, 0x1bb936f6bf48665aULL, - 0x7adc2a8b206b4cfeULL, 0xc505891fc46c54bcULL, - 0x1409e52ff1155b44ULL, 0x21205a745fc6f119ULL, - 0x3ace40e876181924ULL, 0x358d1c0927d5e6a6ULL, - 0xd9367a5805c967caULL, 0x30b9ea14a65d5166ULL, - 0xad641697fcb57c65ULL, 0x1e1935296140ce21ULL, - 0xf6cb4244858f5c0ULL, 0x5bc33c52c56e7adaULL, - 0x7c240347ad29ee9dULL, 0x38c3d7c57cc6ebf9ULL, - 0x3d11adba2060fbdaULL, 0x7559ead850090e06ULL, - 0xfd5e13ca4082b63dULL, 0x166a5bb6945d5ef7ULL, - 0x5546f01c2b69bd55ULL, 0x5fd08bb5eff91708ULL, - 0x58c1f08abbd41db4ULL, 0x9472e8384245280ULL, - 0x773b5b811184e9daULL, 0x36009938bdf09510ULL, - 0x2f423987abbd7897ULL, 0xc7a428ad2b40569bULL, - 0x2db547e5c4eac72fULL, 0xbcd4710dc0294b65ULL, - 0xa1ecbd582f58ab6dULL, 0xf45a55c2bf631c3fULL, - 0x79c87516d4f89dd6ULL, 0xe63e61780d389467ULL, - 0x53ae6a68eb68bf1bULL, 0x231d521de4ea3eabULL, - 0x98dcf370807e85edULL, 0xcbd18662ec57627bULL, - 0x17ccb5409b5be7c5ULL, 0x916858886ad455e8ULL, - 0x12d5cfd28093fa1bULL, 0x849433c93b78ae1bULL, - 0x483de1bbcd54588bULL, 0xc4542529e1400253ULL, - 0xe7ba10aaac73d3d4ULL, 0x60716cc47639c8c0ULL, - 0x8d0f798f8016db29ULL, 0xc7f540363e5d38c0ULL, - 0x71f8eb2cbde3f2a4ULL, 0x73f51915cfb11591ULL, - 0x8e368be8220fbed8ULL, 0xe6634d8d5481c274ULL, - 0xfded89783c7d7d45ULL, 0x3a14056f6fb7aad6ULL, - 0x9c004929888c348ULL, 0xb47cb32c65003d99ULL, - 0x544263587ab108beULL, 0xe86fe92c1f254ad8ULL, - 0x5a757f4aa565ba2fULL, 0x6821483d80e763ffULL, - 0xbceaf85474a4a459ULL, 0x1cd6e6d20c667900ULL, - 0xe7b38fccff113c7bULL, 0x20361c9a7ec6b064ULL, - 0x99ff2481edd18564ULL, 0xb616e25d79d6642cULL, - 0xdf0ce9291722e828ULL, 0x491db70eb9314fb4ULL, - 0xab2bff7e330d3061ULL, 0x4232ed0a2e93d8a8ULL, - 0x6d55fcf2098eca3eULL, 0x909d9001b58e3f5eULL, - 0x82065263e6c495b2ULL, 0x54c2239d9e98cd65ULL, - 0xb5253fdbb715a77eULL, 0x7d4abc24bc60a674ULL, - 0xab5b6ed65d25fa03ULL, 0x56c7311e57cbd8e6ULL, - 0x865e2030ff154748ULL, 0x7f4e6b4a04ac3248ULL, - 0xf42dd3d5244b697aULL, 0xd7ecc66e36dcfb01ULL, - 0x6f5a6edeaf36f57fULL, 0xfa2d8db39c449a39ULL, - 0xe71efc1684cf44beULL, 0x75d9c8cff2c9e1c2ULL, - 0xe36a2caf0087bf36ULL, 0x79d5716971860e60ULL, - 0xf73afb6d93e9fc40ULL, 0xe60ff6946b7cc27bULL, - 0xd7a71a4be5007a5aULL, 0x47d93d3126c8823ULL, - 0x8d988ee64bcc0e9fULL, 0x7c3b9f53e45af01ULL, - 0x4588669519b5b9bULL, 0x1cb3098aa4122760ULL, - 0xd7903ac6afc8390ULL, 0x44bd7b928dd8e7e5ULL, - 0x578ac5e77f09c3a3ULL, 0x847e04f37d6998b1ULL, - 0x6ec83dfbd780d189ULL, 0x490810c885fd662bULL, - 0xe25841c565edee7fULL, 0x144ba2ed46b28fe2ULL, - 0x1066ddb06e90ee12ULL, 0xf5c5d6f35fe8e694ULL, - 0x73f84c285181738fULL, 0x8c7881debcd4ad91ULL, - 0x33a961f1cd1b1c0aULL, 0xbc75c5755cfecb81ULL, - 0xb2ac5cadbb9d8fd3ULL, 0x5621d4ab21a9a722ULL, - 0x51ba2205bb14e851ULL, 0x851c873f570b9de6ULL, - 0x78eecadacb3d0202ULL, 0x8933104e7337b965ULL, - 0x1f28bc249a2e5b46ULL, 0x7fd5c88533cbe11aULL, - 0xde58e22c6fee97caULL, 0xe3da2f25b2385cfeULL, - 0xec06b46697321104ULL, 0x1ae0829b639db3d5ULL, - 0x4bba7d7b0ad568b6ULL, 0xfaa78fbef3360dbbULL, - 0x5406355e1e3eeee1ULL, 0xb30d43f36b0d336aULL, - 0x908138468353418eULL, 0x764588140320cd76ULL, - 0xe1fdb97f79b80f5fULL, 0xafe399bfebefd0bbULL, - 0x3cbb086534a2d737ULL, 0xc760bfb1dd2e9c86ULL, - 0xc7e1243ef55a3244ULL, 0xd23c79dfae649be1ULL, - 0x2a448538cff3775aULL, 0xb500f1e0a9cf2f32ULL, - 0x5dcc4652551b93fdULL, 0xb1dfbe4c3edf28f8ULL, - 0xdeacc3cef3bb91ebULL, 0x886954747fb0670ULL, - 0x48ec2d6ca735f31eULL, 0x962811e1a91ffa03ULL, - 0x79365c0ba13d9600ULL, 0x752b064e1bd2fb7fULL, - 0x890ee3c477c68a7bULL, 0xfdcfa023a56e033ULL, - 0x1bb1f4abd53199e5ULL, 0x859f4d596bdc5ab6ULL, - 0x99af21f32a7bece2ULL, 0x8a73819dc1e3f7b2ULL, - 0x3da444a53e35f28fULL, 0xcee7e684308c0feULL, - 0x71b1408fd594001eULL, 0xf5da0a879300fbdfULL, - 0x6ea7b7380012b246ULL, 0x4c7b72cfbdc8228dULL, - 0xc8cb6646a653b933ULL, 0xd3fbb9ade2b9feb8ULL, - 0x533a8ecd379f0dd0ULL, 0x3ef5457b34378f04ULL, - 0x87651fdd3d0b159aULL, 0xeebd3a5eebb0f0ceULL, - 0x11531f89e3ed7d68ULL, 0x7ae5b58ceb78b16dULL, - 0xc9e3a581ea33efa7ULL, 0xac2a0f2b5ac06ef5ULL, - 0xf54f28b7504910bULL, 0x7807dfb069a3ca1bULL, - 0xfcc62e9e523d30b6ULL, 0x4fcf6d75fbd87500ULL, - 0x3b6681f84208bd2eULL, 0xc77ed69c61596008ULL, - 0x861ec31b1f586860ULL, 0x7822a364440369feULL, - 0x5865491d0e8164c7ULL, 0x7e403b716a89d86cULL, - 0x2e5534cdda8f34e3ULL, 0xfa06ca2439fbf5f4ULL, - 0x70c81b894b6e8fd4ULL, 0xd20063c34f995724ULL, - 0xf26e99c897926a10ULL, 0x126137c4c96007e7ULL, - 0x93bf4a74d3405908ULL, 0xee8010a30dd8d633ULL, - 0x818014eb8f776c5dULL, 0x5bb1192a88c962f5ULL, - 0x66a463bf9f5959dbULL, 0xd9778f81dd99d12aULL, - 0x1a9205e5b0bcae1eULL, 0x7ece5109ac03179dULL, - 0x44ff33a9c60a6b1dULL, 0x105367e212cd41deULL, - 0x6db30ef47c51d9f3ULL, 0xf3d23f14de1869a0ULL, - 0x2eddf69342aadc16ULL, 0x6ab93de87fcd1c94ULL, - 0xd4807458fcd1ee30ULL, 0x441315f3ec898103ULL, - 0x7b8bd586463d6d0aULL, 0x3ab11730d027a985ULL, - 0x5d3a6817a2eacd94ULL, 0x1d67fb36206c20f3ULL, - 0x1a207d5964a14c0cULL, 0x8fe013141f09dc6cULL, - 0x4f24bd886150fb39ULL, 0x4d0a8d6dacfdf7a1ULL, - 0xdf0b2967bd24662dULL, 0x5a0e7797f5634c26ULL, - 0x4dcfdcaa68188063ULL, 0xb5c531731b4ac1b0ULL, - 0x8a439a9a1fefa498ULL, 0x6d8d7d11f87d9c1ULL, - 0x2f05ace7c92a8152ULL, 0x41778cee5a4657aeULL, - 0x10d99d02f2d45395ULL, 0x4f700895026a66abULL, - 0x9e246db9b23e0aaeULL, 0x1374c77af85addffULL, - 0xbebc332ea23244f5ULL, 0xf520d066946ff875ULL, - 0xbb1576d812de78f4ULL, 0x3e86396a9f486867ULL, - 0x74f3883b42ce24acULL, 0x77ab67069d070b39ULL, - 0xe2a7aaf3b7d94835ULL, 0xe84ae13797205d5aULL, - 0xe2648dcbd5ddb6fcULL, 0x52759b397cffb297ULL, - 0xcdcb3254edadbc7dULL, 0x70491bf210d6636fULL, - 0xc26219b62028e978ULL, 0x694888c14a279af7ULL, - 0x621b4168ce1d47b4ULL, 0xa51293dc220b650dULL, - 0x19b7dcb18d059455ULL, 0x53986527ca72f73fULL, - 0xd6cd4cfaf7da433dULL, 0xf5224a7d886d4b8ULL, - 0x359aadf992622582ULL, 0x619f2607707edd64ULL, - 0xc779e8a8015579e2ULL, 0x4cf471e6066af1ceULL, - 0xfae3bf76eae98dfcULL, 0xec5dd514eb595eccULL, - 0xef37b0a96d0aa083ULL, 0x4af11c6f39a6efb2ULL, - 0x59d87c4203827a45ULL, 0x23d3b3f6ec47e3ceULL, - 0x226c13cbd1250359ULL, 0x461bb153206c4873ULL, - 0xa4db6d1e7e5149c9ULL, 0x777fb8c818e291d3ULL, - 0xb0d6aa720023a65dULL, 0xc05627e6e6dc7e5aULL, - 0x94d4ffa4be9b396eULL, 0x4555350c053c2784ULL, - 0x64d2a6987f2dc66dULL, 0x9e559eb47d85fd3bULL, - 0xe88998a1757985ULL, 0x94e721fa69ef3f64ULL, - 0xe986b3827b29384ULL, 0x588d0a2e71b7eb7cULL, - 0xff160c9a2fd263c3ULL, 0xf981c0baf19691beULL, - 0x286a031935c089ccULL}; + 0x4ef488bfae17abbaULL, 0x1b608e38d5cf7308ULL, + 0x851dabc8d9c029daULL, 0x62ff3fd5ca1fe189ULL, + 0xb58f435e51ec54d9ULL, 0xd6478aa5957c39eaULL, + 0x1a84642313330ed8ULL, 0x24b6ff164e7af0f7ULL, + 0x6be96adf24b3816cULL, 0xece099a9b0d53073ULL, + 0xdb8346d2cf6a823ULL, 0x7010f7da6962efd5ULL, + 0xc70fcf5e7ac61c40ULL, 0x69c81f400aacb213ULL, + 0x543deca39cd4669cULL, 0xbccbf8f1ac568f1aULL, + 0x1b657f6eb9085b4dULL, 0x8dbc14bcc7085c8eULL, + 0x31b11a994768a079ULL, 0xdb65d6222d174223ULL, + 0x69a37f411c1015ULL, 0x7277d9df84e80ce3ULL, + 0xffb2d94597293905ULL, 0xd6c7002205dad90aULL, + 0xec0979ba90e44095ULL, 0x8f7f5e9303057addULL, + 0x4ba8f1c0656c62a6ULL, 0x1b40d16f768690dcULL, + 0x51166315ea155c2cULL, 0x33aad4f2bc026d3fULL, + 0x54dafe930aa273d0ULL, 0x1d885cc020e4e77aULL, + 0xf8eb51befffbede4ULL, 0xefa21aa88e2ad467ULL, + 0x1e639296082a76b6ULL, 0x95d9c8ebce333424ULL, + 0x5ea0892946799861ULL, 0xc0930a65ce836ab4ULL, + 0x5a674325485b4e7fULL, 0x8b99f12278470c72ULL, + 0xa4e008d3283c94e8ULL, 0x6fbe24c1740a6981ULL, + 0xea1273d134b0f010ULL, 0x152d52d9c30c78efULL, + 0x9dc76a5d5c289ae0ULL, 0xc5c6dbe7f09411a7ULL, + 0x2073418d01c03687ULL, 0xa0c17a6f4f985f7ULL, + 0x7d9c1720beb9db73ULL, 0x6849424ca595606dULL, + 0xb29fba8417b80df4ULL, 0x61f12e84c28750aeULL, + 0x8bf8fcd9f3f1b1edULL, 0xd0ce225a433287c4ULL, + 0x775917e60886c9e3ULL, 0x486ada4af87cc0abULL, + 0xee6da9bca06fa88eULL, 0x24887e607e1c950dULL, + 0xbad992958c65ef8eULL, 0x66563aeb0c4728c8ULL, + 0x140f0bfc12d599c5ULL, 0x1a8a7286be1ad376ULL, + 0x965c145f47a5e3d8ULL, 0x3bfd4d07824890c4ULL, + 0x8e9e7a0370aa060eULL, 0xc8d523c52edd3d75ULL, + 0x3cfca5a158ac9985ULL, 0x9adc9ad634e45bcbULL, + 0x310f96adc5796c5cULL, 0x96b7c3b005c1d41bULL, + 0xefc6b36f68cd44b9ULL, 0xb9e32448740802e0ULL, + 0xe41875586b23a7ccULL, 0xdf11200a2af368eeULL, + 0xccce23fb87e01cb9ULL, 0x6cd74548000380deULL, + 0x2068ab7c48d2ec38ULL, 0x3f8d34605d6d160dULL, + 0x2f81480ab31791beULL, 0x70dbffe0f42c55a9ULL, + 0x464b1ccca9b60873ULL, 0xd8197bb6610f4a26ULL, + 0xc9285e20789da7cULL, 0xd5735a684fc9656ULL, + 0x5b2c4e2fb331fd65ULL, 0x7c307e89787b59a1ULL, + 0xfd67c65dcf80bc5fULL, 0x89aca3d35d4f61e0ULL, + 0x67b203f3de779d44ULL, 0xa39d8dd5b5cbbc6ULL, + 0x33524df0e5afbd58ULL, 0x537f4763dc8ff6dULL, + 0x9a5798c41a86ae87ULL, 0x3794e55b391f0b97ULL, + 0xb154b14aac830d0ULL, 0x5caa36bbe5a0e263ULL, + 0x900f52b8661fcb0eULL, 0x957561cdd87be82fULL, + 0xdfbe8f1da18c3111ULL, 0x7a6f1024756f626bULL, + 0x5c4ab867aee28e4fULL, 0xbdaf1cd791244211ULL, + 0x2228f2f8d4f28439ULL, 0x4edd616d5aad4c8ULL, + 0xb27b2f3225769f69ULL, 0x1425c27823849280ULL, + 0xae76ce5d77c504eeULL, 0x2779747ca414ebc8ULL, + 0xe4ef214a300c5c0dULL, 0xed4c07343bd0d849ULL, + 0x4f9b26a8a371df7cULL, 0x303562d4fd5501bdULL, + 0x3f0e099b1dd1ab96ULL, 0x8500302b98f9de08ULL, + 0x7b9dad80e5c7b10ULL, 0x9ccdf0c5e8245906ULL, + 0xfee6417294e52bd3ULL, 0x6a85cc0e7dfd0defULL, + 0x4aab0010efaff4d7ULL, 0x8b0ac3450ebc6a6eULL, + 0xe5aaa01795063e90ULL, 0x87378e42e097549bULL, + 0x2f7942b8aada0a9dULL, 0x834bad7e2a7087a3ULL, + 0x2102570d02344402ULL, 0x15ccf7864011db09ULL, + 0x69a3f87974b90867ULL, 0xbc061d452ff48a89ULL, + 0xa8b23bf0a0ff3926ULL, 0x4eff3a36103d3ba0ULL, + 0x5d85348b3bcae7b2ULL, 0xb93e7a1145e5b5dcULL, + 0xa5d7fbf64201e5e4ULL, 0x16a0dc5777406be9ULL, + 0x11705137b3f7dbb1ULL, 0xf9c5c349d5216f0eULL, + 0x7ff95761cf184259ULL, 0x51a4d1ccb7afdeceULL, + 0x73e35224634a880ULL, 0x6486ba6de09e55b7ULL, + 0xec2e1735a409693bULL, 0x4a32aa8e00d54148ULL, + 0xd1ad6d6f57b14c0cULL, 0xbb8c972637c64696ULL, + 0xc1367bf134c6785cULL, 0x4f5fa35416f09e99ULL, + 0x8ff1a2f1c6a485acULL, 0x309e4941e7a51b39ULL, + 0xbb015739220065f7ULL, 0x15c93d157f460ca8ULL, + 0x9b5e446785a25be9ULL, 0xdf672b8e44dccffaULL, + 0xc6f0e8348fdde7a5ULL, 0xdb72d3ffa3740dabULL, + 0x27a907bf1d1aba62ULL, 0x4bfe65e196423003ULL, + 0xa52e8487e57ec77aULL, 0x2cb75b88afd3dbdfULL, + 0x15f1fe898c111f19ULL, 0x1d572ea679042ce0ULL, + 0xe130479b204d25dbULL, 0x412ce0d560b048f8ULL, + 0x941173a2d0c645f1ULL, 0xd4b541013f264760ULL, + 0x3427e4d5d1a2a27ULL, 0x4bcaa0619e8e733bULL, + 0xa13b6e82e52f1643ULL, 0x722ba71b722670cdULL, + 0x38eb0d3ec3e77f62ULL, 0x1e7bb16186c390fdULL, + 0x8b1fc3896dfcef99ULL, 0xa5e23c9ebed4e8fcULL, + 0x7cd15354990c856dULL, 0x808d16c17a97b916ULL, + 0x3653a3d7864d8bbaULL, 0x54b0b596cdeb0f82ULL, + 0xcf3f60ffd38fb97bULL, 0x72e37da591c9b91fULL, + 0x84e18873e75898e4ULL, 0xeff11a5af6809bb0ULL, + 0x8af4ebace6b714ecULL, 0xaa4b1e42d5d10f26ULL, + 0xbcceef4a1feb7b40ULL, 0xf9ebb16e54eaf81bULL, + 0xb9aef6775240c929ULL, 0xb540bc9e71416e61ULL, + 0x518fe188eded4203ULL, 0x221d99c8f8bfd5b7ULL, + 0xc38ba67f3a338066ULL, 0xabc5069a1d6cc43ULL, + 0x21b22c043f2a8875ULL, 0xd74c9c5103fbfb3fULL, + 0xffcc2122caa78d7bULL, 0x76451830ceddee8ULL, + 0x247a6f2c0dd1586cULL, 0x52eef33635cacc7aULL, + 0xabe97ca6f9662cabULL, 0xa276321ccf1259ceULL, + 0xcb839d28b380f78ULL, 0x8055e3152e35e57ULL, + 0xbf59fb51057f5ac8ULL, 0x1b7d309c100f5b9aULL, + 0xb70ab3b1362f7ec3ULL, 0x87348440973488e5ULL, + 0x6af83f6e1d775c42ULL, 0x6cb5ba286d550eeaULL, + 0xfeb0c55e4eb7c047ULL, 0x9e20a0a79e40278fULL, + 0x4c4c42865d7c8c56ULL, 0xa8c5aecd505a8285ULL, + 0xa416d49733947e17ULL, 0x703a72e0113b1b15ULL, + 0x39770e959139b6a8ULL, 0x323ef9a4a3b209d4ULL, + 0xa8789a6b73541e98ULL, 0xe48d2b3a77fc3f6dULL, + 0x9a53f3778b46625eULL, 0x451b14e0dbe2ba7eULL, + 0xff936fc73fcb562cULL, 0x563f1a92ac3dab96ULL, + 0x8009fd8127ce5dd4ULL, 0x1fe44b04b27c4d74ULL, + 0x1bddbcb6dfd04c66ULL, 0xd1d59cc480da1ee6ULL, + 0xe0b2a33234409fa0ULL, 0x65c413574467da90ULL, + 0x979ccc89e5cf4b63ULL, 0x98bd96a4a29b3f31ULL, + 0x9917a96a7861c6a8ULL, 0x86fb59d30d1749f7ULL, + 0xd24e0e1e46e13ffcULL, 0xef47c0e7cb34eacdULL, + 0x3c3d8ad364a19d9fULL, 0xe1adf5f2eb3c58b8ULL, + 0xf090b59acd76efe5ULL, 0x90fec91f5ff633d4ULL, + 0xe8bc857e3f52e36bULL, 0x4339fadb39b0c022ULL, + 0x48ca28afd56c6022ULL, 0xb883f7d594e5feb1ULL, + 0x60647e12153912baULL, 0xcfba643175b17b1eULL, + 0xf49e02ccf10b3b18ULL, 0xa87c62b52eb20c74ULL, + 0xa3fe6658bf250c0cULL, 0x7f96fb396d7ae7aULL, + 0x8a04813c94856826ULL, 0xb4658d520f23975eULL, + 0xde333be245da49c0ULL, 0x31dff5ce643f1702ULL, + 0x949af87a549dab18ULL, 0x63335e199039c685ULL, + 0xd3bfb1f85b631a2cULL, 0x83fe4b755fd13d82ULL, + 0x2b9a11c97d74d5c2ULL, 0x96c1075ca256561aULL, + 0x9bd796371a7471cULL, 0x255c487ca55fd070ULL, + 0xb9716816c0e0d528ULL, 0x248723c56eeb7720ULL, + 0x610c2245f1921cULL, 0x3dcd62eb1d233973ULL, + 0xf6312646440e81c4ULL, 0x11fd03c380eab5baULL, + 0x5e55d9b4c19e5653ULL, 0x5e1f9c64cbe206b8ULL, + 0xc95323b729adc6e3ULL, 0xa5c0221d0f783a2bULL, + 0xb04d620a4d82cfebULL, 0xaf19ed57ccb129d0ULL, + 0xb8822c82928dd3e0ULL, 0xff6fd0c799541911ULL, + 0x752aafc4d762a830ULL, 0xf1118eb988c18b1cULL, + 0x1a6329e05224a736ULL, 0x9245204314dcdfe7ULL, + 0xed767f78545355d2ULL, 0x815acab3feb7900eULL, + 0x47f22a0cd634bc40ULL, 0xec2150afe4587f5bULL, + 0x3c484edd3f6f92d8ULL, 0x34a09aeada42e7eULL, + 0x29a434cf85fbdb04ULL, 0xd6c13eacdba32fecULL, + 0xa32d234290c51672ULL, 0xd301f3ada78249feULL, + 0xcd811f1efc2eead5ULL, 0x835457b34bab9e68ULL, + 0x181d24352631d82cULL, 0x8b45b912ca31d58dULL, + 0x1d6848348ec4ace5ULL, 0xc0aaf998beb88726ULL, + 0x1e8b4967c5af7c04ULL, 0xce8936ee45eefed9ULL, + 0x783c919b02ed3b82ULL, 0x72ce2fe88e153173ULL, + 0xd378f6a2df2c2e0cULL, 0xfb08aac2ee4a9e63ULL, + 0x1ec016a3ac2dbe0fULL, 0x475781f94fcbb7e3ULL, + 0x80f62a1e4ba4c50ULL, 0x10cf614e7adfc50bULL, + 0x32f64cbb84baa644ULL, 0x4db0d9f741b5cc38ULL, + 0x504344a0d07fda24ULL, 0x31c6d96248e05180ULL, + 0x8aab53db86275cacULL, 0x7e54f242474170f2ULL, + 0xa0d66308bd7bd65eULL, 0x3bd7fac1b8e5862ULL, + 0x516a4699f8ef4795ULL, 0xf1c9819a81809c9bULL, + 0xbb179cb7b69be105ULL, 0xa2997c2f69adb7acULL, + 0x3e2b82eee227f520ULL, 0x7f4814295541eb88ULL, + 0x3f95131c7938ae98ULL, 0x8c794a88fdaa5c96ULL, + 0xe995bd6613be075eULL, 0x168ecc747d13e52cULL, + 0xf34ee3443dee4bf9ULL, 0x42d5973ad0c37a75ULL, + 0x7b7eaecd8b56fddULL, 0x2fe24f61a33fc790ULL, + 0x64f78049d9027152ULL, 0xe67199262c305f69ULL, + 0x713b1b64d2383435ULL, 0xfee8d25b603ce2ddULL, + 0xd9adba56036e1351ULL, 0x5f2e7b36093e3f88ULL, + 0x6f9e79d8c47598ffULL, 0xb2312be3bf2eea4aULL, + 0xf2f2332baee0350fULL, 0xc1ece6dc79ab182dULL, + 0x8fd06333941a9fd6ULL, 0x629474ad192cacd5ULL, + 0x437a75202034b018ULL, 0xf9b98f21eea6f0caULL, + 0x2bf74641859777cfULL, 0xa02e3f2a08f19ef3ULL, + 0x1428f18c2a0bc0c8ULL, 0x1eb7a4e58ad098e0ULL, + 0xaed59e19b84f986aULL, 0x8e3f5245dbb77ef4ULL, + 0x9375c5327eb7d476ULL, 0x32782fef06c0cac7ULL, + 0xfc1a5392d7a43a6dULL, 0x5a5b8cf9810dbd00ULL, + 0xa8d0616cc96fcb70ULL, 0xeba216f0c7c22ea3ULL, + 0xf35625f70bf7d031ULL, 0x9d56c654583ce93bULL, + 0x1ae33a218238ea27ULL, 0xb865584a0811f9d9ULL, + 0xf9065d696d85514cULL, 0xee33a2c5133d068eULL, + 0xb4b2ab633b2ecd38ULL, 0x9cdc9a04cdc594ffULL, + 0x2f745ae57a3f043ULL, 0x1ede01f5037a92d2ULL, + 0xcef5984903f8984fULL, 0x183a79488d33e3b2ULL, + 0x1f3b9bf5c525fcc9ULL, 0x4169c9bdc608ff1cULL, + 0x8fdf3ca348d00c21ULL, 0x2b472034fde89860ULL, + 0x94ac5ca7c6e93e80ULL, 0x70fe25941302b0d1ULL, + 0xa6269b60f21ba380ULL, 0xcb518e0ae9c0aae4ULL, + 0x6e80ae4af54b28afULL, 0x79ceb17e48189126ULL, + 0xad89b6f68254de83ULL, 0xdda2c183a04d3489ULL, + 0xf6a67b91699bbb14ULL, 0xb445c2b018a1700ULL, + 0x4a50f28f965c2c5fULL, 0x1153b066f4d3889aULL, + 0xc86ec6e3ac241950ULL, 0xfe910b08c2bb060dULL, + 0x867496fded3c83e3ULL, 0xaebac214a1d7a1b3ULL, + 0xd65fb3b895a6d20ULL, 0x58aafe1d13a3ac78ULL, + 0xf47ce780dc44cf25ULL, 0x3e56c3611756c1feULL, + 0x3fb3e4f6d0483849ULL, 0x1a5c6b2e10ce205ULL, + 0xa9c529fd702edd6eULL, 0x869649faa5a1aee9ULL, + 0x1b8d911c776ec17cULL, 0x4e43b5428c8ed2abULL, + 0x775b758b4d9b3c9aULL, 0x8804d262fc071badULL, + 0x61d4695f713793b5ULL, 0x2db7ec74f5c05479ULL, + 0x664a809299686590ULL, 0xa8d033c5115e487eULL, + 0xe619ef70eb5a16acULL, 0xcd8b964a4281bfd5ULL, + 0xcef1aeef7d350c7fULL, 0x4674942f573a9ce5ULL, + 0x6dc0b11b30519e13ULL, 0x93df9452b5dcd8cbULL, + 0x9448f6f930deea98ULL, 0xed6eebca0706f29fULL, + 0x902200e6d2a3eb8bULL, 0x8729df3b219138acULL, + 0xcfc2bc0b6c88e014ULL, 0x5238e41b26599129ULL, + 0xee293f799e223f91ULL, 0xb1a2ef20a726114fULL, + 0x5f691e62fde20700ULL, 0x40b288b5aa28284cULL, + 0x37e0deebffaee7faULL, 0xba19fa6bbe3807e3ULL, + 0x4c6b7bfb9e9686a8ULL, 0xc7c761ba0e630b0dULL, + 0x12dd354400a464dbULL, 0x3e6cd81067e4545bULL, + 0x62f6f8ab23cc7855ULL, 0x60ef3c823b23d03aULL, + 0x3b8f1621794f84baULL, 0x5f317bcf29799a35ULL, + 0xd486d926a75263bcULL, 0xfa08e546eeabf2b5ULL, + 0x2de31bb003cc3076ULL, 0xcfd849eabb6bf6f8ULL, + 0x94d2f96c14d03c4eULL, 0x7cb7390dc796f98dULL, + 0x978a9733a3c105b3ULL, 0x6c7026ef2197c422ULL, + 0xbeb427a113122ee8ULL, 0x8522cbae77bc3afbULL, + 0xa013ef165581a060ULL, 0xddd17ae26c8f83fdULL, + 0x20ec4adcd53f5e2cULL, 0xa2a0d6c8e11de5bULL, + 0xd540e3516ac796b3ULL, 0x2cb963a350f1853dULL, + 0x3faae45402362ce7ULL, 0x32bbfccb615eaab1ULL, + 0x7d0833ac51ad1830ULL, 0x99305a7a7134e457ULL, + 0x5b989947a49efe86ULL, 0x6a6782e86aadc279ULL, + 0x66c06c92963784a3ULL, 0x95d5ee699932c142ULL, + 0x7c85986f37b8c1fbULL, 0x9c4fe3c2608495d2ULL, + 0xfd949ca2a7fd6654ULL, 0x8cc451cc93362187ULL, + 0x4502ee450cd8f8deULL, 0x350ca2eba9c817f0ULL, + 0xe5ed9484ecd2865ULL, 0xd6d294e1a63e1bd4ULL, + 0x407fe7fc78bf4a42ULL, 0x5d1e54565e373e99ULL, + 0x8f4c8f1539335ed0ULL, 0x9435975634b24565ULL, + 0xc4c11eb58a8b5ac6ULL, 0x8cf964566edaa61dULL, + 0x603299d26fa4409fULL, 0x4eaec27e571f9478ULL, + 0x2da410afdc0c7c07ULL, 0xa7b1c3237a1f7653ULL, + 0xd790d29141a56a3aULL, 0x64824a6cfa39ff28ULL, + 0x51883faf43fd25b2ULL, 0x5a938601203e32cbULL, + 0x3809ed67f923807fULL, 0xa6bdfc79447d1306ULL, + 0x79a001afbc97a49bULL, 0x501f11ac9d772e2cULL, + 0xdb7a2355f1f1c913ULL, 0xf2e018fa0a676207ULL, + 0xd451eea58e08137dULL, 0xf13a570d5ef737d6ULL, + 0x3f4ed84b0708f566ULL, 0xdc06604f709bc7bdULL, + 0xc4d17abee8b007aULL, 0x89b6a700afad7f15ULL, + 0x72f4003abba3549fULL, 0x7c0f7ec5cf3865fbULL, + 0xde391dec54a0d797ULL, 0xb45067f02bfe4b3cULL, + 0xea09e08c94bb3acULL, 0x329493d1e58875ecULL, + 0x1f6188a0d0c9765cULL, 0xf9780f58c8656f56ULL, + 0x73c62a39f796f99aULL, 0xeb625a8da0599a07ULL, + 0xf6aaef39e7e2b217ULL, 0x5fc0de127ee8b4c7ULL, + 0xf57798668b86ac45ULL, 0x454dcf315d5fa2d6ULL, + 0x80af178025adf8d0ULL, 0xd65da73ed5ef923ULL, + 0xb7a2ebe31805fa2cULL, 0xd12f9282362b2304ULL, + 0xcdf6cdd669f87400ULL, 0xa250eabbcfc5d25fULL, + 0xae00b05fb2ae4014ULL, 0xebc9edc4206fa6cbULL, + 0x7689ed2cadd75ec1ULL, 0x4a7e124305d9e14cULL, + 0x2c3bdc6dd2f17394ULL, 0x55eaf991d6f0feabULL, + 0x26fc46b584950b50ULL, 0xd1fd62345d4ce0e8ULL, + 0x8a23992ea3d7e47bULL, 0x875e0896d407b09fULL, + 0xc643961123bf68d8ULL, 0x1a94d8f1b3b6396ULL, + 0x8c0298fb53f4f45eULL, 0xe2852828f7f9fa2dULL, + 0x21dcadd35862a95cULL, 0x1bb936f6bf48665aULL, + 0x7adc2a8b206b4cfeULL, 0xc505891fc46c54bcULL, + 0x1409e52ff1155b44ULL, 0x21205a745fc6f119ULL, + 0x3ace40e876181924ULL, 0x358d1c0927d5e6a6ULL, + 0xd9367a5805c967caULL, 0x30b9ea14a65d5166ULL, + 0xad641697fcb57c65ULL, 0x1e1935296140ce21ULL, + 0xf6cb4244858f5c0ULL, 0x5bc33c52c56e7adaULL, + 0x7c240347ad29ee9dULL, 0x38c3d7c57cc6ebf9ULL, + 0x3d11adba2060fbdaULL, 0x7559ead850090e06ULL, + 0xfd5e13ca4082b63dULL, 0x166a5bb6945d5ef7ULL, + 0x5546f01c2b69bd55ULL, 0x5fd08bb5eff91708ULL, + 0x58c1f08abbd41db4ULL, 0x9472e8384245280ULL, + 0x773b5b811184e9daULL, 0x36009938bdf09510ULL, + 0x2f423987abbd7897ULL, 0xc7a428ad2b40569bULL, + 0x2db547e5c4eac72fULL, 0xbcd4710dc0294b65ULL, + 0xa1ecbd582f58ab6dULL, 0xf45a55c2bf631c3fULL, + 0x79c87516d4f89dd6ULL, 0xe63e61780d389467ULL, + 0x53ae6a68eb68bf1bULL, 0x231d521de4ea3eabULL, + 0x98dcf370807e85edULL, 0xcbd18662ec57627bULL, + 0x17ccb5409b5be7c5ULL, 0x916858886ad455e8ULL, + 0x12d5cfd28093fa1bULL, 0x849433c93b78ae1bULL, + 0x483de1bbcd54588bULL, 0xc4542529e1400253ULL, + 0xe7ba10aaac73d3d4ULL, 0x60716cc47639c8c0ULL, + 0x8d0f798f8016db29ULL, 0xc7f540363e5d38c0ULL, + 0x71f8eb2cbde3f2a4ULL, 0x73f51915cfb11591ULL, + 0x8e368be8220fbed8ULL, 0xe6634d8d5481c274ULL, + 0xfded89783c7d7d45ULL, 0x3a14056f6fb7aad6ULL, + 0x9c004929888c348ULL, 0xb47cb32c65003d99ULL, + 0x544263587ab108beULL, 0xe86fe92c1f254ad8ULL, + 0x5a757f4aa565ba2fULL, 0x6821483d80e763ffULL, + 0xbceaf85474a4a459ULL, 0x1cd6e6d20c667900ULL, + 0xe7b38fccff113c7bULL, 0x20361c9a7ec6b064ULL, + 0x99ff2481edd18564ULL, 0xb616e25d79d6642cULL, + 0xdf0ce9291722e828ULL, 0x491db70eb9314fb4ULL, + 0xab2bff7e330d3061ULL, 0x4232ed0a2e93d8a8ULL, + 0x6d55fcf2098eca3eULL, 0x909d9001b58e3f5eULL, + 0x82065263e6c495b2ULL, 0x54c2239d9e98cd65ULL, + 0xb5253fdbb715a77eULL, 0x7d4abc24bc60a674ULL, + 0xab5b6ed65d25fa03ULL, 0x56c7311e57cbd8e6ULL, + 0x865e2030ff154748ULL, 0x7f4e6b4a04ac3248ULL, + 0xf42dd3d5244b697aULL, 0xd7ecc66e36dcfb01ULL, + 0x6f5a6edeaf36f57fULL, 0xfa2d8db39c449a39ULL, + 0xe71efc1684cf44beULL, 0x75d9c8cff2c9e1c2ULL, + 0xe36a2caf0087bf36ULL, 0x79d5716971860e60ULL, + 0xf73afb6d93e9fc40ULL, 0xe60ff6946b7cc27bULL, + 0xd7a71a4be5007a5aULL, 0x47d93d3126c8823ULL, + 0x8d988ee64bcc0e9fULL, 0x7c3b9f53e45af01ULL, + 0x4588669519b5b9bULL, 0x1cb3098aa4122760ULL, + 0xd7903ac6afc8390ULL, 0x44bd7b928dd8e7e5ULL, + 0x578ac5e77f09c3a3ULL, 0x847e04f37d6998b1ULL, + 0x6ec83dfbd780d189ULL, 0x490810c885fd662bULL, + 0xe25841c565edee7fULL, 0x144ba2ed46b28fe2ULL, + 0x1066ddb06e90ee12ULL, 0xf5c5d6f35fe8e694ULL, + 0x73f84c285181738fULL, 0x8c7881debcd4ad91ULL, + 0x33a961f1cd1b1c0aULL, 0xbc75c5755cfecb81ULL, + 0xb2ac5cadbb9d8fd3ULL, 0x5621d4ab21a9a722ULL, + 0x51ba2205bb14e851ULL, 0x851c873f570b9de6ULL, + 0x78eecadacb3d0202ULL, 0x8933104e7337b965ULL, + 0x1f28bc249a2e5b46ULL, 0x7fd5c88533cbe11aULL, + 0xde58e22c6fee97caULL, 0xe3da2f25b2385cfeULL, + 0xec06b46697321104ULL, 0x1ae0829b639db3d5ULL, + 0x4bba7d7b0ad568b6ULL, 0xfaa78fbef3360dbbULL, + 0x5406355e1e3eeee1ULL, 0xb30d43f36b0d336aULL, + 0x908138468353418eULL, 0x764588140320cd76ULL, + 0xe1fdb97f79b80f5fULL, 0xafe399bfebefd0bbULL, + 0x3cbb086534a2d737ULL, 0xc760bfb1dd2e9c86ULL, + 0xc7e1243ef55a3244ULL, 0xd23c79dfae649be1ULL, + 0x2a448538cff3775aULL, 0xb500f1e0a9cf2f32ULL, + 0x5dcc4652551b93fdULL, 0xb1dfbe4c3edf28f8ULL, + 0xdeacc3cef3bb91ebULL, 0x886954747fb0670ULL, + 0x48ec2d6ca735f31eULL, 0x962811e1a91ffa03ULL, + 0x79365c0ba13d9600ULL, 0x752b064e1bd2fb7fULL, + 0x890ee3c477c68a7bULL, 0xfdcfa023a56e033ULL, + 0x1bb1f4abd53199e5ULL, 0x859f4d596bdc5ab6ULL, + 0x99af21f32a7bece2ULL, 0x8a73819dc1e3f7b2ULL, + 0x3da444a53e35f28fULL, 0xcee7e684308c0feULL, + 0x71b1408fd594001eULL, 0xf5da0a879300fbdfULL, + 0x6ea7b7380012b246ULL, 0x4c7b72cfbdc8228dULL, + 0xc8cb6646a653b933ULL, 0xd3fbb9ade2b9feb8ULL, + 0x533a8ecd379f0dd0ULL, 0x3ef5457b34378f04ULL, + 0x87651fdd3d0b159aULL, 0xeebd3a5eebb0f0ceULL, + 0x11531f89e3ed7d68ULL, 0x7ae5b58ceb78b16dULL, + 0xc9e3a581ea33efa7ULL, 0xac2a0f2b5ac06ef5ULL, + 0xf54f28b7504910bULL, 0x7807dfb069a3ca1bULL, + 0xfcc62e9e523d30b6ULL, 0x4fcf6d75fbd87500ULL, + 0x3b6681f84208bd2eULL, 0xc77ed69c61596008ULL, + 0x861ec31b1f586860ULL, 0x7822a364440369feULL, + 0x5865491d0e8164c7ULL, 0x7e403b716a89d86cULL, + 0x2e5534cdda8f34e3ULL, 0xfa06ca2439fbf5f4ULL, + 0x70c81b894b6e8fd4ULL, 0xd20063c34f995724ULL, + 0xf26e99c897926a10ULL, 0x126137c4c96007e7ULL, + 0x93bf4a74d3405908ULL, 0xee8010a30dd8d633ULL, + 0x818014eb8f776c5dULL, 0x5bb1192a88c962f5ULL, + 0x66a463bf9f5959dbULL, 0xd9778f81dd99d12aULL, + 0x1a9205e5b0bcae1eULL, 0x7ece5109ac03179dULL, + 0x44ff33a9c60a6b1dULL, 0x105367e212cd41deULL, + 0x6db30ef47c51d9f3ULL, 0xf3d23f14de1869a0ULL, + 0x2eddf69342aadc16ULL, 0x6ab93de87fcd1c94ULL, + 0xd4807458fcd1ee30ULL, 0x441315f3ec898103ULL, + 0x7b8bd586463d6d0aULL, 0x3ab11730d027a985ULL, + 0x5d3a6817a2eacd94ULL, 0x1d67fb36206c20f3ULL, + 0x1a207d5964a14c0cULL, 0x8fe013141f09dc6cULL, + 0x4f24bd886150fb39ULL, 0x4d0a8d6dacfdf7a1ULL, + 0xdf0b2967bd24662dULL, 0x5a0e7797f5634c26ULL, + 0x4dcfdcaa68188063ULL, 0xb5c531731b4ac1b0ULL, + 0x8a439a9a1fefa498ULL, 0x6d8d7d11f87d9c1ULL, + 0x2f05ace7c92a8152ULL, 0x41778cee5a4657aeULL, + 0x10d99d02f2d45395ULL, 0x4f700895026a66abULL, + 0x9e246db9b23e0aaeULL, 0x1374c77af85addffULL, + 0xbebc332ea23244f5ULL, 0xf520d066946ff875ULL, + 0xbb1576d812de78f4ULL, 0x3e86396a9f486867ULL, + 0x74f3883b42ce24acULL, 0x77ab67069d070b39ULL, + 0xe2a7aaf3b7d94835ULL, 0xe84ae13797205d5aULL, + 0xe2648dcbd5ddb6fcULL, 0x52759b397cffb297ULL, + 0xcdcb3254edadbc7dULL, 0x70491bf210d6636fULL, + 0xc26219b62028e978ULL, 0x694888c14a279af7ULL, + 0x621b4168ce1d47b4ULL, 0xa51293dc220b650dULL, + 0x19b7dcb18d059455ULL, 0x53986527ca72f73fULL, + 0xd6cd4cfaf7da433dULL, 0xf5224a7d886d4b8ULL, + 0x359aadf992622582ULL, 0x619f2607707edd64ULL, + 0xc779e8a8015579e2ULL, 0x4cf471e6066af1ceULL, + 0xfae3bf76eae98dfcULL, 0xec5dd514eb595eccULL, + 0xef37b0a96d0aa083ULL, 0x4af11c6f39a6efb2ULL, + 0x59d87c4203827a45ULL, 0x23d3b3f6ec47e3ceULL, + 0x226c13cbd1250359ULL, 0x461bb153206c4873ULL, + 0xa4db6d1e7e5149c9ULL, 0x777fb8c818e291d3ULL, + 0xb0d6aa720023a65dULL, 0xc05627e6e6dc7e5aULL, + 0x94d4ffa4be9b396eULL, 0x4555350c053c2784ULL, + 0x64d2a6987f2dc66dULL, 0x9e559eb47d85fd3bULL, + 0xe88998a1757985ULL, 0x94e721fa69ef3f64ULL, + 0xe986b3827b29384ULL, 0x588d0a2e71b7eb7cULL, + 0xff160c9a2fd263c3ULL, 0xf981c0baf19691beULL, + 0x286a031935c089ccULL}; constexpr U64 const *pieceRandTable = randTable; constexpr U64 const *castlingRandTable = randTable + 768; diff --git a/src/eval.cpp b/src/eval.cpp index 7e7aa46..6ed3ed8 100644 --- a/src/eval.cpp +++ b/src/eval.cpp @@ -19,6 +19,6 @@ #ifdef TUNE Score PIECE_VALUES[6] = { - 0, 170, 610, 660, 780, 1200}; + 0, 170, 610, 660, 780, 1200}; #endif diff --git a/src/eval.h b/src/eval.h index c4e0a04..eb81004 100644 --- a/src/eval.h +++ b/src/eval.h @@ -27,12 +27,12 @@ extern Score PIECE_VALUES[6]; #else constexpr Score PIECE_VALUES[6] = { - 0, 156, 561, 608, 736, 1022}; + 0, 156, 561, 608, 736, 1022}; #endif inline Score eval(const Position &pos) { - return pos.getState()->accumulator.forward(pos.getSideToMove()); + return pos.getState()->accumulator.forward(pos.getSideToMove()); } #endif//BLACKCORE_EVAL_H diff --git a/src/main.cpp b/src/main.cpp index 0b6c6f4..d225164 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,35 +26,35 @@ int main(int argc, char **argv) { #ifdef TUNE - std::cout << "This build is for tuning only, please uncomment the TUNE define in constants.h for regular use!" - << std::endl; + std::cout << "This build is for tuning only, please uncomment the TUNE define in constants.h for regular use!" + << std::endl; #endif - srand(RANDOM_SEED); - std::string mode; - if (argc >= 2) { - mode = std::string(argv[1]); - } + srand(RANDOM_SEED); + std::string mode; + if (argc >= 2) { + mode = std::string(argv[1]); + } - if (mode.empty()) { - std::cin >> mode; - } + if (mode.empty()) { + std::cin >> mode; + } - if (mode == "bench") { - testSearch(); - } else if (mode == "perft") { - testPerft(); - } else if (mode == "uci") { - uciLoop(); - } else if (mode == "tune") { + if (mode == "bench") { + testSearch(); + } else if (mode == "perft") { + testPerft(); + } else if (mode == "uci") { + uciLoop(); + } else if (mode == "tune") { #ifdef TUNE - tune("out.fen"); + tune("out.fen"); #else - std::cout << "This build doesn't support tuning!" << std::endl; + std::cout << "This build doesn't support tuning!" << std::endl; #endif - } else { - std::cout << "Invalid option! (uci/bench/perft)" << std::endl; - } + } else { + std::cout << "Invalid option! (uci/bench/perft)" << std::endl; + } - return 0; + return 0; } diff --git a/src/move.cpp b/src/move.cpp index ca66787..05f2ffe 100644 --- a/src/move.cpp +++ b/src/move.cpp @@ -18,21 +18,21 @@ #include "utils.h" std::string Move::str() const { - std::string token; - if (isPromo()) { - if (!isSpecial1() && !isSpecial2()) - token += "n"; - else if (!isSpecial1() && isSpecial2()) - token += "b"; - else if (isSpecial1() && !isSpecial2()) - token += "r"; - else - token += "q"; - } - return formatSquare(getFrom()) + formatSquare(getTo()) + token; + std::string token; + if (isPromo()) { + if (!isSpecial1() && !isSpecial2()) + token += "n"; + else if (!isSpecial1() && isSpecial2()) + token += "b"; + else if (isSpecial1() && !isSpecial2()) + token += "r"; + else + token += "q"; + } + return formatSquare(getFrom()) + formatSquare(getTo()) + token; } std::ostream &operator<<(std::ostream &os, const Move &move) { - os << move.str(); - return os; + os << move.str(); + return os; } diff --git a/src/move.h b/src/move.h index 745b2ca..d191ee3 100644 --- a/src/move.h +++ b/src/move.h @@ -47,72 +47,72 @@ constexpr unsigned int QUEEN_CASTLE = SPECIAL1_FLAG | SPECIAL2_FLAG; class Move { public: - constexpr Move(Square from, Square to, unsigned int flags) { - data = (flags << 12) | (from << 6) | (to); - } + constexpr Move(Square from, Square to, unsigned int flags) { + data = (flags << 12) | (from << 6) | (to); + } - constexpr Move(Square from, Square to) { - data = (from << 6) | (to); - } + constexpr Move(Square from, Square to) { + data = (from << 6) | (to); + } - constexpr Move() = default; + constexpr Move() = default; - constexpr Square getTo() const { - return Square(data & 0x3f); - } + constexpr Square getTo() const { + return Square(data & 0x3f); + } - constexpr Square getFrom() const { - return Square((data >> 6) & 0x3f); - } + constexpr Square getFrom() const { + return Square((data >> 6) & 0x3f); + } - constexpr bool isFlag(unsigned int flag) const { - return (data >> 12) & flag; - } + constexpr bool isFlag(unsigned int flag) const { + return (data >> 12) & flag; + } - constexpr bool equalFlag(unsigned int flag) const { - return (data >> 12) == flag; - } + constexpr bool equalFlag(unsigned int flag) const { + return (data >> 12) == flag; + } - constexpr bool isNull() const { - return data == 0; - } + constexpr bool isNull() const { + return data == 0; + } - constexpr bool isCapture() const { - return isFlag(CAPTURE_FLAG); - } + constexpr bool isCapture() const { + return isFlag(CAPTURE_FLAG); + } - constexpr bool isPromo() const { - return isFlag(PROMO_FLAG); - } + constexpr bool isPromo() const { + return isFlag(PROMO_FLAG); + } - constexpr bool isSpecial1() const { - return isFlag(SPECIAL1_FLAG); - } + constexpr bool isSpecial1() const { + return isFlag(SPECIAL1_FLAG); + } - constexpr bool isSpecial2() const { - return isFlag(SPECIAL2_FLAG); - } + constexpr bool isSpecial2() const { + return isFlag(SPECIAL2_FLAG); + } - constexpr bool isQuiet() const { - return !isCapture(); - } + constexpr bool isQuiet() const { + return !isCapture(); + } - constexpr explicit operator bool() const { - return !isNull(); - } + constexpr explicit operator bool() const { + return !isNull(); + } - constexpr bool operator==(Move a) const { - return (data & 0xFFFF) == (a.data & 0xFFFF); - } + constexpr bool operator==(Move a) const { + return (data & 0xFFFF) == (a.data & 0xFFFF); + } - constexpr bool operator!=(Move a) const { - return (data & 0xFFFF) != (a.data & 0xFFFF); - } + constexpr bool operator!=(Move a) const { + return (data & 0xFFFF) != (a.data & 0xFFFF); + } - std::string str() const; + std::string str() const; private: - uint16_t data = 0; + uint16_t data = 0; }; std::ostream &operator<<(std::ostream &os, const Move &move); diff --git a/src/move_ordering.cpp b/src/move_ordering.cpp index 4c2ee83..dbdbdec 100644 --- a/src/move_ordering.cpp +++ b/src/move_ordering.cpp @@ -21,13 +21,13 @@ #include constexpr Score MVV_LVA[6][6] = { - // KING PAWN KNIGHT BISHOP ROOK QUEEN - {0, 0, 0, 0, 0, 0}, // KING - {0, 800004, 800104, 800204, 800304, 800404},// PAWN - {0, 800003, 800103, 800203, 800303, 800403},// KNIGHT - {0, 800002, 800102, 800202, 800302, 800402},// BISHOP - {0, 800001, 800101, 800201, 800301, 800401},// ROOK - {0, 800000, 800100, 800200, 800300, 800400},// QUEEN + // KING PAWN KNIGHT BISHOP ROOK QUEEN + {0, 0, 0, 0, 0, 0}, // KING + {0, 800004, 800104, 800204, 800304, 800404},// PAWN + {0, 800003, 800103, 800203, 800303, 800403},// KNIGHT + {0, 800002, 800102, 800202, 800302, 800402},// BISHOP + {0, 800001, 800101, 800201, 800301, 800401},// ROOK + {0, 800000, 800100, 800200, 800300, 800400},// QUEEN }; constexpr Score winningCapture = 800000; @@ -39,58 +39,58 @@ Move killerMoves[MAX_PLY + 1][2]; Score historyTable[2][64][64]; void clearTables() { - std::memset(killerMoves, 0, sizeof(killerMoves)); - std::memset(historyTable, 0, sizeof(historyTable)); + std::memset(killerMoves, 0, sizeof(killerMoves)); + std::memset(historyTable, 0, sizeof(historyTable)); } void recordKillerMove(Move m, Ply ply) { - killerMoves[ply][1] = killerMoves[ply][0]; - killerMoves[ply][0] = m; + killerMoves[ply][1] = killerMoves[ply][0]; + killerMoves[ply][0] = m; } void recordHHMove(Move move, Color color, Depth depth) { - historyTable[color][move.getFrom()][move.getTo()] += depth * depth; + historyTable[color][move.getFrom()][move.getTo()] += depth * depth; } Score scoreQMove(const Position &pos, Move m) { - if (m == getHashMove(pos.getHash())) { - return 1000000; - } else if (m.isPromo()) { - if (m.isSpecial1() && m.isSpecial2()) {// Queen promo - return 900000; - } else {// Anything else, under promotions should only be played in really few cases - return -100000; - } - } else { - Score seeScore = see(pos, m); + if (m == getHashMove(pos.getHash())) { + return 1000000; + } else if (m.isPromo()) { + if (m.isSpecial1() && m.isSpecial2()) {// Queen promo + return 900000; + } else {// Anything else, under promotions should only be played in really few cases + return -100000; + } + } else { + Score seeScore = see(pos, m); - if (seeScore >= 0) - return winningCapture + seeScore; - else - return losingCapture + seeScore; - } + if (seeScore >= 0) + return winningCapture + seeScore; + else + return losingCapture + seeScore; + } } Score scoreMove(const Position &pos, Move m, Ply ply) { - if (m == getHashMove(pos.getHash())) { - return 1000000; - } else if (m.isPromo()) { - if (m.isSpecial1() && m.isSpecial2()) {// Queen promo - return 900000; - } else {// Anything else, under promotions should only be played in really few cases - return -100000; - } - } else if (m.isCapture()) { - Score seeScore = see(pos, m); + if (m == getHashMove(pos.getHash())) { + return 1000000; + } else if (m.isPromo()) { + if (m.isSpecial1() && m.isSpecial2()) {// Queen promo + return 900000; + } else {// Anything else, under promotions should only be played in really few cases + return -100000; + } + } else if (m.isCapture()) { + Score seeScore = see(pos, m); - if (see(pos, m) >= 0) - return winningCapture + seeScore; - else - return losingCapture + seeScore; - } else if (killerMoves[ply][0] == m) { - return 750000; - } else if (killerMoves[ply][1] == m) { - return 700000; - } - return historyTable[pos.getSideToMove()][m.getFrom()][m.getTo()]; + if (see(pos, m) >= 0) + return winningCapture + seeScore; + else + return losingCapture + seeScore; + } else if (killerMoves[ply][0] == m) { + return 750000; + } else if (killerMoves[ply][1] == m) { + return 700000; + } + return historyTable[pos.getSideToMove()][m.getFrom()][m.getTo()]; } \ No newline at end of file diff --git a/src/movegen.cpp b/src/movegen.cpp index 8207657..e072ed2 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -17,408 +17,408 @@ #include "movegen.h" inline Move *makePromo(Move *moves, Square from, Square to) { - *moves++ = Move(from, to, PROMO_KNIGHT); - *moves++ = Move(from, to, PROMO_BISHOP); - *moves++ = Move(from, to, PROMO_ROOK); - *moves++ = Move(from, to, PROMO_QUEEN); - return moves; + *moves++ = Move(from, to, PROMO_KNIGHT); + *moves++ = Move(from, to, PROMO_BISHOP); + *moves++ = Move(from, to, PROMO_ROOK); + *moves++ = Move(from, to, PROMO_QUEEN); + return moves; } inline Move *makePromoCapture(Move *moves, Square from, Square to) { - *moves++ = Move(from, to, PROMO_CAPTURE_KNIGHT); - *moves++ = Move(from, to, PROMO_CAPTURE_BISHOP); - *moves++ = Move(from, to, PROMO_CAPTURE_ROOK); - *moves++ = Move(from, to, PROMO_CAPTURE_QUEEN); - return moves; + *moves++ = Move(from, to, PROMO_CAPTURE_KNIGHT); + *moves++ = Move(from, to, PROMO_CAPTURE_BISHOP); + *moves++ = Move(from, to, PROMO_CAPTURE_ROOK); + *moves++ = Move(from, to, PROMO_CAPTURE_QUEEN); + return moves; } template inline Bitboard getAttackedSquares(const Position &pos, Bitboard occupied) { - constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; - constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; + constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; + constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; - Bitboard pawns = pos.pieces(); - Bitboard pieces = pos.friendly() & ~pawns; - Bitboard result = step(pawns) | step(pawns); + Bitboard pawns = pos.pieces(); + Bitboard pieces = pos.friendly() & ~pawns; + Bitboard result = step(pawns) | step(pawns); - while (pieces) { - Square from = pieces.popLsb(); - result |= pieceAttacks(pos.pieceAt(from).type, from, occupied); - } + while (pieces) { + Square from = pieces.popLsb(); + result |= pieceAttacks(pos.pieceAt(from).type, from, occupied); + } - return result; + return result; } template inline Move *generateMovesFromPieces(const Position &pos, Move *moves, Bitboard pieces, Bitboard specialMask, - Bitboard occupied, Bitboard empty, Bitboard enemy) { - - while (pieces) { - Square from = pieces.popLsb(); - PieceType type = pos.pieceAt(from).type; - Bitboard attacks = pieceAttacks(type, from, occupied) & specialMask; - if constexpr (pinHV) - attacks &= rookMask(from); - if constexpr (pinDA) - attacks &= bishopMask(from); - - if constexpr (!capturesOnly) { - Bitboard quiets = attacks & empty; - while (quiets) { - *moves++ = Move(from, quiets.popLsb()); - } - } - - Bitboard captures = attacks & enemy; - while (captures) { - Square to = captures.popLsb(); - *moves++ = Move(from, to, CAPTURE); - } - } - - return moves; + Bitboard occupied, Bitboard empty, Bitboard enemy) { + + while (pieces) { + Square from = pieces.popLsb(); + PieceType type = pos.pieceAt(from).type; + Bitboard attacks = pieceAttacks(type, from, occupied) & specialMask; + if constexpr (pinHV) + attacks &= rookMask(from); + if constexpr (pinDA) + attacks &= bishopMask(from); + + if constexpr (!capturesOnly) { + Bitboard quiets = attacks & empty; + while (quiets) { + *moves++ = Move(from, quiets.popLsb()); + } + } + + Bitboard captures = attacks & enemy; + while (captures) { + Square to = captures.popLsb(); + *moves++ = Move(from, to, CAPTURE); + } + } + + return moves; } template Move *generatePawnMoves(const Position &pos, Move *moves, Square king, Bitboard checkMask, - Bitboard moveH, Bitboard moveV, Bitboard moveD, Bitboard moveA) { - constexpr Color enemyColor = EnemyColor(); - - constexpr Direction UP = color == WHITE ? NORTH : -NORTH; - constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; - constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; - constexpr Direction DOWN = -UP; - constexpr Direction DOWN_LEFT = -UP_RIGHT; - constexpr Direction DOWN_RIGHT = -UP_LEFT; - - constexpr Bitboard doublePushRank = (color == WHITE ? rank3 : rank6); - constexpr Bitboard beforePromoRank = (color == WHITE ? rank7 : rank2); - constexpr Bitboard notBeforePromo = ~beforePromoRank; - - Square epSquare = pos.getEpSquare(); - - Bitboard empty = pos.empty(); - Bitboard enemy = pos.enemy(); - - Bitboard pawns = pos.pieces(); - Bitboard pawnsBeforePromo = beforePromoRank & pawns; - pawns &= notBeforePromo; - - if constexpr (!capturesOnly) { - Bitboard singlePush = step(pawns & moveH) & empty; - Bitboard doublePush = step(singlePush & doublePushRank) & empty; - - singlePush &= checkMask; - doublePush &= checkMask; - - while (singlePush) { - Square to = singlePush.popLsb(); - *moves++ = Move(to + DOWN, to); - } - - while (doublePush) { - Square to = doublePush.popLsb(); - *moves++ = Move(to + (2 * DOWN), to, DOUBLE_PAWN_PUSH); - } - } - - Bitboard rightCapture = step(pawns & moveD) & enemy & checkMask; - Bitboard leftCapture = step(pawns & moveA) & enemy & checkMask; - - while (leftCapture) { - Square to = leftCapture.popLsb(); - *moves++ = Move(to + DOWN_RIGHT, to, CAPTURE); - } - - while (rightCapture) { - Square to = rightCapture.popLsb(); - *moves++ = Move(to + DOWN_LEFT, to, CAPTURE); - } - - if (pawnsBeforePromo) { - - if constexpr (!capturesOnly) { - Bitboard upPromo = step(pawnsBeforePromo & moveH) & empty & checkMask; - while (upPromo) { - Square to = upPromo.popLsb(); - moves = makePromo(moves, to + DOWN, to); - } - } - - Bitboard rightPromo = step(pawnsBeforePromo & moveD) & enemy & checkMask; - Bitboard leftPromo = step(pawnsBeforePromo & moveA) & enemy & checkMask; - while (rightPromo) { - Square to = rightPromo.popLsb(); - moves = makePromoCapture(moves, to + DOWN_LEFT, to); - } - - while (leftPromo) { - Square to = leftPromo.popLsb(); - moves = makePromoCapture(moves, to + DOWN_RIGHT, to); - } - } - - if ((epSquare != NULL_SQUARE) && (pawnMask(pos.getEpSquare(), enemyColor) & pawns) && - checkMask.get(epSquare + DOWN)) { - Bitboard occ = pos.occupied(); - bool rightEp = (step(pawns & moveD)).get(epSquare); - bool leftEp = (step(pawns & moveA)).get(epSquare); - - if (rightEp) { - Square attackingPawn = epSquare + DOWN_LEFT; - Square attackedPawn = epSquare + DOWN; - - occ.clear(attackingPawn); - occ.clear(attackedPawn); - - Bitboard rookAttack = rookAttacks(attackedPawn, occ); - Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); - - Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; - Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; - Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; - - Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; - Bitboard seenDiagSliders = - (pos.pieces() | pos.pieces()) & diagAttack; - Bitboard seenADiagSliders = - (pos.pieces() | pos.pieces()) & aDiagAttack; - - bool pinRank = rankAttack.get(king) && seenRankSliders; - bool pinDiag = diagAttack.get(king) && seenDiagSliders; - bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; - - if (!(pinRank || pinDiag || pinADiag)) - *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); - - occ.set(attackingPawn); - occ.set(attackedPawn); - } - - if (leftEp) { - Square attackingPawn = epSquare + DOWN_RIGHT; - Square attackedPawn = epSquare + DOWN; - - occ.clear(attackingPawn); - occ.clear(attackedPawn); - - Bitboard rookAttack = rookAttacks(attackedPawn, occ); - Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); - - Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; - Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; - Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; - - Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; - Bitboard seenDiagSliders = - (pos.pieces() | pos.pieces()) & diagAttack; - Bitboard seenADiagSliders = - (pos.pieces() | pos.pieces()) & aDiagAttack; - - bool pinRank = rankAttack.get(king) && seenRankSliders; - bool pinDiag = diagAttack.get(king) && seenDiagSliders; - bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; - - if (!(pinRank || pinDiag || pinADiag)) - *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); - - occ.set(attackingPawn); - occ.set(attackedPawn); - } - } - - return moves; + Bitboard moveH, Bitboard moveV, Bitboard moveD, Bitboard moveA) { + constexpr Color enemyColor = EnemyColor(); + + constexpr Direction UP = color == WHITE ? NORTH : -NORTH; + constexpr Direction UP_LEFT = color == WHITE ? NORTH_WEST : -NORTH_WEST; + constexpr Direction UP_RIGHT = color == WHITE ? NORTH_EAST : -NORTH_EAST; + constexpr Direction DOWN = -UP; + constexpr Direction DOWN_LEFT = -UP_RIGHT; + constexpr Direction DOWN_RIGHT = -UP_LEFT; + + constexpr Bitboard doublePushRank = (color == WHITE ? rank3 : rank6); + constexpr Bitboard beforePromoRank = (color == WHITE ? rank7 : rank2); + constexpr Bitboard notBeforePromo = ~beforePromoRank; + + Square epSquare = pos.getEpSquare(); + + Bitboard empty = pos.empty(); + Bitboard enemy = pos.enemy(); + + Bitboard pawns = pos.pieces(); + Bitboard pawnsBeforePromo = beforePromoRank & pawns; + pawns &= notBeforePromo; + + if constexpr (!capturesOnly) { + Bitboard singlePush = step(pawns & moveH) & empty; + Bitboard doublePush = step(singlePush & doublePushRank) & empty; + + singlePush &= checkMask; + doublePush &= checkMask; + + while (singlePush) { + Square to = singlePush.popLsb(); + *moves++ = Move(to + DOWN, to); + } + + while (doublePush) { + Square to = doublePush.popLsb(); + *moves++ = Move(to + (2 * DOWN), to, DOUBLE_PAWN_PUSH); + } + } + + Bitboard rightCapture = step(pawns & moveD) & enemy & checkMask; + Bitboard leftCapture = step(pawns & moveA) & enemy & checkMask; + + while (leftCapture) { + Square to = leftCapture.popLsb(); + *moves++ = Move(to + DOWN_RIGHT, to, CAPTURE); + } + + while (rightCapture) { + Square to = rightCapture.popLsb(); + *moves++ = Move(to + DOWN_LEFT, to, CAPTURE); + } + + if (pawnsBeforePromo) { + + if constexpr (!capturesOnly) { + Bitboard upPromo = step(pawnsBeforePromo & moveH) & empty & checkMask; + while (upPromo) { + Square to = upPromo.popLsb(); + moves = makePromo(moves, to + DOWN, to); + } + } + + Bitboard rightPromo = step(pawnsBeforePromo & moveD) & enemy & checkMask; + Bitboard leftPromo = step(pawnsBeforePromo & moveA) & enemy & checkMask; + while (rightPromo) { + Square to = rightPromo.popLsb(); + moves = makePromoCapture(moves, to + DOWN_LEFT, to); + } + + while (leftPromo) { + Square to = leftPromo.popLsb(); + moves = makePromoCapture(moves, to + DOWN_RIGHT, to); + } + } + + if ((epSquare != NULL_SQUARE) && (pawnMask(pos.getEpSquare(), enemyColor) & pawns) && + checkMask.get(epSquare + DOWN)) { + Bitboard occ = pos.occupied(); + bool rightEp = (step(pawns & moveD)).get(epSquare); + bool leftEp = (step(pawns & moveA)).get(epSquare); + + if (rightEp) { + Square attackingPawn = epSquare + DOWN_LEFT; + Square attackedPawn = epSquare + DOWN; + + occ.clear(attackingPawn); + occ.clear(attackedPawn); + + Bitboard rookAttack = rookAttacks(attackedPawn, occ); + Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); + + Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; + Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; + Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; + + Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; + Bitboard seenDiagSliders = + (pos.pieces() | pos.pieces()) & diagAttack; + Bitboard seenADiagSliders = + (pos.pieces() | pos.pieces()) & aDiagAttack; + + bool pinRank = rankAttack.get(king) && seenRankSliders; + bool pinDiag = diagAttack.get(king) && seenDiagSliders; + bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; + + if (!(pinRank || pinDiag || pinADiag)) + *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); + + occ.set(attackingPawn); + occ.set(attackedPawn); + } + + if (leftEp) { + Square attackingPawn = epSquare + DOWN_RIGHT; + Square attackedPawn = epSquare + DOWN; + + occ.clear(attackingPawn); + occ.clear(attackedPawn); + + Bitboard rookAttack = rookAttacks(attackedPawn, occ); + Bitboard bishopAttack = bishopAttacks(attackedPawn, occ); + + Bitboard rankAttack = rankMask(attackedPawn) & rookAttack; + Bitboard diagAttack = diagonalMask(attackedPawn) & bishopAttack; + Bitboard aDiagAttack = antiDiagonalMask(attackedPawn) & bishopAttack; + + Bitboard seenRankSliders = (pos.pieces() | pos.pieces()) & rankAttack; + Bitboard seenDiagSliders = + (pos.pieces() | pos.pieces()) & diagAttack; + Bitboard seenADiagSliders = + (pos.pieces() | pos.pieces()) & aDiagAttack; + + bool pinRank = rankAttack.get(king) && seenRankSliders; + bool pinDiag = diagAttack.get(king) && seenDiagSliders; + bool pinADiag = aDiagAttack.get(king) && seenADiagSliders; + + if (!(pinRank || pinDiag || pinADiag)) + *moves++ = Move(attackingPawn, epSquare, EP_CAPTURE); + + occ.set(attackingPawn); + occ.set(attackedPawn); + } + } + + return moves; } template inline Move *generateKingMoves(const Position &pos, Move *moves, Square king, - Bitboard safeSquares, Bitboard empty, Bitboard enemy) { + Bitboard safeSquares, Bitboard empty, Bitboard enemy) { - Bitboard kingTarget = kingMask(king) & safeSquares; + Bitboard kingTarget = kingMask(king) & safeSquares; - if constexpr (!capturesOnly) { - Bitboard kingQuiets = kingTarget & empty; - while (kingQuiets) { - *moves++ = Move(king, kingQuiets.popLsb()); - } - } + if constexpr (!capturesOnly) { + Bitboard kingQuiets = kingTarget & empty; + while (kingQuiets) { + *moves++ = Move(king, kingQuiets.popLsb()); + } + } - Bitboard kingCaptures = kingTarget & enemy; - while (kingCaptures) { - Square to = kingCaptures.popLsb(); - *moves++ = Move(king, to, CAPTURE); - } + Bitboard kingCaptures = kingTarget & enemy; + while (kingCaptures) { + Square to = kingCaptures.popLsb(); + *moves++ = Move(king, to, CAPTURE); + } - return moves; + return moves; } inline Bitboard generateCheckMask(const Position &pos, Square king, Bitboard checkers) { - unsigned int checks = checkers.popCount(); - if (checks == 0) { - return 0xffffffffffffffffULL; - } else if (checks == 1) { - Square checker = checkers.lsb(); - PieceType type = pos.pieceAt(checker).type; - if (type == ROOK || type == BISHOP || type == QUEEN) { - return checkers | commonRay[king][checker]; - } else { - return checkers; - } - } else { - return 0; - } + unsigned int checks = checkers.popCount(); + if (checks == 0) { + return 0xffffffffffffffffULL; + } else if (checks == 1) { + Square checker = checkers.lsb(); + PieceType type = pos.pieceAt(checker).type; + if (type == ROOK || type == BISHOP || type == QUEEN) { + return checkers | commonRay[king][checker]; + } else { + return checkers; + } + } else { + return 0; + } } template inline Move *generateSliderAndJumpMoves(const Position &pos, Move *moves, Bitboard pieces, - Bitboard occupied, Bitboard empty, Bitboard enemy, Bitboard checkMask, - Bitboard pinHV, Bitboard pinDA) { - Bitboard pinnedHV = pinHV & pieces; - Bitboard pinnedDA = pinDA & pieces; - pieces &= ~(pinnedHV | pinnedDA); + Bitboard occupied, Bitboard empty, Bitboard enemy, Bitboard checkMask, + Bitboard pinHV, Bitboard pinDA) { + Bitboard pinnedHV = pinHV & pieces; + Bitboard pinnedDA = pinDA & pieces; + pieces &= ~(pinnedHV | pinnedDA); - moves = generateMovesFromPieces(pos, moves, pieces, checkMask, occupied, empty, enemy); + moves = generateMovesFromPieces(pos, moves, pieces, checkMask, occupied, empty, enemy); - moves = generateMovesFromPieces(pos, moves, pinnedHV, checkMask & pinHV, occupied, empty, - enemy); + moves = generateMovesFromPieces(pos, moves, pinnedHV, checkMask & pinHV, occupied, empty, + enemy); - moves = generateMovesFromPieces(pos, moves, pinnedDA, checkMask & pinDA, occupied, empty, - enemy); + moves = generateMovesFromPieces(pos, moves, pinnedDA, checkMask & pinDA, occupied, empty, + enemy); - return moves; + return moves; } template Move *generateMoves(const Position &pos, Move *moves) { - constexpr Color enemyColor = EnemyColor(); - - Square king = pos.pieces().lsb(); - assert(king != NULL_SQUARE); - - Bitboard friendlyPieces = pos.friendly(); - Bitboard empty = pos.empty(); - Bitboard enemy = pos.enemy(); - Bitboard occupied = pos.occupied(); - Bitboard checkers = getAttackers(pos, king); - - occupied.clear(king); - Bitboard safeSquares = ~getAttackedSquares(pos, occupied); - occupied.set(king); - - // Generating checkMask - Bitboard checkMask = generateCheckMask(pos, king, checkers); - - // Generating king moves - moves = generateKingMoves(pos, moves, king, safeSquares, empty, enemy); - - // If we are in a double check, only king moves are legal - if (checkMask == 0) - return moves; - - // Generating pinMasks - Bitboard seenSquares = pieceAttacks(king, occupied); - Bitboard possiblePins = seenSquares & friendlyPieces; - - occupied ^= possiblePins; - - Bitboard possiblePinners = (pieceAttacks(king, occupied) ^ seenSquares) & enemy; - Bitboard pinners = ((pieceAttacks(king, occupied) & pos.pieces()) | - (pieceAttacks(king, occupied) & pos.pieces()) | - (pieceAttacks(king, occupied) & pos.pieces())) & - possiblePinners; - - Bitboard pinH, pinV, pinD, pinA, pinHV, pinDA, moveH, moveV, moveD, moveA; - - while (pinners) { - Square pinner = pinners.popLsb(); - LineType type = lineType[king][pinner]; - switch (type) { - case HORIZONTAL: - pinH |= commonRay[king][pinner] | pinner; - break; - case VERTICAL: - pinV |= commonRay[king][pinner] | pinner; - break; - case DIAGONAL: - pinD |= commonRay[king][pinner] | pinner; - break; - case ANTI_DIAGONAL: - pinA |= commonRay[king][pinner] | pinner; - break; - } - } - - pinHV = pinH | pinV; - pinDA = pinD | pinA; - - pinH &= friendlyPieces; - pinV &= friendlyPieces; - pinD &= friendlyPieces; - pinA &= friendlyPieces; - - moveH = ~(pinV | pinD | pinA); - moveV = ~(pinH | pinD | pinA); - moveD = ~(pinH | pinV | pinA); - moveA = ~(pinH | pinV | pinD); - - occupied ^= possiblePins; - - // Generating pawn moves - moves = generatePawnMoves(pos, moves, king, checkMask, moveH, moveV, moveD, moveA); - - // Generating knight and slider moves - Bitboard sliderAndJumperPieces = friendlyPieces & ~pos.pieces(); - sliderAndJumperPieces.clear(king); - - moves = generateSliderAndJumpMoves(pos, moves, sliderAndJumperPieces, occupied, empty, enemy, - checkMask, pinHV, pinDA); - - // Generating castling moves - if constexpr (!capturesOnly) { - if constexpr (color == WHITE) { - if (pos.getCastleRight(WK_MASK) && - (safeSquares & WK_CASTLE_SAFE) == WK_CASTLE_SAFE && (empty & WK_CASTLE_EMPTY) == WK_CASTLE_EMPTY) { - - *moves++ = Move(E1, G1, KING_CASTLE); - } - - if (pos.getCastleRight(WQ_MASK) && - (safeSquares & WQ_CASTLE_SAFE) == WQ_CASTLE_SAFE && (empty & WQ_CASTLE_EMPTY) == WQ_CASTLE_EMPTY) { - - *moves++ = Move(E1, C1, QUEEN_CASTLE); - } - } else { - if (pos.getCastleRight(BK_MASK) && - (safeSquares & BK_CASTLE_SAFE) == BK_CASTLE_SAFE && (empty & BK_CASTLE_EMPTY) == BK_CASTLE_EMPTY) { - - *moves++ = Move(E8, G8, KING_CASTLE); - } - - if (pos.getCastleRight(BQ_MASK) && - (safeSquares & BQ_CASTLE_SAFE) == BQ_CASTLE_SAFE && (empty & BQ_CASTLE_EMPTY) == BQ_CASTLE_EMPTY) { - - *moves++ = Move(E8, C8, QUEEN_CASTLE); - } - } - } - - return moves; + constexpr Color enemyColor = EnemyColor(); + + Square king = pos.pieces().lsb(); + assert(king != NULL_SQUARE); + + Bitboard friendlyPieces = pos.friendly(); + Bitboard empty = pos.empty(); + Bitboard enemy = pos.enemy(); + Bitboard occupied = pos.occupied(); + Bitboard checkers = getAttackers(pos, king); + + occupied.clear(king); + Bitboard safeSquares = ~getAttackedSquares(pos, occupied); + occupied.set(king); + + // Generating checkMask + Bitboard checkMask = generateCheckMask(pos, king, checkers); + + // Generating king moves + moves = generateKingMoves(pos, moves, king, safeSquares, empty, enemy); + + // If we are in a double check, only king moves are legal + if (checkMask == 0) + return moves; + + // Generating pinMasks + Bitboard seenSquares = pieceAttacks(king, occupied); + Bitboard possiblePins = seenSquares & friendlyPieces; + + occupied ^= possiblePins; + + Bitboard possiblePinners = (pieceAttacks(king, occupied) ^ seenSquares) & enemy; + Bitboard pinners = ((pieceAttacks(king, occupied) & pos.pieces()) | + (pieceAttacks(king, occupied) & pos.pieces()) | + (pieceAttacks(king, occupied) & pos.pieces())) & + possiblePinners; + + Bitboard pinH, pinV, pinD, pinA, pinHV, pinDA, moveH, moveV, moveD, moveA; + + while (pinners) { + Square pinner = pinners.popLsb(); + LineType type = lineType[king][pinner]; + switch (type) { + case HORIZONTAL: + pinH |= commonRay[king][pinner] | pinner; + break; + case VERTICAL: + pinV |= commonRay[king][pinner] | pinner; + break; + case DIAGONAL: + pinD |= commonRay[king][pinner] | pinner; + break; + case ANTI_DIAGONAL: + pinA |= commonRay[king][pinner] | pinner; + break; + } + } + + pinHV = pinH | pinV; + pinDA = pinD | pinA; + + pinH &= friendlyPieces; + pinV &= friendlyPieces; + pinD &= friendlyPieces; + pinA &= friendlyPieces; + + moveH = ~(pinV | pinD | pinA); + moveV = ~(pinH | pinD | pinA); + moveD = ~(pinH | pinV | pinA); + moveA = ~(pinH | pinV | pinD); + + occupied ^= possiblePins; + + // Generating pawn moves + moves = generatePawnMoves(pos, moves, king, checkMask, moveH, moveV, moveD, moveA); + + // Generating knight and slider moves + Bitboard sliderAndJumperPieces = friendlyPieces & ~pos.pieces(); + sliderAndJumperPieces.clear(king); + + moves = generateSliderAndJumpMoves(pos, moves, sliderAndJumperPieces, occupied, empty, enemy, + checkMask, pinHV, pinDA); + + // Generating castling moves + if constexpr (!capturesOnly) { + if constexpr (color == WHITE) { + if (pos.getCastleRight(WK_MASK) && + (safeSquares & WK_CASTLE_SAFE) == WK_CASTLE_SAFE && (empty & WK_CASTLE_EMPTY) == WK_CASTLE_EMPTY) { + + *moves++ = Move(E1, G1, KING_CASTLE); + } + + if (pos.getCastleRight(WQ_MASK) && + (safeSquares & WQ_CASTLE_SAFE) == WQ_CASTLE_SAFE && (empty & WQ_CASTLE_EMPTY) == WQ_CASTLE_EMPTY) { + + *moves++ = Move(E1, C1, QUEEN_CASTLE); + } + } else { + if (pos.getCastleRight(BK_MASK) && + (safeSquares & BK_CASTLE_SAFE) == BK_CASTLE_SAFE && (empty & BK_CASTLE_EMPTY) == BK_CASTLE_EMPTY) { + + *moves++ = Move(E8, G8, KING_CASTLE); + } + + if (pos.getCastleRight(BQ_MASK) && + (safeSquares & BQ_CASTLE_SAFE) == BQ_CASTLE_SAFE && (empty & BQ_CASTLE_EMPTY) == BQ_CASTLE_EMPTY) { + + *moves++ = Move(E8, C8, QUEEN_CASTLE); + } + } + } + + return moves; } template Move *generateMoves(const Position &pos, Move *moves) { - if (pos.getSideToMove() == WHITE) { - return generateMoves(pos, moves); - } else { - return generateMoves(pos, moves); - } + if (pos.getSideToMove() == WHITE) { + return generateMoves(pos, moves); + } else { + return generateMoves(pos, moves); + } } Move *generateMoves(const Position &pos, Move *moves, bool capturesOnly) { - if (capturesOnly) { - return generateMoves(pos, moves); - } else { - return generateMoves(pos, moves); - } + if (capturesOnly) { + return generateMoves(pos, moves); + } else { + return generateMoves(pos, moves); + } } \ No newline at end of file diff --git a/src/movegen.h b/src/movegen.h index 02b14af..e77a87c 100644 --- a/src/movegen.h +++ b/src/movegen.h @@ -23,67 +23,67 @@ template inline Bitboard getAttackers(const Position &pos, Square square) { - Bitboard occupied = pos.occupied(); - Bitboard enemy = pos.enemy(); - return ((pawnMask(square, color) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces()) | - (pieceAttacks(square, occupied) & pos.pieces())) & - enemy; + Bitboard occupied = pos.occupied(); + Bitboard enemy = pos.enemy(); + return ((pawnMask(square, color) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces()) | + (pieceAttacks(square, occupied) & pos.pieces())) & + enemy; } inline Bitboard getAttackers(const Position &pos, Square square) { - if (pos.getSideToMove() == WHITE) - return getAttackers(pos, square); - else - return getAttackers(pos, square); + if (pos.getSideToMove() == WHITE) + return getAttackers(pos, square); + else + return getAttackers(pos, square); } Move *generateMoves(const Position &pos, Move *moves, bool capturesOnly); struct MoveList { - Move moves[200]; - Move *movesEnd; - unsigned int index; + Move moves[200]; + Move *movesEnd; + unsigned int index; - Score scores[200]; + Score scores[200]; - unsigned int count; + unsigned int count; - MoveList(const Position &pos, Ply ply, bool capturesOnly) { - movesEnd = generateMoves(pos, moves, capturesOnly); - index = 0; - count = movesEnd - moves; + MoveList(const Position &pos, Ply ply, bool capturesOnly) { + movesEnd = generateMoves(pos, moves, capturesOnly); + index = 0; + count = movesEnd - moves; - // Scoring moves - if (capturesOnly) { - for (unsigned int i = 0; i < count; i++) { - scores[i] = scoreQMove(pos, moves[i]); - } - } else { - for (unsigned int i = 0; i < count; i++) { - scores[i] = scoreMove(pos, moves[i], ply); - } - } - } + // Scoring moves + if (capturesOnly) { + for (unsigned int i = 0; i < count; i++) { + scores[i] = scoreQMove(pos, moves[i]); + } + } else { + for (unsigned int i = 0; i < count; i++) { + scores[i] = scoreMove(pos, moves[i], ply); + } + } + } - inline bool empty() const { - return index == count; - } + inline bool empty() const { + return index == count; + } - inline Move nextMove() { - unsigned int best = index; - for (unsigned int i = index; i < count; i++) { - if (scores[i] > scores[best]) { - best = i; - } - } - std::swap(moves[index], moves[best]); - std::swap(scores[index], scores[best]); + inline Move nextMove() { + unsigned int best = index; + for (unsigned int i = index; i < count; i++) { + if (scores[i] > scores[best]) { + best = i; + } + } + std::swap(moves[index], moves[best]); + std::swap(scores[index], scores[best]); - return moves[index++]; - } + return moves[index++]; + } }; #endif//BLACKCORE_MOVEGEN_H diff --git a/src/nnue.cpp b/src/nnue.cpp index e99ad9a..c5d6549 100644 --- a/src/nnue.cpp +++ b/src/nnue.cpp @@ -24,169 +24,169 @@ namespace NNUE { - INCBIN(Net, "corenet.bin"); + INCBIN(Net, "corenet.bin"); - alignas(64) int16_t L_0_WEIGHTS[L_0_SIZE * L_1_SIZE]; - alignas(64) int16_t L_0_BIASES[L_1_SIZE]; + alignas(64) int16_t L_0_WEIGHTS[L_0_SIZE * L_1_SIZE]; + alignas(64) int16_t L_0_BIASES[L_1_SIZE]; - alignas(64) int16_t L_1_WEIGHTS[L_1_SIZE * 2]; - alignas(64) int16_t L_1_BIASES[1]; + alignas(64) int16_t L_1_WEIGHTS[L_1_SIZE * 2]; + alignas(64) int16_t L_1_BIASES[1]; - void Accumulator::loadAccumulator(NNUE::Accumulator &accumulator) { - for (Color perspective : {WHITE, BLACK}) { + void Accumulator::loadAccumulator(NNUE::Accumulator &accumulator) { + for (Color perspective : {WHITE, BLACK}) { #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset4]); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], ac1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], ac2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], ac3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], ac4); - } + for (int i = 0; i < chunkNum; i += 4) { + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &accumulator.hiddenLayer[perspective][offset4]); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], ac1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], ac2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], ac3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], ac4); + } #else - std::memcpy(hiddenLayer[perspective], accumulator.hiddenLayer[perspective], sizeof(int16_t) * L_1_SIZE * 1); + std::memcpy(hiddenLayer[perspective], accumulator.hiddenLayer[perspective], sizeof(int16_t) * L_1_SIZE * 1); #endif - } - } - - void Accumulator::refresh(const Position &pos) { - for (Color perspective : {WHITE, BLACK}) { - std::memcpy(hiddenLayer[perspective], L_0_BIASES, sizeof(int16_t) * L_1_SIZE); - } - - for (Square sq = A1; sq < 64; sq += 1) { - Piece p = pos.pieceAt(sq); - if (!p.isNull()) { - addFeature(p.color, p.type, sq); - } - } - } - - void Accumulator::addFeature(Color pieceColor, PieceType pieceType, Square sq) { - for (Color perspective : {WHITE, BLACK}) { - unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); + } + } + + void Accumulator::refresh(const Position &pos) { + for (Color perspective : {WHITE, BLACK}) { + std::memcpy(hiddenLayer[perspective], L_0_BIASES, sizeof(int16_t) * L_1_SIZE); + } + + for (Square sq = A1; sq < 64; sq += 1) { + Piece p = pos.pieceAt(sq); + if (!p.isNull()) { + addFeature(p.color, p.type, sq); + } + } + } + + void Accumulator::addFeature(Color pieceColor, PieceType pieceType, Square sq) { + for (Color perspective : {WHITE, BLACK}) { + unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); - - __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); - __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); - __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); - __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); - - __m256i sum1 = _mm256_add_epi16(ac1, we1); - __m256i sum2 = _mm256_add_epi16(ac2, we2); - __m256i sum3 = _mm256_add_epi16(ac3, we3); - __m256i sum4 = _mm256_add_epi16(ac4, we4); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); - } + for (int i = 0; i < chunkNum; i += 4) { + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); + + __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); + __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); + __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); + __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); + + __m256i sum1 = _mm256_add_epi16(ac1, we1); + __m256i sum2 = _mm256_add_epi16(ac2, we2); + __m256i sum3 = _mm256_add_epi16(ac3, we3); + __m256i sum4 = _mm256_add_epi16(ac4, we4); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); + } #else - for (int i = 0; i < L_1_SIZE; i++) { - hiddenLayer[perspective][i] += L_0_WEIGHTS[index * L_1_SIZE + i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + hiddenLayer[perspective][i] += L_0_WEIGHTS[index * L_1_SIZE + i]; + } #endif - } - } + } + } - void Accumulator::removeFeature(Color pieceColor, PieceType pieceType, Square sq) { - for (Color perspective : {WHITE, BLACK}) { - unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); + void Accumulator::removeFeature(Color pieceColor, PieceType pieceType, Square sq) { + for (Color perspective : {WHITE, BLACK}) { + unsigned int index = getAccumulatorIndex(perspective, pieceColor, pieceType, sq); #ifdef AVX2 - for (int i = 0; i < chunkNum; i += 4) { - - const int offset1 = (i + 0) * regWidth; - const int offset2 = (i + 1) * regWidth; - const int offset3 = (i + 2) * regWidth; - const int offset4 = (i + 3) * regWidth; - - __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); - __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); - __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); - __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); - - __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); - __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); - __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); - __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); - - __m256i sum1 = _mm256_sub_epi16(ac1, we1); - __m256i sum2 = _mm256_sub_epi16(ac2, we2); - __m256i sum3 = _mm256_sub_epi16(ac3, we3); - __m256i sum4 = _mm256_sub_epi16(ac4, we4); - - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); - _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); - } + for (int i = 0; i < chunkNum; i += 4) { + + const int offset1 = (i + 0) * regWidth; + const int offset2 = (i + 1) * regWidth; + const int offset3 = (i + 2) * regWidth; + const int offset4 = (i + 3) * regWidth; + + __m256i ac1 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset1]); + __m256i ac2 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset2]); + __m256i ac3 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset3]); + __m256i ac4 = _mm256_loadu_si256((__m256i *) &hiddenLayer[perspective][offset4]); + + __m256i we1 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset1]); + __m256i we2 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset2]); + __m256i we3 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset3]); + __m256i we4 = _mm256_loadu_si256((__m256i *) &L_0_WEIGHTS[index * L_1_SIZE + offset4]); + + __m256i sum1 = _mm256_sub_epi16(ac1, we1); + __m256i sum2 = _mm256_sub_epi16(ac2, we2); + __m256i sum3 = _mm256_sub_epi16(ac3, we3); + __m256i sum4 = _mm256_sub_epi16(ac4, we4); + + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset1], sum1); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset2], sum2); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset3], sum3); + _mm256_storeu_si256((__m256i *) &hiddenLayer[perspective][offset4], sum4); + } #else - for (int i = 0; i < L_1_SIZE; i++) { - hiddenLayer[perspective][i] -= L_0_WEIGHTS[index * L_1_SIZE + i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + hiddenLayer[perspective][i] -= L_0_WEIGHTS[index * L_1_SIZE + i]; + } #endif - } - } + } + } - Score Accumulator::forward(Color stm) { + Score Accumulator::forward(Color stm) { - int32_t output = L_1_BIASES[0]; + int32_t output = L_1_BIASES[0]; - if (stm == WHITE) { - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[i]; - } + if (stm == WHITE) { + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[i]; + } - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[L_1_SIZE + i]; - } - } else { - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[i]; - } + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[L_1_SIZE + i]; + } + } else { + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[BLACK][i]) * L_1_WEIGHTS[i]; + } - for (int i = 0; i < L_1_SIZE; i++) { - output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[L_1_SIZE + i]; - } - } + for (int i = 0; i < L_1_SIZE; i++) { + output += ReLU(hiddenLayer[WHITE][i]) * L_1_WEIGHTS[L_1_SIZE + i]; + } + } - return output * 400 / (255 * 255); - } + return output * 400 / (255 * 255); + } - void init() { + void init() { - int ptr = 0; - std::memcpy(L_0_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_0_SIZE * L_1_SIZE); - ptr += sizeof(int16_t) * L_0_SIZE * L_1_SIZE; - std::memcpy(L_0_BIASES, gNetData + ptr, sizeof(int16_t) * L_1_SIZE); - ptr += sizeof(int16_t) * L_1_SIZE; - std::memcpy(L_1_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_1_SIZE * 2); - ptr += sizeof(int16_t) * L_1_SIZE * 2; - std::memcpy(L_1_BIASES, gNetData + ptr, sizeof(int16_t) * 1); + int ptr = 0; + std::memcpy(L_0_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_0_SIZE * L_1_SIZE); + ptr += sizeof(int16_t) * L_0_SIZE * L_1_SIZE; + std::memcpy(L_0_BIASES, gNetData + ptr, sizeof(int16_t) * L_1_SIZE); + ptr += sizeof(int16_t) * L_1_SIZE; + std::memcpy(L_1_WEIGHTS, gNetData + ptr, sizeof(int16_t) * L_1_SIZE * 2); + ptr += sizeof(int16_t) * L_1_SIZE * 2; + std::memcpy(L_1_BIASES, gNetData + ptr, sizeof(int16_t) * 1); - // Currently loading net from a file is not supported - // Legacy code: + // Currently loading net from a file is not supported + // Legacy code: - /*FILE *file = fopen(filename.c_str(), "rb"); + /*FILE *file = fopen(filename.c_str(), "rb"); if (file != nullptr) { @@ -196,5 +196,5 @@ namespace NNUE { fread(L_1_BIASES, sizeof(int16_t), 1, file); }*/ - } + } }// namespace NNUE diff --git a/src/nnue.h b/src/nnue.h index 63a6c7d..0032624 100644 --- a/src/nnue.h +++ b/src/nnue.h @@ -23,7 +23,7 @@ class Position; namespace NNUE { - /* + /* * +-----------------------+ * | NNUE Architecture | * | 2x(768->256)->1 | @@ -41,39 +41,39 @@ namespace NNUE { */ - constexpr int L_0_SIZE = 768; - constexpr int L_1_SIZE = 256; + constexpr int L_0_SIZE = 768; + constexpr int L_1_SIZE = 256; - constexpr int regWidth = 256 / 16; - constexpr int chunkNum = 256 / regWidth; + constexpr int regWidth = 256 / 16; + constexpr int chunkNum = 256 / regWidth; - struct Accumulator { - alignas(32) int16_t hiddenLayer[2][L_1_SIZE]; + struct Accumulator { + alignas(32) int16_t hiddenLayer[2][L_1_SIZE]; - constexpr Accumulator() { - } + constexpr Accumulator() { + } - void loadAccumulator(Accumulator &accumulator); + void loadAccumulator(Accumulator &accumulator); - void refresh(const Position &pos); + void refresh(const Position &pos); - void addFeature(Color pieceColor, PieceType pieceType, Square sq); + void addFeature(Color pieceColor, PieceType pieceType, Square sq); - void removeFeature(Color pieceColor, PieceType pieceType, Square sq); + void removeFeature(Color pieceColor, PieceType pieceType, Square sq); - Score forward(Color stm); - }; + Score forward(Color stm); + }; - constexpr int getAccumulatorIndex(Color perspective, Color pieceColor, PieceType pieceType, Square square) { - return (perspective == WHITE ? pieceColor : 1 - pieceColor) * 384 + pieceType * 64 + - (perspective == WHITE ? square : square ^ 56); - } + constexpr int getAccumulatorIndex(Color perspective, Color pieceColor, PieceType pieceType, Square square) { + return (perspective == WHITE ? pieceColor : 1 - pieceColor) * 384 + pieceType * 64 + + (perspective == WHITE ? square : square ^ 56); + } - constexpr int16_t ReLU(int16_t in) { - return std::max((int16_t) 0, in); - } + constexpr int16_t ReLU(int16_t in) { + return std::max((int16_t) 0, in); + } - void init(); + void init(); }// namespace NNUE #endif//BLACKCORE_NNUE_H diff --git a/src/position.cpp b/src/position.cpp index a51e280..e131c51 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -28,228 +28,228 @@ using std::cout, std::string; U64 nodeCount = 0; void Position::clearPosition() { - for (auto &i : pieceBB) { - i = 0; - } + for (auto &i : pieceBB) { + i = 0; + } - for (Square square = A1; square < 64; square += 1) { - board[square] = {}; - } + for (Square square = A1; square < 64; square += 1) { + board[square] = {}; + } - allPieceBB[WHITE] = 0; - allPieceBB[BLACK] = 0; + allPieceBB[WHITE] = 0; + allPieceBB[BLACK] = 0; - states.clear(); - state->lastIrreversibleMove = state; + states.clear(); + state->lastIrreversibleMove = state; } void Position::makeNullMove() { - BoardState newState; + BoardState newState; - newState.stm = state->stm == WHITE ? BLACK : WHITE; - newState.castlingRights = state->castlingRights; - newState.hash = state->hash ^ *blackRand; - newState.lastIrreversibleMove = state->lastIrreversibleMove; + newState.stm = state->stm == WHITE ? BLACK : WHITE; + newState.castlingRights = state->castlingRights; + newState.hash = state->hash ^ *blackRand; + newState.lastIrreversibleMove = state->lastIrreversibleMove; - if (state->epSquare != NULL_SQUARE) { - newState.hash ^= epRandTable[squareToFile(state->epSquare)]; - } + if (state->epSquare != NULL_SQUARE) { + newState.hash ^= epRandTable[squareToFile(state->epSquare)]; + } - states.push(newState); + states.push(newState); } void Position::undoNullMove() { - states.pop(); + states.pop(); } bool Position::isRepetition() { - // TODO we can make this faster, because we only have to check every second ply - for (BoardState *ptr = state->lastIrreversibleMove; ptr != state; ptr++) { - if (state->hash == ptr->hash) { - return true; - } - } - return false; + // TODO we can make this faster, because we only have to check every second ply + for (BoardState *ptr = state->lastIrreversibleMove; ptr != state; ptr++) { + if (state->hash == ptr->hash) { + return true; + } + } + return false; } void Position::display() const { - std::vector text; - text.emplace_back(string("Hash: ") + std::to_string(state->hash)); - if (getEpSquare() != NULL_SQUARE) - text.emplace_back(string("En passant square: ") + formatSquare(getEpSquare())); - string cr; - if (getCastleRight(WK_MASK)) - cr += 'K'; - if (getCastleRight(WQ_MASK)) - cr += 'Q'; - if (getCastleRight(BK_MASK)) - cr += 'k'; - if (getCastleRight(BQ_MASK)) - cr += 'q'; - if (cr.empty()) - cr = "None"; - text.emplace_back(string("Castling rights: ") + cr); - text.emplace_back(string("Side to move: ") + string(getSideToMove() == WHITE ? "White" : "Black")); - // TODO FEN, full-half move counter - - cout << "\n A B C D E F G H \n"; - for (int i = 8; i >= 1; i--) { - cout << " +---+---+---+---+---+---+---+---+"; - if (i <= 7 && !text.empty()) { - cout << " " << text.back(); - text.pop_back(); - } - cout << "\n " << i << " |"; - for (int j = 1; j <= 8; j++) { - cout << " " << pieceToChar(pieceAt(Square((i - 1) * 8 + (j - 1)))) << " |"; - } - if (i <= 7 && !text.empty()) { - cout << " " << text.back(); - text.pop_back(); - } - cout << "\n"; - } - cout << " +---+---+---+---+---+---+---+---+\n\n" - << std::endl; + std::vector text; + text.emplace_back(string("Hash: ") + std::to_string(state->hash)); + if (getEpSquare() != NULL_SQUARE) + text.emplace_back(string("En passant square: ") + formatSquare(getEpSquare())); + string cr; + if (getCastleRight(WK_MASK)) + cr += 'K'; + if (getCastleRight(WQ_MASK)) + cr += 'Q'; + if (getCastleRight(BK_MASK)) + cr += 'k'; + if (getCastleRight(BQ_MASK)) + cr += 'q'; + if (cr.empty()) + cr = "None"; + text.emplace_back(string("Castling rights: ") + cr); + text.emplace_back(string("Side to move: ") + string(getSideToMove() == WHITE ? "White" : "Black")); + // TODO FEN, full-half move counter + + cout << "\n A B C D E F G H \n"; + for (int i = 8; i >= 1; i--) { + cout << " +---+---+---+---+---+---+---+---+"; + if (i <= 7 && !text.empty()) { + cout << " " << text.back(); + text.pop_back(); + } + cout << "\n " << i << " |"; + for (int j = 1; j <= 8; j++) { + cout << " " << pieceToChar(pieceAt(Square((i - 1) * 8 + (j - 1)))) << " |"; + } + if (i <= 7 && !text.empty()) { + cout << " " << text.back(); + text.pop_back(); + } + cout << "\n"; + } + cout << " +---+---+---+---+---+---+---+---+\n\n" + << std::endl; } void Position::displayEval() { - Score score = eval(*this); - cout << "\n A B C D E F G H \n"; - for (int i = 8; i >= 1; i--) { - cout << " +-----+-----+-----+-----+-----+-----+-----+-----+"; - cout << "\n " << i << " |"; - for (int j = 1; j <= 8; j++) { - Square square = Square((i - 1) * 8 + (j - 1)); - cout << " " << pieceToChar(pieceAt(square)) << " |"; - } - cout << "\n |"; - for (int j = 1; j <= 8; j++) { - Square square = Square((i - 1) * 8 + (j - 1)); - Piece piece = pieceAt(square); - string evalStr = " "; - if (!piece.isNull() && piece.type != KING) { - clearSquare(square); - Score newScore = eval(*this); - Score scoreDiff = score - newScore; - evalStr = std::to_string(scoreDiff); - setSquare(square, piece); - } - cout << std::setw(5) << evalStr << "|"; - } - cout << "\n"; - } - cout << " +-----+-----+-----+-----+-----+-----+-----+-----+\n" - << std::endl; - - cout << "Eval: " << score << std::endl; + Score score = eval(*this); + cout << "\n A B C D E F G H \n"; + for (int i = 8; i >= 1; i--) { + cout << " +-----+-----+-----+-----+-----+-----+-----+-----+"; + cout << "\n " << i << " |"; + for (int j = 1; j <= 8; j++) { + Square square = Square((i - 1) * 8 + (j - 1)); + cout << " " << pieceToChar(pieceAt(square)) << " |"; + } + cout << "\n |"; + for (int j = 1; j <= 8; j++) { + Square square = Square((i - 1) * 8 + (j - 1)); + Piece piece = pieceAt(square); + string evalStr = " "; + if (!piece.isNull() && piece.type != KING) { + clearSquare(square); + Score newScore = eval(*this); + Score scoreDiff = score - newScore; + evalStr = std::to_string(scoreDiff); + setSquare(square, piece); + } + cout << std::setw(5) << evalStr << "|"; + } + cout << "\n"; + } + cout << " +-----+-----+-----+-----+-----+-----+-----+-----+\n" + << std::endl; + + cout << "Eval: " << score << std::endl; } void Position::loadPositionFromFen(const string &fen) { - clearPosition(); - - std::stringstream ss; - string b; - ss << fen; - ss >> b; - Square square = A8; - for (char c : b) { - if ('1' <= c && c <= '8') { - square += c - '0'; - } else if (c == '/') { - square -= 16; - } else { - setSquare(square, charToPiece(c)); - square += 1; - } - } - - char c; - ss >> c; - switch (c) { - case 'w': - state->stm = WHITE; - break; - case 'b': - state->stm = BLACK; - state->hash ^= *blackRand; - break; - default: - assert(0); - } - string cr; - ss >> cr; - if (cr[0] != '-') { - for (char r : cr) { - switch (r) { - case 'K': - setCastleRight(WK_MASK); - break; - case 'Q': - setCastleRight(WQ_MASK); - break; - case 'k': - setCastleRight(BK_MASK); - break; - case 'q': - setCastleRight(BQ_MASK); - break; - default: - assert(0); - } - } - } - - ss >> state->epSquare; - - state->hash ^= castlingRandTable[state->castlingRights]; - state->hash ^= epRandTable[squareToFile(state->epSquare)]; - - state->accumulator.refresh(*this); + clearPosition(); + + std::stringstream ss; + string b; + ss << fen; + ss >> b; + Square square = A8; + for (char c : b) { + if ('1' <= c && c <= '8') { + square += c - '0'; + } else if (c == '/') { + square -= 16; + } else { + setSquare(square, charToPiece(c)); + square += 1; + } + } + + char c; + ss >> c; + switch (c) { + case 'w': + state->stm = WHITE; + break; + case 'b': + state->stm = BLACK; + state->hash ^= *blackRand; + break; + default: + assert(0); + } + string cr; + ss >> cr; + if (cr[0] != '-') { + for (char r : cr) { + switch (r) { + case 'K': + setCastleRight(WK_MASK); + break; + case 'Q': + setCastleRight(WQ_MASK); + break; + case 'k': + setCastleRight(BK_MASK); + break; + case 'q': + setCastleRight(BQ_MASK); + break; + default: + assert(0); + } + } + } + + ss >> state->epSquare; + + state->hash ^= castlingRandTable[state->castlingRights]; + state->hash ^= epRandTable[squareToFile(state->epSquare)]; + + state->accumulator.refresh(*this); } void Position::loadPositionFromRawState(const RawState &rawState) { - clearPosition(); - state->stm = rawState.stm; - state->epSquare = rawState.epSquare; - state->castlingRights = rawState.castlingRights; - allPieceBB[WHITE] = rawState.allPieceBB[WHITE]; - allPieceBB[BLACK] = rawState.allPieceBB[BLACK]; - - for (int i = 0; i < 6; i++) { - pieceBB[i] = rawState.pieceBB[i]; - } + clearPosition(); + state->stm = rawState.stm; + state->epSquare = rawState.epSquare; + state->castlingRights = rawState.castlingRights; + allPieceBB[WHITE] = rawState.allPieceBB[WHITE]; + allPieceBB[BLACK] = rawState.allPieceBB[BLACK]; + + for (int i = 0; i < 6; i++) { + pieceBB[i] = rawState.pieceBB[i]; + } #ifndef TUNE - for (Square sq = A1; sq < 64; sq += 1) { - board[sq] = rawState.board[sq]; - } + for (Square sq = A1; sq < 64; sq += 1) { + board[sq] = rawState.board[sq]; + } #endif } RawState Position::getRawState() { - RawState rawState; - rawState.stm = getSideToMove(); - rawState.epSquare = getEpSquare(); - rawState.castlingRights = getCastlingRights(); - rawState.allPieceBB[WHITE] = allPieceBB[WHITE]; - rawState.allPieceBB[BLACK] = allPieceBB[BLACK]; - - for (int i = 0; i < 6; i++) { - rawState.pieceBB[i] = pieceBB[i]; - } - - for (Square sq = A1; sq < 64; sq += 1) { - rawState.board[sq] = board[sq]; - } - - return rawState; + RawState rawState; + rawState.stm = getSideToMove(); + rawState.epSquare = getEpSquare(); + rawState.castlingRights = getCastlingRights(); + rawState.allPieceBB[WHITE] = allPieceBB[WHITE]; + rawState.allPieceBB[BLACK] = allPieceBB[BLACK]; + + for (int i = 0; i < 6; i++) { + rawState.pieceBB[i] = pieceBB[i]; + } + + for (Square sq = A1; sq < 64; sq += 1) { + rawState.board[sq] = board[sq]; + } + + return rawState; } Position::Position() { - clearPosition(); + clearPosition(); } Position::Position(const std::string &fen) { - loadPositionFromFen(fen); + loadPositionFromFen(fen); } \ No newline at end of file diff --git a/src/position.h b/src/position.h index 6dd4cf7..0750833 100644 --- a/src/position.h +++ b/src/position.h @@ -26,409 +26,409 @@ extern U64 nodeCount; struct BoardState { - Color stm = COLOR_EMPTY; - Square epSquare = NULL_SQUARE; - unsigned char castlingRights = 0; - U64 hash = 0; + Color stm = COLOR_EMPTY; + Square epSquare = NULL_SQUARE; + unsigned char castlingRights = 0; + U64 hash = 0; - Piece capturedPiece = {}; + Piece capturedPiece = {}; - BoardState *lastIrreversibleMove = nullptr; + BoardState *lastIrreversibleMove = nullptr; - NNUE::Accumulator accumulator = {}; + NNUE::Accumulator accumulator = {}; - constexpr BoardState() = default; + constexpr BoardState() = default; }; struct RawState { - Piece board[64]; - Bitboard pieceBB[6] = {0}, allPieceBB[2] = {0}; - Color stm = COLOR_EMPTY; - Square epSquare = NULL_SQUARE; - unsigned char castlingRights = 0; + Piece board[64]; + Bitboard pieceBB[6] = {0}, allPieceBB[2] = {0}; + Color stm = COLOR_EMPTY; + Square epSquare = NULL_SQUARE; + unsigned char castlingRights = 0; }; struct StateStack { - BoardState stateStart[1000]; - BoardState *currState; - - StateStack() { - currState = stateStart; - currState->lastIrreversibleMove = currState; - } - - inline void push(BoardState newState) { - newState.lastIrreversibleMove = currState->lastIrreversibleMove; - newState.accumulator.loadAccumulator(currState->accumulator); - currState++; - *currState = newState; - } - - inline void pop() { - currState--; - } - - inline BoardState *top() const { - return currState; - } - - inline void clear() { - currState = stateStart; - *currState = {}; - } - - inline Ply getMove50() const { - return currState - currState->lastIrreversibleMove; - } + BoardState stateStart[1000]; + BoardState *currState; + + StateStack() { + currState = stateStart; + currState->lastIrreversibleMove = currState; + } + + inline void push(BoardState newState) { + newState.lastIrreversibleMove = currState->lastIrreversibleMove; + newState.accumulator.loadAccumulator(currState->accumulator); + currState++; + *currState = newState; + } + + inline void pop() { + currState--; + } + + inline BoardState *top() const { + return currState; + } + + inline void clear() { + currState = stateStart; + *currState = {}; + } + + inline Ply getMove50() const { + return currState - currState->lastIrreversibleMove; + } }; #define state states.top() class Position { public: - constexpr Piece pieceAt(Square square) const { - return board[square]; - } + constexpr Piece pieceAt(Square square) const { + return board[square]; + } - // This will be mostly used with constant color and type so this will result a nicer code - // pieces<{ROOK, WHITE}>() --> pieces() - template - constexpr Bitboard pieces() const { - return pieceBB[type] & allPieceBB[color]; - } + // This will be mostly used with constant color and type so this will result a nicer code + // pieces<{ROOK, WHITE}>() --> pieces() + template + constexpr Bitboard pieces() const { + return pieceBB[type] & allPieceBB[color]; + } - template - constexpr Bitboard pieces(PieceType type) const { - return pieceBB[type] & allPieceBB[color]; - } + template + constexpr Bitboard pieces(PieceType type) const { + return pieceBB[type] & allPieceBB[color]; + } - template - constexpr Bitboard pieces(Color color) const { - return pieceBB[type] & allPieceBB[color]; - } + template + constexpr Bitboard pieces(Color color) const { + return pieceBB[type] & allPieceBB[color]; + } - constexpr Bitboard pieces(Color color, PieceType type) const { - return pieceBB[type] & allPieceBB[color]; - } + constexpr Bitboard pieces(Color color, PieceType type) const { + return pieceBB[type] & allPieceBB[color]; + } - template - constexpr Bitboard pieces() const { - return pieceBB[type]; - } + template + constexpr Bitboard pieces() const { + return pieceBB[type]; + } - constexpr Bitboard pieces(PieceType type) const { - return pieceBB[type]; - } + constexpr Bitboard pieces(PieceType type) const { + return pieceBB[type]; + } - template - constexpr Bitboard friendly() const { - return allPieceBB[color]; - } + template + constexpr Bitboard friendly() const { + return allPieceBB[color]; + } - constexpr Bitboard friendly(Color color) const { - return allPieceBB[color]; - } + constexpr Bitboard friendly(Color color) const { + return allPieceBB[color]; + } - template - constexpr Bitboard enemy() const { - return allPieceBB[EnemyColor()]; - } + template + constexpr Bitboard enemy() const { + return allPieceBB[EnemyColor()]; + } - template - constexpr Bitboard enemyOrEmpty() const { - return ~friendly(); - } + template + constexpr Bitboard enemyOrEmpty() const { + return ~friendly(); + } - inline Bitboard occupied() const { - return allPieceBB[WHITE] | allPieceBB[BLACK]; - } + inline Bitboard occupied() const { + return allPieceBB[WHITE] | allPieceBB[BLACK]; + } - inline Bitboard empty() const { - return ~occupied(); - } + inline Bitboard empty() const { + return ~occupied(); + } - inline Color getSideToMove() const { - return state->stm; - } + inline Color getSideToMove() const { + return state->stm; + } - inline Square getEpSquare() const { - return state->epSquare; - } + inline Square getEpSquare() const { + return state->epSquare; + } - inline bool getCastleRight(unsigned char castleRight) const { - return castleRight & state->castlingRights; - } + inline bool getCastleRight(unsigned char castleRight) const { + return castleRight & state->castlingRights; + } - inline unsigned char getCastlingRights() const { - return state->castlingRights; - } + inline unsigned char getCastlingRights() const { + return state->castlingRights; + } - inline BoardState *getState() { - return state; - } + inline BoardState *getState() { + return state; + } - inline BoardState *getState() const { - return state; - } + inline BoardState *getState() const { + return state; + } - inline U64 getHash() const { - return state->hash; - } + inline U64 getHash() const { + return state->hash; + } - inline Ply getMove50() const { - return states.getMove50(); - } + inline Ply getMove50() const { + return states.getMove50(); + } - inline void makeMove(Move move); + inline void makeMove(Move move); - inline void undoMove(Move move); + inline void undoMove(Move move); - void makeNullMove(); + void makeNullMove(); - void undoNullMove(); + void undoNullMove(); - bool isRepetition(); + bool isRepetition(); - void display() const; + void display() const; - void displayEval(); + void displayEval(); - void loadPositionFromFen(const std::string &fen); + void loadPositionFromFen(const std::string &fen); - void loadPositionFromRawState(const RawState &rawState); + void loadPositionFromRawState(const RawState &rawState); - RawState getRawState(); + RawState getRawState(); - Position(); + Position(); - Position(const std::string &fen); + Position(const std::string &fen); private: - template - void clearSquare(Square square); + template + void clearSquare(Square square); - template - void setSquare(Square square, Piece piece); + template + void setSquare(Square square, Piece piece); - template - void movePiece(Square from, Square to); + template + void movePiece(Square from, Square to); - inline void setCastleRight(unsigned char castleRight) { - state->castlingRights |= castleRight; - } + inline void setCastleRight(unsigned char castleRight) { + state->castlingRights |= castleRight; + } - inline void removeCastleRight(unsigned char castleRight) { - state->castlingRights &= ~castleRight; - } + inline void removeCastleRight(unsigned char castleRight) { + state->castlingRights &= ~castleRight; + } - void clearPosition(); + void clearPosition(); - template - void makeMove(Move move); + template + void makeMove(Move move); - template - void undoMove(Move move); + template + void undoMove(Move move); - Piece board[64]; + Piece board[64]; - Bitboard pieceBB[6], allPieceBB[2]; + Bitboard pieceBB[6], allPieceBB[2]; - StateStack states; + StateStack states; }; template void Position::clearSquare(Square square) { - if (pieceAt(square).isNull()) - return; + if (pieceAt(square).isNull()) + return; - Piece piece = pieceAt(square); + Piece piece = pieceAt(square); - pieceBB[piece.type].clear(square); - allPieceBB[piece.color].clear(square); + pieceBB[piece.type].clear(square); + allPieceBB[piece.color].clear(square); - board[square] = {}; + board[square] = {}; - state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; + state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; - if constexpr (updateAccumulator) { - state->accumulator.removeFeature(piece.color, piece.type, square); - } + if constexpr (updateAccumulator) { + state->accumulator.removeFeature(piece.color, piece.type, square); + } } template void Position::setSquare(Square square, Piece piece) { - if (!pieceAt(square).isNull()) { - Piece p = pieceAt(square); + if (!pieceAt(square).isNull()) { + Piece p = pieceAt(square); - pieceBB[p.type].clear(square); - allPieceBB[p.color].clear(square); + pieceBB[p.type].clear(square); + allPieceBB[p.color].clear(square); - state->hash ^= pieceRandTable[12 * square + 6 * p.color + p.type]; + state->hash ^= pieceRandTable[12 * square + 6 * p.color + p.type]; - if constexpr (updateAccumulator) { - state->accumulator.removeFeature(p.color, p.type, square); - } - } + if constexpr (updateAccumulator) { + state->accumulator.removeFeature(p.color, p.type, square); + } + } - pieceBB[piece.type].set(square); - allPieceBB[piece.color].set(square); - board[square] = piece; + pieceBB[piece.type].set(square); + allPieceBB[piece.color].set(square); + board[square] = piece; - state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; + state->hash ^= pieceRandTable[12 * square + 6 * piece.color + piece.type]; - if constexpr (updateAccumulator) { - state->accumulator.addFeature(piece.color, piece.type, square); - } + if constexpr (updateAccumulator) { + state->accumulator.addFeature(piece.color, piece.type, square); + } } template void Position::movePiece(Square from, Square to) { - setSquare(to, pieceAt(from)); - clearSquare(from); + setSquare(to, pieceAt(from)); + clearSquare(from); } template void Position::makeMove(Move move) { - nodeCount++; - - BoardState newState; - - constexpr Color enemyColor = EnemyColor(); - constexpr Direction UP = color == WHITE ? NORTH : -NORTH; - constexpr Direction DOWN = -UP; - - Square from = move.getFrom(); - Square to = move.getTo(); - - if (move.equalFlag(EP_CAPTURE)) { - newState.capturedPiece = {PAWN, enemyColor}; - } else { - newState.capturedPiece = pieceAt(to); - } - newState.castlingRights = state->castlingRights; - newState.stm = enemyColor; - newState.hash = state->hash ^ *blackRand; - - // Removing ep from hash - if (state->epSquare != NULL_SQUARE) { - newState.hash ^= epRandTable[squareToFile(state->epSquare)]; - } - - if (move.equalFlag(DOUBLE_PAWN_PUSH)) { - newState.epSquare = from + UP; - newState.hash ^= epRandTable[squareToFile(newState.epSquare)]; - } else { - newState.epSquare = NULL_SQUARE; - } - - states.push(newState); - - if (move.equalFlag(EP_CAPTURE)) { - clearSquare(to + DOWN); - } - - if (move.isCapture() || pieceAt(from).type == PAWN) { - state->lastIrreversibleMove = state; - } - - // Removing castling rights - state->hash ^= castlingRandTable[state->castlingRights]; - if (getCastleRight(WK_MASK) && (from == E1 || from == H1 || to == H1)) { - removeCastleRight(WK_MASK); - } - if (getCastleRight(WQ_MASK) && (from == E1 || from == A1 || to == A1)) { - removeCastleRight(WQ_MASK); - } - if (getCastleRight(BK_MASK) && (from == E8 || from == H8 || to == H8)) { - removeCastleRight(BK_MASK); - } - if (getCastleRight(BQ_MASK) && (from == E8 || from == A8 || to == A8)) { - removeCastleRight(BQ_MASK); - } - state->hash ^= castlingRandTable[state->castlingRights]; - - // Moving rook in case of a castle - if (move.equalFlag(KING_CASTLE)) { - if constexpr (color == WHITE) { - movePiece(H1, F1); - } else { - movePiece(H8, F8); - } - } else if (move.equalFlag(QUEEN_CASTLE)) { - if constexpr (color == WHITE) { - movePiece(A1, D1); - } else { - movePiece(A8, D8); - } - } - - movePiece(from, to); - - if (move.isFlag(PROMO_FLAG)) { - Piece piece = {PIECE_EMPTY, color}; - if (move.equalFlag(PROMO_KNIGHT) || move.equalFlag(PROMO_CAPTURE_KNIGHT)) { - piece.type = KNIGHT; - } else if (move.equalFlag(PROMO_BISHOP) || move.equalFlag(PROMO_CAPTURE_BISHOP)) { - piece.type = BISHOP; - } else if (move.equalFlag(PROMO_ROOK) || move.equalFlag(PROMO_CAPTURE_ROOK)) { - piece.type = ROOK; - } else if (move.equalFlag(PROMO_QUEEN) || move.equalFlag(PROMO_CAPTURE_QUEEN)) { - piece.type = QUEEN; - } - setSquare(to, piece); - } + nodeCount++; + + BoardState newState; + + constexpr Color enemyColor = EnemyColor(); + constexpr Direction UP = color == WHITE ? NORTH : -NORTH; + constexpr Direction DOWN = -UP; + + Square from = move.getFrom(); + Square to = move.getTo(); + + if (move.equalFlag(EP_CAPTURE)) { + newState.capturedPiece = {PAWN, enemyColor}; + } else { + newState.capturedPiece = pieceAt(to); + } + newState.castlingRights = state->castlingRights; + newState.stm = enemyColor; + newState.hash = state->hash ^ *blackRand; + + // Removing ep from hash + if (state->epSquare != NULL_SQUARE) { + newState.hash ^= epRandTable[squareToFile(state->epSquare)]; + } + + if (move.equalFlag(DOUBLE_PAWN_PUSH)) { + newState.epSquare = from + UP; + newState.hash ^= epRandTable[squareToFile(newState.epSquare)]; + } else { + newState.epSquare = NULL_SQUARE; + } + + states.push(newState); + + if (move.equalFlag(EP_CAPTURE)) { + clearSquare(to + DOWN); + } + + if (move.isCapture() || pieceAt(from).type == PAWN) { + state->lastIrreversibleMove = state; + } + + // Removing castling rights + state->hash ^= castlingRandTable[state->castlingRights]; + if (getCastleRight(WK_MASK) && (from == E1 || from == H1 || to == H1)) { + removeCastleRight(WK_MASK); + } + if (getCastleRight(WQ_MASK) && (from == E1 || from == A1 || to == A1)) { + removeCastleRight(WQ_MASK); + } + if (getCastleRight(BK_MASK) && (from == E8 || from == H8 || to == H8)) { + removeCastleRight(BK_MASK); + } + if (getCastleRight(BQ_MASK) && (from == E8 || from == A8 || to == A8)) { + removeCastleRight(BQ_MASK); + } + state->hash ^= castlingRandTable[state->castlingRights]; + + // Moving rook in case of a castle + if (move.equalFlag(KING_CASTLE)) { + if constexpr (color == WHITE) { + movePiece(H1, F1); + } else { + movePiece(H8, F8); + } + } else if (move.equalFlag(QUEEN_CASTLE)) { + if constexpr (color == WHITE) { + movePiece(A1, D1); + } else { + movePiece(A8, D8); + } + } + + movePiece(from, to); + + if (move.isFlag(PROMO_FLAG)) { + Piece piece = {PIECE_EMPTY, color}; + if (move.equalFlag(PROMO_KNIGHT) || move.equalFlag(PROMO_CAPTURE_KNIGHT)) { + piece.type = KNIGHT; + } else if (move.equalFlag(PROMO_BISHOP) || move.equalFlag(PROMO_CAPTURE_BISHOP)) { + piece.type = BISHOP; + } else if (move.equalFlag(PROMO_ROOK) || move.equalFlag(PROMO_CAPTURE_ROOK)) { + piece.type = ROOK; + } else if (move.equalFlag(PROMO_QUEEN) || move.equalFlag(PROMO_CAPTURE_QUEEN)) { + piece.type = QUEEN; + } + setSquare(to, piece); + } } template void Position::undoMove(Move move) { - constexpr Color enemyColor = EnemyColor(); - constexpr Direction UP = enemyColor == WHITE ? NORTH : -NORTH; - constexpr Direction DOWN = -UP; - - Square from = move.getFrom(); - Square to = move.getTo(); - - movePiece(to, from); - - if (move.equalFlag(KING_CASTLE)) { - if constexpr (enemyColor == WHITE) { - movePiece(F1, H1); - } else { - movePiece(F8, H8); - } - } else if (move.equalFlag(QUEEN_CASTLE)) { - if constexpr (enemyColor == WHITE) { - movePiece(D1, A1); - } else { - movePiece(D8, A8); - } - } - - if (move.equalFlag(EP_CAPTURE)) - setSquare(to + DOWN, state->capturedPiece); - else if (move.isCapture()) - setSquare(to, state->capturedPiece); - - if (move.isPromo()) - setSquare(from, {PAWN, enemyColor}); - - states.pop(); + constexpr Color enemyColor = EnemyColor(); + constexpr Direction UP = enemyColor == WHITE ? NORTH : -NORTH; + constexpr Direction DOWN = -UP; + + Square from = move.getFrom(); + Square to = move.getTo(); + + movePiece(to, from); + + if (move.equalFlag(KING_CASTLE)) { + if constexpr (enemyColor == WHITE) { + movePiece(F1, H1); + } else { + movePiece(F8, H8); + } + } else if (move.equalFlag(QUEEN_CASTLE)) { + if constexpr (enemyColor == WHITE) { + movePiece(D1, A1); + } else { + movePiece(D8, A8); + } + } + + if (move.equalFlag(EP_CAPTURE)) + setSquare(to + DOWN, state->capturedPiece); + else if (move.isCapture()) + setSquare(to, state->capturedPiece); + + if (move.isPromo()) + setSquare(from, {PAWN, enemyColor}); + + states.pop(); } inline void Position::makeMove(Move move) { - if (getSideToMove() == WHITE) - makeMove(move); - else - makeMove(move); + if (getSideToMove() == WHITE) + makeMove(move); + else + makeMove(move); } inline void Position::undoMove(Move move) { - if (getSideToMove() == WHITE) - undoMove(move); - else - undoMove(move); + if (getSideToMove() == WHITE) + undoMove(move); + else + undoMove(move); } #undef state diff --git a/src/search.cpp b/src/search.cpp index dfd9412..4e41bd0 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -60,461 +60,460 @@ Move bestPV; Depth reductions[200][MAX_PLY + 1]; void initLmr() { - for (int moveIndex = 0; moveIndex < 200; moveIndex++) { - for (Depth depth = 0; depth < MAX_PLY; depth++) { + for (int moveIndex = 0; moveIndex < 200; moveIndex++) { + for (Depth depth = 0; depth < MAX_PLY; depth++) { - reductions[moveIndex][depth] = std::max(2, Depth( - LMR_BASE + (log((double) moveIndex) * log((double) depth) / LMR_SCALE))); - } - } + reductions[moveIndex][depth] = std::max(2, Depth(LMR_BASE + (log((double) moveIndex) * log((double) depth) / LMR_SCALE))); + } + } } Bitboard leastValuablePiece(const Position &pos, Bitboard attackers, Color stm, PieceType &type) { - for (PieceType t : PIECE_TYPES_BY_VALUE) { - Bitboard s = attackers & pos.pieces(stm, t); - if (s) { - type = t; - return s & -s.bb; - } - } - return 0; + for (PieceType t : PIECE_TYPES_BY_VALUE) { + Bitboard s = attackers & pos.pieces(stm, t); + if (s) { + type = t; + return s & -s.bb; + } + } + return 0; } Bitboard getAllAttackers(const Position &pos, Square square, Bitboard occ) { - return (((pawnMask(square, WHITE) | pawnMask(square, BLACK)) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces()) | - (pieceAttacks(square, occ) & pos.pieces())) & - occ; + return (((pawnMask(square, WHITE) | pawnMask(square, BLACK)) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces()) | + (pieceAttacks(square, occ) & pos.pieces())) & + occ; } Score see(const Position &pos, Move move) { - Score e[32]; - Depth d = 0; - Square from = move.getFrom(); - Square to = move.getTo(); + Score e[32]; + Depth d = 0; + Square from = move.getFrom(); + Square to = move.getTo(); - e[0] = move.equalFlag(EP_CAPTURE) ? PIECE_VALUES[PAWN] : PIECE_VALUES[pos.pieceAt(to).type]; + e[0] = move.equalFlag(EP_CAPTURE) ? PIECE_VALUES[PAWN] : PIECE_VALUES[pos.pieceAt(to).type]; - Bitboard rooks = pos.pieces() | pos.pieces(); - Bitboard bishops = pos.pieces() | pos.pieces(); - Bitboard occ = pos.occupied() ^ Bitboard(to); - Bitboard attacker = from; - Bitboard attackers = getAllAttackers(pos, to, occ); + Bitboard rooks = pos.pieces() | pos.pieces(); + Bitboard bishops = pos.pieces() | pos.pieces(); + Bitboard occ = pos.occupied() ^ Bitboard(to); + Bitboard attacker = from; + Bitboard attackers = getAllAttackers(pos, to, occ); - Color stm = pos.pieceAt(to).color; - PieceType type = pos.pieceAt(from).type; + Color stm = pos.pieceAt(to).color; + PieceType type = pos.pieceAt(from).type; - do { - d++; - e[d] = PIECE_VALUES[type] - e[d - 1]; + do { + d++; + e[d] = PIECE_VALUES[type] - e[d - 1]; - if (std::max(-e[d - 1], e[d]) < 0) - break; + if (std::max(-e[d - 1], e[d]) < 0) + break; - occ ^= attacker; - attackers ^= attacker; - if (type == ROOK || type == QUEEN) - attackers |= rookAttacks(to, occ) & rooks & occ; - if (type == PAWN || type == BISHOP || type == QUEEN) - attackers |= bishopAttacks(to, occ) & bishops & occ; - attacker = leastValuablePiece(pos, attackers, stm, type); - stm = EnemyColor(stm); + occ ^= attacker; + attackers ^= attacker; + if (type == ROOK || type == QUEEN) + attackers |= rookAttacks(to, occ) & rooks & occ; + if (type == PAWN || type == BISHOP || type == QUEEN) + attackers |= bishopAttacks(to, occ) & bishops & occ; + attacker = leastValuablePiece(pos, attackers, stm, type); + stm = EnemyColor(stm); - } while (attacker); + } while (attacker); - while (--d) { - e[d - 1] = -std::max(-e[d - 1], e[d]); - } + while (--d) { + e[d - 1] = -std::max(-e[d - 1], e[d]); + } - return e[0]; + return e[0]; } template Score quiescence(Position &pos, Score alpha, Score beta, Ply ply) { - constexpr bool pvNode = type != NON_PV_NODE; - constexpr bool nonPvNode = !pvNode; + constexpr bool pvNode = type != NON_PV_NODE; + constexpr bool nonPvNode = !pvNode; - if (shouldEnd()) - return UNKNOWN_SCORE; + if (shouldEnd()) + return UNKNOWN_SCORE; - if (ply > selectiveDepth) { - selectiveDepth = ply; - } + if (ply > selectiveDepth) { + selectiveDepth = ply; + } - bool ttHit = false; - TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, 0, alpha, beta); - if (ttHit && nonPvNode && (ttEntry->flag == EXACT || (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || (ttEntry->flag == BETA && ttEntry->eval >= beta))) { - return ttEntry->eval; - } + bool ttHit = false; + TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, 0, alpha, beta); + if (ttHit && nonPvNode && (ttEntry->flag == EXACT || (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || (ttEntry->flag == BETA && ttEntry->eval >= beta))) { + return ttEntry->eval; + } - Score staticEval = eval(pos); + Score staticEval = eval(pos); - if (ply >= MAX_PLY) { - return staticEval; - } + if (ply >= MAX_PLY) { + return staticEval; + } - if (staticEval >= beta) { - return beta; - } + if (staticEval >= beta) { + return beta; + } - if (staticEval > alpha) { - alpha = staticEval; - } + if (staticEval > alpha) { + alpha = staticEval; + } - MoveList moves = {pos, ply, true}; - EntryFlag ttFlag = ALPHA; - Move bestMove; + MoveList moves = {pos, ply, true}; + EntryFlag ttFlag = ALPHA; + Move bestMove; - while (!moves.empty()) { + while (!moves.empty()) { - Move m = moves.nextMove(); + Move m = moves.nextMove(); - // Delta pruning - if (m.isPromo() * PIECE_VALUES[QUEEN] + PIECE_VALUES[pos.pieceAt(m.getTo()).type] + - staticEval + DELTA_MARGIN < - alpha) - continue; + // Delta pruning + if (m.isPromo() * PIECE_VALUES[QUEEN] + PIECE_VALUES[pos.pieceAt(m.getTo()).type] + + staticEval + DELTA_MARGIN < + alpha) + continue; - // SEE pruning - if (alpha > -WORST_MATE && see(pos, m) < -SEE_MARGIN) - continue; + // SEE pruning + if (alpha > -WORST_MATE && see(pos, m) < -SEE_MARGIN) + continue; - pos.makeMove(m); + pos.makeMove(m); - Score score = -quiescence(pos, -beta, -alpha, ply + 1); + Score score = -quiescence(pos, -beta, -alpha, ply + 1); - pos.undoMove(m); + pos.undoMove(m); - if (shouldEnd()) - return UNKNOWN_SCORE; + if (shouldEnd()) + return UNKNOWN_SCORE; - if (score >= beta) { - ttSave(pos.getHash(), 0, score, BETA, m); - return beta; - } + if (score >= beta) { + ttSave(pos.getHash(), 0, score, BETA, m); + return beta; + } - if (score > alpha) { - alpha = score; - ttFlag = EXACT; - bestMove = m; - } - } + if (score > alpha) { + alpha = score; + ttFlag = EXACT; + bestMove = m; + } + } - ttSave(pos.getHash(), 0, alpha, ttFlag, bestMove); - return alpha; + ttSave(pos.getHash(), 0, alpha, ttFlag, bestMove); + return alpha; } template Score search(Position &pos, SearchStack *stack, Depth depth, Score alpha, Score beta, Ply ply) { - constexpr bool rootNode = type == ROOT_NODE; - constexpr bool pvNode = type != NON_PV_NODE; - constexpr bool notRootNode = !rootNode; - constexpr bool nonPvNode = !pvNode; - constexpr NodeType nextPv = rootNode ? PV_NODE : type; - - if (shouldEnd()) - return UNKNOWN_SCORE; - - if (notRootNode && pos.getMove50() >= 3 && pos.isRepetition()) { - alpha = DRAW_VALUE; - if (alpha >= beta) - return alpha; - } - - bool ttHit = false; - Score matePly = MATE_VALUE - ply; - TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, depth, alpha, beta); - - if (ttHit && nonPvNode && - ttEntry->depth >= depth && (ttEntry->flag == EXACT || (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || (ttEntry->flag == BETA && ttEntry->eval >= beta))) { - return ttEntry->eval; - } - - // Mate distance pruning - if (notRootNode) { - if (alpha < -matePly) - alpha = -matePly; - if (beta > matePly - 1) - beta = matePly - 1; - if (alpha >= beta) - return alpha; - } - - if (ply >= MAX_PLY) { - return eval(pos); - } - - if (depth <= 0) - return quiescence(pos, alpha, beta, ply); - - Color color = pos.getSideToMove(); - bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); - - Score staticEval = stack->eval = eval(pos); + constexpr bool rootNode = type == ROOT_NODE; + constexpr bool pvNode = type != NON_PV_NODE; + constexpr bool notRootNode = !rootNode; + constexpr bool nonPvNode = !pvNode; + constexpr NodeType nextPv = rootNode ? PV_NODE : type; + + if (shouldEnd()) + return UNKNOWN_SCORE; + + if (notRootNode && pos.getMove50() >= 3 && pos.isRepetition()) { + alpha = DRAW_VALUE; + if (alpha >= beta) + return alpha; + } + + bool ttHit = false; + Score matePly = MATE_VALUE - ply; + TTEntry *ttEntry = ttProbe(pos.getHash(), ttHit, depth, alpha, beta); + + if (ttHit && nonPvNode && + ttEntry->depth >= depth && (ttEntry->flag == EXACT || (ttEntry->flag == ALPHA && ttEntry->eval <= alpha) || (ttEntry->flag == BETA && ttEntry->eval >= beta))) { + return ttEntry->eval; + } + + // Mate distance pruning + if (notRootNode) { + if (alpha < -matePly) + alpha = -matePly; + if (beta > matePly - 1) + beta = matePly - 1; + if (alpha >= beta) + return alpha; + } + + if (ply >= MAX_PLY) { + return eval(pos); + } + + if (depth <= 0) + return quiescence(pos, alpha, beta, ply); + + Color color = pos.getSideToMove(); + bool inCheck = bool(getAttackers(pos, pos.pieces(color).lsb())); + + Score staticEval = stack->eval = eval(pos); - bool improving = ply >= 2 && staticEval >= (stack - 2)->eval; + bool improving = ply >= 2 && staticEval >= (stack - 2)->eval; - if (notRootNode && !inCheck) { + if (notRootNode && !inCheck) { - // Razoring - if (depth == 1 && nonPvNode && staticEval + RAZOR_MARGIN < alpha) { - return quiescence(pos, alpha, beta, ply); - } - - // Reverse futility pruning - if (depth <= RFP_DEPTH && - staticEval - RFP_DEPTH_MULTIPLIER * depth + RFP_IMPROVING_MULTIPLIER * improving >= beta && - std::abs(beta) < WORST_MATE) - return beta; + // Razoring + if (depth == 1 && nonPvNode && staticEval + RAZOR_MARGIN < alpha) { + return quiescence(pos, alpha, beta, ply); + } + + // Reverse futility pruning + if (depth <= RFP_DEPTH && + staticEval - RFP_DEPTH_MULTIPLIER * depth + RFP_IMPROVING_MULTIPLIER * improving >= beta && + std::abs(beta) < WORST_MATE) + return beta; - // Null move pruning - if (nonPvNode && !(stack - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { - // We don't want to make a null move in a Zugzwang position - if (pos.pieces(color) | pos.pieces(color) | pos.pieces(color) | - pos.pieces(color)) { + // Null move pruning + if (nonPvNode && !(stack - 1)->move.isNull() && depth >= NULL_MOVE_DEPTH && staticEval >= beta) { + // We don't want to make a null move in a Zugzwang position + if (pos.pieces(color) | pos.pieces(color) | pos.pieces(color) | + pos.pieces(color)) { - Depth R = NULL_MOVE_BASE_R + depth / NULL_MOVE_R_SCALE; + Depth R = NULL_MOVE_BASE_R + depth / NULL_MOVE_R_SCALE; - stack->move = Move(); - pos.makeNullMove(); - Score score = -search(pos, stack + 1, depth - R, -beta, -beta + 1, ply + 1); - pos.undoNullMove(); + stack->move = Move(); + pos.makeNullMove(); + Score score = -search(pos, stack + 1, depth - R, -beta, -beta + 1, ply + 1); + pos.undoNullMove(); - if (score >= beta) { - if (std::abs(score) > WORST_MATE) - return beta; - return score; - } - } - } + if (score >= beta) { + if (std::abs(score) > WORST_MATE) + return beta; + return score; + } + } + } - // Internal iterative deepening - if (!ttHit && pvNode) - depth--; - if (!ttHit && depth >= 5) - depth--; + // Internal iterative deepening + if (!ttHit && pvNode) + depth--; + if (!ttHit && depth >= 5) + depth--; - if (depth <= 0) - return quiescence(pos, alpha, beta, ply); - } + if (depth <= 0) + return quiescence(pos, alpha, beta, ply); + } - // Check extension - if (inCheck) - depth++; + // Check extension + if (inCheck) + depth++; - MoveList moves = {pos, ply, false}; - if (moves.count == 0) { - if (inCheck) { - return -matePly; - } else { - return DRAW_VALUE; - } - } + MoveList moves = {pos, ply, false}; + if (moves.count == 0) { + if (inCheck) { + return -matePly; + } else { + return DRAW_VALUE; + } + } - Move bestMove; - EntryFlag ttFlag = ALPHA; - int index = 0; + Move bestMove; + EntryFlag ttFlag = ALPHA; + int index = 0; - while (!moves.empty()) { + while (!moves.empty()) { - Move m = moves.nextMove(); - stack->move = m; + Move m = moves.nextMove(); + stack->move = m; - Score score; + Score score; - // We can prune the move in some cases - if (notRootNode && nonPvNode && !inCheck && alpha > -WORST_MATE) { + // We can prune the move in some cases + if (notRootNode && nonPvNode && !inCheck && alpha > -WORST_MATE) { - if (depth <= FUTILITY_DEPTH && m.isQuiet() && - staticEval + FUTILITY_MARGIN + FUTILITY_MARGIN_DEPTH * depth + FUTILITY_MARGIN_IMPROVING * improving < - alpha) - continue; + if (depth <= FUTILITY_DEPTH && m.isQuiet() && + staticEval + FUTILITY_MARGIN + FUTILITY_MARGIN_DEPTH * depth + FUTILITY_MARGIN_IMPROVING * improving < + alpha) + continue; - // Late move/movecount pruning - // This will also prune losing captures - if (depth <= LMP_DEPTH && index >= LMP_MOVES + depth * depth && m.isQuiet()) - break; - } + // Late move/movecount pruning + // This will also prune losing captures + if (depth <= LMP_DEPTH && index >= LMP_MOVES + depth * depth && m.isQuiet()) + break; + } - pos.makeMove(m); + pos.makeMove(m); - ttPrefetch(pos.getHash()); + ttPrefetch(pos.getHash()); - // Late move reduction - if (!inCheck && depth >= LMR_DEPTH && index >= LMR_INDEX && !m.isPromo() && - m.isQuiet()) { + // Late move reduction + if (!inCheck && depth >= LMR_DEPTH && index >= LMR_INDEX && !m.isPromo() && + m.isQuiet()) { - Depth R = reductions[index][depth]; + Depth R = reductions[index][depth]; - R += improving; - R -= pvNode; + R += improving; + R -= pvNode; - Depth newDepth = std::clamp(depth - R, 1, depth - 1); + Depth newDepth = std::clamp(depth - R, 1, depth - 1); - score = -search(pos, stack + 1, newDepth, - -alpha - 1, -alpha, ply + 1); + score = -search(pos, stack + 1, newDepth, + -alpha - 1, -alpha, ply + 1); - if (score > alpha && R > 1) { - score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); - } + if (score > alpha && R > 1) { + score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + } - } else if (nonPvNode || index != 0) { - score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); - } + } else if (nonPvNode || index != 0) { + score = -search(pos, stack + 1, depth - 1, -alpha - 1, -alpha, ply + 1); + } - if (pvNode && (index == 0 || (score > alpha && score < beta))) { - score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); - } + if (pvNode && (index == 0 || (score > alpha && score < beta))) { + score = -search(pos, stack + 1, depth - 1, -beta, -alpha, ply + 1); + } - pos.undoMove(m); + pos.undoMove(m); - if (shouldEnd()) - return UNKNOWN_SCORE; + if (shouldEnd()) + return UNKNOWN_SCORE; - if (score >= beta) { + if (score >= beta) { - if (m.isQuiet()) { - recordKillerMove(m, ply); - recordHHMove(m, color, depth); - } + if (m.isQuiet()) { + recordKillerMove(m, ply); + recordHHMove(m, color, depth); + } - ttSave(pos.getHash(), depth, beta, BETA, m); - return beta; - } + ttSave(pos.getHash(), depth, beta, BETA, m); + return beta; + } - if (score > alpha) { - alpha = score; - bestMove = m; - ttFlag = EXACT; - } + if (score > alpha) { + alpha = score; + bestMove = m; + ttFlag = EXACT; + } - index++; - } + index++; + } - ttSave(pos.getHash(), depth, alpha, ttFlag, bestMove); + ttSave(pos.getHash(), depth, alpha, ttFlag, bestMove); - return alpha; + return alpha; } std::string getPvLine(Position &pos) { - Move m = getHashMove(pos.getHash()); - if (!pos.isRepetition() && !m.isNull()) { - pos.makeMove(m); - std::string str = m.str() + " " + getPvLine(pos); - pos.undoMove(m); - return str; - } else { - return ""; - } + Move m = getHashMove(pos.getHash()); + if (!pos.isRepetition() && !m.isNull()) { + pos.makeMove(m); + std::string str = m.str() + " " + getPvLine(pos); + pos.undoMove(m); + return str; + } else { + return ""; + } } Score searchRoot(Position &pos, Score prevScore, Depth depth, bool uci) { - globalAge++; - clearTables(); - selectiveDepth = 0; - SearchStack stateStack[MAX_PLY + 1]; - Score alpha = -INF_SCORE; - Score beta = INF_SCORE; - - if (depth >= ASPIRATION_DEPTH) { - alpha = prevScore - ASPIRATION_DELTA; - beta = prevScore + ASPIRATION_DELTA; - } - - int iter = 1; - while (true) { - if (shouldEnd()) - return UNKNOWN_SCORE; - - if (alpha < -ASPIRATION_BOUND) - alpha = -INF_SCORE; - if (beta > ASPIRATION_BOUND) - beta = INF_SCORE; - - Score score = search(pos, stateStack + 1, depth, alpha, beta, 0); - - if (score == UNKNOWN_SCORE) - return UNKNOWN_SCORE; - - if (score <= alpha) { - alpha = std::max(alpha - iter * iter * ASPIRATION_DELTA, -INF_SCORE); - } else if (score >= beta) { - beta = std::min(beta + iter * iter * ASPIRATION_DELTA, INF_SCORE); - } else { - bestPV = getHashMove(pos.getHash()); - - std::string pvLine = getPvLine(pos); - if (uci) { - Score absScore = std::abs(score); - int mateDepth = MATE_VALUE - absScore; - std::string scoreStr = "cp " + std::to_string(score); - - if (mateDepth <= 64) { - int matePly; - // We are giving the mate - if (score > 0) { - matePly = mateDepth / 2 + 1; - - } else { - matePly = -(mateDepth / 2); - } - scoreStr = "mate " + std::to_string(matePly); - } - - out("info", "depth", depth, "seldepth", selectiveDepth, "nodes", nodeCount, "score", scoreStr, "time", - getSearchTime(), "nps", getNps(), "pv", pvLine); - } - - return score; - } - - iter++; - } + globalAge++; + clearTables(); + selectiveDepth = 0; + SearchStack stateStack[MAX_PLY + 1]; + Score alpha = -INF_SCORE; + Score beta = INF_SCORE; + + if (depth >= ASPIRATION_DEPTH) { + alpha = prevScore - ASPIRATION_DELTA; + beta = prevScore + ASPIRATION_DELTA; + } + + int iter = 1; + while (true) { + if (shouldEnd()) + return UNKNOWN_SCORE; + + if (alpha < -ASPIRATION_BOUND) + alpha = -INF_SCORE; + if (beta > ASPIRATION_BOUND) + beta = INF_SCORE; + + Score score = search(pos, stateStack + 1, depth, alpha, beta, 0); + + if (score == UNKNOWN_SCORE) + return UNKNOWN_SCORE; + + if (score <= alpha) { + alpha = std::max(alpha - iter * iter * ASPIRATION_DELTA, -INF_SCORE); + } else if (score >= beta) { + beta = std::min(beta + iter * iter * ASPIRATION_DELTA, INF_SCORE); + } else { + bestPV = getHashMove(pos.getHash()); + + std::string pvLine = getPvLine(pos); + if (uci) { + Score absScore = std::abs(score); + int mateDepth = MATE_VALUE - absScore; + std::string scoreStr = "cp " + std::to_string(score); + + if (mateDepth <= 64) { + int matePly; + // We are giving the mate + if (score > 0) { + matePly = mateDepth / 2 + 1; + + } else { + matePly = -(mateDepth / 2); + } + scoreStr = "mate " + std::to_string(matePly); + } + + out("info", "depth", depth, "seldepth", selectiveDepth, "nodes", nodeCount, "score", scoreStr, "time", + getSearchTime(), "nps", getNps(), "pv", pvLine); + } + + return score; + } + + iter++; + } } void iterativeDeepening(Position pos, Depth depth, bool uci) { - pos.getState()->accumulator.refresh(pos); + pos.getState()->accumulator.refresh(pos); - Score prevScore; - Move bestMove; + Score prevScore; + Move bestMove; - int stability = 0; + int stability = 0; - for (Depth currDepth = 1; currDepth <= depth; currDepth++) { - Score score = searchRoot(pos, prevScore, currDepth, uci); - if (score == UNKNOWN_SCORE) - break; + for (Depth currDepth = 1; currDepth <= depth; currDepth++) { + Score score = searchRoot(pos, prevScore, currDepth, uci); + if (score == UNKNOWN_SCORE) + break; - // We only care about stability if we searched enough depth - if (currDepth >= 12) { - if (bestMove != bestPV) { - stability -= 6; - } else { - if (std::abs(prevScore - score) >= std::max(prevScore / 10, 50)) { - stability -= 4; - } else { - stability += 1; - } - } + // We only care about stability if we searched enough depth + if (currDepth >= 12) { + if (bestMove != bestPV) { + stability -= 6; + } else { + if (std::abs(prevScore - score) >= std::max(prevScore / 10, 50)) { + stability -= 4; + } else { + stability += 1; + } + } - allocateTime(stability); - } + allocateTime(stability); + } - prevScore = score; - bestMove = bestPV; - } + prevScore = score; + bestMove = bestPV; + } - if (uci) { - out("bestmove", bestMove); - } + if (uci) { + out("bestmove", bestMove); + } - searchStopped() = true; + searchStopped() = true; } #include @@ -522,23 +521,23 @@ void iterativeDeepening(Position pos, Depth depth, bool uci) { std::thread th; void joinThread(bool waitToFinish) { - if (!waitToFinish) - stopSearch(); + if (!waitToFinish) + stopSearch(); - if (th.joinable()) - th.join(); + if (th.joinable()) + th.join(); } void startSearch(SearchInfo &searchInfo, Position &pos, int threadCount) { - joinThread(false); + joinThread(false); - Color stm = pos.getSideToMove(); - if (stm == WHITE) { - initTimeMan(searchInfo.wtime, searchInfo.winc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); - } else { - initTimeMan(searchInfo.btime, searchInfo.binc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); - } + Color stm = pos.getSideToMove(); + if (stm == WHITE) { + initTimeMan(searchInfo.wtime, searchInfo.winc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); + } else { + initTimeMan(searchInfo.btime, searchInfo.binc, searchInfo.movestogo, searchInfo.movetime, searchInfo.maxNodes); + } - th = std::thread(iterativeDeepening, pos, searchInfo.maxDepth, searchInfo.uciMode); + th = std::thread(iterativeDeepening, pos, searchInfo.maxDepth, searchInfo.uciMode); } \ No newline at end of file diff --git a/src/search.h b/src/search.h index 9aca0bb..61459dc 100644 --- a/src/search.h +++ b/src/search.h @@ -85,16 +85,16 @@ constexpr Score SEE_MARGIN = 2; #endif struct SearchStack { - Move move; - Score eval = 0; + Move move; + Score eval = 0; }; void initLmr(); inline void initSearch() { - initBitboard(); - initLmr(); - NNUE::init(); + initBitboard(); + initLmr(); + NNUE::init(); } Score see(const Position &pos, Move move); diff --git a/src/timeman.cpp b/src/timeman.cpp index 7bcf82d..eb4d27b 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -28,68 +28,68 @@ bool stopping = true; bool stopped = true; U64 getTime() { - return std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(); + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(); } void initTimeMan(U64 time, U64 inc, U64 movesToGo, U64 moveTime, U64 nodes) { - nodeCount = 0; + nodeCount = 0; - movesToGo = movesToGo == 0 ? 15 : movesToGo; + movesToGo = movesToGo == 0 ? 15 : movesToGo; - startedSearch = getTime(); - stabilityTime = 0; - stopping = false; - stopped = false; + startedSearch = getTime(); + stabilityTime = 0; + stopping = false; + stopped = false; - maxNodes = nodes; + maxNodes = nodes; - if (moveTime != 0) { - // We are limited how much can we search - shouldSearch = moveTime - MOVE_OVERHEAD; - maxSearch = moveTime - MOVE_OVERHEAD; - } else if (time == 0) { - // We have infinite time - shouldSearch = 0; - maxSearch = 0; - } else { + if (moveTime != 0) { + // We are limited how much can we search + shouldSearch = moveTime - MOVE_OVERHEAD; + maxSearch = moveTime - MOVE_OVERHEAD; + } else if (time == 0) { + // We have infinite time + shouldSearch = 0; + maxSearch = 0; + } else { - U64 panicTime = time / (movesToGo + 10) + 2 * inc; - stabilityTime = time / 500; + U64 panicTime = time / (movesToGo + 10) + 2 * inc; + stabilityTime = time / 500; - shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 1) + inc * 3 / 4 - MOVE_OVERHEAD); - maxSearch = std::min(time - MOVE_OVERHEAD, shouldSearch + panicTime); - } + shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 1) + inc * 3 / 4 - MOVE_OVERHEAD); + maxSearch = std::min(time - MOVE_OVERHEAD, shouldSearch + panicTime); + } - searchTime = shouldSearch; + searchTime = shouldSearch; } void stopSearch() { - stopping = true; + stopping = true; } bool &searchStopped() { - return stopped; + return stopped; } void allocateTime(int stability) { - U64 newSearchTime = shouldSearch - stability * stabilityTime; - searchTime = std::min(maxSearch, newSearchTime); + U64 newSearchTime = shouldSearch - stability * stabilityTime; + searchTime = std::min(maxSearch, newSearchTime); } bool shouldEnd() { - if ((nodeCount & mask) == 0 && !stopping) { - stopping = (maxSearch != 0 && getSearchTime() >= searchTime) || (maxNodes != 0 && nodeCount > maxNodes); - } - return stopping; + if ((nodeCount & mask) == 0 && !stopping) { + stopping = (maxSearch != 0 && getSearchTime() >= searchTime) || (maxNodes != 0 && nodeCount > maxNodes); + } + return stopping; } U64 getSearchTime() { - return getTime() - startedSearch; + return getTime() - startedSearch; } U64 getNps() { - U64 millis = getSearchTime(); - return millis == 0 ? 0 : nodeCount * 1000 / millis; + U64 millis = getSearchTime(); + return millis == 0 ? 0 : nodeCount * 1000 / millis; } diff --git a/src/tt.cpp b/src/tt.cpp index c953de2..3e8273e 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -27,92 +27,92 @@ TTable tt; uint16_t globalAge = 0; TTBucket *getBucket(U64 hash) { - return tt.table + (hash & tt.mask); + return tt.table + (hash & tt.mask); } void ttClear() { - std::memset(tt.table, 0, tt.bucketCount * sizeof(TTBucket)); - globalAge = 0; + std::memset(tt.table, 0, tt.bucketCount * sizeof(TTBucket)); + globalAge = 0; } void ttFree() { - free(tt.table); + free(tt.table); } void ttResize(unsigned int MBSize) { - if (tt.bucketCount) - ttFree(); + if (tt.bucketCount) + ttFree(); - unsigned int i = 10; - while ((1ULL << i) <= MBSize * 1024 * 1024 / sizeof(TTBucket)) - i++; + unsigned int i = 10; + while ((1ULL << i) <= MBSize * 1024 * 1024 / sizeof(TTBucket)) + i++; - tt.bucketCount = (1ULL << (i - 1)); - tt.mask = tt.bucketCount - 1ULL; + tt.bucketCount = (1ULL << (i - 1)); + tt.mask = tt.bucketCount - 1ULL; #ifdef __linux__ - // Allocate memory with 1MB alignment - tt.table = static_cast(aligned_alloc((1ULL << 20), tt.bucketCount * sizeof(TTBucket))); + // Allocate memory with 1MB alignment + tt.table = static_cast(aligned_alloc((1ULL << 20), tt.bucketCount * sizeof(TTBucket))); - // For reference see https://man7.org/linux/man-pages/man2/madvise.2.html on MADV HUGEPAGE - madvise(tt.table, tt.bucketCount * sizeof(TTBucket), MADV_HUGEPAGE); + // For reference see https://man7.org/linux/man-pages/man2/madvise.2.html on MADV HUGEPAGE + madvise(tt.table, tt.bucketCount * sizeof(TTBucket), MADV_HUGEPAGE); #else - tt.table = (TTBucket *) malloc(tt.bucketCount * sizeof(TTBucket)); + tt.table = (TTBucket *) malloc(tt.bucketCount * sizeof(TTBucket)); #endif - ttClear(); + ttClear(); } TTEntry *ttProbe(U64 hash, bool &ttHit, Depth depth, Score alpha, Score beta) { - TTBucket *bucket = getBucket(hash); - TTEntry *entry; - if (bucket->entryA.hash == hash) { - entry = &bucket->entryA; - entry->age = globalAge; - } else if (bucket->entryB.hash == hash) { - entry = &bucket->entryB; - } else { - return nullptr; - } - - if (std::abs(entry->eval) > MATE_VALUE - 100) - return nullptr; - - ttHit = true; - return entry; + TTBucket *bucket = getBucket(hash); + TTEntry *entry; + if (bucket->entryA.hash == hash) { + entry = &bucket->entryA; + entry->age = globalAge; + } else if (bucket->entryB.hash == hash) { + entry = &bucket->entryB; + } else { + return nullptr; + } + + if (std::abs(entry->eval) > MATE_VALUE - 100) + return nullptr; + + ttHit = true; + return entry; } void ttSave(U64 hash, Depth depth, Score eval, EntryFlag flag, Move bestMove) { - TTBucket *bucket = getBucket(hash); - TTEntry *entry; - - if (bucket->entryA.hash == hash || bucket->entryA.depth * 2 / 3 <= depth || - globalAge - bucket->entryA.age >= 3) { - entry = &bucket->entryA; - } else { - entry = &bucket->entryB; - } - - if (entry->hash != hash || flag == EXACT || entry->depth * 2 / 3 <= depth) { - entry->hash = hash; - entry->depth = depth; - entry->eval = eval; - entry->flag = flag; - entry->hashMove = bestMove; - entry->age = globalAge; - } + TTBucket *bucket = getBucket(hash); + TTEntry *entry; + + if (bucket->entryA.hash == hash || bucket->entryA.depth * 2 / 3 <= depth || + globalAge - bucket->entryA.age >= 3) { + entry = &bucket->entryA; + } else { + entry = &bucket->entryB; + } + + if (entry->hash != hash || flag == EXACT || entry->depth * 2 / 3 <= depth) { + entry->hash = hash; + entry->depth = depth; + entry->eval = eval; + entry->flag = flag; + entry->hashMove = bestMove; + entry->age = globalAge; + } } Move getHashMove(U64 hash) { - TTBucket *bucket = getBucket(hash); - if (bucket->entryA.hash == hash) - return bucket->entryA.hashMove; - else if (bucket->entryB.hash == hash) - return bucket->entryB.hashMove; - return {}; + TTBucket *bucket = getBucket(hash); + if (bucket->entryA.hash == hash) + return bucket->entryA.hashMove; + else if (bucket->entryB.hash == hash) + return bucket->entryB.hashMove; + return {}; } void ttPrefetch(U64 hash) { - __builtin_prefetch(&tt.table[hash & tt.mask], 0, 1); + __builtin_prefetch(&tt.table[hash & tt.mask], 0, 1); } \ No newline at end of file diff --git a/src/tt.h b/src/tt.h index 694020d..0c4582f 100644 --- a/src/tt.h +++ b/src/tt.h @@ -23,31 +23,31 @@ extern uint16_t globalAge; enum EntryFlag : uint16_t { - NONE = 0, - EXACT = 1, - ALPHA = 2, - BETA = 3 + NONE = 0, + EXACT = 1, + ALPHA = 2, + BETA = 3 }; struct TTEntry { // Total: 21 bytes -> compiler makes it 24 - U64 hash; // 8 bytes - Depth depth; // 4 bytes - Score eval; // 4 bytes - Move hashMove; // 2 bytes - EntryFlag flag;// 1 bytes - uint16_t age; // 2 bytes + U64 hash; // 8 bytes + Depth depth; // 4 bytes + Score eval; // 4 bytes + Move hashMove; // 2 bytes + EntryFlag flag;// 1 bytes + uint16_t age; // 2 bytes }; -struct TTBucket { // 64 bytes - TTEntry entryA; // 24 bytes - TTEntry entryB; // 24 bytes - U64 _padding1, _padding2;// 16 bytes +struct TTBucket { // 64 bytes + TTEntry entryA; // 24 bytes + TTEntry entryB; // 24 bytes + U64 _padding1, _padding2;// 16 bytes }; struct TTable { - TTBucket *table; - unsigned int bucketCount; - U64 mask; + TTBucket *table; + unsigned int bucketCount; + U64 mask; }; void ttResize(unsigned int MBSize); diff --git a/src/tuner.cpp b/src/tuner.cpp index 6b798d0..f41a5f9 100644 --- a/src/tuner.cpp +++ b/src/tuner.cpp @@ -24,250 +24,250 @@ double K = 0.2; double E(const std::vector &data) { - double error = 0; + double error = 0; - Position pos; + Position pos; - for (const DataEntry &entry : data) { + for (const DataEntry &entry : data) { - pos.loadPositionFromRawState(entry.pos); + pos.loadPositionFromRawState(entry.pos); - auto score = double(eval(pos)); + auto score = double(eval(pos)); - double predicted = 1 / double(1 + pow(10, -K * score / 400)); + double predicted = 1 / double(1 + pow(10, -K * score / 400)); - error += (entry.result - predicted) * (entry.result - predicted); - } + error += (entry.result - predicted) * (entry.result - predicted); + } - error /= double(data.size()); + error /= double(data.size()); - return error; + return error; } void saveResults(const unsigned int paramCnt, EvalParameter *evalParameters) { #ifdef TUNE_ - std::ofstream params("params.txt"); - - for (unsigned int i = 0; i < paramCnt; i++) { - params << "\nconstexpr Value " - << evalParameters[i].name << " = {" - << evalParameters[i].mgScore << ", " - << evalParameters[i].egScore << "};\n"; - } - - params << "\n"; - - for (unsigned int type = 0; type < 6; type++) { - params << "\nconstexpr Score " << typeToString(static_cast(type)) - << "MgPSQT[64] = {\n\t"; - for (Square sq = A1; sq < 64; sq += 1) { - params << std::setw(4) << PSQT[BLACK][type][sq].mg << ", "; - if (squareToFile(sq) == 7) { - params << "\n"; - if (squareToRank(sq) != 7) { - params << "\t"; - } - } - } - params << "};\n"; - - params << "\nconstexpr Score " << typeToString(static_cast(type)) - << "EgPSQT[64] = {\n\t"; - for (Square sq = A1; sq < 64; sq += 1) { - params << std::setw(4) << PSQT[BLACK][type][sq].eg << ", "; - if (squareToFile(sq) == 7) { - params << "\n"; - if (squareToRank(sq) != 7) { - params << "\t"; - } - } - } - params << "};\n"; - } - - params.close(); + std::ofstream params("params.txt"); + + for (unsigned int i = 0; i < paramCnt; i++) { + params << "\nconstexpr Value " + << evalParameters[i].name << " = {" + << evalParameters[i].mgScore << ", " + << evalParameters[i].egScore << "};\n"; + } + + params << "\n"; + + for (unsigned int type = 0; type < 6; type++) { + params << "\nconstexpr Score " << typeToString(static_cast(type)) + << "MgPSQT[64] = {\n\t"; + for (Square sq = A1; sq < 64; sq += 1) { + params << std::setw(4) << PSQT[BLACK][type][sq].mg << ", "; + if (squareToFile(sq) == 7) { + params << "\n"; + if (squareToRank(sq) != 7) { + params << "\t"; + } + } + } + params << "};\n"; + + params << "\nconstexpr Score " << typeToString(static_cast(type)) + << "EgPSQT[64] = {\n\t"; + for (Square sq = A1; sq < 64; sq += 1) { + params << std::setw(4) << PSQT[BLACK][type][sq].eg << ", "; + if (squareToFile(sq) == 7) { + params << "\n"; + if (squareToRank(sq) != 7) { + params << "\t"; + } + } + } + params << "};\n"; + } + + params.close(); #endif } void tune(const std::string &inputFile) { #ifdef TUNE_ - std::vector trainingData; - std::cout << "Loading training data..." << std::endl; - std::ifstream f(inputFile); - std::string line; - Position position; - while (std::getline(f, line)) { - std::stringstream ss(line); - std::string fen; - int result; - std::getline(ss, fen, ';'); - ss >> result; - position.loadPositionFromFen(fen); - DataEntry entry = {position.getRawState(), result == 0 ? 0 : (result == 1 ? 1 : 0.5)}; - - trainingData.emplace_back(entry); - } - std::cout << trainingData.size() << " entry was loaded successfully!\nOptimizing K..." << std::endl; - - double bestK = 0; - double bestError = 2; - while (K <= 2) { - double newE = E(trainingData); - std::cout << "K = " << K << " E = " << newE << std::endl; - if (newE < bestError) { - bestError = newE; - bestK = K; - } - K += 0.1; - } - - K = bestK; - std::cout << "Best K = " << K << " with an error of " << bestError << std::endl; - - // Local optimize algorithms - bool improved = true; - double bestE = E(trainingData); - unsigned int iterationCount = 0; - - const unsigned int PSQTparamCnt = 768; - const unsigned int paramCnt = 0; - - EvalParameter params[paramCnt] = {}; - - - while (improved) { - improved = false; - - // Tuning the PSQT table - - for (unsigned int idx = 0; idx < PSQTparamCnt; idx++) { - iterationCount++; - - unsigned int index = idx; - - auto pieceType = static_cast(int(index / 128)); - index %= 128; - - bool isMgScore = 1 - int(index / 64); - index %= 64; - - auto whiteSquare = static_cast(index); - - unsigned int rank = squareToRank(whiteSquare), file = squareToFile(whiteSquare); - auto blackSquare = Square((7 - rank) * 8 + file); - - - if (isMgScore) { - PSQT[WHITE][pieceType][whiteSquare].mg += 1; - PSQT[BLACK][pieceType][blackSquare].mg += 1; - } else { - PSQT[WHITE][pieceType][whiteSquare].eg += 1; - PSQT[BLACK][pieceType][blackSquare].eg += 1; - } - - double newE = E(trainingData); - int change = 0; - if (newE < bestE) { - bestE = newE; - improved = true; - change = 1; - } else { - - if (isMgScore) { - PSQT[WHITE][pieceType][whiteSquare].mg -= 2; - PSQT[BLACK][pieceType][blackSquare].mg -= 2; - } else { - PSQT[WHITE][pieceType][whiteSquare].eg -= 2; - PSQT[BLACK][pieceType][blackSquare].eg -= 2; - } - - - newE = E(trainingData); - if (newE < bestE) { - bestE = newE; - improved = true; - change = -1; - } else { - if (isMgScore) { - PSQT[WHITE][pieceType][whiteSquare].mg += 1; - PSQT[BLACK][pieceType][blackSquare].mg += 1; - } else { - PSQT[WHITE][pieceType][whiteSquare].eg += 1; - PSQT[BLACK][pieceType][blackSquare].eg += 1; - } - } - } - - std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " - << (int) pieceType << " " << formatSquare(whiteSquare) - << (isMgScore ? " midgame (" : " endgame (") << change << ")" << std::endl; - - if (iterationCount % 10 == 0) { - saveResults(paramCnt, params); - } - } - - // Tuning other eval params - for (auto ¶m : params) { - // Tuning the midgame part of the value - iterationCount++; - - param.mgScore += 1; - double newE = E(trainingData); - int change = 0; - - if (newE < bestE) { - bestE = newE; - improved = true; - change = 1; - } else { - param.mgScore -= 2; - newE = E(trainingData); - - if (newE < bestE) { - bestE = newE; - improved = true; - change = -1; - } else { - param.mgScore += 1; - } - } - - std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " - << param.name << " midgame (" << change << ")" << std::endl; - - - // Tuning the endgame part of the value - iterationCount++; - - param.egScore += 1; - newE = E(trainingData); - change = 0; - - if (newE < bestE) { - bestE = newE; - improved = true; - change = 1; - } else { - param.egScore -= 2; - newE = E(trainingData); - - if (newE < bestE) { - bestE = newE; - improved = true; - change = -1; - } else { - param.egScore += 1; - } - } - - std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " - << param.name << " endgame (" << change << ")" << std::endl; - - if (iterationCount % 10 == 0) { - saveResults(paramCnt, params); - } - } - } + std::vector trainingData; + std::cout << "Loading training data..." << std::endl; + std::ifstream f(inputFile); + std::string line; + Position position; + while (std::getline(f, line)) { + std::stringstream ss(line); + std::string fen; + int result; + std::getline(ss, fen, ';'); + ss >> result; + position.loadPositionFromFen(fen); + DataEntry entry = {position.getRawState(), result == 0 ? 0 : (result == 1 ? 1 : 0.5)}; + + trainingData.emplace_back(entry); + } + std::cout << trainingData.size() << " entry was loaded successfully!\nOptimizing K..." << std::endl; + + double bestK = 0; + double bestError = 2; + while (K <= 2) { + double newE = E(trainingData); + std::cout << "K = " << K << " E = " << newE << std::endl; + if (newE < bestError) { + bestError = newE; + bestK = K; + } + K += 0.1; + } + + K = bestK; + std::cout << "Best K = " << K << " with an error of " << bestError << std::endl; + + // Local optimize algorithms + bool improved = true; + double bestE = E(trainingData); + unsigned int iterationCount = 0; + + const unsigned int PSQTparamCnt = 768; + const unsigned int paramCnt = 0; + + EvalParameter params[paramCnt] = {}; + + + while (improved) { + improved = false; + + // Tuning the PSQT table + + for (unsigned int idx = 0; idx < PSQTparamCnt; idx++) { + iterationCount++; + + unsigned int index = idx; + + auto pieceType = static_cast(int(index / 128)); + index %= 128; + + bool isMgScore = 1 - int(index / 64); + index %= 64; + + auto whiteSquare = static_cast(index); + + unsigned int rank = squareToRank(whiteSquare), file = squareToFile(whiteSquare); + auto blackSquare = Square((7 - rank) * 8 + file); + + + if (isMgScore) { + PSQT[WHITE][pieceType][whiteSquare].mg += 1; + PSQT[BLACK][pieceType][blackSquare].mg += 1; + } else { + PSQT[WHITE][pieceType][whiteSquare].eg += 1; + PSQT[BLACK][pieceType][blackSquare].eg += 1; + } + + double newE = E(trainingData); + int change = 0; + if (newE < bestE) { + bestE = newE; + improved = true; + change = 1; + } else { + + if (isMgScore) { + PSQT[WHITE][pieceType][whiteSquare].mg -= 2; + PSQT[BLACK][pieceType][blackSquare].mg -= 2; + } else { + PSQT[WHITE][pieceType][whiteSquare].eg -= 2; + PSQT[BLACK][pieceType][blackSquare].eg -= 2; + } + + + newE = E(trainingData); + if (newE < bestE) { + bestE = newE; + improved = true; + change = -1; + } else { + if (isMgScore) { + PSQT[WHITE][pieceType][whiteSquare].mg += 1; + PSQT[BLACK][pieceType][blackSquare].mg += 1; + } else { + PSQT[WHITE][pieceType][whiteSquare].eg += 1; + PSQT[BLACK][pieceType][blackSquare].eg += 1; + } + } + } + + std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " + << (int) pieceType << " " << formatSquare(whiteSquare) + << (isMgScore ? " midgame (" : " endgame (") << change << ")" << std::endl; + + if (iterationCount % 10 == 0) { + saveResults(paramCnt, params); + } + } + + // Tuning other eval params + for (auto ¶m : params) { + // Tuning the midgame part of the value + iterationCount++; + + param.mgScore += 1; + double newE = E(trainingData); + int change = 0; + + if (newE < bestE) { + bestE = newE; + improved = true; + change = 1; + } else { + param.mgScore -= 2; + newE = E(trainingData); + + if (newE < bestE) { + bestE = newE; + improved = true; + change = -1; + } else { + param.mgScore += 1; + } + } + + std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " + << param.name << " midgame (" << change << ")" << std::endl; + + + // Tuning the endgame part of the value + iterationCount++; + + param.egScore += 1; + newE = E(trainingData); + change = 0; + + if (newE < bestE) { + bestE = newE; + improved = true; + change = 1; + } else { + param.egScore -= 2; + newE = E(trainingData); + + if (newE < bestE) { + bestE = newE; + improved = true; + change = -1; + } else { + param.egScore += 1; + } + } + + std::cout << "Iteration " << iterationCount << ":\n - error = " << bestE << "\n - previous param = " + << param.name << " endgame (" << change << ")" << std::endl; + + if (iterationCount % 10 == 0) { + saveResults(paramCnt, params); + } + } + } #endif } diff --git a/src/tuner.h b/src/tuner.h index 3003fd1..6a48381 100644 --- a/src/tuner.h +++ b/src/tuner.h @@ -24,14 +24,14 @@ #include struct DataEntry { - RawState pos; - double result; + RawState pos; + double result; }; struct EvalParameter { - const std::string name; - Score &mgScore; - Score &egScore; + const std::string name; + Score &mgScore; + Score &egScore; }; void tune(const std::string &inputFile); diff --git a/src/uci.cpp b/src/uci.cpp index 2f88df0..9927bce 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -25,245 +25,245 @@ #include Move stringToMove(const Position &pos, const std::string &s) { - Square from = stringToSquare(s.substr(0, 2)); - Square to = stringToSquare(s.substr(2, 2)); - Piece piece = pos.pieceAt(from); - Piece capturedPiece = pos.pieceAt(to); - unsigned int flags = QUIET_MOVE; - if (!capturedPiece.isNull()) - flags = CAPTURE_FLAG; + Square from = stringToSquare(s.substr(0, 2)); + Square to = stringToSquare(s.substr(2, 2)); + Piece piece = pos.pieceAt(from); + Piece capturedPiece = pos.pieceAt(to); + unsigned int flags = QUIET_MOVE; + if (!capturedPiece.isNull()) + flags = CAPTURE_FLAG; - if (s.size() == 5) { - PieceType type = charToPiece(s[4]).type; - switch (type) { - case QUEEN: - return {from, to, flags | PROMO_QUEEN}; - case ROOK: - return {from, to, flags | PROMO_ROOK}; - case BISHOP: - return {from, to, flags | PROMO_BISHOP}; - case KNIGHT: - return {from, to, flags | PROMO_KNIGHT}; - default: - out("Invalid move!"); - return {}; - } - } + if (s.size() == 5) { + PieceType type = charToPiece(s[4]).type; + switch (type) { + case QUEEN: + return {from, to, flags | PROMO_QUEEN}; + case ROOK: + return {from, to, flags | PROMO_ROOK}; + case BISHOP: + return {from, to, flags | PROMO_BISHOP}; + case KNIGHT: + return {from, to, flags | PROMO_KNIGHT}; + default: + out("Invalid move!"); + return {}; + } + } - if (piece.type == PAWN && pos.getEpSquare() == to) { - flags = EP_CAPTURE; - } else if (piece.type == PAWN && std::abs((long) squareToRank(from) - (long) squareToRank(to)) == 2) { - flags = DOUBLE_PAWN_PUSH; - } else if (piece.type == KING && squareToFile(from) == 4) { - if (squareToFile(to) == 6) { - flags = KING_CASTLE; - } else if (squareToFile(to) == 2) { - flags = QUEEN_CASTLE; - } - } + if (piece.type == PAWN && pos.getEpSquare() == to) { + flags = EP_CAPTURE; + } else if (piece.type == PAWN && std::abs((long) squareToRank(from) - (long) squareToRank(to)) == 2) { + flags = DOUBLE_PAWN_PUSH; + } else if (piece.type == KING && squareToFile(from) == 4) { + if (squareToFile(to) == 6) { + flags = KING_CASTLE; + } else if (squareToFile(to) == 2) { + flags = QUEEN_CASTLE; + } + } - return {from, to, flags}; + return {from, to, flags}; } void uciLoop() { - // Identifying ourselves + // Identifying ourselves #ifdef VERSION - out("id", "name", "BlackCore", VERSION); + out("id", "name", "BlackCore", VERSION); #else - out("id", "name", "BlackCore"); + out("id", "name", "BlackCore"); #endif - out("id", "author", "SzilBalazs"); + out("id", "author", "SzilBalazs"); - // We tell the GUI what options we have - out("option", "name", "Hash", "type", "spin", "default", 32, "min", 1, "max", 4096); - out("option", "name", "Threads", "type", "spin", "default", 1, "min", 1, "max", 1); - out("option", "name", "Ponder", "type", "check", "default", "false"); - out("option", "name", "Move Overhead", "type", "spin", "default", 10, "min", 0, "max", 10000); + // We tell the GUI what options we have + out("option", "name", "Hash", "type", "spin", "default", 32, "min", 1, "max", 4096); + out("option", "name", "Threads", "type", "spin", "default", 1, "min", 1, "max", 1); + out("option", "name", "Ponder", "type", "check", "default", "false"); + out("option", "name", "Move Overhead", "type", "spin", "default", 10, "min", 0, "max", 10000); #ifdef TUNE - tuneOut("DELTA_MARGIN", 400, 200, 500); - tuneOut("RAZOR_MARGIN", 130, 50, 200); - tuneOut("RFP_DEPTH", 5, 3, 10); - tuneOut("RFP_DEPTH_MULTIPLIER", 70, 30, 200); - tuneOut("RFP_IMPROVING_MULTIPLIER", 80, 30, 200); - tuneOut("NULL_MOVE_DEPTH", 3, 1, 6); - tuneOut("NULL_MOVE_BASE_R", 4, 2, 6); - tuneOut("NULL_MOVE_R_SCALE", 5, 2, 10); - tuneOut("LMR_DEPTH", 4, 2, 10); - tuneOut("LMR_INDEX", 3, 1, 10); - tuneOut("LMP_DEPTH", 4, 1, 10); - tuneOut("LMP_MOVES", 5, 1, 10); - tuneOut("ASPIRATION_DEPTH", 9, 5, 20); - tuneOut("ASPIRATION_DELTA", 30, 10, 100); - tuneOut("SEE_MARGIN", 0, 0, 200); - tuneOut("PAWN_VALUE", 150, 100, 200); - tuneOut("KNIGHT_VALUE", 750, 300, 1000); - tuneOut("BISHOP_VALUE", 850, 300, 1000); - tuneOut("ROOK_VALUE", 800, 300, 1000); - tuneOut("QUEEN_VALUE", 1000, 500, 1500); - tuneOut("LMR_BASE", 10, 1, 30); - tuneOut("LMR_SCALE", 17, 10, 40); + tuneOut("DELTA_MARGIN", 400, 200, 500); + tuneOut("RAZOR_MARGIN", 130, 50, 200); + tuneOut("RFP_DEPTH", 5, 3, 10); + tuneOut("RFP_DEPTH_MULTIPLIER", 70, 30, 200); + tuneOut("RFP_IMPROVING_MULTIPLIER", 80, 30, 200); + tuneOut("NULL_MOVE_DEPTH", 3, 1, 6); + tuneOut("NULL_MOVE_BASE_R", 4, 2, 6); + tuneOut("NULL_MOVE_R_SCALE", 5, 2, 10); + tuneOut("LMR_DEPTH", 4, 2, 10); + tuneOut("LMR_INDEX", 3, 1, 10); + tuneOut("LMP_DEPTH", 4, 1, 10); + tuneOut("LMP_MOVES", 5, 1, 10); + tuneOut("ASPIRATION_DEPTH", 9, 5, 20); + tuneOut("ASPIRATION_DELTA", 30, 10, 100); + tuneOut("SEE_MARGIN", 0, 0, 200); + tuneOut("PAWN_VALUE", 150, 100, 200); + tuneOut("KNIGHT_VALUE", 750, 300, 1000); + tuneOut("BISHOP_VALUE", 850, 300, 1000); + tuneOut("ROOK_VALUE", 800, 300, 1000); + tuneOut("QUEEN_VALUE", 1000, 500, 1500); + tuneOut("LMR_BASE", 10, 1, 30); + tuneOut("LMR_SCALE", 17, 10, 40); #endif - ttResize(32); + ttResize(32); - // We have sent all the parameters - out("uciok"); + // We have sent all the parameters + out("uciok"); - // Only now we initialize stuff - initSearch(); + // Only now we initialize stuff + initSearch(); - Position pos = {STARTING_FEN}; - int threadCount = 1; + Position pos = {STARTING_FEN}; + int threadCount = 1; - while (true) { - std::string line, command, token; - std::getline(std::cin, line); + while (true) { + std::string line, command, token; + std::getline(std::cin, line); - std::stringstream ss(line); + std::stringstream ss(line); - std::getline(ss, command, ' '); + std::getline(ss, command, ' '); - std::vector tokens; - while (std::getline(ss, token, ' ')) { - tokens.emplace_back(token); - } + std::vector tokens; + while (std::getline(ss, token, ' ')) { + tokens.emplace_back(token); + } - if (command == "isready") { - out("readyok"); - } else if (command == "quit") { - joinThread(false); - break; - } else if (command == "stop") { - joinThread(false); - } else if (command == "ucinewgame") { - ttClear(); - } else if (command == "setoption") { - if (tokens.size() >= 4) { - if (tokens[1] == "Hash") { - ttResize(std::stoi(tokens[3])); - } else if (tokens[1] == "Move" && tokens[2] == "Overhead") { - MOVE_OVERHEAD = std::stoi(tokens[4]); - } else if (tokens[1] == "Ponder") { + if (command == "isready") { + out("readyok"); + } else if (command == "quit") { + joinThread(false); + break; + } else if (command == "stop") { + joinThread(false); + } else if (command == "ucinewgame") { + ttClear(); + } else if (command == "setoption") { + if (tokens.size() >= 4) { + if (tokens[1] == "Hash") { + ttResize(std::stoi(tokens[3])); + } else if (tokens[1] == "Move" && tokens[2] == "Overhead") { + MOVE_OVERHEAD = std::stoi(tokens[4]); + } else if (tokens[1] == "Ponder") { - } else { + } else { #ifdef TUNE - if (tokens[1] == "DELTA_MARGIN") { - DELTA_MARGIN = std::stoi(tokens[3]); - } else if (tokens[1] == "RAZOR_MARGIN") { - RAZOR_MARGIN = std::stoi(tokens[3]); - } else if (tokens[1] == "RFP_DEPTH") { - RFP_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "RFP_DEPTH_MULTIPLIER") { - RFP_DEPTH_MULTIPLIER = std::stoi(tokens[3]); - } else if (tokens[1] == "RFP_IMPROVING_MULTIPLIER") { - RFP_IMPROVING_MULTIPLIER = std::stoi(tokens[3]); - } else if (tokens[1] == "NULL_MOVE_DEPTH") { - NULL_MOVE_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "NULL_MOVE_BASE_R") { - NULL_MOVE_BASE_R = std::stoi(tokens[3]); - } else if (tokens[1] == "NULL_MOVE_R_SCALE") { - NULL_MOVE_R_SCALE = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_DEPTH") { - LMR_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_INDEX") { - LMR_INDEX = std::stoi(tokens[3]); - } else if (tokens[1] == "LMP_DEPTH") { - LMP_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "LMP_MOVES") { - LMP_MOVES = std::stoi(tokens[3]); - } else if (tokens[1] == "ASPIRATION_DEPTH") { - ASPIRATION_DEPTH = std::stoi(tokens[3]); - } else if (tokens[1] == "ASPIRATION_DELTA") { - ASPIRATION_DELTA = std::stoi(tokens[3]); - } else if (tokens[1] == "SEE_MARGIN") { - SEE_MARGIN = std::stoi(tokens[3]); - } else if (tokens[1] == "PAWN_VALUE") { - PIECE_VALUES[PAWN] = std::stoi(tokens[3]); - } else if (tokens[1] == "KNIGHT_VALUE") { - PIECE_VALUES[KNIGHT] = std::stoi(tokens[3]); - } else if (tokens[1] == "BISHOP_VALUE") { - PIECE_VALUES[BISHOP] = std::stoi(tokens[3]); - } else if (tokens[1] == "ROOK_VALUE") { - PIECE_VALUES[ROOK] = std::stoi(tokens[3]); - } else if (tokens[1] == "QUEEN_VALUE") { - PIECE_VALUES[QUEEN] = std::stoi(tokens[3]); - } else if (tokens[1] == "LMR_BASE") { - LMR_BASE = double(std::stoi(tokens[3])) / 10; - } else if (tokens[1] == "LMR_SCALE") { - LMR_SCALE = double(std::stoi(tokens[3])) / 10; - } + if (tokens[1] == "DELTA_MARGIN") { + DELTA_MARGIN = std::stoi(tokens[3]); + } else if (tokens[1] == "RAZOR_MARGIN") { + RAZOR_MARGIN = std::stoi(tokens[3]); + } else if (tokens[1] == "RFP_DEPTH") { + RFP_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "RFP_DEPTH_MULTIPLIER") { + RFP_DEPTH_MULTIPLIER = std::stoi(tokens[3]); + } else if (tokens[1] == "RFP_IMPROVING_MULTIPLIER") { + RFP_IMPROVING_MULTIPLIER = std::stoi(tokens[3]); + } else if (tokens[1] == "NULL_MOVE_DEPTH") { + NULL_MOVE_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "NULL_MOVE_BASE_R") { + NULL_MOVE_BASE_R = std::stoi(tokens[3]); + } else if (tokens[1] == "NULL_MOVE_R_SCALE") { + NULL_MOVE_R_SCALE = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_DEPTH") { + LMR_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_INDEX") { + LMR_INDEX = std::stoi(tokens[3]); + } else if (tokens[1] == "LMP_DEPTH") { + LMP_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "LMP_MOVES") { + LMP_MOVES = std::stoi(tokens[3]); + } else if (tokens[1] == "ASPIRATION_DEPTH") { + ASPIRATION_DEPTH = std::stoi(tokens[3]); + } else if (tokens[1] == "ASPIRATION_DELTA") { + ASPIRATION_DELTA = std::stoi(tokens[3]); + } else if (tokens[1] == "SEE_MARGIN") { + SEE_MARGIN = std::stoi(tokens[3]); + } else if (tokens[1] == "PAWN_VALUE") { + PIECE_VALUES[PAWN] = std::stoi(tokens[3]); + } else if (tokens[1] == "KNIGHT_VALUE") { + PIECE_VALUES[KNIGHT] = std::stoi(tokens[3]); + } else if (tokens[1] == "BISHOP_VALUE") { + PIECE_VALUES[BISHOP] = std::stoi(tokens[3]); + } else if (tokens[1] == "ROOK_VALUE") { + PIECE_VALUES[ROOK] = std::stoi(tokens[3]); + } else if (tokens[1] == "QUEEN_VALUE") { + PIECE_VALUES[QUEEN] = std::stoi(tokens[3]); + } else if (tokens[1] == "LMR_BASE") { + LMR_BASE = double(std::stoi(tokens[3])) / 10; + } else if (tokens[1] == "LMR_SCALE") { + LMR_SCALE = double(std::stoi(tokens[3])) / 10; + } #endif - } - } - } else if (command == "position" || command == "pos") { + } + } + } else if (command == "position" || command == "pos") { - if (tokens[0] == "fen") { - std::string fen; - for (unsigned int i = 1; i < tokens.size() && tokens[i] != "moves"; i++) { - fen += tokens[i] + ' '; - } - pos.loadPositionFromFen(fen); - } else if (tokens[0] == "startpos") { - pos.loadPositionFromFen(STARTING_FEN); - } + if (tokens[0] == "fen") { + std::string fen; + for (unsigned int i = 1; i < tokens.size() && tokens[i] != "moves"; i++) { + fen += tokens[i] + ' '; + } + pos.loadPositionFromFen(fen); + } else if (tokens[0] == "startpos") { + pos.loadPositionFromFen(STARTING_FEN); + } - if (line.find("moves") != std::string::npos) { - unsigned int i = 0; - bool move = false; - while (i < tokens.size()) { - if (tokens[i] == "moves") - move = true; - else if (move) { - pos.makeMove(stringToMove(pos, tokens[i])); - } - i++; - } - } + if (line.find("moves") != std::string::npos) { + unsigned int i = 0; + bool move = false; + while (i < tokens.size()) { + if (tokens[i] == "moves") + move = true; + else if (move) { + pos.makeMove(stringToMove(pos, tokens[i])); + } + i++; + } + } - pos.getState()->accumulator.refresh(pos); + pos.getState()->accumulator.refresh(pos); - } else if (command == "go") { + } else if (command == "go") { - SearchInfo searchInfo; + SearchInfo searchInfo; - for (unsigned int i = 0; i < tokens.size(); i += 2) { - if (tokens[i] == "wtime") { - searchInfo.wtime = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "btime") { - searchInfo.btime = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "winc") { - searchInfo.winc = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "binc") { - searchInfo.binc = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "movestogo") { - searchInfo.movestogo = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "depth") { - searchInfo.maxDepth = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "movetime") { - searchInfo.movetime = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "nodes") { - searchInfo.maxNodes = std::stoi(tokens[i + 1]); - } else if (tokens[i] == "infinite") { - } - } + for (unsigned int i = 0; i < tokens.size(); i += 2) { + if (tokens[i] == "wtime") { + searchInfo.wtime = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "btime") { + searchInfo.btime = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "winc") { + searchInfo.winc = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "binc") { + searchInfo.binc = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "movestogo") { + searchInfo.movestogo = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "depth") { + searchInfo.maxDepth = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "movetime") { + searchInfo.movetime = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "nodes") { + searchInfo.maxNodes = std::stoi(tokens[i + 1]); + } else if (tokens[i] == "infinite") { + } + } - startSearch(searchInfo, pos, threadCount); + startSearch(searchInfo, pos, threadCount); - } else if (command == "d" || command == "display") { - pos.display(); - } else if (command == "e" || command == "eval") { - pos.displayEval(); - } else if (command == "moves") { - Move moves[200]; - Move *movesEnd = generateMoves(pos, moves, false); - for (Move *it = moves; it != movesEnd; it++) { - out(*it); - } - } else if (command == "perft") { - out("Total nodes:", perft(pos, std::stoi(tokens[0]))); - } - } - ttFree(); + } else if (command == "d" || command == "display") { + pos.display(); + } else if (command == "e" || command == "eval") { + pos.displayEval(); + } else if (command == "moves") { + Move moves[200]; + Move *movesEnd = generateMoves(pos, moves, false); + for (Move *it = moves; it != movesEnd; it++) { + out(*it); + } + } else if (command == "perft") { + out("Total nodes:", perft(pos, std::stoi(tokens[0]))); + } + } + ttFree(); } \ No newline at end of file diff --git a/src/uci.h b/src/uci.h index 4adecbb..0a1c15c 100644 --- a/src/uci.h +++ b/src/uci.h @@ -21,33 +21,33 @@ #include struct SearchInfo { - U64 wtime = 0, btime = 0, winc = 0, binc = 0, movestogo = 0, movetime = 0, maxNodes = 0; - Depth maxDepth = MAX_PLY; - bool uciMode = true; + U64 wtime = 0, btime = 0, winc = 0, binc = 0, movestogo = 0, movetime = 0, maxNodes = 0; + Depth maxDepth = MAX_PLY; + bool uciMode = true; }; namespace BlackCore { - inline void _out() { - std::cout << std::endl; - } - - template - inline void _out(T a, Args... args) { - std::cout << " " << a; - _out(args...); - } + inline void _out() { + std::cout << std::endl; + } + + template + inline void _out(T a, Args... args) { + std::cout << " " << a; + _out(args...); + } }// namespace BlackCore template inline void out(T a, Args... args) { - std::cout << a; - BlackCore::_out(args...); + std::cout << a; + BlackCore::_out(args...); } inline void tuneOut(const std::string &name, int value, int min, int max) { - out("option", "name", name, "type", "spin", "default", value, "min", min, "max", max); + out("option", "name", name, "type", "spin", "default", value, "min", min, "max", max); - // std::cout << "else if (tokens[1] == \"" << name << "\") {\n" << name << " = std::stoi(tokens[3]);\n}"; + // std::cout << "else if (tokens[1] == \"" << name << "\") {\n" << name << " = std::stoi(tokens[3]);\n}"; } void uciLoop(); diff --git a/src/utils.cpp b/src/utils.cpp index cc6c223..dc7f64b 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -19,112 +19,112 @@ #include std::string formatSquare(Square square) { - return std::string() + (char) ('a' + (char) square % 8) + (char) ('1' + (char) (square / 8)); + return std::string() + (char) ('a' + (char) square % 8) + (char) ('1' + (char) (square / 8)); } char pieceToChar(Piece piece) { - char base; - switch (piece.type) { - case PAWN: - base = 'p'; - break; - case ROOK: - base = 'r'; - break; - case KNIGHT: - base = 'n'; - break; - case BISHOP: - base = 'b'; - break; - case QUEEN: - base = 'q'; - break; - case KING: - base = 'k'; - break; - default: - base = ' '; - } - if (base != ' ' && piece.color == WHITE) - base -= 32; - return base; + char base; + switch (piece.type) { + case PAWN: + base = 'p'; + break; + case ROOK: + base = 'r'; + break; + case KNIGHT: + base = 'n'; + break; + case BISHOP: + base = 'b'; + break; + case QUEEN: + base = 'q'; + break; + case KING: + base = 'k'; + break; + default: + base = ' '; + } + if (base != ' ' && piece.color == WHITE) + base -= 32; + return base; } std::string typeToString(PieceType type) { - switch (type) { - case KING: - return "king"; - case PAWN: - return "pawn"; - case KNIGHT: - return "knight"; - case BISHOP: - return "bishop"; - case ROOK: - return "rook"; - case QUEEN: - return "queen"; - default: - return "empty"; - } + switch (type) { + case KING: + return "king"; + case PAWN: + return "pawn"; + case KNIGHT: + return "knight"; + case BISHOP: + return "bishop"; + case ROOK: + return "rook"; + case QUEEN: + return "queen"; + default: + return "empty"; + } } Piece charToPiece(char c) { - Piece piece; + Piece piece; - if ('a' <= c && c <= 'z') { - piece.color = BLACK; - } else if ('A' <= c && c <= 'Z') { - piece.color = WHITE; - c += 32; - } + if ('a' <= c && c <= 'z') { + piece.color = BLACK; + } else if ('A' <= c && c <= 'Z') { + piece.color = WHITE; + c += 32; + } - switch (c) { - case 'p': - piece.type = PAWN; - break; - case 'r': - piece.type = ROOK; - break; - case 'n': - piece.type = KNIGHT; - break; - case 'b': - piece.type = BISHOP; - break; - case 'q': - piece.type = QUEEN; - break; - case 'k': - piece.type = KING; - break; - } - return piece; + switch (c) { + case 'p': + piece.type = PAWN; + break; + case 'r': + piece.type = ROOK; + break; + case 'n': + piece.type = KNIGHT; + break; + case 'b': + piece.type = BISHOP; + break; + case 'q': + piece.type = QUEEN; + break; + case 'k': + piece.type = KING; + break; + } + return piece; } void displayBB(Bitboard b) { - std::cout << " A B C D E F G H \n"; - for (int i = 8; i >= 1; i--) { - std::cout << " +---+---+---+---+---+---+---+---+\n"; - std::cout << i << " |"; - for (int j = 1; j <= 8; j++) { - std::cout << " " << b.get(Square((i - 1) * 8 + (j - 1))) << " |"; - } - std::cout << "\n"; - } - std::cout << " +---+---+---+---+---+---+---+---+\n\n" - << std::endl; + std::cout << " A B C D E F G H \n"; + for (int i = 8; i >= 1; i--) { + std::cout << " +---+---+---+---+---+---+---+---+\n"; + std::cout << i << " |"; + for (int j = 1; j <= 8; j++) { + std::cout << " " << b.get(Square((i - 1) * 8 + (j - 1))) << " |"; + } + std::cout << "\n"; + } + std::cout << " +---+---+---+---+---+---+---+---+\n\n" + << std::endl; } // source: https://web.archive.org/web/20071031100138/http://www.brucemo.com/compchess/programming/zobrist.htm Bitboard randBB() { - return rand() ^ ((U64) rand() << 15) ^ ((U64) rand() << 30) ^ - ((U64) rand() << 45) ^ ((U64) rand() << 60); + return rand() ^ ((U64) rand() << 15) ^ ((U64) rand() << 30) ^ + ((U64) rand() << 45) ^ ((U64) rand() << 60); } std::string BBToHex(Bitboard bb) { - std::stringstream ss; - ss << std::hex << bb.bb; - return "0x" + ss.str() + "ULL"; + std::stringstream ss; + ss << std::hex << bb.bb; + return "0x" + ss.str() + "ULL"; } \ No newline at end of file diff --git a/src/utils.h b/src/utils.h index 4a38ca4..9ae61d3 100644 --- a/src/utils.h +++ b/src/utils.h @@ -26,34 +26,34 @@ constexpr Color indexToColor[3] = {WHITE, BLACK, COLOR_EMPTY}; template constexpr Color EnemyColor() { - if constexpr (color == WHITE) - return BLACK; - else - return WHITE; + if constexpr (color == WHITE) + return BLACK; + else + return WHITE; } inline Color EnemyColor(Color color) { - return color == WHITE ? BLACK : WHITE; + return color == WHITE ? BLACK : WHITE; } constexpr unsigned int squareToRank(Square square) { - return square >> 3; + return square >> 3; } constexpr unsigned int squareToFile(Square square) { - return square & 7; + return square & 7; } constexpr Square mirrorSquare(Square square) { - return Square(56 - square + squareToFile(square)); + return Square(56 - square + squareToFile(square)); } constexpr unsigned char encodePiece(Piece piece) { - return (piece.color << 3) | piece.type; + return (piece.color << 3) | piece.type; } constexpr Piece decodePiece(unsigned char encodedPiece) { - return {indexToType[encodedPiece & 7], indexToColor[encodedPiece >> 3]}; + return {indexToType[encodedPiece & 7], indexToColor[encodedPiece >> 3]}; } std::string formatSquare(Square square); From 080a5cb191b3c97f274b0b5e36ccd8a0ea83bc20 Mon Sep 17 00:00:00 2001 From: SzilBalazs Date: Wed, 9 Nov 2022 19:37:49 +0100 Subject: [PATCH 17/17] Maybe better time management Bench: 2870227 --- src/search.cpp | 4 ++-- src/timeman.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 4e41bd0..b0c0bb4 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -491,9 +491,9 @@ void iterativeDeepening(Position pos, Depth depth, bool uci) { break; // We only care about stability if we searched enough depth - if (currDepth >= 12) { + if (currDepth >= 16) { if (bestMove != bestPV) { - stability -= 6; + stability -= 10; } else { if (std::abs(prevScore - score) >= std::max(prevScore / 10, 50)) { stability -= 4; diff --git a/src/timeman.cpp b/src/timeman.cpp index eb4d27b..1e0a515 100644 --- a/src/timeman.cpp +++ b/src/timeman.cpp @@ -36,7 +36,7 @@ U64 getTime() { void initTimeMan(U64 time, U64 inc, U64 movesToGo, U64 moveTime, U64 nodes) { nodeCount = 0; - movesToGo = movesToGo == 0 ? 15 : movesToGo; + movesToGo = movesToGo == 0 ? 20 : movesToGo + 1; startedSearch = getTime(); stabilityTime = 0; @@ -58,7 +58,7 @@ void initTimeMan(U64 time, U64 inc, U64 movesToGo, U64 moveTime, U64 nodes) { U64 panicTime = time / (movesToGo + 10) + 2 * inc; stabilityTime = time / 500; - shouldSearch = std::min(time - MOVE_OVERHEAD, time / (movesToGo + 1) + inc * 3 / 4 - MOVE_OVERHEAD); + shouldSearch = std::min(time - MOVE_OVERHEAD, time / movesToGo + inc * 3 / 4 - MOVE_OVERHEAD); maxSearch = std::min(time - MOVE_OVERHEAD, shouldSearch + panicTime); }