Devlog of Leorik

Discussion of chess software programming and technical issues.

Moderator: Ras

User avatar
AAce3
Posts: 80
Joined: Fri Jul 29, 2022 1:30 am
Full name: Aaron Li

Re: Devlog of Leorik

Post by AAce3 »

Does leorik implement any form of singular extensions? Apparently that's a big elo boost in stockfish.
User avatar
lithander
Posts: 915
Joined: Sun Dec 27, 2020 2:40 am
Location: Bremen, Germany
Full name: Thomas Jahn

Re: Devlog of Leorik

Post by lithander »

Mike Sherwin wrote: Fri Aug 26, 2022 9:22 pm Try disabling null move and see what happens.
Then try disabling LMR. Etc.
Disabling these thing's didn't help. But then I tried to play checking moves (and escapes from check ofc) in QSearch and while I get a bad search explosion the nominal depth at which the critical moves are discovered was much lower. So Leorik's problem might not be that it prunes and reduces too much but that it doesn't search critical lines at extra depth (search extensions).
AAce3 wrote: Sat Aug 27, 2022 2:22 am Does leorik implement any form of singular extensions? Apparently that's a big elo boost in stockfish.
Leorik doesn't do singular extensions or other extensions at this point. I only tried simple stuff like check-extensions in normal search so far and it didn't make the engine stronger in the past. But the idea of singular extensions sounds interesting and intuitively makes a lot of sense. I'll look into that!
Minimal Chess (simple, open source, C#) - Youtube & Github
Leorik (competitive, in active development, C#) - Github & Lichess
OliverBr
Posts: 775
Joined: Tue Dec 18, 2007 9:38 pm
Location: Munich, Germany
Full name: Dr. Oliver Brausch

Re: Devlog of Leorik

Post by OliverBr »

lithander wrote: Mon May 09, 2022 4:20 pm
Mike Sherwin wrote: Sun May 08, 2022 6:01 pm
OliThink 5.10.1
Complete rewrite of OliThink with a very fast move generator (based on OliPerft). Engine runs without any chess information. No pawnstructure, no tables etc.
ELO about 2950. 128 MB fix Hashsize.
2848 CCRL 40/15
As far as I can see at a glance OliThink takes a very interesting and unique approach for it's evaluation but "without any chess information" is too bold a claim. The evaluation is mobility based but has a lot of "special" rules and a good bunch of formulas with literal numbers (values defined in code instead of tables) and it also considers the phase of the game and pawn properties such as passed pawns and the squares around the kings get a special treatment, too. What is all that if not chess knowledge?
It's common sense. :)

Seriously, you are right, OliThink is not completely without any chess knowledge. The greed for a higher ELO was just too big.
It would be quite interesting to remove all those "knowledges", instead improve the search and pruning, which still has some serious bugs.
Chess Engine OliThink: http://brausch.org/home/chess
OliThink GitHub:https://github.com/olithink
bitsquid
Posts: 2
Joined: Tue Dec 29, 2020 1:09 pm
Full name: Thomas Jahn

Re: Devlog of Leorik

Post by bitsquid »

OliverBr wrote: Thu Sep 01, 2022 10:25 pm Seriously, you are right, OliThink is not completely without any chess knowledge. The greed for a higher ELO was just too big.
It would be quite interesting to remove all those "knowledges", instead improve the search and pruning, which still has some serious bugs.
I feel the same conflict. I want to improve my engine further but in doing so the codebase transforms from implementing only general principles to more and more very specific, almost arbitrary things whose main reason for existence are that they raise Elo. In the end I can't bring myself to commit them to the main branch. An example would be that if I generate queen-promotions with the captures and only the under-promotions with the quiets I gain ~10 Elo... I have a hunch why but it's a bit of a hack isn't it?

And so I also thought maybe I should first look into the blunders that cause Leorik to lose games now and see if there are bugs somewhere I can fix instead.

I have downloaded the 500+ games from the CCRL where Leorik had played at 40/15" time controls. My current process is that I manually copy a PGN to chess.com and hit the Review button. But they use Stockfish at the fixed depth of 18 (I can't change it) and often when I look at the supposed blunder with higher depth in analysis mode the score difference to the best move (and also the best move itself) changes significantly. So the Review is probably limited by the shallow search depth they use. The process is also manual and thus a bit boring and painfully slow.

Does anybody have a better strategy?

I was thinking about writing some scripts and tools that just do all that automatically and gives me the problematic FENs directly including a Stockfish verified best-move that should have been played for further manual review. But if some solution already exist I'd gladly not reinvent the wheel there! Let me know if you know something!
User avatar
algerbrex
Posts: 608
Joined: Sun May 30, 2021 5:03 am
Location: United States
Full name: Christian Dean

Re: Devlog of Leorik

Post by algerbrex »

bitsquid wrote: Fri Sep 02, 2022 2:29 pm
OliverBr wrote: Thu Sep 01, 2022 10:25 pm Seriously, you are right, OliThink is not completely without any chess knowledge. The greed for a higher ELO was just too big.
It would be quite interesting to remove all those "knowledges", instead improve the search and pruning, which still has some serious bugs.
I feel the same conflict. I want to improve my engine further but in doing so the codebase transforms from implementing only general principles to more and more very specific, almost arbitrary things whose main reason for existence are that they raise Elo. In the end I can't bring myself to commit them to the main branch. An example would be that if I generate queen-promotions with the captures and only the under-promotions with the quiets I gain ~10 Elo... I have a hunch why but it's a bit of a hack isn't it?

And so I also thought maybe I should first look into the blunders that cause Leorik to lose games now and see if there are bugs somewhere I can fix instead.

I have downloaded the 500+ games from the CCRL where Leorik had played at 40/15" time controls. My current process is that I manually copy a PGN to chess.com and hit the Review button. But they use Stockfish at the fixed depth of 18 (I can't change it) and often when I look at the supposed blunder with higher depth in analysis mode the score difference to the best move (and also the best move itself) changes significantly. So the Review is probably limited by the shallow search depth they use. The process is also manual and thus a bit boring and painfully slow.

Does anybody have a better strategy?

I was thinking about writing some scripts and tools that just do all that automatically and gives me the problematic FENs directly including a Stockfish verified best-move that should have been played for further manual review. But if some solution already exist I'd gladly not reinvent the wheel there! Let me know if you know something!
Scid vs. PC might be able to do what you need. It can run an analysis on a game with an engine of your choosing to a specified depth. You can see the centipawn difference that will count a move as a blunder too: http://scidvspc.sourceforge.net/
User avatar
lithander
Posts: 915
Joined: Sun Dec 27, 2020 2:40 am
Location: Bremen, Germany
Full name: Thomas Jahn

Re: Devlog of Leorik

Post by lithander »

algerbrex wrote: Fri Sep 02, 2022 6:02 pm Scid vs. PC might be able to do what you need. It can run an analysis on a game with an engine of your choosing to a specified depth. You can see the centipawn difference that will count a move as a blunder too: http://scidvspc.sourceforge.net/
Thanks for the tip! A powerful tool but the UX is pretty confusing. I would have missed that feature if you hadn't explicitly mentioned that it can do that! But now I've a database of annotated Leorik games and I go through the list of blunders feed the position to Stockfish with multi PV enabled and compare it with Leoriks output. Already certain patterns emerge. Different classes of blunders so to speak.

One class of blunders has to do with the endgame. For example Leorik doesn't realize that a lone bishop or lone knight doesn't allow it to win. To Leorik it looks like one side is the value of a minor piece up. (200-300cp) It will trade pawns away for gaining this "advantage". I suppose I should encode knowledge for piece-combinations that Leorik should treat as drawn instead of running it's PST based eval on them.

Another class of blunder is when it takes Leorik too long to find the good moves. So it may have blundered in the game but if I feed the position to the engine and give it several minutes to chew on it eventually the good move emerges. I plan on collecting these to make a Leorik specific test-set and see if I can adjust the logic that does prunings or extensions to help these lines emerge faster.

Another class of blunder seems to hint at a bug with how I handle 3-fold-repetitions. Leorik, finding itself in a losing position, will play a line that it thinks will lead to a draw by 3-fold repetitions but it's not really considering all the options the opponent has and so a few moves later it realizes: I can't force the draw and now I'm in an even worse position. :(

I've shown an example of that in an earlier post. When I don't assign a score of 0 to repeated positions my engine gets worse overall but this particular bug is "fixed". I can also skip all moves that would lead to a repeated position in my search and this also fixes the bug. But that's too radical because know I just ignore the 3-fold-repetion rule completely... what I want is to get rid of only the "false positives" and that's what I'm currently trying to figure out how to do.
Minimal Chess (simple, open source, C#) - Youtube & Github
Leorik (competitive, in active development, C#) - Github & Lichess
User avatar
lithander
Posts: 915
Joined: Sun Dec 27, 2020 2:40 am
Location: Bremen, Germany
Full name: Thomas Jahn

Re: Devlog of Leorik

Post by lithander »

Here are two examples!

[fen]2brr1k1/5pp1/p2P3p/q3p3/2B1N3/1P1Q1PP1/3R2KP/8 w - - 2 35[/fen]
White is winning but until depth 22 Leorik expects a draw:

Code: Select all

info depth 22 score cp 0 nodes 276436871 nps 1763687 time 156738 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8
Whatever I do to fix the above problem it shouldn't cause Leorik to miss situations like these:
[fen]7k/1R6/4P2p/5n1q/5P2/8/6QK/2B5 w - - 1 54[/fen]
...white can't prevent black from forcing a draw here. And any naive solution would destroy Leorik's awareness of that.
Minimal Chess (simple, open source, C#) - Youtube & Github
Leorik (competitive, in active development, C#) - Github & Lichess
User avatar
AAce3
Posts: 80
Joined: Fri Jul 29, 2022 1:30 am
Full name: Aaron Li

Re: Devlog of Leorik

Post by AAce3 »

https://www.dropbox.com/s/xzzkqq1fkzzs1 ... rep-v2.pdf perhaps this might help? I found it in another thread.
User avatar
algerbrex
Posts: 608
Joined: Sun May 30, 2021 5:03 am
Location: United States
Full name: Christian Dean

Re: Devlog of Leorik

Post by algerbrex »

lithander wrote: Sun Sep 04, 2022 3:39 pm
algerbrex wrote: Fri Sep 02, 2022 6:02 pm Scid vs. PC might be able to do what you need. It can run an analysis on a game with an engine of your choosing to a specified depth. You can see the centipawn difference that will count a move as a blunder too: http://scidvspc.sourceforge.net/
Thanks for the tip! A powerful tool but the UX is pretty confusing. I would have missed that feature if you hadn't explicitly mentioned that it can do that! But now I've a database of annotated Leorik games and I go through the list of blunders feed the position to Stockfish with multi PV enabled and compare it with Leoriks output. Already certain patterns emerge. Different classes of blunders so to speak.
Nice, glad to see it was useful! The UX is definitely a little confusing at times but it is a nice tool. You can also use it to filter pgn files, which is what I used it before for a while.

I might have to do the same for Blunder and see if I can't fix some blunders it can't see.
lithander wrote: Sun Sep 04, 2022 3:39 pm One class of blunders has to do with the endgame. For example Leorik doesn't realize that a lone bishop or lone knight doesn't allow it to win. To Leorik it looks like one side is the value of a minor piece up. (200-300cp) It will trade pawns away for gaining this "advantage". I suppose I should encode knowledge for piece-combinations that Leorik should treat as drawn instead of running it's PST based eval on them.
Yea, I noticed that when I was playing some games for fun between Leorik and Blunder. Many times Leorik would be reporting a +300 cp score in a completely drawn endgame because it doesn't have the knowledge yet that king and minor vs king is a draw. Should be a pretty straightforward fix. Especially since those examples are not just theoretical draws, but actual draws. For theoretical draws where it's still possible for the opponent to blunder, I just divide the evaluation by a constant like 16 to indicate to Blunder that that part of the tree leads to a drawn endgame, so it'll prefer to leave pawns on the board when possible.
lithander wrote: Sun Sep 04, 2022 3:39 pm Another class of blunder is when it takes Leorik too long to find the good moves. So it may have blundered in the game but if I feed the position to the engine and give it several minutes to chew on it eventually the good move emerges. I plan on collecting these to make a Leorik specific test-set and see if I can adjust the logic that does prunings or extensions to help these lines emerge faster.
Sounds like a good idea as well. I normally encounter one of these positions in isolation and try to make some changes that not only help Blunder find the right move quicker, but also helps the engine generally. For example this position:


[fen]r4rk1/pp1bbpp1/1qn1pn1p/3pN3/2pP1B2/P1P1P2Q/1PBN1PPP/1R2K2R w K - 0 14[/fen]


I've wrestled with it for a while but no matter what I change in the search of evaluation, either the engine still can't find the bishop sacrifice (Bh6!), or it does, but in testing the engine plays worst. The issue I suspect is that the king safety is overall too weak, so I've experimented with it for a while but I haven't found any improvements. In general turning the king safety up, or trying to change the function used to compute the king safety, just weakens the engine.
lithander wrote: Sun Sep 04, 2022 3:39 pm Another class of blunder seems to hint at a bug with how I handle 3-fold-repetitions. Leorik, finding itself in a losing position, will play a line that it thinks will lead to a draw by 3-fold repetitions but it's not really considering all the options the opponent has and so a few moves later it realizes: I can't force the draw and now I'm in an even worse position. :(

I've shown an example of that in an earlier post. When I don't assign a score of 0 to repeated positions my engine gets worse overall but this particular bug is "fixed". I can also skip all moves that would lead to a repeated position in my search and this also fixes the bug. But that's too radical because know I just ignore the 3-fold-repetion rule completely... what I want is to get rid of only the "false positives" and that's what I'm currently trying to figure out how to do.
Interesting issue. You mean you don't assign 3-fold repeitions 0 right now? I didn't do that for a while in Blunder, because I thought the engine was too drawish so I always gave a penalty of -25 cp in the middle for a draw. I forgot when, but I remember a while ago I bit the bullet and just set the draw to always be 0. I maybe loss some Elo, but it seemed more correct to me and would allow for more improvement in the future.

Anyhow, the issue right now sounds like one of pruning since Leorik isn't considering certain moves it should before determining the position is a draw. Blunder does this in some positions to, because I actually don't avoid reducing checks that the side to move can give, which is an Elo gain overall, but in many positions makes Blunder complelty blind to the true nature of the position.

I suppose the place to start would be to look at LMR and whatever lossy pruning you have and start tweaking values. 9/10 when Blunder is blind to the nature of a position like Leorik is in some of the ones you've shown, I found the LMR to be the culprit.
User avatar
algerbrex
Posts: 608
Joined: Sun May 30, 2021 5:03 am
Location: United States
Full name: Christian Dean

Re: Devlog of Leorik

Post by algerbrex »

lithander wrote: Sun Sep 04, 2022 4:27 pm Here are two examples!

[fen]2brr1k1/5pp1/p2P3p/q3p3/2B1N3/1P1Q1PP1/3R2KP/8 w - - 2 35[/fen]
White is winning but until depth 22 Leorik expects a draw:

Code: Select all

info depth 22 score cp 0 nodes 276436871 nps 1763687 time 156738 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h6 h8g8
Whatever I do to fix the above problem it shouldn't cause Leorik to miss situations like these:
[fen]7k/1R6/4P2p/5n1q/5P2/8/6QK/2B5 w - - 1 54[/fen]
...white can't prevent black from forcing a draw here. And any naive solution would destroy Leorik's awareness of that.
Hmm, in both positions Blunder 8.5.5 seems to be able to find the right ideas, and reports a score of +200 cp:

Code: Select all

8.5.5. Version
-----------------
position fen 2brr1k1/5pp1/p2P3p/q3p3/2B1N3/1P1Q1PP1/3R2KP/8 w - - 2 35
go infinite
info depth 1 score cp -79 nodes 61 nps 9223372036854775808 time 0 pv d3e3
info depth 2 score cp -79 nodes 450 nps 9223372036854775808 time 0 pv d3d5 a5d5 c4d5
info depth 3 score cp -79 nodes 846 nps 9223372036854775808 time 0 pv d3d5 a5d5 c4d5
info depth 4 score cp -77 nodes 1847 nps 1847000 time 1 pv d3d5 a5d5 d2d5 g8h7
info depth 5 score cp -70 nodes 2980 nps 1490000 time 2 pv d3d5 a5d5 d2d5 g8h7 d5c5
info depth 6 score cp -74 nodes 5346 nps 1782000 time 3 pv d3d5 a5d5 d2d5 c8e6 d5c5 e6f5
info depth 7 score cp -87 nodes 14632 nps 1219333 time 12 pv d3d5 a5d5 d2d5 c8e6 d5c5 e6f5 c5c6
info depth 8 score cp 41 nodes 48684 nps 1872461 time 26 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2e2 a5b6 f6h4 h7g7
info depth 9 score cp 32 nodes 74409 nps 1459000 time 51 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 b3b4 a5b4 f6h4 h7g7 h4g5 g7h7 g5h5 h7g7
info depth 10 score cp 32 nodes 77893 nps 1442462 time 54 pv e4f6
info depth 11 score cp 85 nodes 656165 nps 2476094 time 265 pv e4f6 g8f8 f6e8 f8e8 d3e3 f7f6 d2d5 a5a1 d5c5 c8f5 g3g4 f5g6 e3d2
info depth 12 score cp 84 nodes 1085841 nps 1803722 time 602 pv e4f6 g8f8 f6e8 f8e8 d3e3 f7f6 d2d1 a5a2 g2g1 a2c2 e3d2 c8f5 g1f2 e8d7 d2c2 f5c2
info depth 13 score cp 180 nodes 2583945 nps 1702203 time 1518 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c5d6 h7g7 c8e6 e2e5 d6f8 g7f6 d8d2 c4e2 f8d6
info depth 14 score cp 187 nodes 3368994 nps 1559719 time 2160 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c5d6 h7g7 c8e6 c4e6 f7e6 e2e5 d8b8 g7g6 e8d7 g6h7 d7c8 h7g8 c8b7 g8e6 d6e6 e5e6
info depth 15 score cp 194 nodes 4864986 nps 1435522 time 3389 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c5d6 h7g7 c8e6 c4e6 f7e6 g7h6 e8f7 h6h5 f7e7 h2h3 d6d5 h5g5 e7e8 g5e5 d5e5 e2e5
info depth 16 score cp 195 nodes 7056001 nps 1377587 time 5122 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c5d6 h7g7 c8e6 c4e6 f7e6 e2e5 d8b8 e5e2 b8b3 g7h6 e8e7 h6g7 e7e8 e2c2
info depth 17 score cp 205 nodes 10905628 nps 1357941 time 8031 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c5d6 h7g7 c8e6 c4e6 f7e6 e2e5 d8b8 e5e2 b8b3 g7h6 e8e7 h6g7 e7e8 g7f6 e8d7
info depth 18 score cp 205 nodes 14820998 nps 1332823 time 11120 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c8e6 c4e6 f7e6 h7g7 c5d6 e2e5 d8b8 e5e2 b8b3 g7h6 e8f7 e2d2 d6e5 h6h7 f7f6 h2h4 a6a5
info depth 19 score cp 208 nodes 18224170 nps 1324816 time 13756 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c8e6 c4e6 f7e6 h7g7 c5d6 e2e5 d8b8 e5e2 b8b3 g7h6 e8f7 e2d2 d6e5 h6h7 f7e8 h7g8 e8e7 g8d8 e7f7 d2d7 f7g6
info depth 20 score cp 206 nodes 23632365 nps 1310579 time 18032 pv e4f6 g8f8 f6e8 f8e8 d2e2 a5c5 d3h7 c8e6 c4e6 f7e6 h7g7 d8d6 g7g6 e8d8 e2c2 c5b6 g6h6 d6c6 h6f6 d8d7 f6f7 d7d8 f7f8 d8c7 c2d2 c6c1 f8g7 c7b8 g7e5 b8a8 d2d6
stop
bestmove e4f6

Dev Version
--------------
position fen 2brr1k1/5pp1/p2P3p/q3p3/2B1N3/1P1Q1PP1/3R2KP/8 w - - 2 35
go infinite
info depth 1 score cp -79 nodes 61 nps 9223372036854775808 time 0 pv d3e3
info depth 2 score cp -79 nodes 450 nps 9223372036854775808 time 0 pv d3d5 a5d5 c4d5
info depth 3 score cp -79 nodes 846 nps 9223372036854775808 time 0 pv d3d5 a5d5 c4d5
info depth 4 score cp -77 nodes 1846 nps 1846000 time 1 pv d3d5 a5d5 d2d5 g8h7
info depth 5 score cp -70 nodes 2979 nps 1489500 time 2 pv d3d5 a5d5 d2d5 g8h7 d5c5
info depth 6 score cp -74 nodes 5347 nps 1336750 time 4 pv d3d5 a5d5 d2d5 c8e6 d5c5 e6f5
info depth 7 score cp -87 nodes 14621 nps 1044357 time 14 pv d3d5 a5d5 d2d5 c8e6 d5c5 e6f5 c5c6
info depth 8 score cp 41 nodes 44407 nps 1531275 time 29 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2e2 a5b6 f6h4 h7g7
info depth 9 score cp 32 nodes 122946 nps 1536825 time 80 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2e2 e5e4 f3e4 c8g4 e2e3
info depth 10 score cp 44 nodes 512588 nps 1291153 time 397 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2f2 e5e4 f3e4 a5h5 f2f4 c8h3 g2f2 h3g4 f2g1 d8c8 h2h4 h5c5 g1h2
info depth 11 score cp 64 nodes 965879 nps 2215318 time 436 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2f2 e5e4 f3e4 a5h5 f2f4 c8h3 g2f2 h3g4 f2g1 g4h3
info depth 12 score cp 65 nodes 1245474 nps 1895698 time 657 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2f2 e5e4 f3e4 a5h5 f2f4 c8h3 g2f2 h5c5 f2e2 c5h5 e2e1 h5h6 f6f7 h7h8 f4h4 e8e4 h4e4 h6c1 e1f2 d8d6
info depth 13 score cp 65 nodes 1584793 nps 2050184 time 773 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6h5 h8g8 h5f7 g8h8 f7f6 h8h7 d2f2 e5e4 f3e4 a5h5 f2f4 c8h3 g2f2 h5c5 f2e2 c5h5 e2e1 h5h6 f6f7 h7h8 f4h4 e8e4 h4e4 h6c1 e1f2 d8d6
info depth 14 score cp 65 nodes 1765150 nps 1983314 time 890 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2f2 e5e4 f3e4 a5h5 f2f4 c8h3 g2f2 h5c5 f2e2 c5h5 e2e1 h5h6 f6f7 h7h8 f4h4 e8e4 h4e4 h6c1 e1f2 d8d6
info depth 15 score cp 61 nodes 2331072 nps 1794512 time 1299 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2f2 e5e4 f3e4 a5h5 f2f4 c8h3 g2f2 h3g4 f2g1 h5c5 g1g2 c5h5 e4e5 g4h3 g2f2 d8c8 c4d3 h7g8
info depth 16 score cp 61 nodes 2635628 nps 1776029 time 1484 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2f2 e5e4 f3e4 a5h5 f2f4 c8h3 g2f2 h3g4 f2g1 h5c5 g1g2 c5h5 e4e5
info depth 17 score cp 154 nodes 4300342 nps 1600425 time 2687 pv e4f6 g7f6 d3g6 g8h8 g6h6 h8g8 h6g6 g8h8 g6f6 h8h7 f6f7 h7h6 f7f6 h6h7 d2f2 e8f8 c4f7 f8f7 f6f7 h7h6 f7f6 h6h7 f2e2 d8g8 f6e7
The dev version actually chokes at depth 17, but still reports a +150 cp score as can be seen. I suspect the "choking" is due to the singular move extensions I added that likely still need extensive tuning.

And for the second position, 8.5.5 and dev realize the draw and report a score of 0 cp, but the dev version realizes it faster, again possibly due the singular move extensions:

Code: Select all

Dev version
-------------------------------------------------------------------------
position fen 7k/1R6/4P2p/5n1q/5P2/8/6QK/2B5 w - - 1 54
go infinite
info depth 1 score cp 588 nodes 77 nps 9223372036854775808 time 0 pv h2g1 h5d1 g2f1
info depth 2 score cp 579 nodes 197 nps 9223372036854775808 time 0 pv h2g1 h5d1 g2f1 d1c2
info depth 3 score cp 551 nodes 941 nps 9223372036854775808 time 0 pv h2g1 h5d1 g2f1 d1g4 g1h2 h8g8
info depth 4 score cp 492 nodes 2823 nps 9223372036854775808 time 0 pv h2g1 h5d1 g2f1 d1g4 g1h2 g4h5 f1h3 h5e2 h2g1 e2e6
info depth 5 score cp 495 nodes 10902 nps 1557428 time 7 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4g3 f2e2 f5d4 e2d2 g3h2 d2d3 d4e6 c1b2 h8g8 d3e4
info depth 6 score cp 495 nodes 30258 nps 3782250 time 8 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2f3 h4g3 f3e2
info depth 7 score cp 492 nodes 35243 nps 2936916 time 12 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2f3 h4h5 f3g2 h5g4 g2h2 g4h5 f1h3 h5e2 h2g1 e2e6
info depth 8 score cp 321 nodes 96775 nps 1668534 time 58 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2d1 f3e4 f5d6 e4e5 d6b7 h3h6 h8g8 h6g6 g8h8 e6e7
info depth 9 score cp 376 nodes 312016 nps 4394591 time 71 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2d1 f3e4 f5d6 e4e5 d6b7 h3h6 h8g8 h6g6 g8h8 e6e7 d1e2 e5f6 e2a6 f6g5 a6g6 g5g6 b7d6
info depth 10 score cp 433 nodes 431834 nps 4035831 time 107 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2d1 f3e4 f5d6 e4e5 d6b7 h3h6 h8g8 h6g6 g8h8 e6e7 d1e2 e5f6 e2a6 f6g5 a6g6 g5g6 b7d6 c1a3 d6e8 f4f5
info depth 11 score cp 0 nodes 694402 nps 5511126 time 126 pv g2h3 h5e2 h2g1 e2e1 h3f1 e1g3 f1g2 g3e1 g1h2 e1h4 g2h3 h4f2 h2h1 f2e1 h1g2 e1e2 g2h1 e2e1
info depth 12 score cp 0 nodes 711190 nps 5191167 time 137 pv g2h3 h5e2 h2g1 e2e1 h3f1 e1g3 f1g2 g3e1 g1h2 e1h4 g2h3 h4f2 h2h1 f2e1 h1g2 e1e2 g2h1 e2e1
info depth 13 score cp 0 nodes 2050561 nps 2265813 time 905 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2f3 h4h5 f3f2 h5h4
info depth 14 score cp 17 nodes 2616811 nps 2028535 time 1290 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 g1g2 h6h5 f4f5 e8f7 b2d4 d2b3 d4e5 h5h4
info depth 15 score cp 0 nodes 5570846 nps 1828905 time 3046 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 g1g2 h6h5 f4f5 e8f7 b2d4 d2c4 f5f6 c4d6 g2f3
info depth 16 score cp 0 nodes 5958933 nps 1803551 time 3304 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3
info depth 17 score cp 0 nodes 8625909 nps 1746488 time 4939 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 g1g2 h6h5 f4f5 e8f7 b2d4 d2c4 f5f6 c4d6 g2f3 d6e8 f3f4 e8f6 f4g5 f6g4 g5h5 g4e5 d4e5 f7e6
info depth 18 score cp 0 nodes 12552973 nps 1712313 time 7331 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 g1g2 h6h5 f4f5 e8f7 b2d4 d2c4 f5f6 c4d6 g2f3 d6e8 f3f4 e8f6 f4g5 f6g4 g5h5 g4e5 d4e5 f7e6 h5h6
stop
bestmove h2g1

8.5.5 Version
----------------
position fen 7k/1R6/4P2p/5n1q/5P2/8/6QK/2B5 w - - 1 54
go infinite
info depth 1 score cp 588 nodes 57 nps 9223372036854775808 time 0 pv h2g1 h5d1 g2f1
info depth 2 score cp 579 nodes 178 nps 9223372036854775808 time 0 pv h2g1 h5d1 g2f1 d1c2
info depth 3 score cp 551 nodes 767 nps 9223372036854775808 time 0 pv h2g1 h5d1 g2f1 d1g4 g1h2 h8g8
info depth 4 score cp 492 nodes 2851 nps 2851000 time 1 pv h2g1 h5d1 g2f1 d1g4 g1h2 g4h5 f1h3 h5e2 h2g1 e2e6
info depth 5 score cp 488 nodes 11452 nps 1636000 time 7 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4g3 f2e2 f5d4 e2d2 d4e6 c1b2 h8g8 b7b8 g8f7 b2e5
info depth 6 score cp 492 nodes 22370 nps 1491333 time 15 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2f3 h4h5 f3g2 h5g4 g2h2 g4h5 f1h3 h5e2 h2g1 e2e6
info depth 7 score cp 492 nodes 26473 nps 1654562 time 16 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2f3 h4h5 f3g2 h5g4 g2h2 g4h5 f1h3 h5e2 h2g1 e2e6
info depth 8 score cp 321 nodes 96470 nps 1581475 time 61 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2d1 f3e4 f5d6 e4e5 d6b7 h3h6 h8g8 h6g6 g8h8 e6e7
info depth 9 score cp 402 nodes 1314436 nps 18005972 time 73 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2d1 f3e4 f5d6 e4e5 d6b7 h3h6 h8g8 h6g6 g8h8 e6e7 d1e2 e5f6 e2a6 f6g5 a6g6 g5g6 b7d6 f4f5
info depth 10 score cp 451 nodes 1515587 nps 11658361 time 130 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2d1 f3e4 f5d6 e4e5 d6b7 h3h6 h8g8 h6g6 g8h8 e6e7 d1e2 e5f6 e2a6 f6g5 a6g6 g5g6 b7d6 f4f5 h8g8 f5f6 g8h8
info depth 11 score cp 505 nodes 3147280 nps 3978862 time 791 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2c6 f3e2 c6e4 e2d2 e4f4 d2d1 f4d4 c1d2 d4a1 d1c2 f5d4 c2d3 a1a6 d3d4 a6b7 h3h6 h8g8 d2c3 b7g7 h6g7 g8g7 e6e7 g7f7
info depth 12 score cp 510 nodes 3571413 nps 3331541 time 1072 pv g2h3 h5e2 h2g1 e2d1 g1f2 d1c2 f2f3 c2c6 f3e2 c6e4 e2d2 e4f4 d2d1 f4d4 c1d2 d4a1 d1c2 f5d4 c2d3 a1a6 d3d4 a6b7 h3h6 h8g8 h6g5 b7g7 d4d5 g7g5 d2g5 g8f8 e6e7 f8e8 d5c6 e8f7 g5f6
info depth 13 score cp 71 nodes 7163532 nps 6294843 time 1138 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2d1 g3f1 e6e7 h4g4 d1e1 g4g3 e1f1 g3f3 f1e1 f3e4 e1f2 e4c2 f2g3 c2g6 g3f3 h8g7
info depth 14 score cp 65 nodes 7790774 nps 5003708 time 1557 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2d1 g3f1 e6e7 h4g4 d1e1 g4c8 b7c7 c8e6 e1f1 h8g8 c1b2 g8f7 b2e5 e6d5 f1f2 h6h5 f2e3 h5h4
info depth 15 score cp 13 nodes 24047407 nps 2480904 time 9693 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 f4f5 h6h5 g1f2 e8f7 b2d4 h5h4 f2e3 d2f1 e3e4 h4h3
info depth 16 score cp 16 nodes 26144292 nps 2366856 time 11046 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 f4f5 h6h5 g1f2 e8f7 b2d4 h5h4 f2g2 d2b3 d4e5 b3c5 f5f6 f7e6
info depth 17 score cp 1 nodes 30461589 nps 2222013 time 13709 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 g1f2 h6h5 f2g3 d2c4 b2a1 e8f7 f4f5 h5h4 g3h4 c4d6 f5f6 d6e4 a1d4 e4f6
info depth 18 score cp 1 nodes 37081101 nps 2106282 time 17605 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1
info depth 19 score cp 0 nodes 45370465 nps 1993167 time 22763 pv h2g1 h5d1 g2f1 d1g4 g1f2 g4h4 f2e2 f5g3 e2f3 g3f1 e6e7 h4h5 f3g2 h5e2 g2g1 f1d2 c1b2 h8g8 b7b8 g8f7 e7e8q e2e8 b8e8 f7e8 g1f2 h6h5 f2g3 d2c4 b2a1 e8f7 f4f5 c4d6 g3f4 h5h4 f5f6 h4h3 f4g3 d6e8 g3h3 e8f6
stop
bestmove h2g1
I wish I could tell you what I'm doing that might be helping Blunder, but I have no clue. I might do a little experimenting today since I'm off school Monday and see what I can find.