Page 1 of 3

Is there a program to build opening books based on engines?

Posted: Fri Feb 23, 2018 10:17 pm
The idea is simply to take a specific engine and use the analysis of it to build an opening book for white and for black when the program that build the books has a limited time to build the book and get as input the time control that the book should be designed for(no database of human games and the idea is only use the engine's own analysis to build the book).

For example you can decide about time control of 1+1(1 minute per game plus 1 seconds per move) and time of 48 hours of computer time to build the book.

After building the book it is possible to test the engine with the book or without the book against different engines at the relevant time control to see how much elo the book gives when the interesting question is what is the best algorithm to build the book.

You can decide using more time for every move that you add to book but the disadvantage is going to be a smaller book and you can decide to use less time for every move that you add to book when the main advantage is going to be saving time on the clock and not better quality of moves in the book.

Re: Is there a program to build opening books based on engin

Posted: Fri Feb 23, 2018 10:42 pm
I don't know if such a program exists, but... how would you avoid repetitive lines? Example, if you use Stockfish you'll get lots of Queen's Indians, some French and few Spanish.

Re: Is there a program to build opening books based on engin

Posted: Sat Feb 24, 2018 2:39 am
Another idea which I think were already done by others would be to take engine1 play against engine2 where engine1 will not use a book and engine2 will use a wide and bigger book playing the book moves randomly, save the game and separate the games played by engine1 as white and black, the games can then be used to build a book like polyglot book using the moves played by engine1 as white and black.

Re: Is there a program to build opening books based on engin

Posted: Sat Feb 24, 2018 4:07 am
Rodolfo Leoni wrote:I don't know if such a program exists, but... how would you avoid repetitive lines?
Probably with multi-pv. This hypothetical program would need to use multi-pv and then carve out only those moves within a delta of the best move. This is an idea I'm interested in pursuing as well for chess variants where no opening books exist. Problem is that engines aren't very good at playing openings. The Sicilian Defense is a great response to 1. e4 - possibly the best - but most engine won't find it (I think.)

Re: Is there a program to build opening books based on engin

Posted: Sat Feb 24, 2018 4:20 am
Another idea is to use bookup program in a clever way.

Create an ebook as white repertoire, say use SF9 to handle all white to move positions and make on the board the suggested move of SF9. Then as a response for black you may enter any moves you like, then make on the board the move considered by SF9 as best for white, and so on. You can then analyze all the leaf nodes, then backsolved it, to get an overview on the scores from the root positions.

You can export all the games as pgn or as epd from this repertoire, but without the score.

Re: Is there a program to build opening books based on engin

Posted: Sat Feb 24, 2018 6:05 am
Take a look the below paper. IMO it has some limitations and there are some questions for that paper but it may be a good starting point:

Re: Is there a program to build opening books based on engin

Posted: Sat Feb 24, 2018 10:55 am
Probably with multi-pv. This hypothetical program would need to use multi-pv and then carve out only those moves within a delta of the best move. This is an idea I'm interested in pursuing as well for chess variants where no opening books exist. Problem is that engines aren't very good at playing openings. The Sicilian Defense is a great response to 1. e4 - possibly the best - but most engine won't find it (I think.)
What you describe is pretty much what I implemented here for Stockfish (for official, multi-variant, Seirawan, Makruk, and Shatranj Stockfish): https://github.com/ianfab/bookgen

I also wrote this due of a lack of opening books for chess variants, since we needed variant opening books for testing multi-variant Stockfish, but it of course also works for standard chess. So far it only generates EPD opening books, so they can basically only be used as starting positions for testing, but not to equip an engine with a book. I would like to extend it to be able to generate PGNs, which should make it easier to convert them to other opening book formats, but that would require a variant-agnostic SAN converter. Reporting coordinate notation would be easier to add, but I do not know whether that is as useful as PGN output.

Re: Is there a program to build opening books based on engin

Posted: Sat Feb 24, 2018 6:13 pm
It is possible to build a book based on fixed depth analysis(or fixed time analysis) or other ideas that may be better.

Maybe get an estimate for probability for every line based on the evaluations and continue next with the best probability is better than what I did in this example but calculating probability for every move manually if we assume that the probability is proportional to some function of the evaluation function is something that I cannot demonstrate easily and is suitable more for computers and I made manually the example to demonstrate what I mean.

I give an example by fixed depth that is not the best.

Here is one idea that is not the best to build a book for 1+1 time control game but is probably better than the empty book because black put moves in the book for black at bigger depths than the depth that it practically reach at 1+1 and stockfish does not get depth 30 in the opening in 1+1 time control.

The variables here are
1)20(depth analysis for white that is important only to choose the positions to add moves for black so quality of moves is relatively less important)
2)30(depth analysis for black and moves that I add for book of black are analyzed at depth 30
3)0.1 number that encourage the program to prefer short lines in the book relative to long lines(I prefer to analyze more options and not to go forward in the analysis as long as there are alternatives that are less than 0.1 pawn weaker than the best move).

