mirror of
https://github.com/opelly27/Stockfish.git
synced 2026-05-20 06:17:49 +00: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);
|
save_every = std::max(save_every, REPORT_STATS_EVERY);
|
||||||
|
|
||||||
num_threads = Options["Threads"];
|
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.
|
// draw at the maximum number of steps to write.
|
||||||
const int ply = move_hist_scores.size();
|
const int ply = move_hist_scores.size();
|
||||||
|
|
||||||
// has it reached the max length or is a draw
|
// has it reached the max length or is a draw by fifty-move rule
|
||||||
if (ply >= params.write_maxply || pos.is_draw(ply))
|
// or by 3-fold repetition
|
||||||
|
if (ply >= params.write_maxply
|
||||||
|
|| pos.is_fifty_move_draw()
|
||||||
|
|| pos.is_three_fold_repetition())
|
||||||
{
|
{
|
||||||
return 0;
|
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
|
// Position::has_repeated() tests whether there has been at least one repetition
|
||||||
// of positions since the last capture or pawn move.
|
// of positions since the last capture or pawn move.
|
||||||
|
|
||||||
|
|||||||
@@ -161,6 +161,8 @@ public:
|
|||||||
bool is_chess960() const;
|
bool is_chess960() const;
|
||||||
Thread* this_thread() const;
|
Thread* this_thread() const;
|
||||||
bool is_draw(int ply) 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_game_cycle(int ply) const;
|
||||||
bool has_repeated() const;
|
bool has_repeated() const;
|
||||||
int rule50_count() const;
|
int rule50_count() const;
|
||||||
|
|||||||
Reference in New Issue
Block a user