Lc0 ... the GOOD and the BAD

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

User avatar
M ANSARI
Posts: 3707
Joined: Thu Mar 16, 2006 7:10 pm

Re: Lc0 ... the GOOD and the BAD

Post by M ANSARI »

I am pretty sure that the problem with Lc0 is not hardware or time related. I think it is totally software related and probably has to do with engine or search behavior. I put the position where only one move draws again and kept the computer for a few hours with Lc0 running 3 variation mode. The output still sees 3 moves as being totally equally even though 2 of them lose immediately. In this position Lc0 was searching at 4050 Kn/s so you would need to calculate the hardware disparity with A0. If Lc0 would have a simple AB search using one CPU it would avoid the 2 losing moves even at blitz time control. Today even a 4 cpu system is considered nothing special with 16 core being what 4 core CPU's were about 5 years ago. If the problem with the tactical weakness has to do with NN and there is no way around it, then a super fast tactical AB engine would be an amazing improvement ... this seems like a no brainer as Lc0 uses the GPU at the moment with the CPU cores not being used.

43: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
[d]5R2/5rp1/p5p1/1p3qk1/8/P1P5/3Q4/6K1 b - - 0 1

Analysis by Lc0 v0.20.1:

1. = (0.00): 81...Qf4 82.Qg2+ Kf6 83.Qc6+ Kg5 84.Qg2+ Kf6 85.Qc6+ Kg5 86.Qg2+
2. = (0.00): 81...Kh4 82.Qh2+ Kg5 83.Qd2+ Qf4 84.Qg2+ Kf6 85.Qc6+ Kg5 86.Qg2+ Kf6 87.Qc6+ Kg5 88.Qg2+
3. = (0.00): 81...Kh5 82.Qh2+ Kg5 83.Qd2+ Kh4 84.Qh2+ Kg5 85.Qd2+

Can someone else test this with their Lc0 to see if this is some problem with the net used or something more to do with how Lc0 searches.
dkappe
Posts: 1631
Joined: Tue Aug 21, 2018 7:52 pm
Full name: Dietrich Kappe

Re: Lc0 ... the GOOD and the BAD

Post by dkappe »

M ANSARI wrote: Fri Feb 01, 2019 1:04 pm Of course I don't have A0, but I do have 100 games it played against SF. So I went through some games with Lc0 and it was remarkable that almost every move was a match with Lc0. The only moves that did not match were tactical shots that Lc0 could not see. So you could say that once Lc0 sorts out the tactical bug, it will be playing similar to A0. Here are the 100 games of A0 and you can go through the game with Lc0 engine on infinite mode and you will see for yourself. I have not doubt that Lc0 will reach the level of A0 and most likely surpass the first version of A0 very quickly after that as the software improves and of course the hardware improves.
Which network ID are you using?

Keep in mind that given time control and hardware, you’d have to let leela think for 10 minutes per move to have a fair comparison.
Fat Titz by Stockfish, the engine with the bodaciously big net. Remember: size matters. If you want to learn more about this engine just google for "Fat Titz".
User avatar
M ANSARI
Posts: 3707
Joined: Thu Mar 16, 2006 7:10 pm

Re: Lc0 ... the GOOD and the BAD

Post by M ANSARI »

I was using network 32591, but I am pretty sure the problems mentioned with tactics is not network related. As for the time to sit on the position, I put Lc0 on the position for over 2 hours, but it still gave 2 moves that lost instantly 0.00 Remember this is using an RTX 2080 Ti card which is supposed to be very good hardware for Lc0.

There obviously is something very broken there. While this might be a very stark example, I am sure this happens quite often in other positions and maybe it is more difficult to identify. There is no question that Lc0 plays the strongest chess of any other engine ... but this weird behaviour where it plays like 3500 ELO level for a while and then on one move it plays a 1000 ELO level ... this needs to be fixed. If it wasn't for this Lc0 would score much better and more importantly it will become a useful analysis tool. As it is the engine cannot be used as a stand alone analysis tool. Again … if someone could just figure out a way to add a "sanity checker" which uses a simple stripped down AB executable using the unused CPU resources this would be a very quick shortcut fix until this problem is solved by other means using 100% NN. The idea would be to have Lc0 run on the GPU and then have an AB tactical engine running in the background and before Lc0 plays a move it checks with the AB engine to see if there is a big evaluation change in the move it wants to play. If there is a big pre-determined difference change in the evaluation then Lc0 would check that move and play it out quickly and if it fails it will go to the next move. This sounds slow but this can probably be done in milliseconds. This would totally eliminate the one move blunders that seem to be the reason why Lc0 loses most of its games.
dkappe
Posts: 1631
Joined: Tue Aug 21, 2018 7:52 pm
Full name: Dietrich Kappe

Re: Lc0 ... the GOOD and the BAD

Post by dkappe »

M ANSARI wrote: Sat Feb 02, 2019 8:58 am Again … if someone could just figure out a way to add a "sanity checker" which uses a simple stripped down AB executable using the unused CPU resources this would be a very quick shortcut fix until this problem is solved by other means using 100% NN. The idea would be to have Lc0 run on the GPU and then have an AB tactical engine running in the background and before Lc0 plays a move it checks with the AB engine to see if there is a big evaluation change in the move it wants to play. If there is a big pre-determined difference change in the evaluation then Lc0 would check that move and play it out quickly and if it fails it will go to the next move. This sounds slow but this can probably be done in milliseconds. This would totally eliminate the one move blunders that seem to be the reason why Lc0 loses most of its games.
Been there, done that. :-) https://github.com/dkappe/leela-chess-w ... r-Checking

Back during the days of the old main line nets (192x15 rather than 256x20), I built a wrapper where a multipv capable engine could provide advice to leela and overrule her best move if it fell outside a centipawn margin. My conclusion? Blunder checking is not the answer. If we are to combine ab engines and nn/mcts engines, we have to do it on a more fundamental level.

I’m working on something like that now, with the goal of having a nn/mcts hybrid engine play as strong as a conventional nn/mcts engine but with only 1/10th the nodes. I may come back to you for positions where leela struggles.
Fat Titz by Stockfish, the engine with the bodaciously big net. Remember: size matters. If you want to learn more about this engine just google for "Fat Titz".
User avatar
M ANSARI
Posts: 3707
Joined: Thu Mar 16, 2006 7:10 pm

Re: Lc0 ... the GOOD and the BAD

Post by M ANSARI »

dkappe wrote: Sat Feb 02, 2019 9:57 am
M ANSARI wrote: Sat Feb 02, 2019 8:58 am Again … if someone could just figure out a way to add a "sanity checker" which uses a simple stripped down AB executable using the unused CPU resources this would be a very quick shortcut fix until this problem is solved by other means using 100% NN. The idea would be to have Lc0 run on the GPU and then have an AB tactical engine running in the background and before Lc0 plays a move it checks with the AB engine to see if there is a big evaluation change in the move it wants to play. If there is a big pre-determined difference change in the evaluation then Lc0 would check that move and play it out quickly and if it fails it will go to the next move. This sounds slow but this can probably be done in milliseconds. This would totally eliminate the one move blunders that seem to be the reason why Lc0 loses most of its games.
Been there, done that. :-) https://github.com/dkappe/leela-chess-w ... r-Checking

Back during the days of the old main line nets (192x15 rather than 256x20), I built a wrapper where a multipv capable engine could provide advice to leela and overrule her best move if it fell outside a centipawn margin. My conclusion? Blunder checking is not the answer. If we are to combine ab engines and nn/mcts engines, we have to do it on a more fundamental level.

I’m working on something like that now, with the goal of having a nn/mcts hybrid engine play as strong as a conventional nn/mcts engine but with only 1/10th the nodes. I may come back to you for positions where leela struggles.
Thanks for the link, that is indeed interesting. I think you need to use a very strong tactical engine, otherwise the move choice would be corrupted. A good idea would be to go through an Arsan Tactical Suite and choose an engine that scores well. I think a special version of SF 10 or one of the Houdini Tactical engines would work well. For fast time controls you could use the system you used, but if you had more time the idea would be to play out the move against Lc0 and only if Lc0 ends up agreeing that the move fails ... only then ... you would adopt that move. This would keep Lc0 incredible strength intact, but would also cover up for any tactial weakness.
TSU
Posts: 5
Joined: Sun Feb 03, 2019 8:27 pm
Full name: Tony Su

Re: Lc0 ... the GOOD and the BAD

