mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:17:44 +00:00
ChessEngine: Use reduced Board objects in MCTSTree
Monte-Carlo methods are known to intensively create nodes and in our case each leaf of the tree stores a board. However, for this use case, we don't need a full board object that also contains game information. This patch adds a `clone_cleared()` method that return a clone without game information and uses it when constructing the tree. It allows the ChessEngine much more possibility before getting out of memory.
This commit is contained in:
parent
5f13a87ce7
commit
351fc0cce2
3 changed files with 15 additions and 4 deletions
|
@ -39,10 +39,10 @@ MCTSTree& MCTSTree::expand()
|
|||
VERIFY(!expanded() || m_children.size() == 0);
|
||||
|
||||
if (!m_moves_generated) {
|
||||
m_board->generate_moves([&](Chess::Move move) {
|
||||
Chess::Board clone = *m_board;
|
||||
clone.apply_move(move);
|
||||
m_children.append(make<MCTSTree>(clone, this));
|
||||
m_board->generate_moves([&](Chess::Move chess_move) {
|
||||
auto clone = m_board->clone_without_history();
|
||||
clone.apply_move(chess_move);
|
||||
m_children.append(make<MCTSTree>(move(clone), this));
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
m_moves_generated = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue