2008-08-31 23:59:13 -06:00
|
|
|
/*
|
2008-10-19 10:56:28 -06:00
|
|
|
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
|
Add NNUE evaluation
This patch ports the efficiently updatable neural network (NNUE) evaluation to Stockfish.
Both the NNUE and the classical evaluations are available, and can be used to
assign a value to a position that is later used in alpha-beta (PVS) search to find the
best move. The classical evaluation computes this value as a function of various chess
concepts, handcrafted by experts, tested and tuned using fishtest. The NNUE evaluation
computes this value with a neural network based on basic inputs. The network is optimized
and trained on the evalutions of millions of positions at moderate search depth.
The NNUE evaluation was first introduced in shogi, and ported to Stockfish afterward.
It can be evaluated efficiently on CPUs, and exploits the fact that only parts
of the neural network need to be updated after a typical chess move.
[The nodchip repository](https://github.com/nodchip/Stockfish) provides additional
tools to train and develop the NNUE networks.
This patch is the result of contributions of various authors, from various communities,
including: nodchip, ynasu87, yaneurao (initial port and NNUE authors), domschl, FireFather,
rqs, xXH4CKST3RXx, tttak, zz4032, joergoster, mstembera, nguyenpham, erbsenzaehler,
dorzechowski, and vondele.
This new evaluation needed various changes to fishtest and the corresponding infrastructure,
for which tomtor, ppigazzini, noobpwnftw, daylen, and vondele are gratefully acknowledged.
The first networks have been provided by gekkehenker and sergiovieri, with the latter
net (nn-97f742aaefcd.nnue) being the current default.
The evaluation function can be selected at run time with the `Use NNUE` (true/false) UCI option,
provided the `EvalFile` option points the the network file (depending on the GUI, with full path).
The performance of the NNUE evaluation relative to the classical evaluation depends somewhat on
the hardware, and is expected to improve quickly, but is currently on > 80 Elo on fishtest:
60000 @ 10+0.1 th 1
https://tests.stockfishchess.org/tests/view/5f28fe6ea5abc164f05e4c4c
ELO: 92.77 +-2.1 (95%) LOS: 100.0%
Total: 60000 W: 24193 L: 8543 D: 27264
Ptnml(0-2): 609, 3850, 9708, 10948, 4885
40000 @ 20+0.2 th 8
https://tests.stockfishchess.org/tests/view/5f290229a5abc164f05e4c58
ELO: 89.47 +-2.0 (95%) LOS: 100.0%
Total: 40000 W: 12756 L: 2677 D: 24567
Ptnml(0-2): 74, 1583, 8550, 7776, 2017
At the same time, the impact on the classical evaluation remains minimal, causing no significant
regression:
sprt @ 10+0.1 th 1
https://tests.stockfishchess.org/tests/view/5f2906a2a5abc164f05e4c5b
LLR: 2.94 (-2.94,2.94) {-6.00,-4.00}
Total: 34936 W: 6502 L: 6825 D: 21609
Ptnml(0-2): 571, 4082, 8434, 3861, 520
sprt @ 60+0.6 th 1
https://tests.stockfishchess.org/tests/view/5f2906cfa5abc164f05e4c5d
LLR: 2.93 (-2.94,2.94) {-6.00,-4.00}
Total: 10088 W: 1232 L: 1265 D: 7591
Ptnml(0-2): 49, 914, 3170, 843, 68
The needed networks can be found at https://tests.stockfishchess.org/nns
It is recommended to use the default one as indicated by the `EvalFile` UCI option.
Guidelines for testing new nets can be found at
https://github.com/glinscott/fishtest/wiki/Creating-my-first-test#nnue-net-tests
Integration has been discussed in various issues:
https://github.com/official-stockfish/Stockfish/issues/2823
https://github.com/official-stockfish/Stockfish/issues/2728
The integration branch will be closed after the merge:
https://github.com/official-stockfish/Stockfish/pull/2825
https://github.com/official-stockfish/Stockfish/tree/nnue-player-wip
closes https://github.com/official-stockfish/Stockfish/pull/2912
This will be an exciting time for computer chess, looking forward to seeing the evolution of
this approach.
Bench: 4746616
2020-08-05 09:11:15 -06:00
|
|
|
Copyright (C) 2004-2020 The Stockfish developers (see AUTHORS file)
|
2008-10-25 08:57:19 -06:00
|
|
|
|
2008-10-19 10:56:28 -06:00
|
|
|
Stockfish is free software: you can redistribute it and/or modify
|
2008-08-31 23:59:13 -06:00
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
2008-10-25 08:57:19 -06:00
|
|
|
|
2008-10-19 10:56:28 -06:00
|
|
|
Stockfish is distributed in the hope that it will be useful,
|
2008-08-31 23:59:13 -06:00
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
2008-10-25 08:57:19 -06:00
|
|
|
|
2008-08-31 23:59:13 -06:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2013-07-23 07:31:57 -06:00
|
|
|
#ifndef MOVEPICK_H_INCLUDED
|
2008-08-31 23:59:13 -06:00
|
|
|
#define MOVEPICK_H_INCLUDED
|
|
|
|
|
2017-05-26 00:42:50 -06:00
|
|
|
#include <array>
|
2017-11-03 05:37:11 -06:00
|
|
|
#include <limits>
|
2018-03-03 03:29:29 -07:00
|
|
|
#include <type_traits>
|
2013-02-02 09:13:33 -07:00
|
|
|
|
2013-02-03 01:52:39 -07:00
|
|
|
#include "movegen.h"
|
2008-08-31 23:59:13 -06:00
|
|
|
#include "position.h"
|
2011-02-23 13:27:22 -07:00
|
|
|
#include "types.h"
|
2008-08-31 23:59:13 -06:00
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
/// StatsEntry stores the stat table value. It is usually a number but could
|
|
|
|
/// be a move or even a nested history. We use a class instead of naked value
|
|
|
|
/// to directly call history update operator<<() on the entry so to use stats
|
|
|
|
/// tables at caller sites as simple multi-dim arrays.
|
2018-04-23 00:45:50 -06:00
|
|
|
template<typename T, int D>
|
2018-03-03 03:29:29 -07:00
|
|
|
class StatsEntry {
|
2012-01-21 15:32:48 -07:00
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
T entry;
|
2017-11-03 05:37:11 -06:00
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
public:
|
|
|
|
void operator=(const T& v) { entry = v; }
|
2018-07-28 07:33:39 -06:00
|
|
|
T* operator&() { return &entry; }
|
|
|
|
T* operator->() { return &entry; }
|
|
|
|
operator const T&() const { return entry; }
|
2017-11-03 05:37:11 -06:00
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
void operator<<(int bonus) {
|
2018-07-28 07:33:39 -06:00
|
|
|
assert(abs(bonus) <= D); // Ensure range is [-D, D]
|
2018-04-28 22:48:18 -06:00
|
|
|
static_assert(D <= std::numeric_limits<T>::max(), "D overflows T");
|
2017-11-03 05:37:11 -06:00
|
|
|
|
2018-04-23 00:45:50 -06:00
|
|
|
entry += bonus - entry * abs(bonus) / D;
|
2017-11-03 05:37:11 -06:00
|
|
|
|
2018-04-23 00:45:50 -06:00
|
|
|
assert(abs(entry) <= D);
|
2017-11-03 05:37:11 -06:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
/// Stats is a generic N-dimensional array used to store various statistics.
|
2018-04-23 00:45:50 -06:00
|
|
|
/// The first template parameter T is the base type of the array, the second
|
|
|
|
/// template parameter D limits the range of updates in [-D, D] when we update
|
|
|
|
/// values with the << operator, while the last parameters (Size and Sizes)
|
|
|
|
/// encode the dimensions of the array.
|
|
|
|
template <typename T, int D, int Size, int... Sizes>
|
|
|
|
struct Stats : public std::array<Stats<T, D, Sizes...>, Size>
|
2018-03-03 03:29:29 -07:00
|
|
|
{
|
2018-07-28 07:33:39 -06:00
|
|
|
typedef Stats<T, D, Size, Sizes...> stats;
|
2017-11-03 05:37:11 -06:00
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
void fill(const T& v) {
|
2018-07-28 07:33:39 -06:00
|
|
|
|
|
|
|
// For standard-layout 'this' points to first struct member
|
|
|
|
assert(std::is_standard_layout<stats>::value);
|
|
|
|
|
|
|
|
typedef StatsEntry<T, D> entry;
|
|
|
|
entry* p = reinterpret_cast<entry*>(this);
|
|
|
|
std::fill(p, p + sizeof(*this) / sizeof(entry), v);
|
2017-05-26 00:42:50 -06:00
|
|
|
}
|
2017-01-10 00:47:56 -07:00
|
|
|
};
|
|
|
|
|
2018-04-23 00:45:50 -06:00
|
|
|
template <typename T, int D, int Size>
|
2018-07-28 07:33:39 -06:00
|
|
|
struct Stats<T, D, Size> : public std::array<StatsEntry<T, D>, Size> {};
|
2013-02-02 08:04:41 -07:00
|
|
|
|
2018-04-23 00:45:50 -06:00
|
|
|
/// In stats table, D=0 means that the template parameter is not used
|
|
|
|
enum StatsParams { NOT_USED = 0 };
|
2019-10-05 08:42:36 -06:00
|
|
|
enum StatsType { NoCaptures, Captures };
|
2017-11-03 05:37:11 -06:00
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
/// ButterflyHistory records how often quiet moves have been successful or
|
|
|
|
/// unsuccessful during the current search, and is used for reduction and move
|
|
|
|
/// ordering decisions. It uses 2 tables (one for each color) indexed by
|
2019-01-01 06:10:26 -07:00
|
|
|
/// the move's from and to squares, see www.chessprogramming.org/Butterfly_Boards
|
2018-07-25 10:01:47 -06:00
|
|
|
typedef Stats<int16_t, 10692, COLOR_NB, int(SQUARE_NB) * int(SQUARE_NB)> ButterflyHistory;
|
2017-11-03 05:37:11 -06:00
|
|
|
|
2020-07-11 08:59:33 -06:00
|
|
|
/// At higher depths LowPlyHistory records successful quiet moves near the root
|
|
|
|
/// and quiet moves which are/were in the PV (ttPv). It is cleared with each new
|
|
|
|
/// search and filled during iterative deepening.
|
Improve move order near the root
Current move histories are known to work well near the leaves, whilst at
higher depths they aren't very helpful. To address this problem this
patch introduces a table dedicated for what's happening at plies 0-3.
It's structured like mainHistory with ply index instead of color.
It get cleared with each new search and is filled during iterative
deepening at higher depths when recording successful quiet moves near
the root or traversing nodes which were in the principal variation
(ttPv).
Medium TC (20+0.2):
https://tests.stockfishchess.org/tests/view/5e4d358790a0a02810d096dc
LLR: 2.94 (-2.94,2.94) {-0.50,1.50}
Total: 100910 W: 16682 L: 16376 D: 67852
Ptnml(0-2): 1177, 10983, 25883, 11181, 1231
LTC:
https://tests.stockfishchess.org/tests/view/5e4e2cb790a0a02810d09714
LLR: 2.95 (-2.94,2.94) {0.25,1.75}
Total: 80444 W: 10495 L: 10095 D: 59854
Ptnml(0-2): 551, 7479, 23803, 7797, 592
closes https://github.com/official-stockfish/Stockfish/pull/2557
Bench: 4705960
2020-02-21 06:01:59 -07:00
|
|
|
constexpr int MAX_LPH = 4;
|
|
|
|
typedef Stats<int16_t, 10692, MAX_LPH, int(SQUARE_NB) * int(SQUARE_NB)> LowPlyHistory;
|
|
|
|
|
2017-06-30 09:20:00 -06:00
|
|
|
/// CounterMoveHistory stores counter moves indexed by [piece][to] of the previous
|
Introduce movecount pruning for qsearch()
If in quiescence search, we assume that me can prune late moves when:
a) the move ordering count of the move is : moveCount > abs(depth) + 2
b) we are not in check
c) the late move does not give check
d) the late move is not an advanced pawn push
Modification of an original idea by @VoyagerOne.
STC
https://tests.stockfishchess.org/tests/view/5f40581787a5c3c63d8f535f
LLR: 2.96 (-2.94,2.94) {-0.25,1.25}
Total: 132848 W: 14999 L: 14661 D: 103188
Ptnml(0-2): 684, 11242, 42309, 11430, 759
LTC
https://tests.stockfishchess.org/tests/view/5f4226da87a5c3c63d8f5412
LLR: 2.98 (-2.94,2.94) {0.25,1.25}
Total: 12008 W: 678 L: 551 D: 10779
Ptnml(0-2): 8, 485, 4899, 596, 16
closes https://github.com/official-stockfish/Stockfish/pull/3053
Bench: 3749974
2020-08-23 05:22:32 -06:00
|
|
|
/// move, see www.chessprogramming.org/Countermove_Heuristic
|
2018-04-23 00:45:50 -06:00
|
|
|
typedef Stats<Move, NOT_USED, PIECE_NB, SQUARE_NB> CounterMoveHistory;
|
2018-03-03 03:29:29 -07:00
|
|
|
|
|
|
|
/// CapturePieceToHistory is addressed by a move's [piece][to][captured piece type]
|
2018-07-25 10:01:47 -06:00
|
|
|
typedef Stats<int16_t, 10692, PIECE_NB, SQUARE_NB, PIECE_TYPE_NB> CapturePieceToHistory;
|
2018-03-03 03:29:29 -07:00
|
|
|
|
|
|
|
/// PieceToHistory is like ButterflyHistory but is addressed by a move's [piece][to]
|
2018-04-23 00:45:50 -06:00
|
|
|
typedef Stats<int16_t, 29952, PIECE_NB, SQUARE_NB> PieceToHistory;
|
2017-05-26 00:42:50 -06:00
|
|
|
|
2018-03-03 03:29:29 -07:00
|
|
|
/// ContinuationHistory is the combined history of a given pair of moves, usually
|
|
|
|
/// the current one given a previous one. The nested history table is based on
|
|
|
|
/// PieceToHistory instead of ButterflyBoards.
|
2018-04-23 00:45:50 -06:00
|
|
|
typedef Stats<PieceToHistory, NOT_USED, PIECE_NB, SQUARE_NB> ContinuationHistory;
|
2013-05-12 14:21:46 -06:00
|
|
|
|
2016-09-17 00:19:06 -06:00
|
|
|
|
2012-01-21 15:32:48 -07:00
|
|
|
/// MovePicker class is used to pick one pseudo legal move at a time from the
|
|
|
|
/// current position. The most important method is next_move(), which returns a
|
|
|
|
/// new pseudo legal move each time it is called, until there are no moves left,
|
|
|
|
/// when MOVE_NONE is returned. In order to improve the efficiency of the alpha
|
|
|
|
/// beta algorithm, MovePicker attempts to return the moves which are most likely
|
|
|
|
/// to get a cut-off first.
|
2018-03-27 08:44:47 -06:00
|
|
|
class MovePicker {
|
2008-08-31 23:59:13 -06:00
|
|
|
|
2018-03-27 08:44:47 -06:00
|
|
|
enum PickType { Next, Best };
|
2018-03-18 17:56:19 -06:00
|
|
|
|
2008-08-31 23:59:13 -06:00
|
|
|
public:
|
2015-01-21 05:18:19 -07:00
|
|
|
MovePicker(const MovePicker&) = delete;
|
|
|
|
MovePicker& operator=(const MovePicker&) = delete;
|
2017-11-03 05:37:11 -06:00
|
|
|
MovePicker(const Position&, Move, Value, const CapturePieceToHistory*);
|
Drop the lever condition for backwards
We can view the patch version as adding some "undermining bonus" for
level pawns, when the defending side can not easily avoid the exchange
by advancing her pawn.
• Case 1) White b2,c3, Black a3,b3:
Black is breaking through, b2 deserves a penalty
• Case 2) White b2,c3, Black a3,c4:
if b2xa3 then White ends up with a weak pawn on a3
and probably a weak pawn on c3 too.
In either case, White can still not safely play b2-b3 and make a
phalanx with c3, which is the essence of a backward pawn definition.
Passed STC in SPRT[0, 4]:
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 131169 W: 26523 L: 26199 D: 78447
http://tests.stockfishchess.org/tests/view/5aefa4d50ebc5902a409a151
ELO 1.19 [-0.38,2.88] (95%)
Passed LTC in SPRT[-3, 1]:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 24824 W: 3732 L: 3617 D: 17475
http://tests.stockfishchess.org/tests/view/5af04d3f0ebc5902a88b2e55
ELO 1.27 [-1.21,3.70] (95%)
Closes https://github.com/official-stockfish/Stockfish/pull/1584
How to continue from there?
There were some promising tests a couple of months ago about adding
a lever condition for king danger in evaluate.cpp, maybe it would
be time to re-try this after all the recent changes in pawns.cpp
Bench: 4773882
2018-05-08 03:00:51 -06:00
|
|
|
MovePicker(const Position&, Move, Depth, const ButterflyHistory*,
|
|
|
|
const CapturePieceToHistory*,
|
2018-07-19 10:26:05 -06:00
|
|
|
const PieceToHistory**,
|
Drop the lever condition for backwards
We can view the patch version as adding some "undermining bonus" for
level pawns, when the defending side can not easily avoid the exchange
by advancing her pawn.
• Case 1) White b2,c3, Black a3,b3:
Black is breaking through, b2 deserves a penalty
• Case 2) White b2,c3, Black a3,c4:
if b2xa3 then White ends up with a weak pawn on a3
and probably a weak pawn on c3 too.
In either case, White can still not safely play b2-b3 and make a
phalanx with c3, which is the essence of a backward pawn definition.
Passed STC in SPRT[0, 4]:
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 131169 W: 26523 L: 26199 D: 78447
http://tests.stockfishchess.org/tests/view/5aefa4d50ebc5902a409a151
ELO 1.19 [-0.38,2.88] (95%)
Passed LTC in SPRT[-3, 1]:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 24824 W: 3732 L: 3617 D: 17475
http://tests.stockfishchess.org/tests/view/5af04d3f0ebc5902a88b2e55
ELO 1.27 [-1.21,3.70] (95%)
Closes https://github.com/official-stockfish/Stockfish/pull/1584
How to continue from there?
There were some promising tests a couple of months ago about adding
a lever condition for king danger in evaluate.cpp, maybe it would
be time to re-try this after all the recent changes in pawns.cpp
Bench: 4773882
2018-05-08 03:00:51 -06:00
|
|
|
Square);
|
|
|
|
MovePicker(const Position&, Move, Depth, const ButterflyHistory*,
|
Improve move order near the root
Current move histories are known to work well near the leaves, whilst at
higher depths they aren't very helpful. To address this problem this
patch introduces a table dedicated for what's happening at plies 0-3.
It's structured like mainHistory with ply index instead of color.
It get cleared with each new search and is filled during iterative
deepening at higher depths when recording successful quiet moves near
the root or traversing nodes which were in the principal variation
(ttPv).
Medium TC (20+0.2):
https://tests.stockfishchess.org/tests/view/5e4d358790a0a02810d096dc
LLR: 2.94 (-2.94,2.94) {-0.50,1.50}
Total: 100910 W: 16682 L: 16376 D: 67852
Ptnml(0-2): 1177, 10983, 25883, 11181, 1231
LTC:
https://tests.stockfishchess.org/tests/view/5e4e2cb790a0a02810d09714
LLR: 2.95 (-2.94,2.94) {0.25,1.75}
Total: 80444 W: 10495 L: 10095 D: 59854
Ptnml(0-2): 551, 7479, 23803, 7797, 592
closes https://github.com/official-stockfish/Stockfish/pull/2557
Bench: 4705960
2020-02-21 06:01:59 -07:00
|
|
|
const LowPlyHistory*,
|
Drop the lever condition for backwards
We can view the patch version as adding some "undermining bonus" for
level pawns, when the defending side can not easily avoid the exchange
by advancing her pawn.
• Case 1) White b2,c3, Black a3,b3:
Black is breaking through, b2 deserves a penalty
• Case 2) White b2,c3, Black a3,c4:
if b2xa3 then White ends up with a weak pawn on a3
and probably a weak pawn on c3 too.
In either case, White can still not safely play b2-b3 and make a
phalanx with c3, which is the essence of a backward pawn definition.
Passed STC in SPRT[0, 4]:
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 131169 W: 26523 L: 26199 D: 78447
http://tests.stockfishchess.org/tests/view/5aefa4d50ebc5902a409a151
ELO 1.19 [-0.38,2.88] (95%)
Passed LTC in SPRT[-3, 1]:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 24824 W: 3732 L: 3617 D: 17475
http://tests.stockfishchess.org/tests/view/5af04d3f0ebc5902a88b2e55
ELO 1.27 [-1.21,3.70] (95%)
Closes https://github.com/official-stockfish/Stockfish/pull/1584
How to continue from there?
There were some promising tests a couple of months ago about adding
a lever condition for king danger in evaluate.cpp, maybe it would
be time to re-try this after all the recent changes in pawns.cpp
Bench: 4773882
2018-05-08 03:00:51 -06:00
|
|
|
const CapturePieceToHistory*,
|
|
|
|
const PieceToHistory**,
|
|
|
|
Move,
|
2020-06-21 07:21:46 -06:00
|
|
|
const Move*,
|
Improve move order near the root
Current move histories are known to work well near the leaves, whilst at
higher depths they aren't very helpful. To address this problem this
patch introduces a table dedicated for what's happening at plies 0-3.
It's structured like mainHistory with ply index instead of color.
It get cleared with each new search and is filled during iterative
deepening at higher depths when recording successful quiet moves near
the root or traversing nodes which were in the principal variation
(ttPv).
Medium TC (20+0.2):
https://tests.stockfishchess.org/tests/view/5e4d358790a0a02810d096dc
LLR: 2.94 (-2.94,2.94) {-0.50,1.50}
Total: 100910 W: 16682 L: 16376 D: 67852
Ptnml(0-2): 1177, 10983, 25883, 11181, 1231
LTC:
https://tests.stockfishchess.org/tests/view/5e4e2cb790a0a02810d09714
LLR: 2.95 (-2.94,2.94) {0.25,1.75}
Total: 80444 W: 10495 L: 10095 D: 59854
Ptnml(0-2): 551, 7479, 23803, 7797, 592
closes https://github.com/official-stockfish/Stockfish/pull/2557
Bench: 4705960
2020-02-21 06:01:59 -07:00
|
|
|
int);
|
2017-03-18 16:41:55 -06:00
|
|
|
Move next_move(bool skipQuiets = false);
|
2008-08-31 23:59:13 -06:00
|
|
|
|
|
|
|
private:
|
2018-03-27 08:44:47 -06:00
|
|
|
template<PickType T, typename Pred> Move select(Pred);
|
2013-02-03 01:52:39 -07:00
|
|
|
template<GenType> void score();
|
2016-09-10 13:37:36 -06:00
|
|
|
ExtMove* begin() { return cur; }
|
2015-01-31 11:53:19 -07:00
|
|
|
ExtMove* end() { return endMoves; }
|
2008-10-25 08:57:19 -06:00
|
|
|
|
|
|
|
const Position& pos;
|
2017-06-30 09:20:00 -06:00
|
|
|
const ButterflyHistory* mainHistory;
|
Improve move order near the root
Current move histories are known to work well near the leaves, whilst at
higher depths they aren't very helpful. To address this problem this
patch introduces a table dedicated for what's happening at plies 0-3.
It's structured like mainHistory with ply index instead of color.
It get cleared with each new search and is filled during iterative
deepening at higher depths when recording successful quiet moves near
the root or traversing nodes which were in the principal variation
(ttPv).
Medium TC (20+0.2):
https://tests.stockfishchess.org/tests/view/5e4d358790a0a02810d096dc
LLR: 2.94 (-2.94,2.94) {-0.50,1.50}
Total: 100910 W: 16682 L: 16376 D: 67852
Ptnml(0-2): 1177, 10983, 25883, 11181, 1231
LTC:
https://tests.stockfishchess.org/tests/view/5e4e2cb790a0a02810d09714
LLR: 2.95 (-2.94,2.94) {0.25,1.75}
Total: 80444 W: 10495 L: 10095 D: 59854
Ptnml(0-2): 551, 7479, 23803, 7797, 592
closes https://github.com/official-stockfish/Stockfish/pull/2557
Bench: 4705960
2020-02-21 06:01:59 -07:00
|
|
|
const LowPlyHistory* lowPlyHistory;
|
2017-11-03 05:37:11 -06:00
|
|
|
const CapturePieceToHistory* captureHistory;
|
2018-07-19 10:26:05 -06:00
|
|
|
const PieceToHistory** continuationHistory;
|
2018-03-20 18:48:31 -06:00
|
|
|
Move ttMove;
|
|
|
|
ExtMove refutations[3], *cur, *endMoves, *endBadCaptures;
|
2017-06-30 09:20:00 -06:00
|
|
|
int stage;
|
2011-06-12 00:25:51 -06:00
|
|
|
Square recaptureSquare;
|
2015-07-19 03:25:14 -06:00
|
|
|
Value threshold;
|
2017-06-30 09:20:00 -06:00
|
|
|
Depth depth;
|
Improve move order near the root
Current move histories are known to work well near the leaves, whilst at
higher depths they aren't very helpful. To address this problem this
patch introduces a table dedicated for what's happening at plies 0-3.
It's structured like mainHistory with ply index instead of color.
It get cleared with each new search and is filled during iterative
deepening at higher depths when recording successful quiet moves near
the root or traversing nodes which were in the principal variation
(ttPv).
Medium TC (20+0.2):
https://tests.stockfishchess.org/tests/view/5e4d358790a0a02810d096dc
LLR: 2.94 (-2.94,2.94) {-0.50,1.50}
Total: 100910 W: 16682 L: 16376 D: 67852
Ptnml(0-2): 1177, 10983, 25883, 11181, 1231
LTC:
https://tests.stockfishchess.org/tests/view/5e4e2cb790a0a02810d09714
LLR: 2.95 (-2.94,2.94) {0.25,1.75}
Total: 80444 W: 10495 L: 10095 D: 59854
Ptnml(0-2): 551, 7479, 23803, 7797, 592
closes https://github.com/official-stockfish/Stockfish/pull/2557
Bench: 4705960
2020-02-21 06:01:59 -07:00
|
|
|
int ply;
|
2016-09-10 13:37:36 -06:00
|
|
|
ExtMove moves[MAX_MOVES];
|
2008-08-31 23:59:13 -06:00
|
|
|
};
|
|
|
|
|
2013-07-23 07:31:57 -06:00
|
|
|
#endif // #ifndef MOVEPICK_H_INCLUDED
|