mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-24 19:16:49 +08:00
Merge pull request #317 from fsmosca/3fold_rep_termination
Fix segfault and end the game by 3-fold repetitions
This commit is contained in:
@@ -110,6 +110,8 @@ namespace Learner
|
||||
save_every = std::max(save_every, REPORT_STATS_EVERY);
|
||||
|
||||
num_threads = Options["Threads"];
|
||||
|
||||
random_multi_pv_depth = std::max(search_depth_max, random_multi_pv_depth);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -489,8 +491,11 @@ namespace Learner
|
||||
// draw at the maximum number of steps to write.
|
||||
const int ply = move_hist_scores.size();
|
||||
|
||||
// has it reached the max length or is a draw
|
||||
if (ply >= params.write_maxply || pos.is_draw(ply))
|
||||
// has it reached the max length or is a draw by fifty-move rule
|
||||
// or by 3-fold repetition
|
||||
if (ply >= params.write_maxply
|
||||
|| pos.is_fifty_move_draw()
|
||||
|| pos.is_three_fold_repetition())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1180,6 +1180,22 @@ bool Position::is_draw(int ply) const {
|
||||
}
|
||||
|
||||
|
||||
/// Position::is_fifty_move_draw() returns true if a game can be claimed
|
||||
/// by a fifty-move draw rule.
|
||||
|
||||
bool Position::is_fifty_move_draw() const {
|
||||
|
||||
return (st->rule50 > 99 && (!checkers() || MoveList<LEGAL>(*this).size()));
|
||||
}
|
||||
|
||||
|
||||
/// Position::is_three_fold_repetition() returns true if there is 3-fold repetition.
|
||||
bool Position::is_three_fold_repetition() const {
|
||||
|
||||
return st->repetition < 0;
|
||||
}
|
||||
|
||||
|
||||
// Position::has_repeated() tests whether there has been at least one repetition
|
||||
// of positions since the last capture or pawn move.
|
||||
|
||||
|
||||
@@ -161,6 +161,8 @@ public:
|
||||
bool is_chess960() const;
|
||||
Thread* this_thread() const;
|
||||
bool is_draw(int ply) const;
|
||||
bool is_fifty_move_draw() const;
|
||||
bool is_three_fold_repetition() const;
|
||||
bool has_game_cycle(int ply) const;
|
||||
bool has_repeated() const;
|
||||
int rule50_count() const;
|
||||
|
||||
Reference in New Issue
Block a user