Post by TSU »

Hi,
The description of lc0 by its developers seems to be clear... No interference with its learning process, except possibly in situations which affect basic play.

So,
The likely bottom line is that the blunders you observe will not be addressed by tinkering with the code, the expectation(?!) and hope(!) is that Leela will eventually discover these blunders and fix these problems on its own. This is consistent with how it's taught itself how to play to this point, everything has been through self-discovery with no outside guidance.

Not a criticism, but this appears to make it clear that lc0 is more a scientific laboratory for discovery with loftier goals than simply being World Chess Champion. Leela is a remarkable creation already, and it'll be interesting what happens in the future.

This does mean that it's anyone's guess how soon or even if Leela will ever "fix" these "obvious" blunders... at least obvious to you and me but apparently not to however Leela teaches itself. AFAIK Antifish is the only version of Leela which has modified training to "learn" anything specific and even then only by providing Stockfish game data, not by instructing Leela to look at things any differently than before. And, because Leela is gaining strength only through self-play, that means the world Leela lives in is limited by what it can teach itself.

I'd suggest that you then compare to how humans learn, which is typically through guidance through personal instruction or curriculum or by reading a book, all ways that introduce outside knowledge, data and maybe even insight. Humans thrive on learning from external experience through observation, interaction and more. But Leela is not exposed to any of that, so it's unknown when if ever Leela will even "realize" that a way exists that is better than what it already "knows." It's left to probability, chance and how Leela synthesizes as to whether its play improves.

Considering all that, it's a marvel that Leela plays as well at does.
I expect that with its success against other engines, their human teams are probably able to look at everything they do differently and creatively.
I also expect that engines may create special configurations when playing against Leela, but those might work for specific Neural Nets Leela uses, more advanced Nets may address flaws, but it's by chance and internal progress and not by some kind of arms war typical of how humans train for a specific opponent.
I also expect that the same should apply to humans, Leela is the example that forces chess principles to be re-examined and re-discovered because Leela is so brilliant and so incredibly poor at playing chess all at once.

IMO.
dkappe
Posts: 1631
Joined: Tue Aug 21, 2018 7:52 pm
Full name: Dietrich Kappe

Re: Lc0 ... the GOOD and the BAD

Post by dkappe »

There are a few things that might help. One of them is basic certainty propagation (MCTS Solver) that will help in tactical and endgame positions and overall in self-play. Should be merged soon into an upcoming version of lc0.
Fat Titz by Stockfish, the engine with the bodaciously big net. Remember: size matters. If you want to learn more about this engine just google for "Fat Titz".
User avatar
M ANSARI
Posts: 3707
Joined: Thu Mar 16, 2006 7:10 pm

Re: Lc0 ... the GOOD and the BAD

Post by M ANSARI »

dkappe wrote: Mon Feb 04, 2019 8:21 pm There are a few things that might help. One of them is basic certainty propagation (MCTS Solver) that will help in tactical and endgame positions and overall in self-play. Should be merged soon into an upcoming version of lc0.
Now that is very interesting and seems that it would totally fix the rare instances where Lc0 can miss some very shallow and simple tactics as well as improve play where Lc0 seems to play moves in the endgame that are not the strongest just to torture the other side and keep the suffering as long as possible (maybe it learned to be sadistic ;)). Is this MC solver using CPU or GPU? Could you elaborate more on this as this would really make Lc0 finally a good stand alone analysis engine! Not sure if that would improve the ELO of the engine but for sure it would make the engine a much more useful analysis tool.


On another point, if Lc0 can be taught to play such brilliant positional chess, there is no reason why it can't be taught to play tactical chess as well. This would seem to work well as AI by mimicking a strong GM play. A strong GM will tend to always play positional chess and will start calculating tactics only when he feels the position is ripe for a tactical breakthrough or of course the other side blunders. Tactics can be taught as the tactical patterns are pretty consistent. Pinned pieces, over loaded pieces, back rank weaknesses, fast queening pawns, x ray and discovered checks etc... I think Lc0 can be trained to "learn" tactics just like a human learns tactics. But someone has to come up with a good way to teach it tactics. Maybe instead of learning by self play from start position it could be taught self play from pre-set tactical positions, something like Puzzle Rush for Lc0!
dkappe
Posts: 1631
Joined: Tue Aug 21, 2018 7:52 pm
Full name: Dietrich Kappe

Re: Lc0 ... the GOOD and the BAD

Post by dkappe »

M ANSARI wrote: Mon Feb 04, 2019 8:54 pm
dkappe wrote: Mon Feb 04, 2019 8:21 pm There are a few things that might help. One of them is basic certainty propagation (MCTS Solver) that will help in tactical and endgame positions and overall in self-play. Should be merged soon into an upcoming version of lc0.
Now that is very interesting and seems that it would totally fix the rare instances where Lc0 can miss some very shallow and simple tactics as well as improve play where Lc0 seems to play moves in the endgame that are not the strongest just to torture the other side and keep the suffering as long as possible (maybe it learned to be sadistic ;)). Is this MC solver using CPU or GPU? Could you elaborate more on this as this would really make Lc0 finally a good stand alone analysis engine! Not sure if that would improve the ELO of the engine but for sure it would make the engine a much more useful analysis tool.
Generally, the neural network runs on gpu and the search runs on cpu. This is 100% search, so would run on cpu.

