X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=book.c;h=b7ea2788c727cde0f3e9c1d0324296e5058122a4;hb=learn;hp=49c0962b14bf0f194432dcf143a99b6db5b64838;hpb=ae338a820ef1c16d4399958613bbc0b908904b91;p=polyglot.git diff --git a/book.c b/book.c index 49c0962..b7ea278 100644 --- a/book.c +++ b/book.c @@ -174,11 +174,12 @@ int book_move(const board_t * board, bool random) { void book_moves(list_t * list, const board_t * board) { int first_pos; - int sum; + double sum; int pos; entry_t entry[1]; int move; int score; + uint32 weight[1000]; // [HGM] assumes not more than 1000 book moves per position! char move_string[256]; ASSERT(board!=NULL); @@ -201,7 +202,10 @@ void book_moves(list_t * list, const board_t * board) { read_entry(entry,pos); if (entry->key != board->key) break; - sum += entry->count; + weight[pos - first_pos] = 1000 * (uint32)entry->count; + if(option_get_bool(Option,"BookLearn")) // [HGM] improvised use of learn info + weight[pos - first_pos] *= ((uint32)entry->sum + 4.) / (2.*(uint32)entry->n - (uint32)entry->sum + 4.); + sum += weight[pos - first_pos]; } // disp @@ -212,7 +216,7 @@ void book_moves(list_t * list, const board_t * board) { if (entry->key != board->key) break; move = entry->move; - score = (((uint32)entry->count)*((uint32)10000))/sum; // 32 bit safe! + score = (10000.*weight[pos-first_pos])/sum; if (move != MoveNone && move_is_legal(move,board)) { list_add_ex(list,move,score);