mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Add "Best Book Move" UCI option
Is a boolean option that when set allows Stockfish to select the best book move across the possible ones. Feature requested by Salvo Spitaleri. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
13431922a3
commit
94bb1964f6
4 changed files with 18 additions and 5 deletions
18
src/book.cpp
18
src/book.cpp
|
@ -399,14 +399,15 @@ const string Book::file_name() { // Not const to compile on HP-UX 11.X
|
||||||
/// Book::get_move() gets a book move for a given position. Returns
|
/// Book::get_move() gets a book move for a given position. Returns
|
||||||
/// MOVE_NONE if no book move is found.
|
/// MOVE_NONE if no book move is found.
|
||||||
|
|
||||||
Move Book::get_move(const Position& pos) {
|
Move Book::get_move(const Position& pos, bool findBestMove) {
|
||||||
|
|
||||||
if (!is_open() || bookSize == 0)
|
if (!is_open() || bookSize == 0)
|
||||||
return MOVE_NONE;
|
return MOVE_NONE;
|
||||||
|
|
||||||
int bookMove = 0, scoresSum = 0;
|
|
||||||
uint64_t key = book_key(pos);
|
|
||||||
BookEntry entry;
|
BookEntry entry;
|
||||||
|
int bookMove = MOVE_NONE;
|
||||||
|
int scoresSum = 0, bestScore = 0;
|
||||||
|
uint64_t key = book_key(pos);
|
||||||
|
|
||||||
// Choose a book move among the possible moves for the given position
|
// Choose a book move among the possible moves for the given position
|
||||||
for (int idx = find_key(key); idx < bookSize; idx++)
|
for (int idx = find_key(key); idx < bookSize; idx++)
|
||||||
|
@ -419,6 +420,17 @@ Move Book::get_move(const Position& pos) {
|
||||||
|
|
||||||
assert(score > 0);
|
assert(score > 0);
|
||||||
|
|
||||||
|
// If findBestMove is true choose highest rated book move
|
||||||
|
if (findBestMove)
|
||||||
|
{
|
||||||
|
if (score > bestScore)
|
||||||
|
{
|
||||||
|
bestScore = score;
|
||||||
|
bookMove = entry.move;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Choose book move according to its score. If a move has a very
|
// Choose book move according to its score. If a move has a very
|
||||||
// high score it has more probability to be choosen then a one with
|
// high score it has more probability to be choosen then a one with
|
||||||
// lower score. Note that first entry is always chosen.
|
// lower score. Note that first entry is always chosen.
|
||||||
|
|
|
@ -61,7 +61,7 @@ public:
|
||||||
void open(const std::string& fName);
|
void open(const std::string& fName);
|
||||||
void close();
|
void close();
|
||||||
const std::string file_name();
|
const std::string file_name();
|
||||||
Move get_move(const Position& pos);
|
Move get_move(const Position& pos, bool findBestMove);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Book& operator>>(uint64_t& n) { n = read_integer(8); return *this; }
|
Book& operator>>(uint64_t& n) { n = read_integer(8); return *this; }
|
||||||
|
|
|
@ -387,7 +387,7 @@ bool think(const Position& pos, bool infinite, bool ponder, int side_to_move,
|
||||||
if (get_option_value_string("Book File") != OpeningBook.file_name())
|
if (get_option_value_string("Book File") != OpeningBook.file_name())
|
||||||
OpeningBook.open(get_option_value_string("Book File"));
|
OpeningBook.open(get_option_value_string("Book File"));
|
||||||
|
|
||||||
Move bookMove = OpeningBook.get_move(pos);
|
Move bookMove = OpeningBook.get_move(pos, get_option_value_bool("Best Book Move"));
|
||||||
if (bookMove != MOVE_NONE)
|
if (bookMove != MOVE_NONE)
|
||||||
{
|
{
|
||||||
if (PonderSearch)
|
if (PonderSearch)
|
||||||
|
|
|
@ -79,6 +79,7 @@ namespace {
|
||||||
o["Use Search Log"] = Option(false);
|
o["Use Search Log"] = Option(false);
|
||||||
o["Search Log Filename"] = Option("SearchLog.txt");
|
o["Search Log Filename"] = Option("SearchLog.txt");
|
||||||
o["Book File"] = Option("book.bin");
|
o["Book File"] = Option("book.bin");
|
||||||
|
o["Best Book Move"] = Option(false);
|
||||||
o["Mobility (Middle Game)"] = Option(100, 0, 200);
|
o["Mobility (Middle Game)"] = Option(100, 0, 200);
|
||||||
o["Mobility (Endgame)"] = Option(100, 0, 200);
|
o["Mobility (Endgame)"] = Option(100, 0, 200);
|
||||||
o["Pawn Structure (Middle Game)"] = Option(100, 0, 200);
|
o["Pawn Structure (Middle Game)"] = Option(100, 0, 200);
|
||||||
|
|
Loading…
Add table
Reference in a new issue