To build a book for black
I start by analyzing the opening position at depth 20
I get the following analysis:

[D]rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1

Stockfish_18022413_x64_modern:

20/31 00:40 111,989k 2,762k -0.69 1.f3 e5 2.e3 d5 3.d4 exd4 4.exd4 Bd6 5.Nc3 c6 6.g3 Ne7 7.Bg2 h5 8.f4 Bg4 9.Nge2 h4 10.h3 Bxe2 11.Qxe2 hxg3 12.Bd2
20/31 00:40 111,989k 2,762k -0.61 1.g4 d5 2.Bg2 Bxg4 3.c4 Nf6 4.h3 Bd7 5.cxd5 c6 6.dxc6 Bxc6 7.Nf3 e6 8.Nc3 Nbd7 9.d3 Bb4 10.0-0 0-0 11.Bd2 Kh8 12.Kh1
20/31 00:40 111,989k 2,762k -0.44 1.Nh3 e5 2.c3 d5 3.d4 Nc6 4.dxe5 Nxe5 5.Bf4 Ng6 6.Bg3 c6 7.e3 Nf6 8.Bd3 Bd6 9.Ng5 Ne5 10.Bxe5 Bxe5 11.Nd2 h6 12.Ngf3 Bd6
20/24 00:40 111,989k 2,762k -0.36 1.b4 d5 2.Nf3 Nf6 3.e3 Bf5 4.c4 e6 5.Bb2 Be7 6.Nh4 Bxb1 7.Rxb1 0-0 8.Nf3 Ne4 9.b5 Nd7 10.cxd5 exd5
20/33 00:40 111,989k 2,762k -0.29 1.h4 e5 2.c4 Nc6 3.Nc3 Nf6 4.Nf3 d5 5.cxd5 Nxd5 6.e3 Be7 7.Bb5 Nxc3 8.bxc3 Qd6 9.Bxc6+ Qxc6 10.0-0 Bd6 11.Bb2 Bg4 12.d4
20/26 00:40 111,989k 2,762k -0.21 1.Na3 e5 2.e3 c6 3.d4 e4 4.c4 d5 5.Ne2 Nf6 6.Nc3 a6 7.Nc2 Bg4 8.Be2 Bxe2 9.Qxe2 Nbd7 10.cxd5 cxd5 11.0-0 Bd6
20/32 00:40 111,989k 2,762k -0.14 1.f4 d5 2.e3 Nf6 3.Nf3 Bf5 4.b3 e6 5.Be2 Be7 6.Bb2 h6 7.0-0 0-0 8.c4 Nbd7 9.Nc3 c5 10.Na4 Bh7 11.Ne5 Nxe5 12.fxe5 Nd7
20/20 00:40 111,989k 2,762k -0.01 1.a4 d5 2.d4 e6 3.Nf3 c5 4.e3 Nf6 5.Be2 Nc6 6.0-0 Be7 7.b3 cxd4 8.exd4 0-0 9.Bb2 Bd7 10.Nbd2 h6
20/18 00:40 111,989k 2,762k 0.00 1.g3 e5 2.Nf3 e4 3.Nh4 d5 4.d3 exd3 5.Qxd3 Nf6 6.Bg2 Nc6 7.0-0 Ne5 8.Qc3 Nc6 9.Qd3
20/22 00:40 111,989k 2,762k +0.03 1.a3 e5 2.e4 Nf6 3.Nc3 d5 4.exd5 Nxd5 5.Bc4 Be6 6.Bxd5 Bxd5 7.Nf3 Nc6 8.d3 Bxf3 9.Qxf3 Nd4 10.Qd1 Be7 11.0-0 0-0 12.Bd2
20/27 00:40 111,989k 2,762k +0.05 1.c3 e5 2.d4 e4 3.c4 c6 4.d5 Nf6 5.e3 Bd6 6.Ne2 Na6 7.Nbc3 Be5 8.Nd4 0-0 9.Bd2 cxd5 10.cxd5 d6 11.Bxa6 Bxd4 12.exd4 bxa6
20/22 00:40 111,989k 2,762k +0.07 1.h3 e5 2.e4 Nf6 3.Nc3 d5 4.exd5 Nxd5 5.Bc4 Be6 6.Bxd5 Bxd5 7.Nf3 Nc6 8.0-0 Bxf3 9.Qxf3 Be7 10.d3 Nd4 11.Qxb7 0-0
20/24 00:40 111,989k 2,762k +0.10 1.d3 Nf6 2.Nf3 d5 3.Bf4 e6 4.Nbd2 Bd6 5.Bg3 Bxg3 6.hxg3 Qd6 7.e4 Nc6 8.c3 0-0 9.Be2 e5 10.exd5 Qxd5 11.0-0 Be6
20/25 00:40 111,989k 2,762k +0.10 1.b3 e5 2.Bb2 Nc6 3.e3 Nf6 4.Bb5 Bd6 5.Ne2 0-0 6.0-0 a6 7.Bxc6 dxc6 8.d3 a5 9.Nd2 a4 10.h3 Re8 11.Nf3 e4 12.Nd2
20/29 00:40 111,989k 2,762k +0.23 1.Nc3 d5 2.d4 Nf6 3.Bf4 Bf5 4.e3 e6 5.Bd3 Bxd3 6.cxd3 Bd6 7.Nge2 Nc6 8.a3 0-0 9.0-0 a6 10.h3 h6 11.Bxd6 Qxd6
20/28 00:40 111,989k 2,762k +0.32 1.c4 e5 2.e3 Nf6 3.Nc3 Nc6 4.d4 Bb4 5.Nf3 exd4 6.exd4 d5 7.Bd3 dxc4 8.Bxc4 Qe7+ 9.Be3 Ng4 10.Qe2 Nxe3 11.fxe3 0-0 12.0-0 Re8 13.Rae1
20/25 00:40 111,989k 2,762k +0.36 1.Nf3 d5 2.d4 e6 3.c4 Nf6 4.Nc3 Be7 5.e3 0-0 6.a3 Nbd7 7.cxd5 exd5 8.Bd3 c5 9.0-0 c4 10.Bc2 Nb6 11.Bd2 Be6
20/24 00:40 111,989k 2,762k +0.37 1.e3 e6 2.d4 Nf6 3.c4 d5 4.Nc3 Be7 5.Nf3 0-0 6.Be2 dxc4 7.0-0 a6 8.Bxc4 b5 9.Bd3 Bb7 10.e4 c5 11.dxc5 Bxc5
20/28 00:40 111,989k 2,762k +0.39 1.d4 d5 2.Nf3 e6 3.c4 Nf6 4.Nc3 Be7 5.Bg5 Nc6 6.e3 h6 7.Bxf6 Bxf6 8.cxd5 exd5 9.Qb3 Ne7 10.e4 dxe4 11.Nxe4 Nc6
20/35 00:40 111,989k 2,762k +0.40 1.e4 e5 2.Nf3 Nc6 3.Bb5 Nf6 4.0-0 Nxe4 5.d4 a6 6.Bxc6 dxc6 7.Re1 Nf6 8.Nxe5 Be6 9.c4 Bd6 10.Bf4 0-0 11.Qd3 Nd7 12.Nc3 Re8 13.h3 Nxe5 14.Bxe5 h6 15.Bxd6 Qxd6 16.Rad1

