From 97f9def306c5e5650e95468640bd410317381fe2 Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Sun, 16 Feb 2025 10:42:30 +0100 Subject: [PATCH] generalized the position counter --- src/model/ais/ai.cpp | 12 +++++++++++- src/model/ais/ai.hpp | 13 +++++++------ src/model/ais/v1_pure_minimax.cpp | 7 +------ src/model/ais/v2_alpha_beta.cpp | 8 +------- src/model/ais/v3_AB_ordering.cpp | 8 +------- src/model/ais/v4_search_captures.cpp | 3 --- src/model/ais/v5_better_endgames.cpp | 4 ++-- src/model/ais/v6_iterative_deepening.cpp | 2 ++ 8 files changed, 25 insertions(+), 32 deletions(-) diff --git a/src/model/ais/ai.cpp b/src/model/ais/ai.cpp index 9aaee1d..41bb6b8 100644 --- a/src/model/ais/ai.cpp +++ b/src/model/ais/ai.cpp @@ -4,7 +4,10 @@ #include #include +static long int position_counter = 0; + Move ai::AI::search(const Board& b) { + position_counter = 0; Move result; std::condition_variable cv; @@ -47,6 +50,13 @@ Move ai::AI::search(const Board& b) { // Ensure timer thread is also stopped timer_thread.join(); - std::cout << "Took " << elapsed << " ms" << std::endl; + std::cout << "Took " << elapsed << " ms, " << "Looked at " + << position_counter << " positions" << std::endl; return result; } + +int ai::AI::eval(const Board& b) { + int ret = _eval(b); + position_counter++; + return ret; +} diff --git a/src/model/ais/ai.hpp b/src/model/ais/ai.hpp index 753668d..9aa72a8 100644 --- a/src/model/ais/ai.hpp +++ b/src/model/ais/ai.hpp @@ -20,8 +20,9 @@ namespace ai { std::atomic stop_computation = false; Move search(const Board& b); + int eval(const Board&); - virtual int eval(const Board&) = 0; + virtual int _eval(const Board&) = 0; }; struct v0_random : public AI { @@ -29,7 +30,7 @@ namespace ai { Move _search(const Board&) override; - int eval(const Board&) override { + int _eval(const Board&) override { return 0; }; }; @@ -41,7 +42,7 @@ namespace ai { v1_pure_minimax(bool w, std::chrono::milliseconds tt): AI(w, tt) {} Move _search(const Board&) override; - int eval(const Board&) override; + int _eval(const Board&) override; }; class v2_alpha_beta : public AI { @@ -52,7 +53,7 @@ namespace ai { v2_alpha_beta(bool w, std::chrono::milliseconds tt): AI(w, tt) {} virtual Move _search(const Board&) override; - virtual int eval(const Board&) override; + virtual int _eval(const Board&) override; }; class v3_AB_ordering : public AI { @@ -63,7 +64,7 @@ namespace ai { v3_AB_ordering(bool w, std::chrono::milliseconds tt): AI(w, tt) {} virtual Move _search(const Board&) override; - virtual int eval(const Board&) override; + virtual int _eval(const Board&) override; }; class v4_search_captures : public v3_AB_ordering { @@ -86,7 +87,7 @@ namespace ai { v5_better_endgame(bool w, std::chrono::milliseconds tt) : v4_search_captures(w, tt) {} - virtual int eval(const Board&) override; + virtual int _eval(const Board&) override; }; class v6_iterative_deepening : public v5_better_endgame { diff --git a/src/model/ais/v1_pure_minimax.cpp b/src/model/ais/v1_pure_minimax.cpp index 4a889b9..abab24a 100644 --- a/src/model/ais/v1_pure_minimax.cpp +++ b/src/model/ais/v1_pure_minimax.cpp @@ -7,10 +7,7 @@ #define MULTITHREADED 1 -static int position_counter = 0; - Move ai::v1_pure_minimax::_search(const Board& b) { - position_counter = 0; std::vector moves = b.all_legal_moves(); Move best_move; @@ -52,7 +49,6 @@ Move ai::v1_pure_minimax::_search(const Board& b) { } } #endif - std::cout << "Looked at " << position_counter << " positions" << std::endl; return best_move; } @@ -78,8 +74,7 @@ int ai::v1_pure_minimax::_search(const Board& b, int depth) { return best_evaluation; } -int ai::v1_pure_minimax::eval(const Board& b) { - position_counter++; +int ai::v1_pure_minimax::_eval(const Board& b) { int white_eval = count_material(b, Colour::White); int black_eval = count_material(b, Colour::Black); diff --git a/src/model/ais/v2_alpha_beta.cpp b/src/model/ais/v2_alpha_beta.cpp index 8706487..f57cef1 100644 --- a/src/model/ais/v2_alpha_beta.cpp +++ b/src/model/ais/v2_alpha_beta.cpp @@ -7,11 +7,7 @@ #define MULTITHREADED 1 - -static int position_counter = 0; - Move ai::v2_alpha_beta::_search(const Board& b) { - position_counter = 0; std::vector moves = b.all_legal_moves(); Move best_move; @@ -53,7 +49,6 @@ Move ai::v2_alpha_beta::_search(const Board& b) { } } #endif - std::cout << "Looked at " << position_counter << " positions" << std::endl; return best_move; } @@ -79,8 +74,7 @@ int ai::v2_alpha_beta::_search(const Board& b, int depth, int alpha, int beta) { return alpha; } -int ai::v2_alpha_beta::eval(const Board& b) { - position_counter++; +int ai::v2_alpha_beta::_eval(const Board& b) { int white_eval = count_material(b, Colour::White); int black_eval = count_material(b, Colour::Black); diff --git a/src/model/ais/v3_AB_ordering.cpp b/src/model/ais/v3_AB_ordering.cpp index 52f1ed7..d6f8f3b 100644 --- a/src/model/ais/v3_AB_ordering.cpp +++ b/src/model/ais/v3_AB_ordering.cpp @@ -8,11 +8,7 @@ #define MULTITHREADED 1 - -static int position_counter; - Move ai::v3_AB_ordering::_search(const Board& b) { - position_counter = 0; std::vector moves = b.all_legal_moves(); Move best_move; @@ -56,7 +52,6 @@ Move ai::v3_AB_ordering::_search(const Board& b) { } } #endif - std::cout << "Looked at " << position_counter << " positions" << std::endl; return best_move; } @@ -88,8 +83,7 @@ int ai::v3_AB_ordering::_ab_search( return alpha; } -int ai::v3_AB_ordering::eval(const Board& b) { - position_counter++; +int ai::v3_AB_ordering::_eval(const Board& b) { int white_eval = count_material(b, Colour::White); int black_eval = count_material(b, Colour::Black); diff --git a/src/model/ais/v4_search_captures.cpp b/src/model/ais/v4_search_captures.cpp index fb739e2..c5a60a7 100644 --- a/src/model/ais/v4_search_captures.cpp +++ b/src/model/ais/v4_search_captures.cpp @@ -6,9 +6,6 @@ #define MULTITHREADED 1 - -static int position_counter; - int ai::v4_search_captures::_ab_search( const Board& b, int depth, int alpha, int beta ) { diff --git a/src/model/ais/v5_better_endgames.cpp b/src/model/ais/v5_better_endgames.cpp index f8e0887..6a9d7d8 100644 --- a/src/model/ais/v5_better_endgames.cpp +++ b/src/model/ais/v5_better_endgames.cpp @@ -36,8 +36,8 @@ static float endgame_phase_weight(int material_count_no_pawns) { return 1.f - std::min(1.f, material_count_no_pawns * multiplier); } -int ai::v5_better_endgame::eval(const Board& b) { - int old_eval = v4_search_captures::eval(b); +int ai::v5_better_endgame::_eval(const Board& b) { + int old_eval = v4_search_captures::_eval(b); Colour attacking_colour = b.white_to_play ? White : Black; Colour defending_colour = b.white_to_play ? Black : White; return old_eval diff --git a/src/model/ais/v6_iterative_deepening.cpp b/src/model/ais/v6_iterative_deepening.cpp index 899224b..2f05500 100644 --- a/src/model/ais/v6_iterative_deepening.cpp +++ b/src/model/ais/v6_iterative_deepening.cpp @@ -5,6 +5,8 @@ #include +static int position_counter = 0; + Move ai::v6_iterative_deepening::_search(const Board& b) { ThreadPool pool(std::thread::hardware_concurrency()); std::vector moves = b.all_legal_moves();