X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=68b19cd34b116bf229e26e9e1dee9c1de7d728aa;hp=a54fa8171dd3f0787a85ce0fd1e8a270747c20ff;hb=a44f79141eb887f6fbcf06282ff91ed125a70ef4;hpb=79a28841f98c5ecbbb086855cc7b13b14364a965 diff --git a/src/search.cpp b/src/search.cpp index a54fa817..68b19cd3 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -117,7 +117,7 @@ namespace { struct RootMove { - RootMove() { nodes = cumulativeNodes = ourBeta = theirBeta = 0ULL; } + RootMove() { mp_score = 0; nodes = cumulativeNodes = ourBeta = theirBeta = 0ULL; } // RootMove::operator<() is the comparison function used when // sorting the moves. A move m1 is considered to be better @@ -125,11 +125,12 @@ namespace { // have equal score but m1 has the higher beta cut-off count. bool operator<(const RootMove& m) const { - return score != m.score ? score < m.score : theirBeta <= m.theirBeta; + return score != m.score ? score < m.score : mp_score <= m.mp_score; } Move move; Value score; + int mp_score; int64_t nodes, cumulativeNodes, ourBeta, theirBeta; Move pv[PLY_MAX_PLUS_2]; }; @@ -143,6 +144,8 @@ namespace { public: RootMoveList(Position& pos, Move searchMoves[]); + void set_mp_scores(const Position &pos); + int move_count() const { return count; } Move get_move(int moveNum) const { return moves[moveNum].move; } Value get_move_score(int moveNum) const { return moves[moveNum].score; } @@ -739,6 +742,7 @@ namespace { while (1) { // Sort the moves before to (re)search + rml.set_mp_scores(pos); rml.sort(); // Step 10. Loop through all moves in the root move list @@ -2777,6 +2781,26 @@ namespace { } + void RootMoveList::set_mp_scores(const Position &pos) + { + MovePicker mp = MovePicker(pos, MOVE_NONE, ONE_PLY, H); + Move move; + + int moveCount = 0; + while ((move = mp.get_next_move()) != MOVE_NONE) + { + moveCount++; + for (int i = 0; i < count; i++) + { + if (moves[i].move == move) + { + moves[i].mp_score = 512 - moveCount; + break; + } + } + } + } + // RootMoveList simple methods definitions void RootMoveList::set_move_nodes(int moveNum, int64_t nodes) {