It means I have the following scores relative to best move
1.e4 0
1.d4 -0.01
1.e3 -0.03
1.Nf3 -0.04
1.c4 -0.08
1.Nc3 -0.17
1.b3 -0.3
1.d3 -0.3
1.h3 -0.33
1.c3 -0.35
1.a3 -0.37
1.g3 -0.40
...

I analyze after the best move 1.e4 and
I get at depth 30 the move 1...e6 and I do not use multi-pv because I want the book for black to have one option for black at every node and many options for white to be ready for many options the opponents can play.

Now the score of 1.e4 e6 is -0.1 because I have the rule that I substract 0.1 for every move of black from the score so at this point I do not analyze what happens after 1.e4 e6 but analyze what happens after 1.d4 that has a better score of -0.01 and the order of analysis is
1)opening position score multi-pv all options 0
2)best move 1.e4 0(best move at depth 30 is 1...e6 so add it to the book)
3)1.d4 -0.01(best move at depth 30 is 1...Nf6 so add it to the book)
4)1.e3 -0.03(best move at depth 30 is 1...e6 so add it to the book)
5)1.Nf3 -0.04(best move at depth 30 is 1...e6 so add it to the book)
6)1.c4 -0.08(best move at depth 30 is 1...e5 so add it to the book)
7)1.e4 e6 -0.1(all options depth 20)
2.Nc3 was the best move for white at depth 20 and here is part of the analysis with multi-pv=30

