Apr-30-11
 | | AylerKupp: The game between Stockfish 2.0.1/<kutztown46> and Rybka 4.1/<AylerKupp> ended in a draw after 49 moves. After a promising beginning (a Ruy Lopez arrived at by transposition where Rybka came up with a truly awful-looking move (7...Bd6) that I can't find in any opening databases) and the engines teasing us with the possibility of some fireworks, the game drifted into the type of position where the engines don't seem to know what to do and begin to repeat moves that don't seem to have any purpose. I've started to call this phenomenon "engine dithering" and it seems to happen not too infrequently in games between engines. Towards the end of the game <kutztown46> reported "a sea of [0.00]'s" and the last 11 evals by Rybka were identical, [+0.21]. <kutztown46> beat me to the punch by offering a draw just before I was about to do the same myself. Here's the quick game score, analysis to follow.
1.e4 Nc6 2.Nf3 e5 3.Bb5 a6 4.Ba4 Nf6 5.O-O b5 6.Bb3 Bb7 7.c3 Bd6 8.d4 O-O 9.Re1 h6 10.Nbd2 Re8 11.Bc2 Bf8 12.Nf1 d6 13.Ng3 exd4 14.cxd4 Nb4 15.Bb1 c5 16.Bd2 g6 17.d5 a5 18.a3 Na6 19.Qc1 Kh7 20.Bc3 Bg7 21.h3 b4 22.axb4 cxb4 23.Bd4 Nc5 24.Bc2 Rc8 25.Qd2 Ba6 26.b3 Kg8 27.Rac1 Bb5 28.Qd1 h5 29.Rb1 Bh6 30.Be3 Bxe3 31.Rxe3 Qb6 32.Qd2 Ncd7 33.Rbe1 Ne5 34.Nd4 h4 35.Nge2 Ba6 36.Bb1 Nh5 37.Qd1 Qd8 38.f4 Bxe2 39.Nxe2 Qb6 40.Kf2 Nd7 41.Qd4 Qd8 42.Kg1 Rc5 43.Kf2 Qc7 44.Rd1 Nhf6 45.Bd3 Kg7 46.Ra1 Qb6 47.Ra4 Kh8 48.Ra1 Kg8 49.Rb1 Nh5 draw agreed The final position:
 click for larger view |
 |
Apr-30-11
 | | kutztown46: <AK>, thanks for playing last night. This afternoon was perfect here for yard work and I got a lot done. I have only begun to review our game, but I did answer our question about would not 41...Qxd4 42. Nxd4 Nxf4 have won a pawn? The answer is no, white plays 43. Nb5, threatening black's pawn on d6. The pawn cannot move because of white's pawn on d5. That same white pawn prevents either of black's rooks from defending the pawn on d6. Black must move a rook on move 43. Otherwise, 44. Nxd6 forks black's rooks. The funny thing is, it's 0.00 anyway, although white does get a protected passer on the d-file. The fact that neither of us could see this at the time is proof of what patzers we both are! |
 |
May-02-11
 | | AylerKupp: <kutztown46> Oh, we shouldn't be that hard on ourselves. I don't know about you and Stockfish but I only looked at 41...Qxd4 42.Nxd4 Nxf4 at d=3. Rybka looked at its 41th move at d=18. I'm sure that if I had restricted Rybka to d=3 it would have come up with the same rash conclusion I did! |
 |
May-03-11
 | | kutztown46: Part 1:
Some thoughts and analysis on the Stockfish - Rybka game from April 29: Here is the game score:
1.e4 Nc6 2.Nf3 e5 3.Bb5 a6 4.Ba4 Nf6 5.0–0 b5 6.Bb3 Bb7 7.c3 Bd6 8.d4 0–0 9.Re1 h6 10.Nbd2 Re8 11.Bc2 Bf8 12.Nf1 d6 13.Ng3 exd4 14.cxd4 Nb4 15.Bb1 c5 16.Bd2 g6 17.d5 a5 18.a3 Na6 19.Qc1 Kh7 20.Bc3 Bg7 21.h3 b4 22.axb4 cxb4 23.Bd4 Nc5 24.Bc2 Rc8 25.Qd2 Ba6 26.b3 Kg8 27.Rac1 Bb5 28.Qd1 h5 29.Rb1 Bh6 30.Be3 Bxe3 31.Rxe3 Qb6 32.Qd2 Ncd7 33.Rbe1 Ne5 34.Nd4 h4 35.Nge2 Ba6 36.Bb1 Nh5 37.Qd1 Qd8 38.f4 Bxe2 39.Nxe2 Qb6 40.Kf2 Nd7 41.Qd4 Qd8 42.Kg1 Rc5 43.Kf2 Qc7 44.Rd1 Nhf6 45.Bd3 Kg7 46.Ra1 Qb6 47.Ra4 Kh8 48.Ra1 Kg8 49.Rb1 Nh5 50.Rd1 1/2-1/2 The opening was a C78 Ruy Lopez (by transposition). Well known moves were played until Rybka played 7...Bd6, which is not found in OE. Here is Stockfish's analysis of that position: After 7. c3:
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (26-ply):
1. ² (0.32): 7...Be7 8.d4 d6 9.Nbd2 0-0 10.Bc2 Re8 11.a3 Nb8 12.dxe5 dxe5 13.Nxe5 Bd6 14.f4 Nbd7 15.Nxf7 Kxf7 16.e5 Bc5+ 17.Kh1 Kg8 18.exf6 Nxf6 19.b4 Bb6 20.a4 Nd5 21.Ne4 Nxb4 22.cxb4 Bxe4 23.Bxe4 2. ² (0.44): 7...Nxe4 8.d4 Be7 9.Qe2 d5 10.dxe5 0-0 11.Rd1 Na5 12.Bc2 Qe8 13.Nd4 c5 14.Nf5 g6 15.Nxe7+ Qxe7 16.Bf4 Rfe8 17.Na3 Qh4 18.g3 Qe7 19.c4 Nxc4 20.Nxc4 bxc4 3. ² (0.56): 7...Bd6 8.d4 0-0 9.Nbd2 h6 10.Bc2 Re8 11.a4 b4 12.Re1 Bf8 13.Nf1 bxc3 14.bxc3 exd4 15.e5 dxc3 16.exf6 Rxe1 17.Qxe1 Qxf6 18.Qe4 Qg6 19.Qxg6 fxg6 20.Bxg6 Nb4 21.Ng3 Bxf3 22.gxf3 Be7 23.Be3 4. ² (0.60): 7...h6 8.d4 Bd6 9.Bc2 0-0 10.Nbd2 Re8 11.a4 b4 12.a5 bxc3 13.bxc3 Rb8 14.d5 Na7 15.Nc4 Nb5 16.Nxd6 Nxd6 17.Qe2 c6 18.c4 cxd5 19.cxd5 Nh5 20.Bd2 Nf4 21.Bxf4 exf4 22.Rfd1 |
 |
May-03-11
 | | kutztown46: Part 2:
As might be expected in an engine vs. engine game, post-mortem analysis did not reveal any major blunders for either side. Checking each move at deeper ply revealed a small number of what might have been slight inaccuracies by both sides. After 12. Nf1 (Rybka played 12...d6):
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (26-ply):
1. ² (0.48): 12...exd4 13.e5 Nd5 14.Be4 Na5 15.Qxd4 c5 16.Qd3 Nb6 17.Ne3 Bxe4 18.Qxe4 Nbc4 19.Nf5 Nc6 20.Qg4 g6 21.Qg3 N6xe5 22.Nxe5 Qf6 23.Nxh6+ Bxh6 24.Bxh6 Rxe5 25.Rxe5 Nxe5 26.Rd1 Re8 27.Qe3 Qe6 28.Bf4 2. ± (0.76): 12...d6 13.Ng3 Bc8 14.a4 Bd7 15.dxe5 Nxe5 16.Nxe5 Rxe5 17.Be3 Re8 18.f3 c5 19.Bf2 Be6 20.Qd2 Qb6 21.Ne2 Nh5 22.g4 Nf6 23.Nf4 Bd7 24.Bb3 Rab8 25.a5 3. ± (0.84): 12...d5 13.exd5 Qxd5 14.dxe5 Qxd1 15.Bxd1 Nd7 16.Bf4 g5 17.Bg3 g4 18.Nh4 Ncxe5 19.a4 b4 20.Bc2 Bc6 21.Nf5 Rab8 22.cxb4 Rxb4 23.b3 f6 24.Rad1 Nc5 4. ± (1.09): 12...a5 13.Ng3 b4 14.Bd2 bxc3 15.bxc3 Rb8 16.d5 Na7 17.c4 Ba6 18.Bxa5 Bxc4 19.Rc1 Rb7 20.Bb1 Ba6 21.Qa4 Nb5 22.Bd3 Qa8 23.Bd2 Rb6 24.Be3 Nd4 After 13. Ng3 (Rybka played 13...exd4):
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (26-ply):
1. ² (0.64): 13...Na5 14.b3 Bc6 15.Bd2 Bd7 16.Qe2 c6 17.Bd3 c5 18.d5 c4 19.Bc2 Qc7 20.Red1 Be7 21.Rdb1 Bg4 22.b4 Nb7 23.a4 Nh5 24.Nxh5 Bxh5 25.Be3 2. ² (0.64): 13...Bc8 14.a4 Bd7 15.dxe5 Nxe5 16.Nxe5 Rxe5 17.Bf4 Re8 18.Qd3 bxa4 19.Bxa4 Bb5 20.Qf3 Bxa4 3. ± (0.72): 13...exd4 14.cxd4 Ne7 15.b3 c5 16.d5 Ng6 17.a4 b4 18.Bb2 Ng4 19.Nf5 Bc8 20.h3 N4e5 21.Nxe5 Nxe5 22.f4 Ng6 23.Qg4 c4 24.Bd4 c3 25.g3 a5 26.Rac1 Rb8 27.Bd3 4. ± (0.72): 13...Qb8 14.Nh4 Bc8 15.h3 Bd7 16.d5 Ne7 17.Qf3 Nh7 18.Bd2 Ng5 19.Qd1 Qb7 20.Qc1 Nh7 21.b3 Nf6 22.Qa3 c5 23.Rad1 Ng6 24.Nxg6 fxg6 25.Bd3 5. ± (0.72): 13...Rb8 14.a4 exd4 15.cxd4 Nb4 16.Bb1 bxa4 17.Qxa4 c5 18.Bd2 Bc6 19.Qd1 Rb7 20.Qc1 Qb6 21.Ra3 Rc7 22.dxc5 Qxc5 23.Qxc5 dxc5 24.e5 Nd7 25.Be4 Bxe4 26.Rxe4 Rb7 27.Bc3 6. ± (0.84): 13...d5 14.dxe5 Ng4 15.exd5 Ncxe5 16.Nxe5 Rxe5 17.Rxe5 Nxe5 18.Qe2 Bd6 19.Be3 Bxd5 20.Nf5 Qd7 21.Rd1 Qe6 22.b3 Bf8 23.Nd4 Qg4 24.f3 Qh5 25.Nf5 Bb7 26.Ng3 Qh4 27.Bd4 Nc6 |
 |
May-03-11
 | | kutztown46: Part 3:
After 19...Kh7 (Stockfish played 20. Bc3):
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (27-ply):
1. ± (0.80): 20.h4 c4 21.Bc3 Bg7 22.h5 Nc5 23.Bc2 Nfd7 24.Bxg7 Kxg7 25.Nd4 Kh7 26.Nxb5 Ne5 27.Qd2 Qb6 28.Nc3 Rf8 29.Reb1 Ba6 30.Na4 Nxa4 31.Bxa4 Nd3 32.Bc2 Rac8 33.Bxd3 cxd3 34.b4 axb4 35.Rxb4 Qc5 2. ² (0.68): 20.a4 b4 21.Bd3 Nc7 22.b3 Bg7 23.Ra2 Ba6 24.Bxa6 Rxa6 25.Rc2 Nd7 26.Bf4 Rb6 27.h4 Ra6 28.Rd1 Na8 29.Qe3 Nc7 30.Qd3 Qf6 31.Qd2 Qd8 32.Rcc1 Qf6 33.Rc2 3. ² (0.64): 20.Bc3 Bg7 21.Bd3 c4 22.Bc2 Kg8 23.Qd2 Nc5 24.Qf4 Na6 25.Rad1 Rf8 26.Rc1 Re8 27.Bd4 Rc8 28.Rcd1 Rf8 29.h3 Re8 30.Qd2 Nc5 31.Bc3 Ra8 32.Qf4 Na6 33.Rc1 Ra7 4. ² (0.64): 20.Bd3 c4 21.Bc2 Bg7 22.Bc3 Kg8 23.Qd2 Nc5 24.Qf4 Na6 25.Rad1 Rf8 26.Rc1 Re8 27.Bd4 Rc8 28.Rcd1 Rf8 29.h3 Re8 30.Qd2 Nc5 31.Bc3 Ra8 32.Qf4 Na6 33.Rc1 Ra7 After 20...Bg7 (Stockfish played 21. h3):
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (26-ply):
1. ² (0.64): 21.Bc2 Kg8 22.Bd2 Kh7 23.Rb1 c4 24.Bc3 Kg8 25.Qf4 b4 26.Bd4 b3 27.Bd1 Nc5 28.Bxc5 dxc5 29.d6 g5 30.Qf5 a4 31.e5 Bc8 2. ² (0.60): 21.Bd3 c4 22.Bc2 Kg8 23.Qd2 Nc5 24.Qf4 Ra6 25.Rad1 Bc8 26.Bd4 a4 27.h3 Nb3 28.Bc3 g5 29.Qe3 Bd7 30.Qe2 Qb6 31.Nh2 Qd8 32.Qf3 Nc5 3. ² (0.60): 21.Re2 c4 22.Qf4 Kg8 23.Re1 Rc8 24.Qd2 Nc5 25.Bc2 Ra8 26.Qf4 g5 27.Qc1 g4 28.Nd2 Nd3 29.Bxd3 cxd3 30.Nf5 4. ² (0.52): 21.b3 b4 22.axb4 Nxb4 23.Qb2 Ba6 24.Rd1 Bb5 25.Ra3 Ra6 26.Qa1 Ra8 27.h3 Kg8 28.Re1 Bd3 29.Bxd3 Nxd3 30.Rd1 Nb4 31.Ra4 Qe7 32.e5 dxe5 33.Bxe5 5. ² (0.44): 21.h3 Rc8 22.b3 Nc7 23.Bb2 b4 24.Qd2 Nb5 25.Bd3 Nc3 26.Qc2 Rc7 27.Bxc3 bxc3 28.Bb5 Ree7 29.Re3 Qb8 30.Bc4 Nd7 31.Ne2 Qh8 32.Rd1 Nb6 33.Nxc3 Bxc3 6. ² (0.32): 21.Rd1 Kg8 22.Bc2 Rc8 23.Rb1 b4 24.Bxf6 Qxf6 25.Ba4 Re7 26.e5 dxe5 27.Qc4 e4 28.Nxe4 Qb6 29.Nfd2 Be5 30.Nb3 Rd8 31.f3 Nc7 |
 |
May-03-11
 | | kutztown46: Part 4:
After 22. axb4 (Rybka played 22...cxb4):
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (24-ply):
1. ² (0.32): 22...axb4 23.Bd2 Nd7 24.Bd3 Qf6 25.Ra2 Qe7 26.Ra5 Nc7 27.Rxa8 Bxa8 28.Bf4 Bb7 29.Qd2 Ra8 30.Bc4 Nb6 31.Bb3 Qf8 32.Be3 Kg8 33.Qc2 Ra5 34.Rc1 Qe7 35.Qd2 Qf6 2. ² (0.68): 22...cxb4 23.Bd4 Rc8 24.Qd1 Nc5 25.h4 Ng4 26.h5 Ne5 27.Nxe5 Bxe5 28.Bxe5 Rxe5 29.Bc2 Nd7 30.Qd2 Nf6 31.hxg6+ fxg6 32.Rec1 Ba6 3. ± (0.76): 22...Nxb4 23.h4 Ra7 24.h5 Ng4 25.Qf4 Bc8 26.Qd2 Ree7 27.Ra3 Qh8 28.Rc1 Qd8 29.Bxg7 Kxg7 30.Ba2 g5 31.Bc4 Bd7 32.Be2 f6 33.Qc3 Kg8 34.Raa1 Rb7 35.Nd2 After 25...Ba6 (Stockfish played 26. b3):
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (25-ply):
1. ² (0.68): 26.h4 Bc4 27.Rac1 Bb3 28.Bxc5 Bxc2 29.Bxb4 Nxe4 30.Nxe4 Bxe4 31.Rxc8 Qxc8 32.Bxd6 a4 33.Re3 f5 34.Bb4 f4 35.Ra3 Qg4 36.Qd1 Qd7 37.Rxa4 Qxd5 38.Qxd5 Bxd5 39.Ra7 Kg8 40.Bd2 Re2 41.Bxf4 Bxf3 2. ² (0.56): 26.b3 Kg8 27.Rac1 Qd7 28.Rb1 Qd8 29.Rb2 Qd7 30.Qf4 Qe7 31.Ra2 Qd8 32.Qd2 Bb7 33.Qd1 Ba6 34.Qd2 3. ² (0.28): 26.Qd1 Kg8 27.b3 h5 28.Qb1 Nfd7 29.Bxg7 Kxg7 30.Ne2 Bxe2 31.Rxe2 Qb6 32.Qb2+ Kg8 33.Re3 Ne5 34.Nd2 f6 35.Qa2 Ncd7 36.Bd1 Rc3 37.Re2 Ra8 4. = (0.24): 26.Kh1 Kg8 27.Kh2 Bc4 28.Rac1 Ba6 29.Qf4 Bb5 30.Kg1 Ba6 31.h4 b3 32.Bb1 a4 33.Rc3 Rc7 34.Qd2 a3 35.bxa3 b2 36.h5 Qb8 37.hxg6 fxg6 |
 |
May-03-11
 | | kutztown46: Part 5:
One of the interesting aspects of this game is that, according to Stockfish, white reached a substantial advantage early in the middle game which entirely dissipated by move 34. At that point, and for the rest of the game, the evals were "a sea of zeros". I wrote down Stockfish's eval at the time of each white move, starting at move 8. Here is the game score again, this time with the Stockfish evals included. 1.e4 Nc6 2.Nf3 e5 3.Bb5 a6 4.Ba4 Nf6 5.0–0 b5 6.Bb3 Bb7 7.c3 Bd6 8.d4 (.52) 0–0 9.Re1 (.68) h6 10.Nbd2 (.68) Re8 11.Bc2 (.76) Bf8 12.Nf1 (.72) d6 13.Ng3 (.72) exd4 14.cxd4 (1.05) Nb4 15.Bb1 (.84) c5 16.Bd2 (.88) g6 17.d5 (1.01) a5 18.a3 (.72) Na6 19.Qc1 (.68) Kh7 20.Bc3 (.84) Bg7 21.h3 (.80) b4 22.axb4 (.64) cxb4 23.Bd4 (.80) Nc5 24.Bc2 (.64) Rc8 25.Qd2 (.60) Ba6 26.b3 (.52) Kg8 27.Rac1 (.48) Bb5 28.Qd1 (.24) h5 29.Rb1 (.40) Bh6 30.Be3 (.20) Bxe3 31.Rxe3 (.12) Qb6 32.Qd2 (.28) Ncd7 33.Rbe1 (.20) Ne5 34.Nd4 (.00) h4 35.Nge2 Ba6 36.Bb1 Nh5 37.Qd1 Qd8 38.f4 Bxe2 39.Nxe2 Qb6 40.Kf2 Nd7 41.Qd4 Qd8 42.Kg1 Rc5 43.Kf2 Qc7 44.Rd1 Nhf6 45.Bd3 Kg7 46.Ra1 Qb6 47.Ra4 Kh8 48.Ra1 Kg8 49.Rb1 Nh5 50.Rd1 1/2-1/2 At deeper ply, Stockfish concluded 0.00 across the board as early as move 29: After 28...h5:
 click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (30-ply):
1. = (0.00): 29.Ba1 Ba6 30.Rb1 Bb7 31.Rc1 Ba6
2. = (0.00): 29.Rb1 Bd7 30.Re2 Bb5 31.Re1
3. = (0.00): 29.Bb1 Bh6 30.Rxc5 dxc5 31.Bxf6 Qxf6 32.e5 Qd8 33.Ne4 Bg7 34.Neg5 Rxe5 35.Rxe5 Bxe5 36.Nxf7 Kxf7 37.Nxe5+ Kg7 38.Nxg6 Qf6 39.Qxh5 Re8 40.Bf5 Bd7 41.Nh4 Bxf5 42.Qxe8 Qxh4 43.d6 Qd4 44.Qe7+ Kg6 4. = (0.00): 29.Ra1 Ba6 30.Ra2 Bb5 31.Nd2 Bd3 32.Qa1 Bxc2 33.Rxc2 h4 34.Ngf1 Ra8 35.Rc4 Nd3 36.Re3 Ne5 37.Bxe5 Rxe5 38.Qb1 Re8 39.Rc6 Bh6 40.Re1 Qe7 41.Qd3 Bf4 42.Qf3 Bg5 43.Qd3 My question is, to what extent can these evals be trusted? If we assume for the sake of argument that 7...Bd6, 12...d6, and 13...exd4 were all inaccurate, does that explain the 1.05 eval at white's 14th move? Or is this high eval simply explained by the fact that engines sometimes overestimate white's advantage in certain openings. Next question - if we again assume for the sake of argument that 20. Bc3, 21. h3, and 26. b3 were all inaccurate, does that explain why white's "advantage" collapsed to nothing? Or was the collapse of white's advantage simply a belated recognition by Stockfish that the game was even all along? |
 |
May-03-11
 | | kutztown46: Part 6:
In an effort to figure this out, I started with white's first "inaccuracy" (20. Bc3), instead played Stockfish's deeper ply suggestion of 20. h4 and slid forward, going to reasonable depth at each move. I ended up with the following line: <20. h4 Bg7 21. h5 Ng4 22. Bc2 Nc7 23. Nf1 g5 24. Bc3 Bc8 25. Bd3 Bxc3 26. Qxc3 Kg8 27. a4 b4 28. Qc2 Qf6 29. N1d2 Kg7>. At this point, Stockfish says:  click for larger viewAnalysis by Stockfish 2.0.1 JA 64bit (25-ply):
1. ± (0.84): 30.Rad1 Qf4 31.b3 Bb7 32.Qb2+ Qf6 33.Qa2 Qf4 34.Nc4 Ba6 35.e5 Bxc4 36.Re4 Bxb3 37.Qxb3 Qf5 38.Rxb4 Qc8 39.Rxg4 Qxg4 40.exd6 Na6 41.Qc3+ Kg8 42.Bb5 Rf8 2. ± (0.80): 30.Rac1 Rd8 31.b3 Qc3 32.Nc4 Qxc2 33.Bxc2 Ra6 34.Bd3 Ra7 35.Be2 Nf6 36.e5 Nfxd5 37.exd6 Ne6 38.Bd1 Ndf4 39.Nfe5 Nd4 40.g3 Nd5 41.Nd3 Nc3 42.Nxc5 3. ² (0.64): 30.b3 Qc3 31.Qb1 Qf6 32.Qd1 Nxf2 33.Kxf2 g4 34.Kg1 gxf3 35.Qxf3 Qxf3 36.gxf3 Re5 37.Kf2 Rxh5 38.Rg1+ Kf6 39.Rh1 Rxh1 40.Rxh1 Kg7 41.Ke3 Ba6 42.Bxa6 Rxa6 43.Rg1+ Kf6 44.Nc4 Ne8 45.Rg8 Ng7 4. ² (0.64): 30.Rab1 Rd8 31.Qd1 Nxf2 32.Kxf2 g4 33.Rf1 Qf4 34.Nc4 gxf3 35.Qxf3 Qxf3+ 36.gxf3 Ba6 37.Rg1+ Kf6 38.Ke3 Bxc4 39.Bxc4 Rg8 40.b3 Rae8 41.f4 Ke7 42.Rbd1 Kd7 43.Rdf1 Ke7 44.Bb5 Nxb5 45.axb5 Rb8 So it can be argued with some justification that Stockfish's evals are accurate; that Stockfish played better in the late opening but then Rybka played better in the early middle game. In the last diagrammed position, it is unclear whether white's 0.84 advantage can actually be converted to a win, but 0.84 at move 30 is better than 0.00. This line of reasoning causes me to question whether I have been managing the clock for Stockfish in an optimal manner. For this tournament, the time control is 105 minutes per side. I assume that the game could go 90 moves, and I allow an equal amount of time for each move. For example, at move 30, my target is to have 70 minutes left on the clock. In all three games in the tournament so far, I have seen Stockfish make moves in the early middle game that were inaccurate, and that would not have been made if I simply allowed Stockfish to think longer. I am therefore strongly considering modifying my time management scheme in order to allow Stockfish move time per move in the early middle game. |
 |
| May-04-11 | | chessmoron: <I am therefore strongly considering modifying my time management scheme in order to allow Stockfish move time per move in the early middle game.> Yeah. We need some more blood. :D |
 |
May-04-11
 | | kutztown46: Ha! Obviously, I meant to say "more" time per move. |
 |
May-04-11
 | | AylerKupp: <kutztown46> Thanks for the analysis of our game, Stockfish – Rybka from April 29. I won't try to repeat what you've said but rather fill in some blanks and contrast our approaches and Rybka's statistics. Last thing first, namely your approach to time management which you are considering changing. I believe that both you and <Golden Executive> use Infinite Analysis with a fixed time per move and a time budget for the game at increments of five moves. Correct? So for an expected 90-move game with a 105 move time control that comes out to an average of 70 seconds/per move or so. The basic problem that I see with a fixed time per move approach is that some moves demand more calculating time than others, and with Infinite Analysis mode you don't let Stockfish "help" in deciding how much time should be devoted to calculating how much time should be allowed for determining the move at any given ply. However, Stockfish is not all that smart about this. It calculates the "optimum" search time at any ply (the time it allows per move) based on its estimate of the number of moves left to go in the game subject to several constraints including minimum thinking time, minimum time to retain in the clock, minimum number of lookahead moves, and a few other considerations. But the biggest factor is a static array indicating the importance of a move based on a "naive statistical analysis of how many games are still undecided after n half-moves". To reduce it to simpler terms, the earlier in the game, the more time Stockfish allows for searching for each move. This is from inspection of the timeman.cpp file in the Stockfish source code. I don't know how Rybka does its time management but it behaves similarly so I assume it uses a similar and simplistic approach. It will try to use as much time as it can for each move, and it spends more time in the earlier moves than in the later ones because, of course, it has less time to use. And, as you and others have seen, Rybka tends to get into time trouble if I let it. Unfortnately I don't have any good data to demonstrate this since during the games I have forced Rybka to move and haven't necessarily allowed it to move on its own. My approach to help Rybka keep time for calculation later in the game by forcing it to move quicker during the earlier part of the game to let it save calculation time for later. I will assume that the more time I give it for calculation the more accurate its evaluation will be and the better it will play. I force Rybka to move using a combination of several factors: 1. Difference between PVs. I set Rybka to generate 2 PVs. If the difference between the evals of the two PVs is significant AND if the difference has been significant for the previous few depths, I gamble that the relationship won't change and I force Rybka to move. If the difference is not significant or if it hasn't been approximately constant I will let Rybka calculate longer. 2. Depth reached. On my computer in a reasonable amount of time Rybka reaches depths in the order of 15 – 16 ply in the opening increasing to 20 – 23 ply in the endgame when there are less pieces on the board. In the opening and middlegame, f Rybka has taken a relatively long time to reach d=17 AND the evals haven't changed significantly, then I know that it will take considerably longer to reach d=18 and I gamble that waiting for another ply won't significantly change the eval and I force Rybka to move. Stockfish gets to deeper depths much faster than Rybka so if you use this approach then you will have to change your depth threshold appropriately. 3. Forced moves. Rybka will take its normal time calculating even though its next move appears effectively forced, typically as a result of a needed recapture. If I see the needed recapture or another effectively forced move having the highest eval, I force Rybka to move. 4. Opening Moves. Up until now, and before <chessmoron> showed me how, I didn't know how to force Rybka to play specific moves in the opening. As a result I let Rybka evaluate the position at the various depths and forced it to move if I agreed with it's move selection. But sometimes it either took too long to give a move I liked the best evaluation or it moved before I forced it to. This accounted for the 1...Nc6 and 7...Bd6 moves in our game. But now that I know how to force the moves that I prefer in the opening, I will be able to avoid these kinds of moves and save about 4 minutes or about 4% to 4.5% of the total time for later calculation. |
 |
May-04-11
 | | AylerKupp: Stockfish – Rybka from April 29 (continued)
To see the contrast between Stockfish and Rybka evals, below is the game score with both Rybka's and Stockfish's evals, the depths achieved by Rybka, and Rybka's calculation time per move in seconds. It's a little hard to read but if you copy it to Word change the spaces to tabs, and space the tabs appropriately it will be much clearer. As you can see, Stockfish was more optimistic in its evaluation of White's position than Rybka was. White Black SEval REval RDepth RTime
1.e4 Nc6 - [+0.21] 15 23
2.Nf3 e5 - [+0.16] 16 31
3.Bb5 a6 - [+0.18] 15 19
4.Ba4 Nf6 - [+0.07] 13 3
5.O-O b5 - [+0.11] 17 26
6.Bb3 Bb7 - [+0.08] 17 19
7.c3 Bd6 - [0.00] 16 77
8.d4 O-O [+0.52] [+0.09] 15 78
9.Re1 h6 [+0.68] [+0.16] 16 69
10.Nbd2 Re8 [+0.68] [+0.07] 15 82
11.Bc2 Bf8 [+0.76] [+0.30] 17 238
12.Nf1 d6 [+0.72] [+0.07] 15 55
13.Ng3 exd4 [+0.72] [+0.12] 17 153
14.cxd4 Nb4 [+1.05] [+0.12] 16 53
15.Bb1 c5 [+0.84] [+0.12] 15 29
16.Bd2 g6 [+0.88] [+0.25] 18 166
17.d5 a5 [+1.01] [+0.25] 17 41
18.a3 Na6 [+0.72] [+0.15] 12 5
19.Qc1 Kh7 [+0.68] [+0.13] 17 56
20.Bc3 Bg7 [+0.84] [0.00] 17 103
21.h3 b4 [+0.80] [-0.05] 17 148
22.axb4 cxb4 [+0.64] [-0.05] 18 94
23.Bd4 Nc5 [+0.80] [0.00] 19 228
24.Bc2 Rc8 [+0.64] [0.00] 18 72
25.Qd2 Ba6 [+0.60] [-0.03] 17 176
26.b3 Kg8 [+0.52] [-0.01] 18 180
27.Rac1 Bb5 [+0.48] [0.00] 18 175
28.Qd1 h5 [+0.24] [0.00] 18 132
29.Rb1 Bh6 [+0.40] [-0.17] 16 86
30.Be3 Bxe3 [+0.20] [-0.14] 18 -
31.Rxe3 Qb6 [+0.12] [-0.14] 16 52
32.Qd2 Ncd7 [+0.28] [-0.12] 17 166
33.Rbe1 Ne5 [+0.20] [-0.12] 16 101
34.Nd4 h4 [0.00] [-0.17] 18 51
35.Nge2 Ba6 [0.00] [-0.17] 17 36
36.Bb1 Nh5 [0.00] [-0.16] 16 124
37.Qd1 Qd8 [0.00] [-0.33] 17 114
38.f4 Bxe2 [0.00] [-0.33] 16 -
39.Nxe2 Qb6 [0.00] [-0.21] 18 35
40.Kf2 Nd7 [0.00] [-0.21] 13 46
41.Qd4 Qd8 [0.00] [-0.21] 18 9
42.Kg1 Rc5 [0.00] [-0.21] 17 56
43.Kf2 Qc7 [0.00] [-0.21] 17 76
44.Rd1 Nhf6 [0.00] [-0.21] 18 116
45.Bd3 Kg7 [0.00] [-0.21] 18 97
46.Ra1 Qb6 [0.00] [-0.21] 18 -
47.Ra4 Kh8 [0.00] [-0.21] 19 72
48.Ra1 Kg8 [0.00] [-0.21] 17 6
49.Rb1 Nh5 [0.00] [-0.21] 18 30 |
 |
May-04-11
 | | kutztown46: <AK> If you get a chance, I would be very interested to know which of Stockfish's moves Rybka is most critical of, and what does Rybka think of the end position of the alternate line in part 6 of my analysis. Just to clarify, yes, I am using infinite analysis. I am not even telling the Fritz GUI what time control is being used. From its point of view, it is infinite analysis, pure and simple. I have to decide on every move when to accept Stockfish's top move and make that move. I use many of the same techniques you described to decide when to give the engine more time and when to force the move sooner. One that you did not mention is volatility. If the lead is changing hands every few seconds and evals for the moves being considered appear to be unstable, then I tend to give the engine more time to settle down before forcing the move. I have a worksheet where I record my remaining time at every move starting with move 8. For every fifth move, I have written down ahead of time where I want to be on the clock, and on a macro-basis, I try to observe that. But some moves may only take 20 seconds, and I let it think for 3 minutes or more on some other moves. If I get ahead on time relative to my time budget, then I look for opportunities to take longer. But up until now, my time budget has assumed equal time per every five moves - about 70 seconds as you said. What I am going to try now is to allow a full 3 minutes on average for every move in the early middle game. This means I may take 5 minutes or longer on certain moves which I believe to be key. It's a gamble. If I get to move 40 or so, then I will only have 30 seconds per move remaining out to move 90. |
 |
May-04-11
 | | AylerKupp: <kutztown46> Sure. But as a quick first attempt to determine Stockfish's "worst" moves it's probably easier to get the answer from Stockfish rather than Rybka. I calculated the difference between successive Stockfish evals and these 3 jumped out as being significantly greater than all the others: 15.Bb1. An eval drop from [+1.05] to [+0.84] = [-0.21], -20% 18.a3. An eval drop from [+1.01] to [+0.72] = [-0.29], -29% 28.Qd1. An eval drop form [+0.48] to [+0.24] = [-0.24], -50% Or maybe this reflects Stockfish's "disappointment" with Rybka's 14th, 17th, and 27th moves (14...Nb4, 17...a5, and 27...Bb5) since these were the Rybka moves that prompted its responses above. Conversely, Stockfish was happiest with the following move: 14.cxd4. An eval rise from [+0.72] to [+1.05] = [+0.33], +46% Which means, using the same logic, that Rybka's worst move was 13...exd4 giving up the center. So there may be some truth in this center control stuff after all! Which then makes me wonder, what's worse, a large absolute drop in eval or a large relative (percentage) drop in eval? If the latter there are moves with much greater relative eval drops and rises. |
 |
May-05-11
 | | AylerKupp: A few things. After sleeping on it, I came to what I think is the obvious conclusion that an absolute change in evaluation is much more important than a relative one. After all, a 100% change from [+0.01] to [+0.02] is hardly significantwhereas a change from [+0.50] to [+1.00], also 100%, is much more significant. Duh. I obviously must have been very tired when I wrote that earlier post. Second, to follow the so-called logic in my previous post, the biggest changes in Rybka's evaluations were at Black's 11th move ([+0.07] to [+0.30] = [+0.23]) and at Black's 12th move ([+0.30] back to [+0.07] = [-0.23]). So Rybka was either very impressed (or surprised) by 11.Bc2 or very disappointed at having to play 11...Bf8, or both. Likewise it must have been very relieved to see 12.Nf1 and very satisfied to be able to play 12...d6. And Rybka's pain and exaltation were then both the result of 7...Bc6. Isn't it interesting how easy it is to anthropomorphize a chess engine? The position after 12...d6 is a reasonable position often reached (although by transposition) where White stands somewhat better (we could argue how much better) so Rybka's [+0.07] evaluation is not unreasonable.
 click for larger viewThird, Stockfish's evaluations. I think that they are too optimistic. After 1.e4 Nc6 2.Nf3 e5 3.Bb5 a6 4.Ba4 Nf6 5.O-O b5 6.Bb3 Bb7 7.c3 Bd6 8.d4 O-O 9.Re1 h6 10.Nbd2 Re8 11.Bc2 Bf8 12.Nf1 d6 13.Ng3 exd4 14.cxd4 we reached the following position which Stockfish evaluated at [+1.05]:
 click for larger view
After a few more moves (14...Nb4 15.Bb1 c5 16.Bd2 g6 17.d5) we reached the following position which Stockfish evaluated at [+1.01]:
 click for larger view
Do these evaluations seem reasonable? I think they're too high for White but I also thought that the only way to assess this was to bring on an impartial 3rd party – Houdini. So here's how Houdini evaluated the position after 14.cxd4 and its suggested PV: [+0.35], d=26: 14. ... g6 15.Bd2 Bg7 16.Qc1 Nh7 (clever, if 17.Bxh6 then 17...Nxd4. Luckily for me that was at d<3) 17.Ne2 Nf6 (an apparent loss of time, but Rybka managed to get Stockfish to shield one of the defenders of the Pe4, the Re1) 18.d5 Ne5 19.Nxe5 Rxe5 20.f3 c6 21.dxc6 Bxc6 22.Rd1 d5 (and now Black has freed his game considerably) 23.Bc3 Re8 24.e5 b4 (Houdini sure is aggressive!) 25.Bd4 Nd7
 click for larger view
Yes, White stands better but I think that this is a more reasonable eval than Stockfish's [+1.05]. And here's how Houdini evaluated the 2nd position and its suggested PV:
[+0.29, d=27]: 17. ... a5 18.Qc1 h5 19.Bg5 Be7 (looks ugly but 19...Bg7 20.Qf4 tangles up Black's k-side with great difficulty in untangling it) 20.Ne2 Na6 21.Nc3 Nc7 22.Bf4 b4 23.Na4 Nd7 24.Bd3 Ba6 25.Bxa6 Rxa6 26.Qd2 Bf6 27.Rac1 Qe7 28.b3 Ne5
 click for larger view
I also like White's position better here and think that Houdini's evaluation is too low. I would assume that the continuation would be 29.Nxe5 Bxe5 30.Bxe5 Qxe5 31.Nb2 headed for c4. Then after Black's queen moves, f4 threatening e5 will present problems for Black. Of course, in playing a game it's not the engine's absolute evaluation of a PV that counts, just its relative evaluation of that PV in comparison with other PVs that it is evaluating. If an engine's relative evaluation of its PVs is correct, then it will play the best move regardless of its absolute evaluation of its PVs. So for that reason I would distrust Stockfish's optimistic evaluation of a position if I'm using that evaluation to guide me in selecting moves in a CC game even though it has no effect on Stockfish's performance in engine vs. engine games. |
 |
May-06-11
 | | kutztown46: <AK>
I have spent considerable time using both Stockfish and Houdini. There is no question that Stockfish assigns higher evals to positions than Houdini does. They normally agree on which side is better, but it's not unusual for Houdini to say + 0.20 and Stockfish will say + 0.50 in the same position. Another difference is that Stockfish is MUCH more likely to issue 0.00's than Houdini does. That can be exasperating. In that respect, Stockfish resembles Fritz, but Stockfish is much stronger tactically than Fritz is. |
 |
May-06-11
 | | AylerKupp: <kutztown46> I noticed Houdini's reluctance to come up with a [0.00] evaluation in the World vs. N.Pogonina game but at the time I attributed it to my use of Analysis_Contempt=2 in an attempt to avoid a draw. But I'm also seeing that now even though I have Analysis_Contempt turned off. I'm not sure about Rybka. I've seen it generate "a sea of [0.00]'s" in various games but on our last game it locked into a [-0.21] eval for the last 11 moves, possibly a sign that once an engine locks into an eval for several moves, whether it's [0.00] or not, that this may be a sign that it has entered into a mode that I now call "engine dithering" when it doesn't know how to proceed and just moves pieces back and forth in an attempt not to reduce its eval. Once the engines get into that mode, particularly in a closed position, then it takes a drastic change to get them out of it. So if both engines get into that mode then that's probably an indicator that a draw is the most likely result. The fact that some engines are more optimistic or pessimistic than others is natural given that they have different evaluation functions. I think that Rybka is more conservative than either Houdini or Stockfish, giving lower evals to the same position. As I said, it makes no difference to their playing strength as long as the evaluation functions gives consistent results, but it sure makes it hard to select moves when using different engines to analyze the positions. And, per your request, here's is Rybka's take of the end position in the 20.h4 line after 29...Kg7: [+0.57],d=26 30.Rab1 Rd8 31.Be2 Bb7 32.Rbd1 Bc8 33.Bf1 Bb7 34.Rc1 Kg8 35.b3 Kh8 36.Bb5 Nxf2 37.e5 dxe5 38.Nxe5 Bxd5 39.Ndc4 Nxb5 40.axb5 a4 [+0.64],d=26 30.Rac1 Rd8 31.b3 Qe7 32.Nc4 f6 33.Nb6 Rb8 34.Nxc8 Rdxc8 35.Nd2 Ne5 36.Nc4 Nxc4 37.Bxc4 Qe8 38.Be2 Qe5 39.Bg4 Rf8 40.Qd3 Rbe8 41.Bf5 Rg8 42.g3 Re7 [+0.66],d=26 30.Rad1 Qf4 31.Rc1 Ra7 32.b3 Qf6 33.Nc4 Rd8 34.Qd2 Qe7 35.Nb6 f6 36.Be2 Ne5 37.Nxc8 Rxc8 38.Nh2 So Rybka agrees with Stockfish that 20.h4 was better than the 20.Bc3 continuation. |
 |
Jun-18-11
 | | kutztown46: <chessmoron> This is a very minor point, but the game score on my computer also shows 50. Rd1 before the draw was agreed. It's up to you if you want to submit a correction. |
 |
|
 |
|