I believe Black misplayed this -as I see no win no win for white after 29. ... cxb3. 29. ... a5 is a clunker of a move. So draw is perhaps the best white can do.tpoppins wrote:Perhaps they do, but not for the reasons SF "thinks" they are 0.00. See your own quote below:zullil wrote:I may regret this interjection, but an alarming number of positions deserve 0.00.zullil wrote:It is my understanding, perhaps wrong, that most of Stockfish's 0.00 evaluations ultimately result from second repetitions of positions, and by the engine's inability to find anything in the search tree with a better score.Substitute "perfectly" for "decently" and we are in perfect agreement. But where are they, those perfectly played games? And who be the judge of perfection?zullil wrote:One could argue that every position in any decently played game is a 0.00 position, at least in a theoretical sense.
Ah, happy thoughts! Remember this, though?zullil wrote:About "tunnel vision", I think I largely agree with Dann. Given enough time/depth, Stockfish will almost always find a winning move if one exists. Though sometimes the wait can be excruciating.
[D] rk6/p1r3p1/P3B1Kp/1p2B3/8/8/8/8 w - - 0 1
The very latest SF-dev (1 thread):But I'm confident that Bd7 will emerge!.Code: Select all
info depth 70 seldepth 80 multipv 1 score cp -29 nodes 269400017121 nps 5896122 hashfull 999 tbhits 0 time 45691046 pv e6d5 b8c8 d5a8 c7c4 e5g7 b5b4 g6h6 c8c7 a8d5 c4c5 d5e4 c5a5 g7d4 a5a6 h6g5 a6a3 g5f4 c7d6 e4f3 a7a5 f4e4 a5a4 f3d1 b4b3 e4d3 b3b2 d3c2 b2b1q c2b1 a3d3 d1a4 d3d4 a4b3 d4d2 b1c1 d2f2 b3c2 d6c5 c1d1 c5d4 c2b1 f2g2 b1f5 d4c3 d1e1 g2b2 f5g4 c3d4 g4f5 d4e3 e1d1 b2e2 f5b1 e2d2 d1c1 d2h2 c1d1 e3d4 b1g6 d4c3 g6f5 c3b2 f5d3 b2b3 d3f5 b3c3 f5g6 c3d4 g6e8 d4e3 e8g6 h2f2 g6b1 f2g2 b1f5 g2d2 d1e1 d2a2 e1d1 a2f2
It's been nigh three years. A somewhat more excruciating wait than the 12 hours quoted in your previous post. How do I remember? Back in my "depth is king" days I used to follow posts like these religiously; yours especially, as you had the most depth, insane (for that time) depths. I'd sit at my DualCore from 2008 and pour over the lines and centipawn evals for hours, sigh and wish I had hardware like Louis'. Some time later (oh, what a long wait it seemed at the time) I got the hardware and after spending hundreds of hours on analysis with SF I realized I'd been chasing a mirage. Ah, the sweet innocence; sometimes I wish I could have it all back...zullil wrote:This position is from the game below, or available at http://www.chessgames.com/perl/chessgame?gid=1472988peter wrote:Hi Louis!
Very nice position indeed!
Made a .pgn about it:
Code: Select all
[Event "CCC"] [Site "?"] [Date "2015.04.25"] [Round "?"] [White "Corbit, Dann"] [Black "Zulli, Louis"] [Result "1-0"] [SetUp "1"] [FEN "4q1kr/p6p/1prQPppB/4n3/4P3/2P5/PP2B2P/R5K1 w - -"] 1. Qxe5 $1 (1. Qa3 $2 Rxe6 2. Qxa7 Qe7 3. Qa8+ Qe8 4. Qb7 Qe7 5. Qa8+ Qe8) 1... fxe5 2. Rf1 Rc8 (2... a6 3. Bd1 b5 (3... Rc7 4. Bb3 Re7 5. Bd5 b5 6. Kg2 a5 7. a3 b4 8. axb4 Qb8 9. b5 Qe8 10. b6 a4 11. b7 a3 12. Rf7 axb2 13. Rxe7 Qb5 14. Re8+ Qxe8 15. e7+ Qf7 16. e8=Q#) 4. Bb3 Rc4 5. a4 Qe7 6. Kg2) 3. Bd1 b5 4. Bb3 Rc4 5. a4 (5. Rf3) (5. a3 a6 6. a4 Qe7 7. Kg2 Qe8 8. Rf3 (8. h3) 8... Qd8) 5... a6 6. Ba2 Qe7 7. Kg2 Qg7 8. Bxc4 bxc4 9. Bxg7 Kxg7 10. Rf7+ 1-0
Here is the position after Black's 23rd move, with SF's current PV:
[D]4q1kr/p6p/1prQPppB/4n3/4P3/2P5/PP2B2P/R5K1 w - - 1 24This PV was obtained by having SF search the position after 24. Qxe5 fxe5 (with 16 threads, 16 GB hash and null move pruning disabled) until it saw a promising continuation for White. The search was then stopped but the hash table was left intact, and SF was given the position above. In short, "cheating" was involved. I don't know how long SF would take to find the key move Qxe5 with an empty hash table. But, in any case, we now have strong evidence that the sacrifice is sound, and wins with correct play.Code: Select all
info depth 50 seldepth 81 multipv 1 score cp 397 nodes 940558094988 nps 27958134 hashfull 999 tbhits 0 time 33641661 pv d6e5 f6e5 a1f1 a7a6 e2d1 b6b5 d1b3 c6c4 a2a4 e8e7 g1g2 e7e8 f1f3 e8e7 b3a2 e7g7 h6g7 g8g7 a2c4 b5c4 f3f7 g7h6 e6e7 h8e8 g2g3 g6g5 f7f6 h6g7 f6a6 e8e7 g3g4 e7b7 g4g5 g7f7 g5f5 b7b2 a6a7 f7e8 a4a5 e8d8 a5a6 b2a2 f5e5 d8c8 e5d5 c8b8 a7h7 a2a6 h2h4 b8c8 h4h5 c8d8 d5c4 d8e8 c4d5 a6a5 d5d4 e8f8 e4e5 a5a6 h5h6 f8g8 h7g7 g8h8
[pgn]
[Event "Molniya Sporting Society"]
[Site "Chelyabinsk RUS"]
[Date "1946.??.??"]
[EventDate "?"]
[Round "5"]
[Result "1-0"]
[White "Yuri S Gusev"]
[Black "E Auerbach"]
[ECO "B70"]
[WhiteElo "?"]
[BlackElo "?"]
[PlyCount "73"]
1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 g6 6.Be2 Nc6 7.Nb3
Bg7 8.O-O Be6 9.f4 Rc8 10.f5 Bd7 11.g4 Ne5 12.g5 Ng8 13.Nd5 f6
14.Be3 b6 15.Nd4 Kf7 16.c3 Qe8 17.Ne6 Bxe6 18.fxe6+ Kf8
19.Nxf6 Nxf6 20.gxf6 Bxf6 21.Bh6+ Kg8 22.Rxf6 exf6 23.Qxd6 Rc6
24.Qxe5 fxe5 25.Rf1 Rc8 26.Bd1 Rc4 27.Bb3 b5 28.Bxc4 bxc4
29.b3 a5 30.bxc4 Qe7 31.Kg2 Qa3 32.Rf2 Qe7 33.Rf1 g5 34.Rf5 g4
35.c5 Qd8 36.c6 Qe7 37.c7 1-0
[/pgn]
Back to the present. Has Stockfish emerged with 24.Qxe5 yet? Clean hash, no source mods, no MultiPV? I bet it's still 24.Qa3 0.00, three years and +200 Elo later. How many more years are you prepared to wait, Louis?
Someone lit a fire under the Stockfish team
Moderators: hgm, Rebel, chrisw
-
- Posts: 4889
- Joined: Thu Mar 09, 2006 6:34 am
- Location: Pen Argyl, Pennsylvania
Re: Someone lit a fire under the Stockfish team
-
- Posts: 4889
- Joined: Thu Mar 09, 2006 6:34 am
- Location: Pen Argyl, Pennsylvania
Re: Someone lit a fire under the Stockfish team
latest dev-McB finds it in single thread mode in a relatively sparse 235M nodes with 1024M hash.zullil wrote:zullil wrote:About "tunnel vision", I think I largely agree with Dann. Given enough time/depth, Stockfish will almost always find a winning move if one exists. Though sometimes the wait can be excruciating.tpoppins wrote:
In the past two years there have been numerous posts about an alarming number of positions SF evaluates as 0.00. Someone even coined the term "Drawfish". I personally have seen hundreds of such positions on Let's Check, ranging from quiet to turbo-charged. There is a current thread discussing another such case and SF's "tunnel vision".
[D] rk6/p1r3p1/P3B1Kp/1p2B3/8/8/8/8 w - - 0 1
The very latest SF-dev (1 thread):But I'm confident that Bd7 will emerge!Code: Select all
info depth 70 seldepth 80 multipv 1 score cp -29 nodes 269400017121 nps 5896122 hashfull 999 tbhits 0 time 45691046 pv e6d5 b8c8 d5a8 c7c4 e5g7 b5b4 g6h6 c8c7 a8d5 c4c5 d5e4 c5a5 g7d4 a5a6 h6g5 a6a3 g5f4 c7d6 e4f3 a7a5 f4e4 a5a4 f3d1 b4b3 e4d3 b3b2 d3c2 b2b1q c2b1 a3d3 d1a4 d3d4 a4b3 d4d2 b1c1 d2f2 b3c2 d6c5 c1d1 c5d4 c2b1 f2g2 b1f5 d4c3 d1e1 g2b2 f5g4 c3d4 g4f5 d4e3 e1d1 b2e2 f5b1 e2d2 d1c1 d2h2 c1d1 e3d4 b1g6 d4c3 g6f5 c3b2 f5d3 b2b3 d3f5 b3c3 f5g6 c3d4 g6e8 d4e3 e8g6 h2f2 g6b1 f2g2 b1f5 g2d2 d1e1 d2a2 e1d1 a2f2
Thanks to Bernhard Bauer for sharing this position.1.8 trillion nodes to find mate-in-5!Code: Select all
info depth 76 seldepth 88 multipv 1 score mate 5 nodes 1810956908759 nps 6781644 hashfull 999 tbhits 0 time 267038006 pv e6d7 b5b4 g6f7 h6h5 f7e7 b4b3 e7d8 b3b2 e5c7
Code: Select all
dep score nodes time (not shown: tbhits knps seldep)
54 #5 236.6M 2:02.10 Bd7 b4 Kf7 b3 Ke7 b2 Kd8 b1=Q Bxc7#
53 #5 235.5M 2:01.62 Bd7 b4 Kf7 b3 Ke7 b2 Kd8 b1=Q Bxc7#
53 #8! 235.4M 2:01.56 Bd7!
52 0.00 201.9M 1:43.89 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Kf5 Rd7 Ke5 Rd8 Ke4 Rd7 Ke5
51 0.00 181.4M 1:33.43 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Kf5 Rd7 Ke5 Rd8 Ke4 Rd7 Ke5
50 0.00 151.7M 1:17.21 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Bb2 Rd7 Ke4 Rd8 Bd4 Rd7 Ke5
49 0.00 136.3M 1:09.27 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Bb2 Rd7 Ke4 Rd8 Bd4 Rd7
48 0.00 126.7M 1:04.25 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Bb2 Rd7 Ke4 Rd8 Bd4 Rd7
47 0.00 108.3M 0:54.95 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Bb2 Rd7 Ke4 Rd8 Bd4 Rd7
46 0.00 98.9M 0:50.10 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Bb2 Rd7 Ke4 Rd8 Bd4
45 0.00 91.8M 0:46.42 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Kf3 Rd7 Ke4 Ka3 Ke5
44 0.00 82.5M 0:41.79 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Kf3 Rd7 Ke4
43 0.00 74.6M 0:37.56 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bb2 Re8 Bd4 Re7 Kf3 Rd7 Ke4
42 0.00 67.3M 0:33.84 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bd4 Re7 Kf3 Rd7 Ke4 Ka3
41 0.00 61.1M 0:30.63 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Bg7 Kb4 Bd4 Re7 Bb2 Rd7 Ke4 Rd8
40 0.00 56.3M 0:28.24 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Kc5 Be5 Kd5 Bg7
39 0.00 49.4M 0:24.78 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4 Re8
38 0.00! 42.3M 0:21.35 Bd5!
37 -0.08 37.7M 0:19.06 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Ba1 Rd8 Ke3 Kc5 Be5 Kb4 Bb2 Rd7 Ke4 Rh7
36 -0.08 34.8M 0:17.61 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kb6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Ba1 Rd8 Ke3 Kc5 Be5 Kb4 Bb2 Rd7
35 -0.08 28.6M 0:14.51 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Ba1 Rd8 Ke3 Kc5 Bb2 Kb4 Ke4 Rd6
34 -0.08 23.7M 0:12.00 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Ba1 Rd8 Ke3 Kc5 Bb2 Kb4 Ke4 Rd6
33 -0.08 21.8M 0:11.06 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Ba1 Rd8 Ke3 Kc5 Bb2 Kb4 Ke4 Rd6
32 -0.08 19.4M 0:09.84 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Ba1 Rg8 Bb2 Kc5 Ke3 Rg3+ Kd2
31 -0.08 17.5M 0:08.85 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Ba1 Rd8 Ke3 Kc5 Bb2 Kb4 Ke4 Re8+ Kd5
30 -0.10 15.7M 0:07.97 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bb2 Re7 Kf3 Re6 Kf4
29 -0.08 14.0M 0:07.12 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Rd7 Ke3 Kc5 Ba3+ Kb6 Ke4 Rd8 Ke3
28 -0.08 12.7M 0:06.50 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Re6 Bb2 Re8 Bg7 Re1 Bf6 Kd5 Bb2 Re8 Bg6 Re7 Bd3 Re6 Bg7 Re8 Bg6 Re7 Bf6
28 -0.10! 11.9M 0:06.08 Bd5!
28 -0.21! 11.2M 0:05.76 Bd5!
28 -0.29! 10.8M 0:05.56 Bd5!
27 -0.36 10.2M 0:05.28 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Kd5 Bb2 Re8 Bg7 Re7 Bb2 Re6 Kf3 Re8 Bc3 Re7 Kf4 Kc5 Bb2 Re8
26 -0.36 8.81M 0:04.58 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Rc1 Bd3 Rd1 Ke4 Re1+ Kf4 Kd5 Bb2 Re8 Bg7 Re6 Bb2 Re7 Bc3 Kc5 Bb2 Rd7 Ke3
26 -0.45! 8.64M 0:04.51 Bd5!
26 -0.59? 8.46M 0:04.41 Bd5 Kc8?
26 -0.44! 8.26M 0:04.31 Bd5!
26 -0.51? 8.05M 0:04.20 Bd5 Kc8?
25 -0.44 7.34M 0:03.84 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 Rc3 Bd4 Rc7 Ke6 Ka5 Kd6 Rh7 Be4 Rh4 Kd5 a6 Bd3 Rh1 Be5 Rc1 Ke4 Rd1 Ke3 Re1+ Kd4
25 -0.54! 7.23M 0:03.79 Bd5!
25 -0.63? 6.80M 0:03.57 Bd5 Kc8?
25 -0.52? 6.61M 0:03.47 Bd5 Kc8?
25 -0.45? 6.40M 0:03.36 Bd5 Kc8?
24 -0.37 6.14M 0:03.23 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 Rc3 Bd4 Rc7 Ke6 Ka5 Kd6 Rh7 Be4 Rh4 Kd5 a6 Bf3 Ka4 Bd1+ Kb4 Be3 Rh1 Be2 Rh2 Bd1
24 -0.55! 5.99M 0:03.16 Bd5!
23 -0.38 4.80M 0:02.54 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 Rc3 Bd4 Rc7 Ke6 Ka5 Kd6 Rh7 Be4 Rh4 Kd5 a6 Bf2 Rh5+ Kd4 Ka4 Kc3 a5 Kb2 b4 Bc2+ Kb5
22 -0.08 3.96M 0:02.10 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 Rc3 Bd4 Rc7 Ke6 Ka5 Kd6 Rh7 Kc5 a6 Be4 Rc7+ Kd5 Rc8 Bf5 Rd8+ Kc5 b4
21 -0.37 3.29M 0:01.77 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Bd5 Rc3 Bg7 Rc7 Be5 Rh7 Bc3 Kb6 Bd4+ Ka5 Ke5 Rd7 Be3 Re7+ Kd4
20 -0.46 2.38M 0:01.30 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 Rxa6+ Kg5 b4 Kf4 Rd6 Bf3 a5 Be5 Rh6 Ke4 b3 Kd5 Rh4 Bd1 a4 Kc5 Kd7 Kb5 Re4 Bb2 Rh4
19 -0.59 1.91M 0:01.05 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 Rxa6+ Kg5 b4 Kf4 Rg6 Be5 a5 Ke4 Kd7 Kd3 Rg5 Bd4 Kd6 Bf3 Rg3 Ke4 Rg8 Kf4 Rg6 Ke4 Rh6
18 -0.48 959509 0:00.53 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 Rxa6+ Kg5 b4 Kf4 Rd6 Bf3 a5 Be5 Rh6 Ke4 a4 Kd5 b3 Bb2 Rh4 Kc5 Rf4
17 -0.65 805969 0:00.45 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 b4 Kg5 Rxa6 Be4 Rd6 Be5 Rd1 Bc2 Re1 Bg3 Re3 Kf4 Ra3
16 -0.67 495543 0:00.28 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 b4 Kg6 b3 Kf5 Rxa6 Bd5 Rb6 Bb2 Rb4 Be6+ Kc7 Ke5 Kc6
15 -0.70 413097 0:00.23 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Bd5 Rc5 Be6+ Kd8 Bxh6 Ke7 Bg8 Rc3 Bg7 Rg3+ Kh7
14 -0.70 309660 0:00.18 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 b4 Kg6 Rxa6+ Kf5 b3 Bd5 Rb6 Bb2 a5 Ke4 a4
13 -0.86 218409 0:00.13 Bd5 Kc8 Bxa8 Rc4 Bf3 b4 Bd5 Rc5 Be6+ Kd8 Bxg7 Ke7 Bb3 Rc6+ Kh5 Rxa6 Bxh6
12 -0.59 96437 0:00.06 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Bd5 Rc5 Bb3 Rc6+ Kh5 Kc7 Bxh6 Rf6 Be3 Rxa6
11 -0.45 19755 0:00.02 Bd5 Kc8 Bxc7 Kxc7 Bxa8 Kb6 Be4 b4 Bc2 Kxa6 Bd3+ Kb6 Be4 b3 Kxg7
10 -0.08 9037 0:00.01 Bd5 Kc8 Bxc7 Kxc7 Bxa8 b4 Bd5 Kb6 Be6 Kxa6 Kxg7
9 -0.08 2130 0:00.00 Bd5 h5 Bxa8 Kxa8 Bxc7 h4 Kxg7 h3 Be5 h2 Bxh2
8 -0.29 1357 0:00.00 Bd5 h5 Bxa8 h4 Bxc7+ Kxc7 Bg2 b4 Kxg7
7 -0.08 441 0:00.00 Bd5 b4 Bxa8 Kxa8 Bxc7 b3 Be5 b2 Bxb2
6 -0.08 299 0:00.00 Bd5 b4 Bxa8 Kxa8 Bxc7 b3 Kxg7
5 -0.08 228 0:00.00 Bd5 b4 Bxa8 Kxa8 Bxc7
4 -0.08 148 0:00.00 Bd5 b4 Bxa8 Kxa8
3 -0.61 105 0:00.00 Bd5 b4 Bxa8
2 -0.61 66 0:00.00 Bd5 b4 Bxa8
1 -4.00 32 0:00.00 Bd5
0 #
Code: Select all
44 #5 381.4M 0:17.27 Bd7 b4 Kf7 b3 Ke8 b2 Kd8 b1=Q Bxc7#
43 #5 381.4M 0:17.26 Bd7 b4 Kf7 b3 Ke8 b2 Kd8 b1=Q Bxc7#
42 #5! 381.3M 0:17.26 Bd7!
41 0.00 285.5M 0:13.05 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kd6 Kg5 Rc8 Bb7 Rg8 Kf6 Kc5 Kf7 Rd8 Bf8+ Kc4 Bf3 b4 Bxb4 Kxb4
40 0.00 208.2M 0:09.50 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kd6 Kg5 Rc8 Bb7 Rg8 Kf6 Kc5 Kf7 Rd8 Bf8+ Kc4 Bf3 b4 Bxb4 Kxb4
39 0.00 167.3M 0:07.66 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kd6 Kg5 Rc8 Bb7 Rg8 Kf6 Kc5 Kf7 Rd8 Bf8+ Kc4 Bf3 b4 Bxb4 Kxb4
38 0.00 132.8M 0:06.05 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kd6 Kg5 Rc8 Bb7 Rg8 Kf6 Kc5 Kf7 Rd8 Bf8+ Kc4 Bf3 b4 Bxb4 Kxb4
37 0.00 119.4M 0:05.44 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Kxh6 Kd6 Kg5 Rc8 Bb7 Rg8 Kf6 Kc5 Kf7 Rd8 Bf8+ Kc4 Bf3 b4 Bxb4 Kxb4
36 0.00 70.6M 0:03.30 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Rh4 Ke5 Kc6 Be4+ Kb5 Bd3+ Kc5 Bf8+ Kc6 Ba3 Rh3 Kd4 Rg3 Kc4 b2 Bxb2 Kb6 Bf5 Kxa6
35 0.00 54.5M 0:02.56 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Rh4 Bf6 Rh6 Bc3 Kd5 Kg4 Rd6 Kf4 Re6 Bb2 Re8 Kf3 Kc5 Kf4 Re1 Be5 Kd5 Bb2 Re7 Kf3 Re8 Kf4 Kc5 Bc3 Re7 Be5
34 0.00 49.4M 0:02.33 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Rh4 Bf6 Rh6 Bc3 Kd5 Kg4 Rd6 Kf4 Re6 Bb2 Re8 Kf3 Kc5 Kf4 Re1 Be5 Kd5 Bb2 Re7 Kf3 Re8 Kf4 Kc5 Bc3 Re7 Be5
33 0.00 47.9M 0:02.26 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Rh4 Bf6 Rh6 Bc3 Kd5 Kg4 Rb6 Kf4 Re6 Bb2 Re8 Kf3 Kc5 Kf4 Re1 Be5 Kd5 Bb2 Re7 Kf3 Re8 Kf4 Kc5 Bg7 Re6
32 -0.08 39.5M 0:01.88 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Rh4 Bf6 Rh6 Bc3 Kd5 Kg4 Rh1 Kf3 Rc1 Bb2 Re1 Bc3 Re8 Bb2 Re7 Kf4 Re6 Bg7 Re1 Bb2 Kc5 Bg7 Kb4
31 -0.08 37.7M 0:01.80 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Kb4 Bb2 Rc8 Bd3 Kc5 Kf4 Re8 Bc3 Kd5 Kf3 Re7 Bb2 Re6 Kf4 Re8 Kf3 Kc5 Kf4 Re1 Bg7 Kb4 Bd4 Re7
30 -0.08 35.4M 0:01.69 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Kb4 Bb2 Rc8 Bd3 Kc5 Kf4 Re8 Bc3 Kd5 Kf3 Re7 Bb2 Re6 Kf4 Re8 Kf3 Kc5 Kf4 Re1 Kf3 Re6 Kf4
29 -0.08 32.3M 0:01.54 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Kb4 Bb2 Rc8 Bd3 Kc5 Kf4 Re8 Bc3 Kd5 Kf3 Re7 Bb2 Re6 Kf4 Re8 Kf3 Kc5 Kf4 Re1 Be5 Kd5 Bc3 Rc1
28 -0.08 30.4M 0:01.44 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Kb4 Bb2 Rc8 Bd3 Kc5 Kf4 Re8 Bc3 Kd5 Kf3 Re7 Bb2 Re6 Kf4 Re8 Kf3 Kc5 Kf4 Re1 Bg7
27 -0.08 28.8M 0:01.37 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Kb4 Bb2 Rc8 Bd3 Kc5 Kf4 Re8 Bc3 Kd5 Kf3 Re7 Bb2 Re6 Kf4 Re8 Kf3 Kc5 Kf4 Re1
26 -0.08 28.1M 0:01.34 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Kb4 Bb2 Rc8 Bd3 Kc5 Kf4 Re8 Bc3 Kd5 Kf3 Re7 Bb2 Re6 Kf4 Kc5 Bc3 Re8
25 -0.36 22.4M 0:01.07 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 Rc3 Bd4 Rc7 Ke6 Ka5 Kd6 Rh7 Be4 Rh4 Kd5 a6 Bd3 Kb4 Be5 Rh3 Be2 Re3 Bd6+ Kc3 Be5+ Kc2 Bf1 Rf3
24 -0.08 15.0M 0:00.72 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 Rc3 Bd4 Rc7 Ke6 Ka5 Kd6 Rh7 Be3 Kb4 Bc6 a6 Bd2+ Kc4 Bd5+ Kd3 Ba5 Rh6+ Kc5 Rh5 Kc6
23 -0.08 14.6M 0:00.70 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 Rc3 Bd4 Rc7 Ke6 Ka5 Kd6 Rh7 Be3 Kb4 Bc6 a6 Bd2+ Kc4 Bd5+ Kd3 Ba5 Rh6+ Kc5 Rh7 Bf3
22 -0.08 13.7M 0:00.66 Bd5 Kc8 Bxa8 Rc4 Bxg7 Rg4+ Kxh6 Kc7 Bf3 Rc4 Kg5 Kb6 Bb7 b4 Kf5 Ka5 Bf6 Kb5 Bd5 Rc7 Ke5 Rd7 Kd4 Rh7 Bc4+ Ka5 Kd3 Rh6 Bd4
21 -0.08 13.1M 0:00.63 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Kf5 Kxa6 Be3 b4 Be4 Rc3 Bd4 Ra3 Bc6 Ra5+ Ke4 Rh5 Kd3 Rh7 Kc4 Ka5 Be4 Rh4 Bc2 a6 Kc5
20 -0.08 9.14M 0:00.45 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Bxh6 Kc7 Bd5 Rc5 Bf4+ Kd7 Bf7 Rc6+ Kf5 Rxa6 Bd2 Ra5+ Ke4 Ra3 Kd4 a5 Bd5 Kc7 Kc5
19 -0.49 5.56M 0:00.28 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bd5 Rc5 Bb3 Rc6+ Kg5 Rxa6 Kf4 Kc6 Ke4 Ra3 Bf7 Rg3 Be8+ Kb7 Bd4 a5 Kd5 Ka6
18 -0.46 4.59M 0:00.24 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bd5 Rc5 Bb3 Rc6+ Kg5 Rxa6 Kf4 Ra3 Bd5 a5 Ke4 Rh3 Kd4 Kb6
17 -0.58 3.14M 0:00.17 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Bb7+ Kc7 Kxh6 b4 Kg5 b3 Kf5 Kb6 Bc3 Kc5 Ke5 Kc4 Bd4 Ra5+ Ke4 Rg5 Bf6 Rg6 Bd5+ Kb4
16 -0.49 2.54M 0:00.14 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 b4 Kg5 Rxa6 Bd4 Ra3 Kf4 a5 Ke5 Kc7 Be4 Rh3 Kd5 Rh5+ Kc4 Rh4
15 -0.44 1.20M 0:00.07 Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Bd5 Rc5 Be6+ Kd8 Bxh6 Ke7 Bg8 Rc3 Bd2 Rg3+ Bg5+ Kd6 Kf5 Kc5 Be6 b3 Bc1 Kb4 Bb2
14 -0.46 860091 0:00.05 Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 b4 Kg5 b3 Bf3 Kc7 Kf5 Kb6 Be2 Ra2
13 -0.51 354552 0:00.03 Bd5 Kc8 Bxa8 Rc4 Kxg7 Kd7 Kxh6 Ke6 Bg7 b4 Bf3 Kf5 Bb2 Rh4+ Kg7 Ke6
12 -0.50 166835 0:00.02 Bd5 Kc8 Bxa8 Rc4 Kxg7 Kd7 Kf6 b4 Bd5 Rc5 Be6+ Kc6 Bb8 Ra5
11 -0.45 117165 0:00.01 Bd5 Kc8 Bxc7 Kxc7 Bxa8 Kb6 Bb7 b4 Bd5 Kxa6 Bc4+ Kb7 Be6 Kb6
10 -0.33 59800 0:00.01 Bd5 Kc8 Bxc7 Kxc7 Bxa8 Kb6 Bb7 b4 Bd5 Kxa6 Bc4+ Kb7 Be6
9 -0.08 10876 0:00.00 Bd5 Kc8 Bxc7 Kxc7 Bxa8 Kb6 Bd5 Kxa6 Kxg7
8 -0.08 7657 0:00.00 Bd5 b4 Bxa8 Kxa8 Bxc7 b3 Be5 h5 Kxg7
7 -0.08 3537 0:00.00 Bd5 b4 Bxa8 Kxa8 Bxc7 b3 Be5 h5
6 -0.08 3306 0:00.00 Bd5 b4 Bxa8 Kxa8 Bxc7 b3 Be5
5 -0.21 2629 0:00.00 Bd5 b4 Bxa8 Kxa8 Bxc7
4 -0.08 1978 0:00.00 Bd5 b4 Bxa8 Kxa8
3 -0.08 1459 0:00.00 Bd5 b4 Bxa8
2 -0.66 953 0:00.00 Bd5 b4
1 -4.00 368 0:00.00 Bd5
0 #
-
- Posts: 1167
- Joined: Thu Dec 25, 2008 9:07 pm
- Full name: Herbert L
Re: Someone lit a fire under the Stockfish team
29... cxb3 is indeed a draw, but white has to go with 28.a4! instead 28.Bxc4
After 28.a4 a6 29.Ba2 Qe7 30.b4 Qg7 31.Bxg7 Kxf7 32.Rf7+ wins for white.
After 28.a4 a6 29.Ba2 Qe7 30.b4 Qg7 31.Bxg7 Kxf7 32.Rf7+ wins for white.
-
- Posts: 4889
- Joined: Thu Mar 09, 2006 6:34 am
- Location: Pen Argyl, Pennsylvania
Re: Someone lit a fire under the Stockfish team
a4 !! nice find. I had purposely couched my statements since I did not look at it closely.Paloma wrote:29... cxb3 is indeed a draw, but white has to go with 28.a4! instead 28.Bxc4
After 28.a4 a6 29.Ba2 Qe7 30.b4 Qg7 31.Bxg7 Kxf7 32.Rf7+ wins for white.
That's a fairly decent test position:
[d]4q1kr/p6p/4P1pB/1p2p3/2r1P3/1BP5/PP5P/5RK1 w - - 0 28
latest dev-SF-McB
Code: Select all
dep score nodes time (not shown: tbhits knps seldep)
48 +5.95 5.04G 3:15.20 a4 a6 h4 Qe7 Kg2 Qe8 Rf2 Qe7 Ba2 Qg7 Bxg7 Kxg7 Bxc4 bxc4 Rf7+ Kh6 Ra7 Re8 Rxa6 Kg7 a5 Kf6 Rb6 h5 a6 Ke7 a7 Ra8 Ra6 Kf8 Kf2 Ke8 Ke2 Ke7 Ke3 Kf6 e7+ Kxe7 Rxg6 Kf8 Rg5 Rxa7 Rxe5 Rh7 Kd4 Rg7 Rxh5 Rg4 Rf5+ Ke7 h5 Rh4 Kxc4 Rxe4+ Kd5 R
48 +5.64! 4.47G 2:53.63 a4!
48 +5.26! 4.38G 2:50.25 a4!
48 +4.97! 4.35G 2:48.74 a4!
48 +4.75! 4.33G 2:47.92 a4!
48 +4.59! 4.31G 2:47.32 a4!
48 +4.48! 4.29G 2:46.63 a4!
48 +4.40! 4.26G 2:45.22 a4!
47 +4.33! 3.63G 2:20.83 a4!
47 +3.28! 3.45G 2:13.96 a4!
47 +2.45! 3.12G 2:00.95 a4!
47 +1.81! 2.88G 1:51.18 a4!
47 +1.31! 2.70G 1:43.95 a4!
47 +0.92! 2.62G 1:40.77 a4!
47 +0.63! 2.52G 1:36.70 a4!
47 +0.42! 2.47G 1:34.90 a4!
47 +0.26! 2.44G 1:33.70 a4!
47 +0.15! 2.43G 1:33.33 a4!
47 +0.07! 2.42G 1:32.92 a4!
46 0.00 2.33G 1:29.31 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
45 0.00 1.86G 1:10.40 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
44 0.00 1.65G 1:02.50 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
43 0.00 1.19G 0:44.85 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
42 0.00 983.3M 0:36.96 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
41 0.00 724.9M 0:27.14 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
40 0.00 595.4M 0:22.31 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
39 0.00 421.5M 0:15.85 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
38 0.00 345.3M 0:12.97 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
37 0.00 290.8M 0:10.95 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
36 0.00 220.6M 0:08.32 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
35 0.00 196.6M 0:07.44 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
34 0.00 133.6M 0:05.10 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
33 0.00 106.6M 0:04.09 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
32 0.00 88.6M 0:03.40 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
31 0.00 72.3M 0:02.79 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
30 0.00 58.5M 0:02.26 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
29 0.00 52.7M 0:02.03 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
28 0.00 50.0M 0:01.93 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
27 0.00 33.1M 0:01.27 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
26 0.00 30.8M 0:01.18 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
25 0.00 25.9M 0:01.00 a4 a6 h4 Qe7 Kg2 Qe8 Kg1
24 0.00 19.8M 0:00.76 a4 a6 h4 Qe7 Kg2 g5 Bxc4 bxc4 Rf5 gxh4 a5 Qe8 Kh2 Qe7 Rf1 Qe8 Rf5
23 -3.13 4.77M 0:00.18 Rf7 Qxf7 exf7+ Kxf7 Kf2 Rb8 Bc1 Kf6 Bxc4 bxc4 h4 Kf7 Ke2 Rb7 a3 Rb6 Ke1 Rd6 Be3 a5 a4 Ke6 Ke2 Rd3 Bb6 Rh3 Bxa5 Rxh4
22 -3.03 4.02M 0:00.15 Rf7 Qxf7 exf7+ Kxf7 h4 Rb8 Kf2 Ke8 Bxc4 bxc4 Bc1 Kf7 Ke2 Rb6 a3 Rb7 Ke1 Rb8 Ke2 Rb6 Kf3 Rd6 Ke2 a5 a4 Rd3 Be3 Ke6 Bb6 Rh3 Bxa5
21 -3.15 3.22M 0:00.12 Rf7 Qxf7 exf7+ Kxf7 Kf2 Rb8 h4 Ke8 Bxc4 bxc4 Bc1 Kf7 Ke2 Rb6 a3 Rb7 Ke1 Rb8 Ke2 Rb6 Ke1 Rd6 Be3 a5 a4 Ke6 Ke2 Rd3 Bb6 Rh3 Bxa5 Rxh4
20 -3.11 2.55M 0:00.09 Rf7 Qxf7 exf7+ Kxf7 Kf2 Rb8 h4 Ke8 Bxc4 bxc4 Bc1 Kf7 Ke2 Rb6 a3 Rb7 Kd1 Rd7+ Kc2 Rd3 b3 Rh3 bxc4 Rxh4 Kd3 Rh3+ Be3 Ke6 Ke2 Kd6
19 -3.08 2.13M 0:00.08 Rf7 Qxf7 exf7+ Kxf7 Kf2 Rb8 h4 Ke8 Bxc4 bxc4 Bc1 Kf7 Ke2 Rb6 Ke1 Rd6 Ke2 Rd3 Be3 a5 a4 Ke6 Kf3 Rd1 Bb6 Ra1 Bxa5 Rxa4
18 -3.06 1.75M 0:00.06 Rf7 Qxf7 exf7+ Kxf7 Kf2 Kf6 Bxc4 bxc4 h4 Rb8 Bc1 Kf7 Ke2 Rb6 Ke1 Rd6 Be3 a5 a4 Ke6 Ke2 Rd3 Kf3 Rd1 Kg4
17 -2.87 1.22M 0:00.04 Rf7 Qxf7 exf7+ Kxf7 h4 Rb8 Kf2 Ke7 Bxc4 bxc4 Bc1 Kf6 Ke2 Rb6 Bg5+ Kf7 Bc1 Ra6 a3 Rb6 Kd1 Rd6+ Ke2
16 -2.91 1.07M 0:00.04 Rf7 Qxf7 exf7+ Kxf7 h4 Rb8 Kf2 Ke7 Bxc4 bxc4 Bc1 Kd6 Ke2 Ke6 Ke1 Rd8 Be3 a6 Ke2 Rb8
15 -2.95 983264 0:00.04 Rf7 Qxf7 exf7+ Kxf7 Kf2 Kf6 Bxc4 bxc4 h4 Rb8 Bc1 Rb6 Ke1 Kf7 Kd1 Ra6 a3 Rd6+ Ke2 Rd8 a4
14 -3.00 934655 0:00.04 Rf7 Qxf7 exf7+ Kxf7 h4 Rb8 Kf2 Ke7 Bxc4 bxc4 Bc1 Ke6 Ke1 Rf8 Ke2 a5 a4 Rc8 Kd1 Kd6
13 -3.10 762400 0:00.03 Rf7 Qxf7 exf7+ Kxf7 h4 Rb8 Kf2 Kf6 Bg5+ Kg7 Bxc4 bxc4 Bc1 Kf7 Ke2 Rb6
12 -3.00 612366 0:00.02 Rf7 Qxf7 exf7+ Kxf7 Kf2 Kf6 Bxc4 bxc4 h4 Rb8 Bc1 Kf7 Ke2 Rb6 Kd1 Ra6 a3 Rd6+ Ke2 Rd8
11 -2.99 218164 0:00.01 Rf7 Qxf7 exf7+ Kxf7 Be3 Rc8 Bxa7 Kf6 Bxc4 Rxc4 Kf2 Rxe4 Bc5 Ra4 Ba3
10 -2.61 101122 0:00.00 Rf7 Qxf7 exf7+ Kxf7 Be3 a5 Bb6 a4 Bxc4+ bxc4 Bc7 Kf6
9 -4.51 30755 0:00.00 Bxc4 bxc4 b3 cxb3 axb3 Qa8 Rf8+ Qxf8 Bxf8 Kxf8 Kf2
8 -4.65 18490 0:00.00 Bxc4 bxc4 Kg2 Qd8 Rf8+ Qxf8 Bxf8 Kxf8 Kg3
7 -4.63 14058 0:00.00 Bxc4 bxc4 Kg2 Qc8 Rf8+ Qxf8 Bxf8 Kxf8
6 -4.58 9646 0:00.00 Bxc4 bxc4 Kg2 Qa8 Rf8+ Qxf8 Bxf8
5 -4.50 4808 0:00.00 Rf8+ Qxf8 Bxf8 Kxf8 Bxc4 bxc4
4 -4.67 3283 0:00.00 Rf8+ Qxf8 Bxf8 Kxf8 Bxc4 bxc4
3 -4.50 1852 0:00.00 Rf8+ Qxf8 Bxf8 Kxf8
2 -4.50 829 0:00.00 Rf8+ Qxf8 Bxf8
1 -4.50 182 0:00.00 Rf8+ Qxf8 Bxf8 Kxf8 Bxc4 bxc4
Code: Select all
dep score nodes time (not shown: tbhits knps seldep)
58 0.00 1.98G 1:18.03 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
57 0.00 1.78G 1:10.37 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
56 0.00 1.32G 0:51.99 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
55 0.00 1.15G 0:45.33 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
54 0.00 1.10G 0:43.02 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
53 0.00 976.3M 0:38.23 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
52 0.00 699.9M 0:27.31 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
51 0.00 682.6M 0:26.62 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
50 0.00 624.7M 0:24.31 Kg2 Qe7 h4 a6 a4 Qe8 Kg1 Qe7 Kg2
-
- Posts: 919
- Joined: Tue Nov 24, 2015 9:11 pm
- Location: upstate
Re: Someone lit a fire under the Stockfish team
Correct.Paloma wrote:29... cxb3 is indeed a draw, but white has to go with 28.a4! instead 28.Bxc4
After 28.a4 a6 29.Ba2 Qe7 30.b4 Qg7 31.Bxg7 Kxf7 32.Rf7+ wins for white.
In Nov 2015 I posted extensive analysis of the queen sacrifice on chessgames.com. The winning lines springing from 28.a4! (the move first suggested, AFAIK, by Vass on ChessPub in 2011) are demonstrated on the same page two posts down.
Since then the analysis was corroborated in the numerous lines following 24.Qxe5 on Let's Check with various versions of Houdini, Komodo and SF (it wasn't until Apr 2016 that I managed to get SF dev to back-propagate the winning eval to the root). Easily 100+ hours of analysis in several long sessions, in most lines going as deep as mate or at least a >+10.xx eval.
There can be no shadow of doubt that Gusev's queen sacrifice wins in all lines; however, about twice a year some fool on Let's Check will run SF or Fritz for a couple of hours on the root position and bump down the 24.Qxe5 lines in favor of 24.Qa3 0.00 or some such. I corrected the situation a couple of times but later realized that this engine race is not worth my time and effort.
Here are two relics of these sessions, analysis of the root position after backsliding for hours through numerous lines:
[d]4q1kr/p6p/1prQPppB/4n3/4P3/2P5/PP2B2P/R5K1 w - - 0 24
Code: Select all
Analysis by Stockfish 240416 64 POPCNT (16 GB, with backsliding):
24.Qxe5 fxe5 25.Rf1 a6 26.Bd1 Rc4 27.Bb3 b5 28.a4 Qe7 29.Kg2 g5 30.Rf5 Qd8 31.Rf7 Qd2+ 32.Rf2 Qd8 33.Ba2 Qa8 34.Kg3 Qd8 35.Rf7 Qd3+ 36.Rf3 Qd6 37.Kg2 Qe7 38.Rf5 Qg7 39.Bxg7 Kxg7 40.Bxc4 bxc4 41.Kf3 Re8 42.Rxe5 h6 43.e7 Kf6 44.Rc5 Rxe7 45.Rxc4 Rf7 46.Rc6+ Ke5+ 47.Ke3 g4 48.Rc5+ Ke6 49.Rf5 Rb7 50.b4 Rc7 51.Rc5 Rf7 52.Kd4 Rd7+ 53.Rd5 Rb7 54.b5 axb5 55.axb5 Kf6 56.Rc5 Kg6 57.c4 h5 58.Rc6+ Kg5 59.Ke3 h4 60.Rc5+ Kg6 61.Kf4 g3 62.hxg3 h3 63.Rg5+ Kh6 64.Rg4 Rf7+ 65.Ke3 Rf1 66.Rh4+ Kg6 67.b6 Re1+ 68.Kf4 Rh1 69.c5 h2 70.Ke5 Kg7 71.c6 Rb1 72.c7 Rb5+ 73.Kf4
+- (6.87) Depth: 61/111 17:41:01 1224441MN, tb=313592914
Code: Select all
Analysis by CorChess beta 151016 x64 POPCNT (16 GB with backsliding):
24.Qxe5 fxe5 25.Rf1 Rc8 26.Bd1 b5 27.Bb3 Rc4 28.a4 a6 29.Kg2 Qe7 30.Rf2 Qe8 31.Ba2 Qa8 32.Kg3 Qe8 33.Rf1 g5 34.Rf5 Qd8 35.Rf7 Qd3+ 36.Rf3 Qd6 37.Kg2 Qe7 38.Rf5 Qg7 39.Bxg7 Kxg7 40.Bxc4 bxc4 41.Kf3 Kg6 42.e7 Re8 43.Rxe5 Kf7 44.Rf5+ Kg6 45.Ra5 Kh5 46.Rxa6 g4+ 47.Ke3 Rxe7 48.a5 Re8 49.Rc6 Ra8 50.Rc5+ Kg6 51.Kf4 h5 52.Rc6+ Kf7 53.a6 Rf8 54.Kf5 Ke7+ 55.Ke5 Kd7 56.Rh6 Rg8 57.Kf4 h4 58.Rxh4 g3 59.hxg3 Rf8+ 60.Ke3 Ra8 61.Rh6 Re8 62.Rh7+ Kc6 63.Kd4 Rd8+ 64.Kxc4 Rc8 65.Rh6+ Kc7 66.e5 Kb8+ 67.Kd5 Ka7 68.Kd6 Ra8 69.Kc5 Rc8+ 70.Kd5 Rd8+ 71.Kc4 Kb8 72.Kc5 Re8 73.Kd5 Rd8+ 74.Kc6 Rc8+ 75.Kd7 Rc7+ 76.Kd6 Rc8 77.e6
+- (10.71) Depth: 68/126 15:48:16 1811931MN, tb=2147483647
-
- Posts: 12540
- Joined: Wed Mar 08, 2006 8:57 pm
- Location: Redmond, WA USA
Re: Someone lit a fire under the Stockfish team
Let's see if Uri's idea works:
Seems to solve a little faster
Code: Select all
Searching: rk6/p1r3p1/P3B1Kp/1p2B3/8/8/8/8 w - - 0 1
infinite: 0 time: 0 increment: 0 moves to go: 0
1 -4.04 00:00 2765 Bd5
2 -0.08 00:00 6310 Bd5 b4
3 +0.00 00:00 8411 Bd5 b4 Bxa8
4 +0.00 00:00 9995 Bd5 b4 Bxa8 Kxa8 Bxc7
5 -0.08 00:00 39244 Bd5 b4 Bxa8 Kxa8 Bxc7
6 -0.08 00:00 73793 Bd5 Kc8 Bxa8 Rc1 Bb7+ Kd7 Bxg7 Rg1+ Kxh6
7 -0.17 00:00 91952 Bd5 Kc8 Bxa8 Rc1 Kxg7 b4 Bd5
8 -0.20 00:00 107911 Bd5 Kc8 Bxa8 Rc1 Bxg7 b4 Bd5 Rd1
9 -0.25 00:00 126915 Bd5 Kc8 Bxc7 Kxc7 Bxa8 Kb6 Bd5 Kxa6 Be6 b4
10 -0.23 00:00 225696 Bd5 Kc8 Bxc7 Kxc7 Bxa8 Kb6 Bd5 Kxa6 Be6 Ka5 Bg8 h5 Kg5 b4
11 -0.62 00:00 353476 Bd5 Kc8 Bxc7 Kxc7 Bxa8 Kb6 Bd5 Kxa6 Be6 Kb6 Bd5 a5 Be4 a4
12 -0.66 00:00 491928 Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bd5 Rc5 Bb7 b4 Bd4 Rc4 Bxa7 b3
13 -0.43 00:00 1106K Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 b4 Kg5 Kc7 Be5+ Kb6 Kf4 b3+ Ke3 Rxa6 Bd4+ Kb5 Bd5
14 -0.63 00:00 1734K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 b3 Kg5 Kc7 Kf5 Kb6 Be4 Rb4 Bb2 Rb5+ Ke6 Kxa6
15 -0.56 00:00 2722K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 b3 Kg5 Kc7 Kf5 Kb6 Be4 Rb4 Bc3 Rb5+ Kf4 b2
16 -0.50 00:00 4443K Bd5 Kc8 Bxa8 Rc4 Bxg7 Ra4 Kxh6 b4 Bb7+ Kc7 Be5+ Kd7 Kg5 Ke6 Kf4 b3+ Be4 Rxa6 Bd4 Ra4 Ke3 a5 Bc3 Kd6 Bd4 Ra2 Bb1
17 -0.42 00:01 7950K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kd7 Kxh6 Ra4 Kg5 Rxa6 Kf5 b4 Bd5 Ra3 Be6+ Kc6 Ke4 Kb5 Be5 a5
18 -0.42 00:01 9694K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bd5 Rc5 Bf3 Rf5 Be4 Ra5 Kg6 b3 Bd3 Ra2 Kf5 b2
19 -0.40 00:02 15176K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 Kb5 Kf5 Rh4 Bf6 Rh5+ Kf4 Rh2 Bd4 b3 Be4 Kxa6 Ke3
20 -0.42 00:02 16270K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Kg5 Kb6 Bb7 b3 Kf5 Kc5 Be4 Kb4 Bd3 Rc7 Bd4 Rd7 Ke4 Ka4 Bb2 Re7+ Kf4 Kb4 Bd4
21 -0.34 00:03 21106K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 Kb5 Kf5 Rh4 Bf6 Rh5+ Kf4 Kc4 Ke3 Rh6 Bb2 Rh3+ Kd2 Rh2+ Kc1 Rf2 Bc6 Rf7 Kb1 Rf8
22 -0.18 00:04 27104K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 b3 Kf5 Kc5 Be4 Ra4 Bd3 Rh4 Bf6 Rh1 Bc3 Rh7 Kf4 Re7 Be5 Re6 Bb2 Kd5 Bc3 Re8 Bg7
23 -0.18 00:05 31474K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 b3 Kf5 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Rb4 Bb2 Rb8 Kf4 Re8 Bg7 Re1 Bc3 Re6 Bb2 Kc5 Bg7 Re8 Bb2 Kb4
24 -0.13 00:06 36281K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 b3 Kf5 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Rb4 Bb2 Rb8 Kf4 Re8 Bc3 Re6 Bb2 Re7 Bc3 Kc5 Be5 Kb6 Bd4+ Ka5
25 -0.17 00:12 50414K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 Kb5 Kf5 Rh4 Bf6 Rh5+ Kf4 Kc4 Ke4 Rh6 Be5 Rh4+ Ke3 Rh7 Kd2 Rd7+ Kc2 b3+ Kc1 Re7 Bf6 Re2
26 -0.08 00:14 53092K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 b3 Kf5 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Kc6 Bb2 Kd6 Bg7 Kd5 Bc3 Ra2 Kf4 Rf2+ Ke3 Rf8 Bg7 Re8+ Kf4 Re1 Bc3 Re7 Bb2 Re6 Bc3
27 -0.08 00:15 57711K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 b3 Kf5 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Kc6 Bb2 Kd6 Bg7 Kd5 Bc3 Kc5 Kf5 Rh4 Bf6 Rh6 Ke5 Kc6 Be4+ Kb5 Bd3+ Ka4 Bg7 Rh3 Ke4
28 -0.08 00:18 64746K Bd5 Kc8 Bxa8 Rc4 Bxg7 b4 Kxh6 Kc7 Bb7 Kb6 Kg5 b3 Kf5 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Kc6 Bb2 Kd6 Bg7 Kd5 Bc3 Kc5 Be5 Rb4 Bc3 Rb8 Kf4 Re8 Bb2 Kb4 Bd4 Re6 Be5
29 -0.08 00:28 90943K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kd7 Kxh6 Kd6 Bb7 b4 Kg5 b3 Kf5 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Kc6 Bb2 Kd6 Bg7 Kd5 Bc3 Kc5 Be5 Rb4 Bc3 Rb8 Kf4 Re8 Be5 Re7 Bc3 Kb6 Bd4+ Ka5
30 -0.08 00:29 94719K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Kc6 Bb2 Kc5 Be5 Rb4 Bc3 Rb8 Kf4 Re8 Bb2 Kd5 Bc3 Re7 Bb2 Re6 Bc3 Kc6 Bd4 Re7 Be4+ Kb5
31 -0.08 00:37 108483K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Kc6 Bb2 Kc5 Be5 Rb4 Bc3 Rb8 Kf4 Re8 Bb2 Kd5 Bc3 Re7 Bb2 Re6 Bc3 Kc6 Bd4 Re7 Be4+ Kb5 Bd3+ Kb4 Kf5
32 -0.08 00:50 130361K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Rb4 Bb2 Rb8 Kf4 Re8 Bc3 Re7 Bb2 Re6 Bc3 Kc5 Be5 Re7 Bc3 Kb6 Bd4+ Ka5 Be5 Rd7 Ke4 Kb6 Bd4+ Kc6 Ke3
33 -0.08 01:00 147677K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Rb4 Bb2 Rb8 Kf4 Re8 Bc3 Re7 Bb2 Re6 Bg7 Kc5 Bb2 Re1 Bg7 Kd5 Bc3 Rg1 Ke3 Rg3+ Kd2 Rg2+ Kc1 Kc5 Bb2 Rg1+ Kd2 Kb4 Bd4
34 -0.08 01:19 184258K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Rb4 Bb2 Rb8 Kf4 Re8 Bc3 Re7 Bb2 Re6 Bc3 Kc5 Bb2 Re8 Bg7 Rd8 Ke3 Kb4 Bd4 Rd7 Bf6 Rf7 Bd4 Ka3
35 -0.08 01:46 214865K Bd5 Kc8 Bxa8 Rc4 Bxg7 Kc7 Bxh6 Kb6 Bb7 b4 Kf5 b3 Bg7 Kc5 Be4 Ra4 Bd3 Kd5 Kg5 Rb4 Bb2 Rb8 Kf4 Re8 Bc3 Re7 Bb2 Re6 Bc3 Kc5 Bb2 Re8 Bg7 Rd8 Ke3 Kb4 Bb2 Rd6 Bd4 Rd7 Bb2 Re7+ Kd4 Re8 Kd5
36 #5 02:07 249638K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
37 #5 02:07 249838K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
38 #5 02:07 249878K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
39 #5 02:07 250022K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
40 #5 02:08 250173K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
41 #5 02:08 250247K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
42 #5 02:08 250299K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
43 #5 02:08 250573K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
44 #5 02:09 251845K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
45 #5 02:10 252293K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
46 #5 02:10 252338K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
47 #5 02:10 252445K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
48 #5 02:10 252632K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
49 #5 02:10 253001K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
50 #5 02:11 253775K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
51 #5 02:11 253873K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
52 #5 02:11 254086K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
53 #5 02:11 254176K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
54 #5 02:12 254899K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
55 #5 02:12 255867K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
56 #5 02:12 256054K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
57 #5 02:12 256427K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
58 #5 02:12 256513K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
59 #5 02:14 257770K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
60 #5 02:14 258102K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
61 #5 02:14 258937K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
62 #5 02:15 259901K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
63 #5 02:15 259966K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
64 #5 02:15 260468K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
65 #5 02:16 262126K Bd7 b4 Kf7 h5 Ke7 b3 Kd8 b2 Bxc7+
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
-
- Posts: 12540
- Joined: Wed Mar 08, 2006 8:57 pm
- Location: Redmond, WA USA
Re: Someone lit a fire under the Stockfish team
Trivial change, just like Uri said.
Code: Select all
template <NodeType NT>
Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode, bool skipEarlyPruning, bool cramped) {
const bool PvNode = NT == PV;
const bool rootNode = PvNode && ss->ply == 0;
assert(-VALUE_INFINITE <= alpha && alpha < beta && beta <= VALUE_INFINITE);
assert(PvNode || (alpha == beta - 1));
assert(DEPTH_ZERO < depth && depth < DEPTH_MAX);
assert(!(PvNode && cutNode));
assert(depth / ONE_PLY * ONE_PLY == depth);
int verification_depth = Options["Nullmove Verification Depth"];
size_t maxmove = 0;
Move pv[MAX_PLY+1], capturesSearched[32], quietsSearched[64];
StateInfo st;
TTEntry* tte;
Key posKey;
Move ttMove, move, excludedMove, bestMove;
Depth extension, newDepth;
Value bestValue, value, ttValue, eval, maxValue;
bool ttHit, inCheck, givesCheck, singularExtensionNode, improving;
bool captureOrPromotion, doFullDepthSearch, moveCountPruning, skipQuiets, ttCapture, pvExact;
Piece movedPiece;
int moveCount, captureCount, quietCount;
// Step 1. Initialize node
Thread* thisThread = pos.this_thread();
inCheck = pos.checkers();
moveCount = captureCount = quietCount = ss->moveCount = 0;
bestValue = -VALUE_INFINITE;
maxValue = VALUE_INFINITE;
// Check for the available remaining time
if (thisThread == Threads.main())
static_cast<MainThread*>(thisThread)->check_time();
// Used to send selDepth info to GUI (selDepth counts from 1, ply from 0)
if (PvNode && thisThread->selDepth < ss->ply + 1)
thisThread->selDepth = ss->ply + 1;
if (!rootNode)
{
// Step 2. Check for aborted search and immediate draw
if ( Threads.stop.load(std::memory_order_relaxed)
|| pos.is_draw(ss->ply)
|| ss->ply >= MAX_PLY)
return (ss->ply >= MAX_PLY && !inCheck) ? evaluate(pos) : VALUE_DRAW;
// Step 3. Mate distance pruning. Even if we mate at the next move our score
// would be at best mate_in(ss->ply+1), but if alpha is already bigger because
// a shorter mate was found upward in the tree then there is no need to search
// because we will never beat the current alpha. Same logic but with reversed
// signs applies also in the opposite condition of being mated instead of giving
// mate. In this case return a fail-high score.
alpha = std::max(mated_in(ss->ply), alpha);
beta = std::min(mate_in(ss->ply+1), beta);
if (alpha >= beta)
return alpha;
}
assert(0 <= ss->ply && ss->ply < MAX_PLY);
(ss+1)->ply = ss->ply + 1;
ss->currentMove = (ss+1)->excludedMove = bestMove = MOVE_NONE;
ss->contHistory = thisThread->contHistory[NO_PIECE][0].get();
(ss+2)->killers[0] = (ss+2)->killers[1] = MOVE_NONE;
Square prevSq = to_sq((ss-1)->currentMove);
// Initialize statScore to zero for the grandchildren of the current position.
// So statScore is shared between all grandchildren and only the first grandchild
// starts with statScore = 0. Later grandchildren start with the last calculated
// statScore of the previous grandchild. This influences the reduction rules in
// LMR which are based on the statScore of parent position.
(ss+2)->statScore = 0;
// Step 4. Transposition table lookup. We don't want the score of a partial
// search to overwrite a previous full search TT value, so we use a different
// position key in case of an excluded move.
excludedMove = ss->excludedMove;
posKey = pos.key() ^ Key(excludedMove << 16); // Isn't a very good hash
tte = TT.probe(posKey, ttHit);
ttValue = ttHit ? value_from_tt(tte->value(), ss->ply) : VALUE_NONE;
ttMove = rootNode ? thisThread->rootMoves[thisThread->PVIdx].pv[0]
: ttHit ? tte->move() : MOVE_NONE;
// At non-PV nodes we check for an early TT cutoff
if ( !PvNode
&& ttHit
&& tte->depth() >= depth
&& ttValue != VALUE_NONE // Possible in case of TT access race
&& (ttValue >= beta ? (tte->bound() & BOUND_LOWER)
: (tte->bound() & BOUND_UPPER)))
{
// If ttMove is quiet, update move sorting heuristics on TT hit
if (ttMove)
{
if (ttValue >= beta)
{
if (!pos.capture_or_promotion(ttMove))
update_quiet_stats(pos, ss, ttMove, nullptr, 0, stat_bonus(depth));
// Extra penalty for a quiet TT move in previous ply when it gets refuted
if ((ss-1)->moveCount == 1 && !pos.captured_piece())
update_continuation_histories(ss-1, pos.piece_on(prevSq), prevSq, -stat_bonus(depth + ONE_PLY));
}
// Penalty for a quiet ttMove that fails low
else if (!pos.capture_or_promotion(ttMove))
{
int penalty = -stat_bonus(depth);
thisThread->mainHistory[pos.side_to_move()][from_to(ttMove)] << penalty;
update_continuation_histories(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
}
}
return ttValue;
}
// Step 5. Tablebases probe
if (!rootNode && TB::Cardinality)
{
int piecesCount = pos.count<ALL_PIECES>();
if ( piecesCount <= TB::Cardinality
&& (piecesCount < TB::Cardinality || depth >= TB::ProbeDepth)
&& pos.rule50_count() == 0
&& !pos.can_castle(ANY_CASTLING))
{
TB::ProbeState err;
TB::WDLScore wdl = Tablebases::probe_wdl(pos, &err);
if (err != TB::ProbeState::FAIL)
{
thisThread->tbHits.fetch_add(1, std::memory_order_relaxed);
int drawScore = TB::UseRule50 ? 1 : 0;
value = wdl < -drawScore ? -VALUE_MATE + MAX_PLY + ss->ply + 1
: wdl > drawScore ? VALUE_MATE - MAX_PLY - ss->ply - 1
: VALUE_DRAW + 2 * wdl * drawScore;
Bound b = wdl < -drawScore ? BOUND_UPPER
: wdl > drawScore ? BOUND_LOWER : BOUND_EXACT;
if ( b == BOUND_EXACT
|| (b == BOUND_LOWER ? value >= beta : value <= alpha))
{
tte->save(posKey, value_to_tt(value, ss->ply), b,
std::min(DEPTH_MAX - ONE_PLY, depth + 6 * ONE_PLY),
MOVE_NONE, VALUE_NONE, TT.generation());
return value;
}
if (PvNode)
{
if (b == BOUND_LOWER)
bestValue = value, alpha = std::max(alpha, bestValue);
else
maxValue = value;
}
}
}
}
// Step 6. Evaluate the position statically
if (inCheck)
{
ss->staticEval = eval = VALUE_NONE;
goto moves_loop;
}
else if (ttHit)
{
// Never assume anything on values stored in TT
if ((ss->staticEval = eval = tte->eval()) == VALUE_NONE)
eval = ss->staticEval = evaluate(pos);
// Can ttValue be used as a better position evaluation?
if ( ttValue != VALUE_NONE
&& (tte->bound() & (ttValue > eval ? BOUND_LOWER : BOUND_UPPER)))
eval = ttValue;
}
else
{
ss->staticEval = eval =
(ss-1)->currentMove != MOVE_NULL ? evaluate(pos)
: -(ss-1)->staticEval + 2 * Eval::Tempo;
tte->save(posKey, VALUE_NONE, BOUND_NONE, DEPTH_NONE, MOVE_NONE,
ss->staticEval, TT.generation());
}
maxmove = MoveList<LEGAL>(pos).size();
if (!cramped) cramped = ( maxmove <= Options["Cramped"]);
if (skipEarlyPruning || !pos.non_pawn_material(pos.side_to_move()) || cramped)
goto moves_loop;
// Step 7. Razoring (skipped when in check)
if ( !PvNode
&& depth <= ONE_PLY)
{
if (eval + RazorMargin1 <= alpha)
return qsearch<NonPV, false>(pos, ss, alpha, alpha+1);
}
else if ( !PvNode
&& depth <= 2 * ONE_PLY
&& eval + RazorMargin2 <= alpha)
{
Value ralpha = alpha - RazorMargin2;
Value v = qsearch<NonPV, false>(pos, ss, ralpha, ralpha+1);
if (v <= ralpha)
return v;
}
// Step 8. Futility pruning: child node (skipped when in check)
if ( !rootNode
&& depth < 7 * ONE_PLY
&& eval - futility_margin(depth) >= beta
&& eval < VALUE_KNOWN_WIN) // Do not return unproven wins
return eval;
// Step 9. Null move search with verification search
if ( !PvNode
&& eval >= beta
&& maxmove > Options["Cramped"]
&& ss->staticEval >= beta - 36 * depth / ONE_PLY + 225
&& (ss->ply >= thisThread->nmp_ply || ss->ply % 2 != thisThread->nmp_odd))
{
assert(eval - beta >= 0);
// Null move dynamic reduction based on depth and value
Depth R = ((823 + 67 * depth / ONE_PLY) / 256 + std::min((eval - beta) / PawnValueMg, 3)) * ONE_PLY;
ss->currentMove = MOVE_NULL;
ss->contHistory = thisThread->contHistory[NO_PIECE][0].get();
pos.do_null_move(st);
Value nullValue = depth-R < ONE_PLY ? -qsearch<NonPV, false>(pos, ss+1, -beta, -beta+1)
: - search<NonPV>(pos, ss+1, -beta, -beta+1, depth-R, !cutNode, true, cramped);
pos.undo_null_move();
if (nullValue >= beta)
{
// Do not return unproven mate scores
if (nullValue >= VALUE_MATE_IN_MAX_PLY)
nullValue = beta;
if (abs(beta) < VALUE_KNOWN_WIN && (depth < verification_depth * ONE_PLY || thisThread->nmp_ply))
return nullValue;
// Do verification search at high depths. Disable null move pruning
// for side to move for the first part of the remaining search tree.
thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4;
thisThread->nmp_odd = ss->ply % 2;
Value v = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta)
: search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true);
thisThread->nmp_odd = thisThread->nmp_ply = 0;
if (v >= beta)
return nullValue;
}
}
// Step 10. ProbCut (skipped when in check)
// If we have a good enough capture and a reduced search returns a value
// much above beta, we can (almost) safely prune the previous move.
if ( !PvNode
&& depth >= 5 * ONE_PLY
&& abs(beta) < VALUE_MATE_IN_MAX_PLY)
{
assert(is_ok((ss-1)->currentMove));
Value rbeta = std::min(beta + 200, VALUE_INFINITE);
MovePicker mp(pos, ttMove, rbeta - ss->staticEval, &thisThread->captureHistory);
int probCutCount = 0;
while ( (move = mp.next_move()) != MOVE_NONE
&& probCutCount < depth / ONE_PLY - 3)
if (pos.legal(move))
{
probCutCount++;
ss->currentMove = move;
ss->contHistory = thisThread->contHistory[pos.moved_piece(move)][to_sq(move)].get();
assert(depth >= 5 * ONE_PLY);
pos.do_move(move, st);
// Perform a preliminary search at depth 1 to verify that the move holds.
// We will only do this search if the depth is not 5, thus avoiding two
// searches at depth 1 in a row.
if (depth != 5 * ONE_PLY)
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, ONE_PLY, !cutNode, true, cramped);
// If the first search was skipped or was performed and held, perform
// the regular search.
if (depth == 5 * ONE_PLY || value >= rbeta)
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false, cramped);
pos.undo_move(move);
if (value >= rbeta)
return value;
}
}
// Step 11. Internal iterative deepening (skipped when in check)
if ( depth >= 6 * ONE_PLY
&& !ttMove
&& (PvNode || ss->staticEval + 256 >= beta))
{
Depth d = 3 * depth / 4 - 2 * ONE_PLY;
search<NT>(pos, ss, alpha, beta, d, cutNode, true, cramped);
tte = TT.probe(posKey, ttHit);
ttValue = ttHit ? value_from_tt(tte->value(), ss->ply) : VALUE_NONE;
ttMove = ttHit ? tte->move() : MOVE_NONE;
}
moves_loop: // When in check, search starts from here
const PieceToHistory* contHist[] = { (ss-1)->contHistory, (ss-2)->contHistory, nullptr, (ss-4)->contHistory };
Move countermove = thisThread->counterMoves[pos.piece_on(prevSq)][prevSq];
MovePicker mp(pos, ttMove, depth, &thisThread->mainHistory, &thisThread->captureHistory, contHist, countermove, ss->killers);
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
improving = ss->staticEval >= (ss-2)->staticEval
/* || ss->staticEval == VALUE_NONE Already implicit in the previous condition */
||(ss-2)->staticEval == VALUE_NONE;
singularExtensionNode = !rootNode
&& depth >= 8 * ONE_PLY
&& ttMove != MOVE_NONE
&& ttValue != VALUE_NONE
&& !excludedMove // Recursive singular search is not allowed
&& (tte->bound() & BOUND_LOWER)
&& tte->depth() >= depth - 3 * ONE_PLY;
skipQuiets = false;
ttCapture = false;
pvExact = PvNode && ttHit && tte->bound() == BOUND_EXACT;
// Step 12. Loop through all pseudo-legal moves until no moves remain
// or a beta cutoff occurs.
while ((move = mp.next_move(skipQuiets)) != MOVE_NONE)
{
assert(is_ok(move));
if (move == excludedMove)
continue;
// At root obey the "searchmoves" option and skip moves not listed in Root
// Move List. As a consequence any illegal move is also skipped. In MultiPV
// mode we also skip PV moves which have been already searched.
if (rootNode && !std::count(thisThread->rootMoves.begin() + thisThread->PVIdx,
thisThread->rootMoves.end(), move))
continue;
ss->moveCount = ++moveCount;
if (rootNode && thisThread == Threads.main() && Time.elapsed() > 3000)
sync_cout << "info depth " << depth / ONE_PLY
<< " currmove " << UCI::move(move, pos.is_chess960())
<< " currmovenumber " << moveCount + thisThread->PVIdx << sync_endl;
if (PvNode)
(ss+1)->pv = nullptr;
extension = DEPTH_ZERO;
captureOrPromotion = pos.capture_or_promotion(move);
movedPiece = pos.moved_piece(move);
givesCheck = gives_check(pos, move);
moveCountPruning = depth < 16 * ONE_PLY
&& moveCount >= FutilityMoveCounts[improving][depth / ONE_PLY];
// Step 13. Extensions
// Singular extension search. If all moves but one fail low on a search
// of (alpha-s, beta-s), and just one fails high on (alpha, beta), then
// that move is singular and should be extended. To verify this we do a
// reduced search on on all the other moves but the ttMove and if the
// result is lower than ttValue minus a margin then we will extend the ttMove.
if ( singularExtensionNode
&& move == ttMove
&& pos.legal(move))
{
Value rBeta = std::max(ttValue - 2 * depth / ONE_PLY, -VALUE_MATE);
ss->excludedMove = move;
value = search<NonPV>(pos, ss, rBeta - 1, rBeta, depth / 2, cutNode, true, cramped);
ss->excludedMove = MOVE_NONE;
if (value < rBeta)
extension = ONE_PLY;
}
else if ( givesCheck // Check extension
&& !moveCountPruning
&& pos.see_ge(move))
extension = ONE_PLY;
// Calculate new depth for this move
newDepth = depth - ONE_PLY + extension;
// Step 14. Pruning at shallow depth
if ( !rootNode
&& pos.non_pawn_material(pos.side_to_move())
&& bestValue > VALUE_MATED_IN_MAX_PLY)
{
if ( !captureOrPromotion
&& !givesCheck
&& (!pos.advanced_pawn_push(move) || pos.non_pawn_material() >= Value(5000)))
{
// Move count based pruning
if (moveCountPruning)
{
skipQuiets = true;
continue;
}
// Reduced depth of the next LMR search
int lmrDepth = std::max(newDepth - reduction<PvNode>(improving, depth, moveCount), DEPTH_ZERO) / ONE_PLY;
// Countermoves based pruning
if ( lmrDepth < 3
&& (*contHist[0])[movedPiece][to_sq(move)] < CounterMovePruneThreshold
&& (*contHist[1])[movedPiece][to_sq(move)] < CounterMovePruneThreshold)
continue;
// Futility pruning: parent node
if ( lmrDepth < 7
&& !inCheck
&& ss->staticEval + 256 + 200 * lmrDepth <= alpha)
continue;
// Prune moves with negative SEE
if ( lmrDepth < 8
&& !pos.see_ge(move, Value(-35 * lmrDepth * lmrDepth)))
continue;
}
else if ( depth < 7 * ONE_PLY
&& !extension
&& !pos.see_ge(move, -PawnValueEg * (depth / ONE_PLY)))
continue;
}
// Speculative prefetch as early as possible
prefetch(TT.first_entry(pos.key_after(move)));
// Check for legality just before making the move
if (!rootNode && !pos.legal(move))
{
ss->moveCount = --moveCount;
continue;
}
if (move == ttMove && captureOrPromotion)
ttCapture = true;
// Update the current move (this must be done after singular extension search)
ss->currentMove = move;
ss->contHistory = thisThread->contHistory[movedPiece][to_sq(move)].get();
// Step 15. Make the move
pos.do_move(move, st, givesCheck);
// Step 16. Reduced depth search (LMR). If the move fails high it will be
// re-searched at full depth.
if ( depth >= 3 * ONE_PLY
&& moveCount > 1
&& (!captureOrPromotion || moveCountPruning))
{
Depth r = reduction<PvNode>(improving, depth, moveCount);
if (captureOrPromotion)
r -= r ? ONE_PLY : DEPTH_ZERO;
else
{
// Decrease reduction if opponent's move count is high
if ((ss-1)->moveCount > 15)
r -= ONE_PLY;
// Decrease reduction for exact PV nodes
if (pvExact)
r -= ONE_PLY;
// Increase reduction if ttMove is a capture
if (ttCapture)
r += ONE_PLY;
// Increase reduction for cut nodes
if (cutNode)
r += 2 * ONE_PLY;
// Decrease reduction for moves that escape a capture. Filter out
// castling moves, because they are coded as "king captures rook" and
// hence break make_move().
else if ( type_of(move) == NORMAL
&& !pos.see_ge(make_move(to_sq(move), from_sq(move))))
r -= 2 * ONE_PLY;
ss->statScore = thisThread->mainHistory[~pos.side_to_move()][from_to(move)]
+ (*contHist[0])[movedPiece][to_sq(move)]
+ (*contHist[1])[movedPiece][to_sq(move)]
+ (*contHist[3])[movedPiece][to_sq(move)]
- 4000;
// Decrease/increase reduction by comparing opponent's stat score
if (ss->statScore >= 0 && (ss-1)->statScore < 0)
r -= ONE_PLY;
else if ((ss-1)->statScore >= 0 && ss->statScore < 0)
r += ONE_PLY;
// Decrease/increase reduction for moves with a good/bad history
r = std::max(DEPTH_ZERO, (r / ONE_PLY - ss->statScore / 20000) * ONE_PLY);
}
Depth d = std::max(newDepth - r, ONE_PLY);
value = -search<NonPV>(pos, ss+1, -(alpha+1), -alpha, d, true, false, cramped);
doFullDepthSearch = (value > alpha && d != newDepth);
}
else
doFullDepthSearch = !PvNode || moveCount > 1;
// Step 17. Full depth search when LMR is skipped or fails high
if (doFullDepthSearch)
value = newDepth < ONE_PLY ?
givesCheck ? -qsearch<NonPV, true>(pos, ss+1, -(alpha+1), -alpha)
: -qsearch<NonPV, false>(pos, ss+1, -(alpha+1), -alpha)
: - search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode, false, cramped);
// For PV nodes only, do a full PV search on the first move or after a fail
// high (in the latter case search only if value < beta), otherwise let the
// parent node fail low with value <= alpha and try another move.
if (PvNode && (moveCount == 1 || (value > alpha && (rootNode || value < beta))))
{
(ss+1)->pv = pv;
(ss+1)->pv[0] = MOVE_NONE;
value = newDepth < ONE_PLY ?
givesCheck ? -qsearch<PV, true>(pos, ss+1, -beta, -alpha)
: -qsearch<PV, false>(pos, ss+1, -beta, -alpha)
: - search<PV>(pos, ss+1, -beta, -alpha, newDepth, false, false, cramped);
}
// Step 18. Undo move
pos.undo_move(move);
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
// Step 19. Check for a new best move
// Finished searching the move. If a stop occurred, the return value of
// the search cannot be trusted, and we return immediately without
// updating best move, PV and TT.
if (Threads.stop.load(std::memory_order_relaxed))
return VALUE_ZERO;
if (rootNode)
{
RootMove& rm = *std::find(thisThread->rootMoves.begin(),
thisThread->rootMoves.end(), move);
// PV move or new best move?
if (moveCount == 1 || value > alpha)
{
rm.score = value;
rm.selDepth = thisThread->selDepth;
rm.pv.resize(1);
assert((ss+1)->pv);
for (Move* m = (ss+1)->pv; *m != MOVE_NONE; ++m)
rm.pv.push_back(*m);
// We record how often the best move has been changed in each
// iteration. This information is used for time management: When
// the best move changes frequently, we allocate some more time.
if (moveCount > 1 && thisThread == Threads.main())
++static_cast<MainThread*>(thisThread)->bestMoveChanges;
}
else
// All other moves but the PV are set to the lowest value: this
// is not a problem when sorting because the sort is stable and the
// move position in the list is preserved - just the PV is pushed up.
rm.score = -VALUE_INFINITE;
}
if (value > bestValue)
{
bestValue = value;
if (value > alpha)
{
bestMove = move;
if (PvNode && !rootNode) // Update pv even in fail-high case
update_pv(ss->pv, move, (ss+1)->pv);
if (PvNode && value < beta) // Update alpha! Always alpha < beta
alpha = value;
else
{
assert(value >= beta); // Fail high
break;
}
}
}
if (move != bestMove)
{
if (captureOrPromotion && captureCount < 32)
capturesSearched[captureCount++] = move;
else if (!captureOrPromotion && quietCount < 64)
quietsSearched[quietCount++] = move;
}
}
// The following condition would detect a stop only after move loop has been
// completed. But in this case bestValue is valid because we have fully
// searched our subtree, and we can anyhow save the result in TT.
/*
if (Threads.stop)
return VALUE_DRAW;
*/
// Step 20. Check for mate and stalemate
// All legal moves have been searched and if there are no legal moves, it
// must be a mate or a stalemate. If we are in a singular extension search then
// return a fail low score.
assert(moveCount || !inCheck || excludedMove || !maxmove);
if (!moveCount)
bestValue = excludedMove ? alpha
: inCheck ? mated_in(ss->ply) : VALUE_DRAW;
else if (bestMove)
{
// Quiet best move: update move sorting heuristics
if (!pos.capture_or_promotion(bestMove))
update_quiet_stats(pos, ss, bestMove, quietsSearched, quietCount, stat_bonus(depth));
else
update_capture_stats(pos, bestMove, capturesSearched, captureCount, stat_bonus(depth));
// Extra penalty for a quiet TT move in previous ply when it gets refuted
if ((ss-1)->moveCount == 1 && !pos.captured_piece())
update_continuation_histories(ss-1, pos.piece_on(prevSq), prevSq, -stat_bonus(depth + ONE_PLY));
}
// Bonus for prior countermove that caused the fail low
else if ( depth >= 3 * ONE_PLY
&& !pos.captured_piece()
&& is_ok((ss-1)->currentMove))
update_continuation_histories(ss-1, pos.piece_on(prevSq), prevSq, stat_bonus(depth));
if (PvNode)
bestValue = std::min(bestValue, maxValue);
if (!excludedMove)
tte->save(posKey, value_to_tt(bestValue, ss->ply),
bestValue >= beta ? BOUND_LOWER :
PvNode && bestMove ? BOUND_EXACT : BOUND_UPPER,
depth, bestMove, ss->staticEval, TT.generation());
assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);
return bestValue;
}
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
-
- Posts: 12540
- Joined: Wed Mar 08, 2006 8:57 pm
- Location: Redmond, WA USA
Re: Someone lit a fire under the Stockfish team
To polish this idea, the cramped bool should probably be turned off for things like single reply extensions where after the forced move the position is no longer cramped.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
-
- Posts: 4565
- Joined: Sun Mar 12, 2006 2:40 am
- Full name:
Re: Someone lit a fire under the Stockfish team
Is easy:zullil wrote:I may regret this interjection, but an alarming number of positions deserve 0.00. One could argue that every position in any decently played game is a 0.00 position, at least in a theoretical sense.tpoppins wrote:
In the past two years there have been numerous posts about an alarming number of positions SF evaluates as 0.00. Someone even coined the term "Drawfish". I personally have seen hundreds of such positions on Let's Check, ranging from quiet to turbo-charged. There is a current thread discussing another such case and SF's "tunnel vision".
Of course, the purpose of evaluation in an engine is not to establish the theoretical value of the position, but to help the engine choose a move to play. So the real questions are, how often does Stockfish choose a move that converts a draw into a loss---or a win into a draw---and why does Stockfish make such choices? It is my understanding, perhaps wrong, that most of Stockfish's 0.00 evaluations ultimately result from second repetitions of positions, and by the engine's inability to find anything in the search tree with a better score. Perhaps a more refined evaluation of "quiet positions" would provide such non-zero scores. Or perhaps such an evaluation would simply slow the engine down and cost it more Elo than it gains.
About "tunnel vision", I think I largely agree with Dann. Given enough time/depth, Stockfish will almost always find a winning move if one exists. Though sometimes the wait can be excruciating.
[D] rk6/p1r3p1/P3B1Kp/1p2B3/8/8/8/8 w - - 0 1
The very latest SF-dev (1 thread):But I'm confident that Bd7 will emerge!Code: Select all
info depth 70 seldepth 80 multipv 1 score cp -29 nodes 269400017121 nps 5896122 hashfull 999 tbhits 0 time 45691046 pv e6d5 b8c8 d5a8 c7c4 e5g7 b5b4 g6h6 c8c7 a8d5 c4c5 d5e4 c5a5 g7d4 a5a6 h6g5 a6a3 g5f4 c7d6 e4f3 a7a5 f4e4 a5a4 f3d1 b4b3 e4d3 b3b2 d3c2 b2b1q c2b1 a3d3 d1a4 d3d4 a4b3 d4d2 b1c1 d2f2 b3c2 d6c5 c1d1 c5d4 c2b1 f2g2 b1f5 d4c3 d1e1 g2b2 f5g4 c3d4 g4f5 d4e3 e1d1 b2e2 f5b1 e2d2 d1c1 d2h2 c1d1 e3d4 b1g6 d4c3 g6f5 c3b2 f5d3 b2b3 d3f5 b3c3 f5g6 c3d4 g6e8 d4e3 e8g6 h2f2 g6b1 f2g2 b1f5 g2d2 d1e1 d2a2 e1d1 a2f2
Thanks to Bernhard Bauer for sharing this position.
rk6/p1r3p1/P3B1Kp/1p2B3/8/8/8/8 w - -
Engine: Kaissa III 015 (1 thread, No Tablebases, Contempt = 12, 512 MB)
Based on Stockfish 2018-03-04 sources with some hacks
by T. Romstad, M. Costalba, J. Kiiski, G. Linscott
22/28 0:02 -0.32 1.Bd5 Kc8 2.Bxa8 b4 3.Bxg7 b3 4.Kxh6 Rd7
5.Be4 Kc7 6.Bf5 Rd2 7.Bc3 Ra2 8.Kg5 Kd6
9.Kf4 Rf2+ 10.Kg4 Kd5 11.Bd3 Kc5
12.Kg3 Rf7 (5.252.122) 2542
23/28 0:03 -0.63-- 1.Bd5 Kc8 (8.433.485) 2530
23/31 0:03 -0.48++ 1.Bd5 (9.783.347) 2540
23/31 0:03 -0.37 1.Bd5 Kc8 2.Bxa8 b4 3.Bxg7 b3 4.Kxh6 Rd7
5.Bb7+ Kc7 6.Be5+ Kb6 7.Kg5 Kc5
8.Kf4 Kb4 9.Bc6 Rf7+ 10.Ke4 Re7
11.Kf5 Kc4 (10.166.162) 2542
.
.
.
28/35 0:23 -0.33 1.Bd5 Kc8 2.Bxa8 Rc4 3.Bxg7 b4
4.Kxh6 b3 5.Kg5 Kc7 6.Bf3 Kb6 7.Be2 Rc2
8.Bd4+ Kc7 9.Bd3 Rd2 10.Be5+ Kc6
11.Be4+ Kb5 12.Kf4 Kxa6 13.Ke3 Rd7
14.Bf5 (65.385.199) 2734
29/37 0:26 -0.41-- 1.Bd5 Kc8 (72.605.137) 2706
29/37 0:31 -0.48-- 1.Bd5 Kc8 (83.230.172) 2683
29/37 0:36 -0.41++ 1.Bd5 (98.609.278) 2698
29/37 0:39 -0.34 1.Bd5 Kc8 2.Bxa8 Rc4 3.Bxg7 b4
4.Kxh6 b3 5.Kg5 Kc7 6.Kf5 Kb6 7.Bb7 Ra4
8.Bc3 Kc5 9.Ke5 Rh4 10.Bb2 Kb4
11.Be4 Kc4 12.Bd5+ Kd3 13.Bxb3 Re4+
14.Kd5 (107.436.324) 2710
30/35 0:45 -0.26++ 1.Bd5 (123.880.558) 2726
30/35 0:49 -0.30 1.Bd5 Kc8 2.Bxa8 Rc4 3.Bxg7 b4
4.Kxh6 b3 5.Kg5 Kc7 6.Kf5 Kb6 7.Bb7 Ra4
8.Bc3 Kc5 9.Ke5 Kc4 10.Bd4 Kb4
11.Bxa7 b2 12.Be4 Kc4 13.Bb8 Kc3
14.Bb1 (136.179.975) 2728
31/34 0:56 -0.23++ 1.Bd5 (155.499.457) 2742
31/40 1:05 -0.35 1.Bd5 Kc8 2.Bxa8 Rc4 3.Bxg7 b4
4.Kxh6 b3 5.Kg5 Kc7 6.Kf5 Kb6 7.Bb7 Ra4
8.Bc3 Kc5 9.Ke5 Rh4 10.Bb2 Kb5
11.Bd5 Rh2 12.Bc3 b2 13.Ba2 Kxa6
14.Bd4 (180.718.895) 2752
32/39 1:18 -0.37 1.Bd5 Kc8 2.Bxa8 Rc4 3.Bxg7 b4
4.Kxh6 b3 5.Kg5 Kc7 6.Kf5 Kb6 7.Bb7 Rb4
8.Bb2 Kb5 9.Ke5 Rh4 10.Bc8 Rh5+
11.Kf4 Rc5 12.Bf5 Kxa6 13.Bd4 Rd5
14.Ke4 (215.482.994) 2751
33/40 1:30 -0.45-- 1.Bd5 Kc8 (247.749.758) 2741
33/42 1:38 +M7++ 1.Bd7 (270.115.814) 2737
33/42 1:40 +M5 1.Bd7 b4 2.Kf7 b3 3.Ke7 b2 4.Kd8 b1Q
5.Bxc7+ (274.920.635) 2734
34/10 1:45 +M5 1.Bd7 b4 2.Kf7 b3 3.Ke7 b2 4.Kd8 b1Q
5.Bxc7+ (287.618.933) 2735
35/10 1:46 +M5 1.Bd7 b4 2.Kf7 b3 3.Ke7 b2 4.Kd8 b1Q
5.Bxc7+ (292.200.879) 2733
best move: Be6-d7 time: 1:46.921 min n/s: 2.733.787 nodes: 292.200.879
Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as possible, you
are, by definition, not smart enough to debug it.
-- Brian W. Kernighan
place. Therefore, if you write the code as cleverly as possible, you
are, by definition, not smart enough to debug it.
-- Brian W. Kernighan
-
- Posts: 12540
- Joined: Wed Mar 08, 2006 8:57 pm
- Location: Redmond, WA USA
Re: Someone lit a fire under the Stockfish team
Uri's idea solves it quickly
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.