20/27 01:04 176,711k 2,735k +0.37 2.Nf3 d5 3.exd5 exd5 4.d4 Nf6 5.Bd3 Bd6 6.Qe2+ Be7 7.0-0 0-0 8.Be3 Nc6 9.c3 Re8 10.Qc2 Bd6 11.Nbd2 Bd7 12.h3 h6 13.Rae1 a6 14.Kh1 Be6 15.Nb3
20/37 01:04 176,711k 2,735k +0.39 2.d4 d5 3.Nc3 Nf6 4.Bg5 Be7 5.e5 Ne4 6.Nxe4 dxe4 7.Be3 c5 8.dxc5 Qc7 9.Qd4 Bd7 10.0-0-0 0-0 11.Qxe4 Bc6 12.Qd4 Nd7 13.Nf3 Bxc5
20/31 01:04 176,711k 2,735k +0.47 2.Nc3 d5 3.d4 Nf6 4.Bg5 Be7 5.e5 Ne4 6.Nxe4 dxe4 7.Bxe7 Qxe7 8.c3 Nd7 9.Ne2 b6 10.Ng3 Bb7 11.Bb5 0-0 12.0-0 c5 13.Re1 Rfd8 14.Nxe4 Nxe5 15.Nxc5 bxc5 16.Rxe5 cxd4

It means
1.e4 e6 2.Nc3 get a score of -0.1
1.e4 e6 2.d4 get a score of -0.18
1.e4 e6 2.Nf3 get a score of -0.2 and other lines after 1.e4 e6 get a worse score

steps to continue are
8)analyze 1.e4 e6 2.Nc3 that has -0.1 score(0 for mistakes of white and -0.1 for number of moves black already played) and find a move for black because this line has the best score

9)analyze all options for white after 1.d4 Nf6 that has -0.11 score (-0.01 for mistakes of white and -0.1 for number of moves black already played)

10)1.d4 Nf6 2.c4 is the best move for white so analyze this line that has score of -0.11 to add a move for black for the book.

Re: Is there a program to build opening books based on engin

Posted: Sat Feb 24, 2018 8:32 pm
Fabian Fichter wrote:
Probably with multi-pv. This hypothetical program would need to use multi-pv and then carve out only those moves within a delta of the best move. This is an idea I'm interested in pursuing as well for chess variants where no opening books exist. Problem is that engines aren't very good at playing openings. The Sicilian Defense is a great response to 1. e4 - possibly the best - but most engine won't find it (I think.)
What you describe is pretty much what I implemented here for Stockfish (for official, multi-variant, Seirawan, Makruk, and Shatranj Stockfish): https://github.com/ianfab/bookgen

I also wrote this due of a lack of opening books for chess variants, since we needed variant opening books for testing multi-variant Stockfish, but it of course also works for standard chess. So far it only generates EPD opening books, so they can basically only be used as starting positions for testing, but not to equip an engine with a book. I would like to extend it to be able to generate PGNs, which should make it easier to convert them to other opening book formats, but that would require a variant-agnostic SAN converter. Reporting coordinate notation would be easier to add, but I do not know whether that is as useful as PGN output.