Another thing that would help leela generally is training for strong winning conditions, I.e. adjusting the value for game length. If a win is 1, a loss is -1 and a draw is 0, and the game ply length was 120, you might multiply the result by (2000-ply)/2000. You would have to eliminate resignation and agreed draws from the training set, however. (https://medium.com/oracledevs/lessons-f ... a0ae82af68)
Fat Titz by Stockfish, the engine with the bodaciously big net. Remember: size matters. If you want to learn more about this engine just google for "Fat Titz".
S.Taylor
Posts: 8514
Joined: Thu Mar 09, 2006 3:25 am
Location: Jerusalem Israel

Re: Lc0 ... the GOOD and the BAD

Post by S.Taylor »

M ANSARI wrote: Thu Jan 31, 2019 9:19 am Recently got interested again in computer chess after analyzing some of A0 games. Decided to try out Lc0 and see what all the fuss is about. Initially results with Lc0 were not good as it lost pretty handily to even SF7, but with faster GPU things turned around dramatically and even SF latest Dev got beaten pretty soundly. I decided to look at some of the games and try to figure out what is going on chess wise and must say came out even more impressed. Lc0 sometimes is blind to elementary (for strong engines that is) tactics. This causes Lc0 to draw or even lose completely winning positions. I guess it is still an immature engine and this type of behavior is to be expected. But once these few blind spots are patched up this thing is really going to be a monster! Here I analyze a few of the games and focus on points that caught my attention.


The Bad:

There are some incredible blind spots in the play of Lc0. I don't know what it is, but it can only be described as a bug. Lc0 can miss some very simple tactics and totally ruin a winning position in one move. Here is a game where it had completely outplayed SF and reached a totally winning position.

[d]4r3/5qpk/p5p1/1pN1n1B1/2n4P/P1P1P3/1P2Q1K1/7R b - - 0 46

Even for a human you don't need to be a super Puzzle Rush expert to see that Qd5+ and next move you win the Knight on c5. All you would have to do is just make sure there is no counter play and while that might be a problem for a human it is nothing for an engine. But for some reason here Lc0 went for Nxb2?! and a few moves later lost the thread and actually ended up losing the entire game !!! Komodo and SF immediately see the Qd5+ winning. I figured OK maybe the tactics are a little too deep for this time control so I put the position on and left Lc0 to think about it. I totally forgot about my computer and left it for about 5 hours. When I came back I actually could feel the heat output from my computer as it seems it was still doing calculation on the GPU and to my astonishment the move Lc0 wanted to play was still the same Nxb2?

43: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
4r3/5qpk/p5p1/1pN1n1B1/2n4P/P1P1P3/1P2Q1K1/7R b - - 0 1

Analysis by Lc0 v0.20.1:

46...Nxb2 47.h5 gxh5 48.Rxh5+ Kg8 49.Bf4 Nbc4 50.Kg3 a5 51.Rg5 Ng6 52.Qh5 Nxf4 53.Qxf7+ Kxf7 54.Kxf4 Nxa3 55.Nb3 a4 56.Nd4 Ra8 57.e4 Nc4 58.Rf5+ Kg6 59.Rg5+ Kh7 60.Rh5+ Kg6 61.Rg5+ Kf7 62.Rf5+ Kg8 63.Rxb5 a3 64.Rb1 Rf8+ 65.Kg4 Ra8 66.Kf4 Ra5 67.Ra1 Kf7 68.e5 Rxe5 69.Nc2 g5+ 70.Kf3 Ra5 71.Ke4 Ra4 72.Kf5 Ra5+ 73.Ke4 Ke6 74.Kd4 Ra4 75.Kc5 g4 76.Kb5 Nb2 77.Nxa3 Ra8 78.Re1+ Kf5 79.Nc2 Rb8+ 80.Kc6 g3 81.Nd4+
-+ (-1.66) Depth: 40/92 05:21:29 118MN
(Spearfish, 29.01.2019)

Here is a clip analysis of SF after a few seconds


43: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
4r3/5qpk/p5p1/1pN1n1B1/2n4P/P1P1P3/1P2Q1K1/7R b - - 0 1

Analysis by Stockfish 060119 64 POPCNT:

1. -+ (-3.39): 46...Qd5+ 47.e4 Qxc5 48.h5 Kg8 49.hxg6 Nf3 50.Bf4 Nfd2 51.Bxd2 Qd5 52.exd5 Rxe2+ 53.Kf3 Rxd2 54.b3 Nd6 55.c4 bxc4 56.bxc4 Nxc4 57.Rc1 Rd4 58.Kg3 Kf8 59.Rf1+ Ke8 60.Rf7 Nd6 61.Ra7 Rxd5 62.Kf3 Kf8 63.a4 Ra5 64.Kf4 Rxa4+ 65.Ke5 Ne8 66.Rf7+ Kg8 67.Re7 Nf6 68.Ra7 Ra5+ 69.Ke6 Kh8 70.Ra8+ Ng8 71.Kd7 Ra1 72.Kc7 Rc1+ 73.Kb7 Rf1
2. -/+ (-1.12): 46...Nxb2 47.h5 gxh5 48.Rxh5+ Kg8 49.Bf4 Nbd3 50.Nxd3 Nxd3 51.Bg3 Rc8 52.Qf3 Qxf3+ 53.Kxf3 Rxc3 54.Bd6 Kf7 55.Ke4 Ke6 56.Bf8 g6 57.Rg5 Kf7 58.Bd6 Kf6 59.Rg2 g5 60.Kd5 a5 61.Kd4 Rc8 62.Kd5 Rd8 63.Rd2 Ne1 64.e4 Kg6 65.e5 Nf3 66.Rf2
3. -/+ (-0.85): 46...a5 47.b3 Qd5+ 48.e4 Qxc5 49.h5 Nf3 50.hxg6+ Kxg6 51.Bf4 Nce5 52.Bxe5 Rxe5 53.Kxf3 Qxc3+ 54.Qe3 Rc5 55.Rg1+ Kh7 56.Qxc3 Rxc3+ 57.Kf4 Rxb3 58.a4 bxa4 59.Rg5 Rb1 60.Rxa5 Rf1+ 61.Ke3 Ra1 62.Kd4 Kg6 63.Kc3 Kf6 64.Ra7



I then decided to do a clip analysis of Lc0 in 4 variation mode for a few minutes and see how far down Qd5+ was in its list of best moves ... and here is the output.

43: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
4r3/5qpk/p5p1/1pN1n1B1/2n4P/P1P1P3/1P2Q1K1/7R b - - 0 1

Analysis by Lc0 v0.20.1:

1. -/+ (-1.51): 46...Nxb2 47.e4 Rc8 48.Be3 Nbc4 49.Bd4 Rc6 50.Nd3 Nxd3 51.Qxd3 Qe8 52.Qe2 Kg8 53.h5 gxh5 54.Rxh5 Qg6+ 55.Kf2 Nd2 56.Rh4 Qf7+ 57.Kg3 Rg6+ 58.Rg4 Nf1+ 59.Kg2 Nd2 60.e5 Qf5 61.Rxg6 Qxg6+ 62.Kh3 Qf5+ 63.Qg4 Qf1+ 64.Kg3 Qd3+ 65.Kf4 Qe4+
2. -/+ (-1.51): 46...a5 47.b4 a4 48.Qf1 Qf5 49.Qxf5 gxf5 50.Ra1 Nf7 51.Bf4 Nxe3+ 52.Kf3 Nc4 53.h5 Re7 54.Rg1 Re8 55.Ra1 Re7 56.Rg1 Nxa3 57.Rg6 Nc4 58.Ra6 Nfe5+ 59.Bxe5 Nxe5+ 60.Kf4 Nc4 61.Ne6 Kh6 62.Kxf5 Rf7+ 63.Ke4 Kxh5 64.Nd4
3. =/+ (-0.59): 46...Qc7 47.b4 Kg8 48.e4 Nd7 49.Qd3 Nxc5 50.bxc5 Qc8 51.Rh3 Qxc5 52.Qd5+ Qxd5 53.exd5 Re2+ 54.Kf1 Re5 55.Rd3 Rf5+ 56.Ke2 Rf7
4. +- (16.69): 46...Qd5+ 47.e4 Qxc5 48.h5 Qc6 49.hxg6+ Kg8 50.Rh8+ Kxh8 51.Qh5+ Kg8 52.Qh7+ Kf8 53.Qh8#

(Spearfish, 29.01.2019)


It actually sees Qd5+ as getting mated and a total blunder !!! That is why this move is not even on the radar even after I put it for 5 hours of time sitting on the position. It will never play that move no matter how much hardware is thrown at it.

Now here is another game. Again Lc0 has totally outplayed SF and gets a typical Lc0 bind. it has gotten its queen where it pins the black king and finally the h file is ready for a breakthrough. Bg4! is the breakthrough that is needed and SF quickly see this ... but Lc0 never sees it.

Here is SF clip analysis after a few seconds thought
30: Lc0 v0.20.1 - Stockfish 060119 64 POPCNT, MAJD-PC-8CORE, Blitz 3m+2s
[d]2q5/3b1rbk/4p1p1/1pPpP1Pp/1PpB1P2/2P4B/2Q3K1/R7 w - - 0 1

Analysis by Stockfish 060119 64 POPCNT:

69.Kg3 Qf8 70.Qd2 Qc8 71.Bg2 Bc6 72.Qc2 Bf8 73.Bf3 Kg7 74.Qf2 Be7 75.Qh2 Kg8
+/- (1.43) Depth: 13/21 00:00:00 429kN
69.Kg3 Qf8 70.Qd2 Qc8 71.Bg2 Bc6 72.Qc2 Bf8 73.Bf3 Kg7 74.Qh2 Kg8 75.Bd1 Bg7 76.Bc2 Kh7 77.Qh3 Qe8 78.Ra6 Qc8
+/- (1.36) Depth: 14/21 00:00:00 502kN
69.Kg3 Qf8 70.Qd2 Qc8 71.Bg2 Bc6 72.Qc2 Bf8 73.Bf3 Kg7 74.Qh2 Kg8 75.Bd1 Be7 76.Bc2 Kg7 77.Qh3 Qd7
+/- (1.37) Depth: 15/21 00:00:00 530kN
69.Kg3 Qf8 70.Rf1 Qe8 71.Bg2 Bc6 72.Rh1 Rf5 73.Ra1 Qf7 74.Qd2 Qe8 75.Ra6 Rf7 76.Rb6 Qc8 77.Bf3
+/- (1.40) Depth: 16/22 00:00:00 646kN
69.Kg3 Qf8 70.Qf2 Qc8 71.Bg2 Bc6 72.Qc2 Qf8 73.Qd2 Qc8 74.Bf3 Qb7 75.Qc2 Rf5 76.Ra5 Qf7 77.Qd2 Qb7
+/- (1.34) Depth: 17/23 00:00:00 872kN
69.Kg3 Bc6 70.Rh1 Qd7 71.Bg2 Rf5 72.Ra1 Rf8 73.Qd2 Qb7 74.Bh3 Qc8 75.Ra7 Qe8 76.Be3 Rf7 77.Rxf7 Qxf7 78.Qa2 d4 79.cxd4 Be4 80.Bg2
+/- (1.42) Depth: 18/23 00:00:00 1171kN
69.Kg3 Bc6 70.Bg2 Qf8 71.Rh1 Rf5 72.Qd2 Rf7 73.Bf3 Kg8 74.Ra1 Rc7 75.Qc2 Qe8 76.Ra6 Bf8 77.Bd1 Qf7 78.Qh2 Qf5 79.Bc2 Qg4+ 80.Kf2
+/- (1.41) Depth: 19/25 00:00:00 2547kN
69.Kg3 Bc6 70.Rh1 Qe8 71.Bg2 Rf5 72.Bf3 Kg8 73.Qd2 Rf8 74.Ra1 Qf7 75.Ra6 Rc8 76.Qc2 Bf8 77.Bd1 Be7 78.Ra7 Rf8 79.Be3 d4 80.Rxe7 h4+ 81.Kxh4 Qxe7 82.Qxg6+ Kh8 83.cxd4
+/- (1.40) Depth: 20/33 00:00:01 3828kN
69.Kg3 Bf8 70.Bg2 Bc6 71.Bf3 Kg7 72.Qh2 Kg8 73.Bd1 Rh7 74.Qd2 Be8 75.Bf3 Qb7 76.Bg2 Qf7 77.Bh3 Bc6 78.Ra6 Qe8 79.Bg2 h4+ 80.Kf3
+/- (1.54) Depth: 21/33 00:00:01 7484kN
69.Kg3 Bc6 70.Rh1 Qe8 71.Bg2 Rf5 72.Bf3 Kg8 73.Ra1 Qd7 74.Bd1 Qe8 75.Qd2 Rf7 76.Bc2 Rc7 77.Kf3 Bf8 78.Qh2 Bg7 79.Ra6 Kh7 80.Kg3 Qc8 81.Ra5 Qe8 82.Bb1 Qf7 83.Qd2 h4+ 84.Kxh4
+- (1.61) Depth: 22/33 00:00:01 9340kN
69.Kg3 Bc6 70.Rh1 Qe8 71.Bg2 Rf5 72.Bf3 Kg8 73.Ra1 Bf8 74.Qh2 Kg7 75.Bd1 Rf7 76.Bc2 Rc7 77.Kf3 Qf7 78.Ra6 Be7 79.Ke3 Qe8 80.Bb1 Qd7 81.Ra5 Qc8 82.Kd2 Qe8 83.Qg3 Kf7
+/- (1.53) Depth: 23/38 00:00:01 10667kN
69.Kg3 Bc6 70.Rh1 Qe8 71.Bg2 Rf5 72.Bf3 Kg8 73.Ra1 Bf8 74.Qh2 Rf7 75.Bd1 Rc7 76.Bc2 Kg7 77.Qh3 Qf7 78.Ra6 Be7 79.Kf3 Bd8 80.Ke2 Qe8 81.Kd1 Kf7 82.Qh2 Rc8 83.Bb1 Rc7 84.Qc2 Kg7
+/- (1.60) Depth: 24/38 00:00:01 11439kN
69.Kg3 Bc6 70.Rh1 Qe8 71.Bg2 Rf5 72.Bf3 Kg8 73.Ra1 Bf8 74.Qh2 Rf7 75.Bd1 Rc7 76.Qh3 Qf7 77.Bc2 Be7 78.Ra6 Kg7 79.Kf3 Bd8 80.Ke2 Qe8 81.Bb1 Kf7 82.Qh2 Rc8 83.Kd1 Ra8 84.Rxa8 Bxa8 85.Qc2 Kg7
+/- (1.43) Depth: 25/44 00:00:02 15103kN
69.Kg3 Bc6 70.Rh1 Qe8 71.Bg2 Rf5 72.Bf3 Kg8 73.Ra1 Bf8 74.Qh2 Rf7 75.Bd1 Rc7 76.Bc2 Be7 77.Kf3 Bd7 78.Ke2 Rc8 79.Ra6 Kg7 80.Rd6 Rc6 81.Kf3 Rc7 82.Ra6 Rc8 83.Bb1 Ra8
+/- (1.54) Depth: 26/44 00:00:02 15582kN
69.Bg4
+- (1.68 ++) Depth: 27/44 00:00:03 27140kN
69.Bg4 Kg8
+/- (1.35 --) Depth: 27/47 00:00:04 31177kN
69.Bg4 Kg8
+- (1.62 ++) Depth: 27/47 00:00:04 32639kN
69.Bg4 Kg8
+- (1.98 ++) Depth: 27/47 00:00:04 35951kN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Qxc6 72.Qxg6 Re7 73.Rh6 Kf8 74.Bc5 d4+ 75.Kh2 Qxc5 76.bxc5 Be8 77.Qe4 Bxh6 78.gxh6 dxc3 79.Kg3 Rd7 80.Kxg4 Rd1 81.h7 Kg7 82.Qb7+ Kh8 83.Qc8 Kxh7 84.Qxe8
+- (2.18) Depth: 27/47 00:00:05 42399kN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Qxc6 72.Qxg6 Re7 73.Rh6 Kf8 74.Bc5 d4+ 75.Kh2 Qxc5 76.bxc5 Be8 77.Qe4 Bxh6 78.gxh6 dxc3 79.Kg3 Rd7 80.Kxg4 Rd1 81.h7 Kg7 82.Qb7+ Kh8 83.Qc8 Kxh7 84.Qxe8
+- (2.27 ++) Depth: 28/40 00:00:06 51779kN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Qxc6 72.Qxg6 Re7 73.Rh6 Kf8 74.Bc5 d4+ 75.Kh2 Qxc5 76.bxc5 Be8 77.Qe4 Bxh6 78.gxh6 dxc3 79.Kg3 Rd7 80.Kxg4 Rd1 81.h7 Kg7 82.Qb7+ Kh8 83.Qc8 Kxh7 84.Qxe8
+- (2.37 ++) Depth: 28/40 00:00:06 53237kN
69.Bg4 Rxf4 70.Bxh5 Rf5 71.Bg4 Rxg5 72.Kh3 Rxe5 73.Bxe5 Bxe5 74.Bh5 Qe8 75.Ra7 Bg7 76.Bg4 d4 77.cxd4 Bc6 78.Qf2 Kg8 79.Qg3 Bd5 80.Qd6 Kh7 81.Qf4 c3 82.Qf6 Qh8 83.Bxe6 Bxe6+ 84.Qxe6 c2 85.Qe3 Qc8+ 86.Kg2 Qg4+ 87.Kf2 c1R 88.Qxc1
+- (2.17) Depth: 28/43 00:00:06 56432kN
69.Bg4 Rxf4 70.Bxh5 Rf5 71.Bg4 Rxg5 72.Kh3 Rxe5 73.Bxe5 Bxe5 74.Bh5 Qe8 75.Ra7 Bg7 76.Bg4 d4 77.cxd4 Bc6 78.Qf2 Kg8 79.Qg3 Bd5 80.Qd6 Kh7 81.Qf4 c3 82.Qf6 Qh8 83.Bxe6 Bxe6+ 84.Qxe6 c2 85.Qe3 Qc8+ 86.Kg2 Qg4+ 87.Kf2 c1R 88.Qxc1
+- (2.27 ++) Depth: 29/46 00:00:07 61320kN
69.Bg4 Rxf4 70.Bxh5 Rf5 71.Bg4 Rxg5 72.Kh3 Rxe5 73.Bxe5 Bxe5 74.Bh5 Qe8 75.Ra7 Bg7 76.Bg4 d4 77.cxd4 Bc6 78.Qf2 Kg8 79.Qg3 Bd5 80.Qd6 Kh7 81.Qf4 c3 82.Qf6 Qh8 83.Bxe6 Bxe6+ 84.Qxe6 c2 85.Qe3 Qc8+ 86.Kg2 Qg4+ 87.Kf2 c1R 88.Qxc1
+- (2.37 ++) Depth: 29/46 00:00:07 65587kN
69.Bg4 Rxf4 70.Bxh5 Rf5 71.Bg4 Rxg5 72.Kh3 Rxe5 73.Bxe5 Bxe5 74.Bh5 Qe8 75.Ra7 Bg7 76.Bg4 d4 77.cxd4 Bc6 78.Qf2 Kg8 79.Qg3 Bd5 80.Qd6 Kh7 81.Qf4 c3 82.Qf6 Qh8 83.Bxe6 Bxe6+ 84.Qxe6 c2 85.Qe3 Qc8+ 86.Kg2 Qg4+ 87.Kf2 c1R 88.Qxc1
+- (2.51 ++) Depth: 29/48 00:00:07 67609kN
69.Bg4 Rxf4 70.Bxh5 Rf5 71.Bg4 Rxg5 72.Kh3 Rxe5 73.Bxe5 Bxe5 74.Bh5 Qe8 75.Ra7 Bg7 76.Bg4 d4 77.cxd4 Bc6 78.Qf2 Kg8 79.Qg3 Bd5 80.Qd6 Kh7 81.Qf4 c3 82.Qf6 Qh8 83.Bxe6 Bxe6+ 84.Qxe6 c2 85.Qe3 Qc8+ 86.Kg2 Qg4+ 87.Kf2 c1R 88.Qxc1
+- (2.08 --) Depth: 29/48 00:00:08 70148kN
69.Bg4 Rxf4 70.Bxh5 Rf5 71.Bg4 Rxg5 72.Kh3 Rxe5 73.Bxe5 Bxe5 74.Bh5 Qe8 75.Ra7 Bg7 76.Bg4 d4 77.cxd4 Bc6 78.Qf2 Kg8 79.Qg3 Bd5 80.Qd6 Kh7 81.Qf4 c3 82.Qf6 Qh8 83.Bxe6 Bxe6+ 84.Qxe6 c2 85.Qe3 Qc8+ 86.Kg2 Qg4+ 87.Kf2 c1R 88.Qxc1
+- (2.39 ++) Depth: 29/48 00:00:09 80783kN
69.Bg4 Rxf4 70.Bxh5 Rf5 71.Bg4 Rxg5 72.Kh3 Rxe5 73.Bxe5 Bxe5 74.Bh5 Qe8 75.Ra7 Bg7 76.Bg4 d4 77.cxd4 Bc6 78.Qf2 Kg8 79.Qg3 Bd5 80.Qd6 Kh7 81.Qf4 c3 82.Qf6 Qh8 83.Bxe6 Bxe6+ 84.Qxe6 c2 85.Qe3 Qc8+ 86.Kg2 Qg4+ 87.Kf2 c1R 88.Qxc1
+- (2.76 ++) Depth: 29/49 00:00:10 92794kN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Rf5 72.cxd7 Qxd7 73.Kg3 Qf7 74.Qf2 Bf8 75.Qh2 Qg7 76.Ra1 Rf7 77.Ra6 Re7 78.Qh4 Re8 79.Qxg4 Qf7 80.Qh3 Bg7 81.Ra5 Rf8 82.Qg4 Qe8 83.Ra6 Rf5 84.Bc5 Kf7 85.Rb6 Kg8 86.Qh4 d4 87.Bd6 d3 88.Rb8
+- (2.77) Depth: 29/51 00:00:11 101MN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Rf5 72.cxd7 Qxd7 73.Kg3 Qf7 74.Qf2 Bf8 75.Qh2 Qg7 76.Ra1 Rf7 77.Ra6 Re7 78.Qh4 Re8 79.Qxg4 Qf7 80.Qh3 Bg7 81.Ra5 Rf8 82.Qg4 Qe8 83.Ra6 Rf5 84.Bc5 Kf7 85.Rb6 Kg8 86.Qh4 d4 87.Bd6 d3 88.Rb8
+- (2.87 ++) Depth: 30/48 00:00:13 118MN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Bxc6 72.Qxg6 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Kh7 82.Rb6 Kg6 83.Ra6 Kh7 84.Rd6 Kg6 85.Rb6 Rf5 86.Rb8 Rf7
+- (2.93) Depth: 30/49 00:00:13 123MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Rd8 Rh7 86.Rb8 Rf7 87.Bd4 Rh7 88.Rb6 Rf7 89.Ra6 Rf8 90.Rd6
+- (2.90) Depth: 31/54 00:00:15 143MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Rd8 Rh7 86.Rb8 Rf7 87.Bd4 Rh7 88.Rb6 Rf7 89.Ra6 Rf8 90.Rd6 Bc8 91.Bc5
+- (2.90) Depth: 32/45 00:00:17 160MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Rd8 Rh7 86.Rb8 Rf7 87.Bd4 Bc6 88.Rg8+ Rg7 89.Rh8 Rh7 90.Rc8 Bd7 91.Rg8+ Kf7 92.Rb8 Rg7 93.Bc5 Rh7
+- (2.93) Depth: 33/53 00:00:19 172MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Rd8 Rh7 86.Rb8 Rf7 87.Bd4 Bc6 88.Rg8+ Rg7 89.Rh8 Rh7 90.Rd8 Bd7 91.Ra8 Rh2 92.Ra6 Rg2+ 93.Kh3 Rd2
+- (2.90) Depth: 34/50 00:00:20 191MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Rd8 Rh7 86.Rb8 Rf7 87.Bd4 Bc6 88.Rg8+ Rg7 89.Rh8 Rh7 90.Rd8 Bd7 91.Ra8 Rh2 92.Ra6 Rg2+ 93.Kh3 Rd2
+- (2.81 --) Depth: 35/52 00:00:21 201MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Rd8 Rh7 86.Rb8 Rf7 87.Bd4 Bc6 88.Rg8+ Rg7 89.Rh8 Rh7 90.Rd8 Bd7 91.Ra8 Rh2 92.Ra6 Rg2+ 93.Kh3 Rd2
+- (2.90 ++) Depth: 35/52 00:00:22 206MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Bd4 Rh7 86.Rg8+ Kf7 87.Rb8 Kg6 88.Rb6 Rf7 89.Rd6 Bc8 90.Rd8
+- (2.93) Depth: 35/52 00:00:23 216MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Bd4 Rh7 86.Rg8+ Kf7 87.Rb8 Kg6 88.Bc5 Rf7 89.Rb6 Kg7 90.Rd6 Kg6 91.Bd4 Bc8 92.Rd8
+- (2.93) Depth: 36/48 00:00:27 254MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Bd4 Rh7 86.Rg8+ Kf7 87.Rb8 Kg6 88.Bc5 Rf7 89.Rb6 Kg7 90.Rd6 Kg6 91.Bd4 Bc8 92.Rd8
+- (3.02 ++) Depth: 37/48 00:00:35 333MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Bd4 Rh7 86.Rg8+ Kf7 87.Rb8 Kg6 88.Bc5 Rf7 89.Rb6 Kg7 90.Rd6 Kg6 91.Bd4 Bc8 92.Rd8
+- (3.12 ++) Depth: 37/63 00:00:43 398MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Bd4 Rh7 86.Rg8+ Kf7 87.Rb8 Kg6 88.Bc5 Rf7 89.Rb6 Kg7 90.Rd6 Kg6 91.Bd4 Bc8 92.Rd8
+- (3.26 ++) Depth: 37/63 00:00:49 456MN
69.Bg4 Kg8 70.Qxg6 hxg4 71.c6 Bxc6 72.Rh1 Re7 73.Qh7+ Kf8 74.Qh8+ Bxh8 75.Rxh8+ Kg7 76.Rxc8 Bd7 77.Rd8 Kg6 78.Kg3 Rf7 79.Kxg4 Rg7 80.Bc5 Rf7 81.Rb8 Rh7 82.Rb6 Rf7 83.Ra6 Bc8 84.Ra8 Bd7 85.Bd4 Rh7 86.Rg8+ Kf7 87.Rb8 Kg6 88.Bc5 Rf7 89.Rb6 Kg7 90.Rd6 Kg6 91.Bd4 Bc8 92.Rd8
+- (3.47 ++) Depth: 37/63 00:00:57 529MN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Rf5 72.cxd7 Qxd7 73.Kg3 Qf7 74.Qf2 Bf8 75.Qh2 Qg7 76.Ra1 Rf7 77.Ra6 Re7 78.Qh4 Re8 79.Qxg4 Qf7 80.Qh3 Bg7 81.Ra5 Rf8 82.Qg4 Rb8 83.Ra7 Qf5 84.Qxf5 exf5 85.Ra6 Kh7 86.Kf3 Bf8 87.Ra7+ Kg8 88.Ke3 Kh8 89.Bc5 Bxc5+ 90.bxc5 b4 91.cxb4 c3 92.Kd3 Rxb4
+- (3.66) Depth: 37/63 00:01:08 637MN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Rf5 72.cxd7 Qxd7 73.Kg3 Qf7 74.Qf2 Bf8 75.Qh2 Qg7 76.Ra1 Rf7 77.Ra6 Re7 78.Qh4 Re8 79.Qxg4 Qf7 80.Qh3 Bg7 81.Ra5 Rf8 82.Qg4 Rb8 83.Ra7 Qf5 84.Qxf5 exf5 85.Ra6 Kh7 86.Kf3 Bf8 87.Ra7+ Kg8 88.Ke3 Kh8 89.Bc5 Bxc5+ 90.bxc5 b4 91.cxb4 c3 92.Kd3 Rxb4
+- (3.76 ++) Depth: 38/60 00:01:24 807MN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Rf5 72.cxd7 Qxd7 73.Kg3 Qf7 74.Qf2 Bf8 75.Qh2 Qg7 76.Ra1 Rf7 77.Ra6 Re7 78.Qh4 Re8 79.Qxg4 Qf7 80.Qh3 Bg7 81.Ra5 Rf8 82.Qg4 Rb8 83.Ra7 Qf5 84.Qxf5 exf5 85.Ra6 Kh7 86.Kf3 Bf8 87.Ra7+ Kg8 88.Ke3 Kh8 89.Bc5 Bxc5+ 90.bxc5 b4 91.cxb4 c3 92.Kd3 Rxb4
+- (3.86 ++) Depth: 38/60 00:01:30 868MN
69.Bg4 hxg4 70.Rh1+ Kg8 71.c6 Rf5 72.cxd7 Qxd7 73.Kg3 Qf7 74.Qf2 Bf8 75.Qh2 Qg7 76.Ra1 Rf7 77.Ra6 Re7 78.Qh4 Re8 79.Qxg4 Qf7 80.Qh3 Bg7 81.Ra5 Rf8 82.Qg4 Rb8 83.Ra7 Qf5 84.Qxf5 exf5 85.Ra6 Kh7 86.Kf3 Bf8 87.Ra7+ Kg8 88.Ke3 Kh8 89.Bc5 Bxc5+ 90.bxc5 b4 91.cxb4 c3 92.Kd3 Rxb4
+- (4.00 ++) Depth: 38/65 00:01:38 943MN
69.Bg4 hxg4 70.c6 Rf5 71.cxd7 Qxd7 72.Kg3 Qc8 73.Rh1+ Kg8 74.Qh2 Kf7 75.Kxg4 Qa8 76.Kg3 Qc8 77.Qh7 Qg8 78.Qxg8+ Kxg8 79.Ra1 Rf8 80.Ra6 Re8 81.Rb6 Bf8 82.Rxb5 Be7 83.Rb7 Kf8 84.b5 Rc8 85.Rb6 Kf7 86.Kf3 Re8 87.Rb7 Rc8 88.b6 Ke8 89.Be3 Kd8
+- (4.11) Depth: 38/65 00:01:54 1098MN
69.Bg4 hxg4 70.c6 Rf5 71.cxd7 Qxd7 72.Kg3 Qc8 73.Rh1+ Kg8 74.Qh2 Kf7 75.Kxg4 Qa8 76.Kg3 Qc8 77.Qh7 Qg8 78.Qxg8+ Kxg8 79.Ra1 Rf8 80.Ra6 Re8 81.Rb6 Bf8 82.Rxb5 Be7 83.Rb7 Kf8 84.b5 Rc8 85.Rb6 Kf7 86.Kf3 Re8 87.Rb7 Rc8 88.b6 Ke8 89.Be3 Kd8
+- (4.20 ++) Depth: 39/54 00:02:13 1296MN
69.Bg4 hxg4 70.c6 Rf5 71.cxd7 Qxd7 72.Kg3 Qc8 73.Rh1+ Kg8 74.Qh2 Kf7 75.Kxg4 Qa8 76.Kg3 Qc8 77.Qh7 Qg8 78.Qxg8+ Kxg8 79.Ra1 Rf8 80.Ra6 Re8 81.Rb6 Bf8 82.Rxb5 Be7 83.Rb7 Kf8 84.b5 Rc8 85.Rb6 Kf7 86.Kf3 Re8 87.Rb7 Rc8 88.b6 Ke8 89.Be3 Kd8
+- (4.30 ++) Depth: 39/55 00:02:24 1404MN
69.Bg4 hxg4 70.c6 Rf5 71.cxd7 Qxd7 72.Kg3 Qc8 73.Rh1+ Kg8 74.Qh2 Kf7 75.Kxg4 Qa8 76.Kg3 Qc8 77.Qh7 Qg8 78.Qxg8+ Kxg8 79.Ra1 Rf8 80.Ra6 Re8 81.Rb6 Bf8 82.Rxb5 Be7 83.Rb7 Kf8 84.b5 Rc8 85.Rb6 Kf7 86.Kf3 Re8 87.Rb7 Rc8 88.b6 Ke8 89.Be3 Kd8
+- (4.44 ++) Depth: 39/59 00:02:45 1627MN
69.Bg4 Rxf4
+- (4.01 --) Depth: 39/59 00:02:59 1757MN
69.Bg4 Rxf4
+- (4.33 ++) Depth: 39/59 00:03:07 1846MN

(Spearfish, 31.01.2019)



It takes only 3 seconds for SF to see the Bg4! breakthrough.


Here is a clip analysis of Lc0 with 10 MPV where I kept it on for several hours. It just never even looks at that move and will never play it no matter how much hardware is thrown at it. It not only missed a win here, it again actually went on to lose this game also !!!

30: Lc0 v0.20.1 - Stockfish 060119 64 POPCNT, MAJD-PC-8CORE, Blitz 3m+2s
2q5/5rbk/2b1p1p1/1pPpP1Pp/1PpB1P2/2P3KB/2Q5/R7 w - - 0 1

Analysis by Lc0 v0.20.1:

1. +- (2.95): 70.Rh1 Qe8 71.Bf1 Rf5 72.Bg2 Bb7 73.Ra1 Rf8 74.Ra5 Qf7 75.Qc1 Qd7 76.Qa1 Qf7 77.Qf1 Bc6 78.Ra6 Qb7 79.Rb6 Qd7 80.Qb1 Qc7 81.Bh3 Qd7 82.Ra6 Qf7 83.Qf1 Qd7 84.Qh1 Rf7
2. +- (2.83): 70.Ra3 Bf8 71.Qa2 Kg7 72.Ra6 Rc7 73.Rb6 Be7 74.Qa6 Qd7 75.Rb8 Kf7 76.Rh8 Kg7 77.Rb8 Kf7 78.Rh8
3. +- (2.76): 70.Kf3 Bf8 71.Qa2 Rc7 72.Qa6 Qd7 73.Qb6 Rb7 74.Qa5 Be7 75.Qa8 Rc7 76.Qb8 Rb7 77.Qa8 Rc7
4. +- (2.75): 70.Qe2 Rc7 71.Ra3 Bf8 72.Kh4 Kg8 73.Qa2 Kf7 74.Ra6 Be7 75.Qa5 Bd8 76.Qa2 Re7 77.Qa1
5. +- (2.74): 70.Ra5 Bf8 71.Qa2 Rc7 72.Kf2 Kg8 73.Ra6 Kf7 74.Rb6 Be7 75.Qa6 Qd7 76.Rb8 Bd8 77.Bxe6+ Qxe6
6. +- (2.71): 70.Qa2 Bf8 71.Qa5 Kg8 72.Qb6 Rc7 73.Kh4 Kf7 74.Ra6 Be7 75.Qa5 Bd8 76.Qa2 Re7 77.Qa1
7. +- (2.65): 70.Ra2 Bf8 71.Ra3 Kg7 72.Qa2 Rc7 73.Kh4 Be7 74.Ra6 Kf7 75.Qa5 Bd8 76.Qa2 Re7
8. +- (2.62): 70.Qb1 Bf8 71.Ra3 Kg7 72.Qa2 Rc7 73.Ra7 Rxa7 74.Qxa7+ Qd7 75.Qb8 Be7 76.Kf2 Kf7 77.Qh8 Qe8 78.Qh7+
9. +- (2.55): 70.Qh2 Bf8 71.Qa2 Kg7 72.Qa6 Qe8 73.Qb6 Rb7 74.Qa5 Re7 75.Qa6 Rc7 76.Qa5 Rc8 77.Qb6
10. +- (2.53): 70.Qd1 Bf8 71.Ra3 Rc7 72.Qa1 Kg7 73.Ra7 Kf7 74.Ra6 Be7 75.Rb6 Bd8 76.Qa6 Qd7

(Spearfish, 29.01.2019)


Now in this game, Lc0 has played pretty well and a draw is the most likely outcome. The only drawing move is rd8 and it is hard to see how white can progress. Instead ... Lc0 for some reason plays rb7?? losing instantly to rc7

[d]r5k1/p2r1pp1/pn1Pp2p/4N3/3R4/2R5/1P3PPP/6K1 b - - 0 30

Doing a clip analysis for Lc0, for some reason it sees very little difference between rd8 and rb7. Here is a clip analysis after sitting on the position for a while. Given more time it would have chosen rd8 but it really never sees that rb7 is a total blunder

3: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
r5k1/p2r1pp1/pn1Pp2p/4N3/3R4/2R5/1P3PPP/6K1 b - - 0 1

Analysis by Lc0 v0.20.1:

1. = (-0.01): 30...Rdd8 31.Nc6 Rd7 32.Ne5 Rdd8 33.Nc6
2. = (0.18): 30...Rb7 31.f4 Rd8 32.Nc6 Rdd7 33.Ne5 Rd8 34.Nc6 Rdd7 35.Ne5 Rd8
3. +- (24.04): 30...Rxd6 31.Rxd6 f6 32.Nc6 Re8 33.Nxa7 Nd5 34.Nc6 Nxc3 35.bxc3

(Spearfish, 29.01.2019)

Now after SF plays rc7 it immediately sees it loses. Here is a clip analysis after rc7 is played, you can see that Lc0 evaluation immediately sees it loses ... but yet one move earlier it never sees this??

3: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
r5k1/prR2pp1/pn1Pp2p/4N3/3R4/8/1P3PPP/6K1 b - - 0 1

Analysis by Lc0 v0.20.1:

1. +- (12.15): 31...Rxc7 32.dxc7 Rc8 33.Rd8+ Kh7 34.Nd7 a5 35.Nxb6 Rxc7 36.Rc8 Rb7 37.Nc4 a4 38.Kf1 Rxb2 39.Nxb2 a3 40.Nd3 a2 41.Rc1 a1N 42.Rxa1 a6
2. +- (14.62): 31...Rbb8 32.Nc6 Rf8 33.d7 Nd5 34.Rb7 a5 35.f4 g6 36.g4 Kg7 37.h4 g5 38.f5 Kf6
3. +- (15.11): 31...Rab8 32.Rxb7 Rxb7 33.d7 Nxd7 34.Rxd7 Rxb2 35.g3 Rb5 36.Nxf7 a5 37.Rxa7 Rd5 38.f4 a4 39.Ne5 Rd1+ 40.Kg2

(Spearfish, 29.01.2019)


THE GOOD:

Well for starters, the good is that Lc0 crushed one of the latest Dev SF and probably the best and most mature engine on planet earth by around 90 ELO points in a 20 game match and a 50 game match with no books. This of course included some of the losses mentioned above ... so with some little adjustments it seems that the score will become even more lopsided. I really didn't care much about the game scores as I have been around long enough to know that you need thousands of games to really get to know engine strength. I was more after generating some games where you could focus on actual play. What makes Lc0 play so strong? I think Lc0 is just very good at putting its pieces in the correct squares and getting positions where it slowly nullifies the other sides play while keeping attacking options for itself. And maybe after looking at some of the blunders mentioned above, you would think it plays chess like a patzer ... but holy crap it can play some crazy strong attacking chess. Here is one game where SF gets obliterated with a very strong and uncompromising attack. Of course this is a 3min_2sec game and with more time SF would have played differently. But this still shows that Lc0 can play devastatingly strong attacking chess!

[Event "MAJD-PC-8CORE, Blitz 3m+2s"]
[Site "MAJD-PC-8CORE"]
[Date "2019.01.26"]
[Round "7"]
[White "Lc0 v0.20.1"]
[Black "Stockfish 060119 64 POPCNT"]
[Result "1-0"]
[ECO "C18"]
[Annotator "0.63;0.07"]
[PlyCount "109"]
[TimeControl "180+2"]

{Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz 3202 MHz W=10.9 plies; 56kN/s B=24.4
plies; 9,126kN/s} 1. e4 {0.63/14 6 Both last book move} e6 {0.07/27 14} 2. d4 {
0.70/17 4} d5 {-0.03/25 2} 3. Nc3 {0.70/18 3 (Nd2)} Bb4 {0.03/26 7 (Nf6)} 4. e5
{0.80/19 5 (exd5)} c5 {-0.30/23 4 (Ne7)} 5. a3 {0.81/19 5 (Bd2)} Bxc3+ {
-0.21/26 5} 6. bxc3 {0.78/20 2} Ne7 {0.01/25 6} 7. Qg4 {0.81/20 4} Nf5 {
0.09/27 20 (Qc7)} 8. Bd3 {0.91/14 8} O-O {0.18/26 5 (h5)} 9. Bg5 {1.63/14 8
(Nf3)} Qe8 {0.10/23 2 (Qa5)} 10. O-O-O {2.76/13 6 (Ne2)} c4 {0.40/28 12 (f6)}
11. Bxf5 {3.17/14 5} exf5 {0.68/28 7} 12. Qh4 {3.22/14 4} Qc6 {0.59/28 3} 13.
Ne2 {3.23/13 9 (Nh3)} Re8 {0.75/30 11 (Nd7)} 14. g4 {4.09/11 4 (Nf4)} Qa4 {
0.71/23 9} 15. Ng3 {4.67/13 4 (h3)} f4 {2.76/24 11} 16. Nf5 {5.81/13 4} Re6 {
3.61/26 16 (Bxf5)} 17. Nxg7 {9.28/16 6 (Kd2)} Kxg7 {4.08/26 4} 18. Bf6+ {
8.68/17 3} Kg8 {4.92/29 16 (Kf8)} 19. Qg5+ {12.74/19 6} Kf8 {4.91/1 0} 20. Qg7+
{14.25/18 3} Ke8 {8.65/1 0} 21. Qg8+ {15.58/16 3 (Qh8+)} Kd7 {9.49/1 0} 22.
Qd8+ {17.37/15 2} Kc6 {9.76/1 0} 23. Qxc8+ {18.81/13 2} Kb6 {4.87/27 2} 24. Kd2
{20.73/11 5} Qc6 {5.22/30 26 (Ka6)} 25. Qg8 {25.16/9 14 (Qh8)} h6 {4.87/23 1
(Ka6)} 26. Qxf7 {26.81/9 13} Nd7 {4.71/26 4} 27. Be7 {29.23/9 3} Ka6 {4.68/27
6 (a5)} 28. Rhe1 {34.82/8 12 (Bd6)} Nb8 {5.41/26 16 (f3)} 29. Bd6 {54.22/7 5}
Qe8 {6.61/25 10 (Rxd6)} 30. Qxe8 {66.58/7 5 (Qxf4)} Rxe8 {6.37/23 1} 31. Ke2 {
55.57/7 6 (e6)} Nd7 {5.42/25 6 (Nc6)} 32. Kf3 {51.16/7 4} Kb6 {6.02/26 12 (Nf8)
} 33. Kxf4 {60.45/7 7} Kc6 {6.30/26 6} 34. a4 {56.09/7 5} Re6 {6.37/24 4 (Nb6)}
35. Ba3 {62.98/7 5 (h4)} Rg6 {5.88/23 2 (Nxe5)} 36. h3 {62.64/7 5 (h4)} Rh8 {
6.30/21 2 (Nxe5)} 37. Kg3 {70.30/6 5 (Rb1)} h5 {6.72/23 2} 38. f3 {61.35/7 5
(f4)} Rg7 {6.20/21 2 (hxg4)} 39. Re2 {61.80/6 6 (h4)} hxg4 {5.61/22 1} 40. hxg4
{51.62/7 4} Rgh7 {5.96/22 2} 41. e6 {45.23/7 6} Nf6 {6.86/24 3 (Nf8)} 42. Rde1
{51.04/7 5 (e7)} Ne8 {7.12/23 2 (Nh5+)} 43. Re5 {56.85/7 5 (e7)} Rh2 {6.91/21
3 (Rh3+)} 44. Kf4 {63.95/7 5 (Rf5)} Rxc2 {5.73/19 0} 45. R5e3 {59.02/7 5 (Rh5)}
Ra2 {4.68/20 1} 46. Be7 {56.74/7 3} Rh7 {5.13/21 3 (Rxa4)} 47. Bf8 {57.72/7 4
(Bd8)} Rh8 {5.36/23 3} 48. e7 {58.47/7 3 (Be7)} Rxa4 {6.16/20 2} 49. g5 {
47.99/7 5} Rh4+ {6.70/22 2 (Ra2)} 50. Kg3 {53.88/7 4} Rh5 {8.08/24 2} 51. Kg4 {
59.53/7 4 (Re6+)} Rh2 {6.03/21 1} 52. R3e2 {51.38/7 5 (f4)} Rxe2 {7.83/24 3}
53. Rxe2 {34.04/8 2} Ra3 {8.79/24 2} 54. g6 {24.07/9 6 (f4)} Ra1 {7.39/24 2
(Rxc3)} 55. Rg2 {48.81/7 2 (Kf5)} 1-0


But I think for me by far the most impressive thing with regards Lc0 play is its almost instant understanding of fortress positions. This has always been a problem with chess engines and you can find many examples where an engine is totally blind to fortress positions where even though one side has much more material there can be no progress due to a fortress. This is because engines were always weak when it came to the "horizon effect". A human in many cases could understand such positions much better. But Lc0 seems to be different in that it can go into an ending and very early on, know that it is a draw somehow. I think that is a much bigger breakthrough in chess engines than increased ELO strength as it has great analysis value. Here is a game where Lc0 nonchalantly gives up its queen and doesn't mind going into an endgame because it sees a fortress even though material down. I remember watching this game as it was being played and I could see that Lc0 queen was getting fewer and fewer squares to move to and was shocked when I saw it allow its queen to be trapped. I looked at its evaluation and was surprised to see that it saw absolutely no problems ... of course SF evaluation thought Lc0 was busted. Here is the position

[d]2r1r1k1/1p1nbpp1/p3pnp1/2P3B1/qP1N4/1R4N1/1Q3PPP/2R3K1 b - - 0 23

SF has slowly moved to trap Lc0 queen and it seems to be working. SF sees that best move would be for black to sac a piece for pawns on c5 and allow the queen to escape. But Lc0 sees things differently and plays e5 !!??!!?? Patzer or genius more ???

[d]2r1r1k1/1p1nbpp1/p4np1/2P1p1B1/qP1N4/1R4N1/1Q3PPP/2R3K1 w - - 0 24

It is obvious now that both Ra1 and Ra3 trap the queen. Here is SF analysis after some thought on the position

5: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
2r1r1k1/1p1nbpp1/p4np1/2P1p1B1/qP1N4/1R4N1/1Q3PPP/2R3K1 w - - 0 1

Analysis by Stockfish 060119 64 POPCNT:

1. +- (1.62): 24.Ra1 Qxa1+ 25.Qxa1 exd4 26.h4 Ne5 27.Qxd4 Nc6 28.Qb2 Rcd8 29.f3 Rd7 30.Kh2 Red8 31.Qb1 Rd1 32.Qa2 R1d7 33.Ne2 Na7 34.Qb2 Kf8 35.Nc3 Nc6 36.Ra3 Kg8 37.b5 axb5 38.Qxb5 Nd4
2. +/- (1.52): 24.Ra3 Qxa3 25.Qxa3 exd4 26.Rd1 Ne5 27.Bxf6 Bxf6 28.Ne4 Rc7 29.g3 Re6 30.Kg2 Rd7 31.Nd6 Nc6 32.b5 axb5 33.Qa8+ Kh7 34.Nxb7 Be7 35.Nd6 Bxd6 36.Qxc6 Rc7 37.Qb6 Rxc5 38.Rxd4 Be7 39.Rh4+ Bxh4 40.Qxc5 Be7 41.Qxb5
3. -/+ (-1.35): 24.Nde2 Qc6 25.Nf1 b6 26.b5 axb5 27.cxb6 Qxb6 28.Rxb5 Qe6 29.Rd1 Bf8 30.Qb1 Qg4 31.Bxf6 Nxf6 32.Neg3 Bc5 33.Qb3 Bd4 34.Rb7 Qe6 35.Ne2 Qxb3 36.Rxb3 Bc5 37.h3 Rb8 38.Rdb1 Rxb3 39.Rxb3 Rc8 40.Ne3


Now here is what Lc0 thinks!

5: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
2r1r1k1/1p1nbpp1/p4np1/2P1p1B1/qP1N4/1R4N1/1Q3PPP/2R3K1 w - - 0 1

Analysis by Lc0 v0.20.1:

1. +/- (0.85): 24.Ra3 Qxa3 25.Qxa3 exd4 26.Re1 Nb8 27.Bd2 Nc6 28.Ne4 Nxe4 29.Rxe4 Red8 30.h4 Rd5 31.Qd3 Rcd8 32.g3 a5 33.bxa5 Rxc5 34.Kg2 Rd7 35.Re1 Rcd5 36.Qc4 Rc5 37.Qd3 Rcd5 38.Qc4 Rc5 39.Qa4 d3 40.Rd1 Rd4 41.Qa1 Rd7 42.a6 bxa6 43.Qxa6 Nd8 44.Qa4
2. +/- (0.84): 24.Ra1 Qxa1+ 25.Qxa1 exd4 26.h4 Rcd8 27.Rd3 a5 28.Qxa5 Ne5 29.Rd1 Nd5 30.Bxe7 Ra8 31.Qb5 Nc3 32.Qf1 Nxd1 33.Qxd1 Rxe7 34.Qxd4 Nc6 35.Qc3 Ra4 36.b5 Nd4 37.b6 Kh7 38.f3 Ne2+ 39.Nxe2 Rxe2 40.c6 Raa2 41.cxb7 Rxg2+ 42.Kh1 Rh2+ 43.Kg1 Rhg2+ 44.Kh1 Rh2+ 45.Kg1 Rhg2+
3. -+ (-3.16): 24.Nde2 Qc6 25.h3 Qe6 26.Ra3 Nb8 27.Bxf6 gxf6 28.h4 f5 29.h5 Nc6 30.hxg6 fxg6 31.Nf1 Kg7 32.b5 axb5 33.Qxb5

(Spearfish, 29.01.2019)

Now +.85 might seem like a big evaluation for any engine, but with Lc0 even a +2.0 evaluation doesn't really mean a big advantage. In this case Lc0 thought it could hold a draw by forcing a fortress.

A few moves later we have this position

[d]4rrk1/1R3ppn/8/5Qp1/6P1/7P/6P1/6K1 b - - 0 41

And here SF was pretty sure this was an easy win and was showing a very high evaluation of around +2.30. In the meantime Lc0 thought it had totally equalized and the position was a draw. Here is a clip analysis of Lc0

5: Stockfish 060119 64 POPCNT - Lc0 v0.20.1, MAJD-PC-8CORE, Blitz 3m+2s
4rrk1/1R3ppn/8/5Qp1/6P1/7P/6P1/6K1 b - - 0 1

Analysis by Lc0 v0.20.1:

1. = (0.16): 41...Rb8 42.Rc7 Rbe8 43.Kh2 Rd8 44.Re7 Rde8 45.Ra7 Re6 46.Rc7 Ree8 47.Rc5 Re6 48.Ra5
2. = (0.17): 41...Rc8 42.Re7 Rce8 43.Rc7 Re6 44.Kh2 Rf6 45.Qd7 Re6 46.Rc5 Re2
3. = (0.19): 41...Re6 42.Qb5 Ree8 43.Kh2 Re6 44.Rb8 g6 45.Qb2 Ree8 46.Rb7 Re6 47.Rb5

Many moves later it turns out that it is a fortress and finally SF would show 0.00


For me this was a game changer as I always saw a chess engine as an analysis tool to improve your game or to give you information on a game that you are observing. Here was an engine that finally understands what a fortress is and where to place the pieces to achieve it. If you watch some super GM's playing, you will many times see that they are fighting to get into a position which is a fortress even though they are material down. They can understand when no progress can be made and will go for that position. If you analyze their play with an engine it is very quickly obvious to see that in those sort of positions they play much stronger than any engine could. This could be changing now.

So, Lc0 is here and it plays some amazing chess. Is it useful as a stand alone analysis engine? ... I think not at all and I wouldn't use it to analyze any position unless I had another strong mature engine like SF to give me a sanity check that it is not missing some simple tactic. I think that there might still be some bugs or some things in the way the engine works that can be improved and once that happen ... if someone could just figure out how to use the CPU cores that are just sitting there ... this will easily be the best chess analysis tool there is.
Absent minded professor!