Progress on Rustic

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

User avatar
mvanthoor
Posts: 1784
Joined: Wed Jul 03, 2019 4:42 pm
Location: Netherlands
Full name: Marcel Vanthoor

Re: Progress on Rustic

Post by mvanthoor »

unserializable wrote: Mon Jan 25, 2021 10:01 pm Cool, sounds like the reason indeed has been found. Though it is also bit sad :(, if bugfixes continue at such pace, soon Monchester 1.0 will not be able to beat Rustic under any circumstances. I will also put it to play some more games for the night before the code gets updated :D.
Thanks for testing :)

I dare say that I don't often have severe bugs in the software I write. The drawback is that I'm relatively slow (compared to others) with regard to writing new code, and I test quite extensively. I *REALLY* dislike having to go back and debug code after I've written it. I prefer to only touch a piece of code when I'm actually going to improve it somehow. (Structure, speed, functionality, whatever...)

I wonder how this bug could have happened. The code actually says:

Code: Select all

	// Determine if we are in check.
	...
        // If so, extend search depth by 1 to determine the best way to get
        // out of the check before we go into quiescence search.
Then WTH did I put it AFTER "depth = 0 / qsearch" ?! It is well known that an engine should NOT go into qsearch if the side being searched is in check. Being in check is PER DEFINITION not quiet, because it COULD be mate. The only thing I could imagine that has caused this merging multiple branches and then resolving a merge conflict the wrong way or something weird like that.

Ah well. In a hyperspeed time control, the fix doesn't seem to matter much. I'll test the fixed version against Alpha 1 in the mentioned 1m + 0.6s time control (which is also used in Stockfish testing if I remember correctly). Looking at the playout of some games reminds me that time management is indeed quite basic.
Rustic's upcoming preference for Bd6-e5 bishops' activity on open diagonal instead of bishop blocked by own pawns seems like true grandmaster move.
I don't know how the engine suddenly decided on that move. I (as a person) would be extremely scared of that pawn on f5. Bd6-e5 guards f6, but I would rather have that pawn off the board. I also couldn't really understand the offered sacrifice of Be5xd4, but after I took the bishop with white, Rustic demolished me in short order.
EDIT: wow, from the statistics in your last post, Rustic really loves the black pieces :)
No comment... must have been the opening book. I'm switching to the much bigger GrandMaster 1950 book, for a more varied opening play. I'll see if that fixes it. It's not logical for the engine to prefer the white or black pieces, because there's nothing in the evaluation to make it do so. It just does ("material + PST for white" - "material + PST for black") and that's it for now. (Apart from the extra King endgame table.)

Sometimes, I see the engine do truly heroic stuff with regard to attacks and sacrifices, making it look like a tactical genius... and then a few moves later, it gets distracted by a weak pawn on the other side of the board, breaking off a massive attack on the king because it can eat just a bit more material... which makes it look like a complete positional idiot.

PS: I took a look at Monchester after I saw the score of your program against Rustic... it's in the list at ELO 837. How did you get it all the way down there? I don't understand...Have you not yet implemented quiescence search, MVV-LVA and check extension? I intended to leave them out of my very first version, but when I saw the _MASSIVE_ blunders to program played, I quickly decided to not release it like that.

By the way: I also tried to look at the code: https://github.com/unserializable/monchester, but there doesn't seem to be any. Am I missing something? Edit: Oh. It's not in the repository, but attached to the release. That's a novel idea :D
Author of Rustic, an engine written in Rust.
Releases | Code | Docs | Progress | CCRL
User avatar
mvanthoor
Posts: 1784
Joined: Wed Jul 03, 2019 4:42 pm
Location: Netherlands
Full name: Marcel Vanthoor

Re: Progress on Rustic

Post by mvanthoor »

With regard to testing: if you want to test the fixed version, you can pull the qsearch-fix branch. If the 1m+0.6s test checks out tonight, I'll merge it into master tomorrow so it'll be in the next release down the road. (The next release will focus on the transposition table, at least with regard to the playing part of the engine.)
Author of Rustic, an engine written in Rust.
Releases | Code | Docs | Progress | CCRL
unserializable
Posts: 64
Joined: Sat Oct 24, 2020 6:39 pm
Full name: Taimo Peelo

Re: Progress on Rustic

Post by unserializable »

mvanthoor wrote: Mon Jan 25, 2021 10:38 pm PS: I took a look at Monchester after I saw the score of your program against Rustic... it's in the list at ELO 837. How did you get it all the way down there? I don't understand...Have you not yet implemented quiescence search, MVV-LVA and check extension? I intended to leave them out of my very first version, but when I saw the _MASSIVE_ blunders to program played, I quickly decided to not release it like that.
Of course Monchester 1.0 does not implement any of this fancy stuff, 1.0 is as basic as conceived :)! There are plans for next version and also for one fun experiment, but I have not had much time for this, hopefully there will be fun update by 1st April or 2.0 at Halloween though. With regard to CCRL 404, probably Monchester is bit underrated there, as adjudication rules are used and many of these engines at lower end might not be able to actually convert the 'won' positions, e.g. it is rated bit lower than ChessPuter on CCRL 404. But against ChessPuter the constant-strength Monchester performed +210 =250 -40 (+123 ELO / 100 Bayes ELO) in my local tests on 2+1 (ChessPuter was just totally unable to convert won positions, most of these were drawn when played out).

For amusement, typical draw in ChessPuter style, when played out.

[pgn]
[Event "Computer Chess Game"]
[Date "2020.11.02"]
[Round "10"]
[White "ChessPuter"]
[Black "Monchester 0.99-9-g8d986e2"]
[Result "1/2-1/2"]
[TimeControl "120+1"]

1. Nc3 Nf6 {-0,51/4 0,1} 2. e3 Ng8 {-0,80/4 0,1} 3. Nf3 c6 {-0,85/4 0,1} 4.
d4 a5 {-0,85/4 0,1} 5. Na4 e6 {-0,71/4 0,1} 6. e4 Bb4+ {-0,54/4 0,2} 7. c3
Bd6 {-0,88/4 0,2} 8. Bg5 f6 {-0,71/4 0,3} 9. e5 Bxe5 {-0,31/4 0,2} 10. Nxe5
fxg5 {-0,48/4 0,2} 11. Qh5+ g6 {-16,05/4 0,1} 12. Qf3 Nh6 {-0,51/4 0,2} 13.
O-O-O d6 {-0,08/4 0,2} 14. Qh3 dxe5 {+0,02/4 0,2} 15. Qxh6 Qf6
{+0,05/4 0,1} 16. Nb6 Qf4+ {-6,57/4 0,1} 17. Kb1 Ra7 {-7,20/4 0,2} 18. Nxc8
Ra8 {-8,31/4 0,2} 19. Nd6+ Ke7 {-23,00/4 0,1} 20. Qg7+ Kxd6 {-23,45/4 0,1}
21. Qxh8 Ke7 {-31,34/4 0,2} 22. Qxh7+ Qf7 {-25,11/4 0,1} 23. Qxf7+ Kxf7
{-25,22/4 0,1} 24. dxe5 Ke7 {-25,65/4 0,1} 25. h4 gxh4 {-25,31/4 0,1} 26.
Rxh4 b6 {-34,14/4 0,1} 27. Bd3 g5 {-34,14/4 0,1} 28. Rh7+ Kf8
{-34,25/4 0,1} 29. Kc1 b5 {-34,22/4 0,1} 30. Rh5 Kg8 {-26,54/4 0,1} 31.
Rxg5+ Kf7 {-26,74/4 0,1} 32. Be4 Ra7 {-26,88/4 0,1} 33. f4 c5
{-26,65/4 0,1} 34. Bg6+ Kg7 {-26,62/4 0,1} 35. Bd3+ Kf8 {-27,25/4 0,1} 36.
Bxb5 Rc7 {-36,20/4 0,1} 37. Rd8+ Ke7 {-2857,14/4 0,1} 38. Rxb8 Rc8
{-62,97/4 0,1} 39. Rxc8 Kf7 {-2857,14/4 0,1} 40. b3 a4 {-2857,14/4 0,1} 41.
Bxa4 c4 {-2857,14/4 0,1} 42. bxc4 Ke7 {-2857,14/2 0,1} 43. f5 Kf7
{-65,17/4 0,1} 44. Rc7+ Kf8 {-2857,14/4 0,1} 45. fxe6
{Xboard adjudication: Stalemate} 1/2-1/2
[/pgn]

There are obscure results for some of its CCRL games, as the commented .pgns are not available I am not certain how these happened, e.g. one game ends with opponent putting its queen en-prise and winning...

[pgn]
[Event "CCRL Blitz"]
[Site "CCRL"]
[Date "2020.11.13"]
[Round "558.5.628"]
[White "Safrad 2.2.40.360"]
[Black "Monchester 0.99 64-bit"]
[Result "1-0"]
[ECO "A58"]
[Opening "Benko gambit accepted"]
[PlyCount "139"]
[WhiteElo "1021"]
[BlackElo "837"]

1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 g6 6. Nc3 Bxa6 7. Qa4 Ng8 8. Nb5
Nf6 9. Bf4 Nxd5 10. Nd6+ exd6 11. Qe4+ Be7 12. Qxd5 Ra7 13. Bxd6 Bxd6 14. Qxd6
Qa5+ 15. Kd1 Qa4+ 16. b3 Qd4+ 17. Qxd4 cxd4 18. Nf3 Nc6 19. e3 Bxf1 20. Rxf1
dxe3 21. fxe3 Ra5 22. Kd2 Kf8 23. Ke2 Rc5 24. Rad1 Rc2+ 25. Ke1 Rxa2 26. Rxd7
Rxg2 27. Nd4 Ke8 28. Rfxf7 Nxd4 29. Rfe7+ Kf8 30. Rxh7 Nc2+ 31. Kd1 Rxh7 32.
Rxh7 Nxe3+ 33. Kc1 Kg8 34. Rh3 Nd5 35. Rd3 Rg1+ 36. Kd2 Rg5 37. Rg3 Rxg3 38.
hxg3 Kf7 39. Kd3 Kf6 40. Kd4 Ke6 41. Ke4 g5 42. Kd4 g4 43. Ke4 Nf6+ 44. Kf4 Kd6
45. Kg5 Ke6 46. Kf4 Ke7 47. Kg5 Kf7 48. b4 Ke6 49. b5 Kf7 50. b6 Ke7 51. b7 Nd7
52. Kxg4 Nb8 53. Kf5 Kf7 54. g4 Ke7 55. g5 Kd7 56. Kg6 Kc6 57. Kf7 Kxb7 58. g6
Nc6 59. g7 Ne5+ 60. Ke6 Nd3 61. Kd6 Nf2 62. g8=Q Ne4+ 63. Ke5 Nc5 64. Qd5+ Kb6
65. Kd4 Na6 66. Qb3+ Kc6 67. Qe6+ Kb7 68. Qd6 Nc7 69. Qd7 Kb6 70. Qc6+ 1-0
[/pgn]
mvanthoor wrote: Mon Jan 25, 2021 10:38 pm By the way: I also tried to look at the code: https://github.com/unserializable/monchester, but there doesn't seem to be any. Am I missing something? Edit: Oh. It's not in the repository, but attached to the release. That's a novel idea :D
Engine code is also present in version branches ('1.0-branch'), master branch has README and binaries only, repository structure is also explained at the start of README :).
Monchester 1.0, chess engine playing at scholastic level: https://github.com/unserializable/monchester ("Daddy, it is gonna take your horsie!")
Tickle Monchester at: https://lichess.org/@/monchester
User avatar
mvanthoor
Posts: 1784
Joined: Wed Jul 03, 2019 4:42 pm
Location: Netherlands
Full name: Marcel Vanthoor

Re: Progress on Rustic

Post by mvanthoor »

unserializable wrote: Mon Jan 25, 2021 11:18 pm Of course Monchester 1.0 does not implement any of this fancy stuff, 1.0 is as basic as conceived :)! There are plans for next version and also for one fun experiment, but I have not had much time for this, hopefully there will be fun update by 1st April or 2.0 at Halloween though.
I haven't extensively checked the code, but it seems Monchester is either stuck at 4 moves deep, or it limits itself to that search depth. That would be one explanation for the low rating.

I've just ran a test for 200 games, 10s+0, with the following results:

Code: Select all

Score of Rustic QSearch Fix vs Monchester 1.0.1: 199 - 0 - 1 [0.998]
...      Rustic QSearch Fix playing White: 100 - 0 - 0  [1.000] 100
...      Rustic QSearch Fix playing Black: 99 - 0 - 1  [0.995] 100
...      White vs Black: 100 - 99 - 1  [0.502] 200
Elo difference: 1040.4 +/- nan, LOS: 100.0 %, DrawRatio: 0.5 %
200 of 200 games finished.
It seems the score is now at 99.8% for Rustic... Monchester managed only one draw, which was a move repetition, almost right out of the opening book:

[pgn]
[Event "My Tournament"]
[Site "?"]
[Date "2021.01.25"]
[Round "59"]
[White "Monchester 1.0.1"]
[Black "Rustic QSearch Fix"]
[Result "1/2-1/2"]
[ECO "E32"]
[GameDuration "00:00:01"]
[GameEndTime "2021-01-25T23:15:32.431 W. Europe Standard Time"]
[GameStartTime "2021-01-25T23:15:30.624 W. Europe Standard Time"]
[Opening "Nimzo-Indian"]
[PlyCount "30"]
[TimeControl "10"]
[Variation "Classical Variation"]

1. d4 {book} Nf6 {book} 2. c4 {book} e6 {book} 3. Nc3 {book} Bb4 {book}
4. Qc2 {book} O-O {book} 5. a3 {book} Bxc3+ {book} 6. Qxc3 {book} b6 {book}
7. Bg5 {book} Ba6 {book} 8. e3 {book} d6 {book} 9. Bd3 {+0.31/4 0.086s}
h6 {0.00/4 0.16s} 10. Bxf6 {-0.45/4 0.10s} Qxf6 {-0.10/6 0.17s}
11. Qc2 {-0.45/4 0.093s} d5 {-0.20/5 0.17s} 12. Bh7+ {+0.45/4 0.11s}
Kh8 {-0.05/5 0.18s} 13. Bd3 {-1.54/4 0.11s} Kg8 {0.00/6 0.19s}
14. Bh7+ {+0.45/4 0.098s} Kh8 {0.00/253 0.003s} 15. Bd3 {-1.54/4 0.11s}
Kg8 {0.00/6 0.21s, Draw by 3-fold repetition} 1/2-1/2
[/pgn]

If given a few seconds to think however, Rustic doesn't repeat the moves but after the bishop retreats to d3, it captures on c4.

I look forward to the time where you'll implement iterative deepning search... until that time, Monchester isn't really a viable sparring partner for Rustic (or basically, any other engine that implements iterative deepening).
Author of Rustic, an engine written in Rust.
Releases | Code | Docs | Progress | CCRL
unserializable
Posts: 64
Joined: Sat Oct 24, 2020 6:39 pm
Full name: Taimo Peelo

Re: Progress on Rustic

Post by unserializable »

mvanthoor wrote: Mon Jan 25, 2021 11:29 pm I haven't extensively checked the code, but it seems Monchester is either stuck at 4 moves deep, or it limits itself to that search depth. That would be one explanation for the low rating.
Yes, it is constant strength at 4 plies, no matter the hardware or time controls. It is meant as reference engine and for scholastic chess, for sparring it is suitable for beginning engines or mass-testing. In blitz, it is rated currently around 1550 at lichess.

Draw you posted has notable 253 depth extension search there: 14. ... Kh8 {0.00/253 0.003s}.

EDIT: I will take a look at Rustics 'qsearch-fix' branch tomorrow, additional games against older version are still running.
Monchester 1.0, chess engine playing at scholastic level: https://github.com/unserializable/monchester ("Daddy, it is gonna take your horsie!")
Tickle Monchester at: https://lichess.org/@/monchester
User avatar
mvanthoor
Posts: 1784
Joined: Wed Jul 03, 2019 4:42 pm
Location: Netherlands
Full name: Marcel Vanthoor

Re: Progress on Rustic

Post by mvanthoor »

unserializable wrote: Mon Jan 25, 2021 11:48 pm EDIT: I will take a look at Rustics 'qsearch-fix' branch tomorrow, additional games against older version are still running.
Thanks :)

To be honest, I think the 10s+0 games are low quality, but for giggles I'm running a few sets of 200 to just see what the results are. The engine Rustic plays against makes a huge difference (the ratings I quote are a bit older; they may have slightly changed).

Rustic vs:

Pulse 1.7.2 (CCRL 1650): +150 ELO
TSCP 1.81 (CCRL 1713): -100 ELO
ShallowBlue 2.0 (CCRL 1724): +30 ELO
Pigeon 1.5.1 (CCRL 1798): +35 ELO

This result puts Rustic somewhere in between 1600 (against TSCP) and 1830 (against Pigeon).

Note that I don't put a lot of stock in 10s+0 games. My own tests to see if Rustic improved after a change are going to be run at either 1m+0.6s, or at the same time controls as CCRL blitz.
Author of Rustic, an engine written in Rust.
Releases | Code | Docs | Progress | CCRL
User avatar
Guenther
Posts: 4606
Joined: Wed Oct 01, 2008 6:33 am
Location: Regensburg, Germany
Full name: Guenther Simon

Re: Progress on Rustic

Post by Guenther »

unserializable wrote: Mon Jan 25, 2021 11:18 pm
mvanthoor wrote: Mon Jan 25, 2021 10:38 pm PS: I took a look at Monchester after I saw the score of your program against Rustic... it's in the list at ELO 837. How did you get it all the way down there? I don't understand...Have you not yet implemented quiescence search, MVV-LVA and check extension? I intended to leave them out of my very first version, but when I saw the _MASSIVE_ blunders to program played, I quickly decided to not release it like that.
...
There are obscure results for some of its CCRL games, as the commented .pgns are not available I am not certain how these happened, e.g. one game ends with opponent putting its queen en-prise and winning...

[pgn]
[Event "CCRL Blitz"]
[Site "CCRL"]
[Date "2020.11.13"]
[Round "558.5.628"]
[White "Safrad 2.2.40.360"]
[Black "Monchester 0.99 64-bit"]
[Result "1-0"]
[ECO "A58"]
[Opening "Benko gambit accepted"]
[PlyCount "139"]
[WhiteElo "1021"]
[BlackElo "837"]

1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 g6 6. Nc3 Bxa6 7. Qa4 Ng8 8. Nb5
Nf6 9. Bf4 Nxd5 10. Nd6+ exd6 11. Qe4+ Be7 12. Qxd5 Ra7 13. Bxd6 Bxd6 14. Qxd6
Qa5+ 15. Kd1 Qa4+ 16. b3 Qd4+ 17. Qxd4 cxd4 18. Nf3 Nc6 19. e3 Bxf1 20. Rxf1
dxe3 21. fxe3 Ra5 22. Kd2 Kf8 23. Ke2 Rc5 24. Rad1 Rc2+ 25. Ke1 Rxa2 26. Rxd7
Rxg2 27. Nd4 Ke8 28. Rfxf7 Nxd4 29. Rfe7+ Kf8 30. Rxh7 Nc2+ 31. Kd1 Rxh7 32.
Rxh7 Nxe3+ 33. Kc1 Kg8 34. Rh3 Nd5 35. Rd3 Rg1+ 36. Kd2 Rg5 37. Rg3 Rxg3 38.
hxg3 Kf7 39. Kd3 Kf6 40. Kd4 Ke6 41. Ke4 g5 42. Kd4 g4 43. Ke4 Nf6+ 44. Kf4 Kd6
45. Kg5 Ke6 46. Kf4 Ke7 47. Kg5 Kf7 48. b4 Ke6 49. b5 Kf7 50. b6 Ke7 51. b7 Nd7
52. Kxg4 Nb8 53. Kf5 Kf7 54. g4 Ke7 55. g5 Kd7 56. Kg6 Kc6 57. Kf7 Kxb7 58. g6
Nc6 59. g7 Ne5+ 60. Ke6 Nd3 61. Kd6 Nf2 62. g8=Q Ne4+ 63. Ke5 Nc5 64. Qd5+ Kb6
65. Kd4 Na6 66. Qb3+ Kc6 67. Qe6+ Kb7 68. Qd6 Nc7 69. Qd7 Kb6 70. Qc6+ 1-0
[/pgn]
Hi Taimo, You should report the most strange ones (as above) to CCRL.
(They have an own forum BTW)

May be there was a strange adjudication rule active, e.g. sth like x plies into a won 4 men TB,
also there is no Termination tag or reason given at all.
Sometimes they fix wrong (not really checked) game results.

Actually I think games for programs below let's say 1400 probably should not be adjudicated at all.
OTH this would probably reduce the motivation to test some of them, due to marathon games.
https://rwbc-chess.de

trollwatch:
Chessqueen + chessica + AlexChess + Eduard + Sylwy
unserializable
Posts: 64
Joined: Sat Oct 24, 2020 6:39 pm
Full name: Taimo Peelo

Re: Progress on Rustic

Post by unserializable »

unserializable wrote: Mon Jan 25, 2021 11:48 pm EDIT: I will take a look at Rustics 'qsearch-fix' branch tomorrow, additional games against older version are still running.
Some more interesting games from 7000 10s+0 games against the Rustic Alpha 1 without search fix (99.36%, +6947 =17 -36 for Rustic). No identifying round numbers, as those were lost when merging games from parallel runs. I have put desktop at home to do another 7k games at the same time control against the search fix branch.

Stalemates

Stalemates, probably in time trouble, Rustic reported search depth 1 on last moves -- but there are many moves available at depth 1 that do not result in stalemate.

[pgn]
[Event "Computer Chess Game"]
[Site "nemiroff"]
[Date "2021.01.25"]
[White "Rustic Alpha 1"]
[Black "Monchester 1.0.1-7-ga533423"]
[Result "1/2-1/2"]
[TimeControl "10"]

1. d4 {+0,20/5} c6 {-0,42/4 0,1} 2. Bf4 {+0,50/5 0,1} Na6 {-0,51/4 0,1} 3.
e4 {+0,85/4 0,1} b5 {-0,77/4 0,2} 4. a4 {+1,15/4 0,1} Qa5+ {-1,02/4 0,2} 5.
Qd2 {+1,40/4 0,1} Qxd2+ {-0,91/4 0,2} 6. Bxd2 {+1,30/5 0,1} Nc7
{-1,17/4 0,1} 7. axb5 {+1,35/6 0,1} cxb5 {-0,88/4 0,2} 8. d5 {+1,50/5 0,1}
d6 {-1,02/4 0,1} 9. Ba5 {+1,65/5 0,1} Kd7 {-9,22/4 0,1} 10. Bxc7
{+1,50/5 0,1} Kxc7 {-3,25/4 0,1} 11. Bxb5 {+1,40/6 0,2} Nh6 {-3,37/4 0,1}
12. Bc6 {+2,10/5 0,2} Bb7 {-3,31/4 0,1} 13. Bxb7 {+1,55/6 0,2} Kxb7
{-3,40/4 0,1} 14. Nc3 {+1,70/5 0,2} Rc8 {-3,48/4 0,1} 15. f4 {+1,80/5 0,2}
Ng4 {-3,42/4 0,1} 16. Rc1 {+1,50/5 0,2} Ne3 {-3,05/4 0,1} 17. Kf2
{+1,50/6 0,2} Ng4+ {-3,11/4 0,1} 18. Kf3 {+2,05/4 0,2} Nf6 {-3,42/4 0,1}
19. e5 {+2,10/4 0,2} dxe5 {-3,08/4 0,1} 20. fxe5 {+1,90/6 0,2} Nd7
{-3,11/4 0,1} 21. e6 {+2,00/5 0,3} fxe6 {-2,94/4 0,1} 22. dxe6
{+0,50/6 0,3} Nc5 {-2,94/4 0,1} 23. Re1 {+0,55/6 0,3} Kb6 {-3,20/4 0,1} 24.
b4 {+2,10/6 0,3} Na6 {-3,40/4 0,1} 25. Nd5+ {+2,25/6 0,4} Kc6 {-3,42/4 0,1}
26. Rd1 {+2,25/5 0,1} Nc7 {-3,11/4 0,1} 27. Nxc7 {+2,05/6 0,1} Kxc7
{-3,51/4 0,1} 28. Ne2 {+2,10/6 0,1} Kb6 {-3,17/4 0,1} 29. Nd4 {+2,15/5 0,1}
Rc4 {-3,00/4 0,1} 30. b5 {+1,70/5 0,1} Rc3+ {-3,20/4 0,1} 31. Ke4
{+2,50/4 0,1} g5 {-3,37/4 0,1} 32. Rhf1 {+2,50/4 0,1} Bg7 {-3,17/4 0,1} 33.
Rf5 {+2,05/5 0,1} Bxd4 {-0,82/4 0,2} 34. Kxd4 {+1,05/6 0,1} Rxc2
{-1,28/4 0,1} 35. Rg1 {+0,35/6 0,1} Rd8+ {-0,31/4 0,1} 36. Ke3
{+0,35/5 0,1} Rc3+ {-0,25/4 0,1} 37. Ke4 {+0,50/5 0,1} g4 {-0,34/4 0,1} 38.
Ra1 {+0,80/5 0,1} Rc4+ {-0,25/4 0,1} 39. Ke3 {+0,75/5 0,1} Rc3+
{-0,11/4 0,1} 40. Kf4 {+0,75/5 0,1} Rc4+ {-0,42/4 0,1} 41. Kg3
{+0,70/5 0,1} Rd3+ {-0,42/4 0,1} 42. Kh4 {+0,70/5 0,1} g3+ {-0,22/4 0,1}
43. Kh3 {+1,00/5 0,1} gxh2+ {-0,42/4 0,1} 44. Kxh2 {+1,05/5 0,1} Rh4+
{-0,54/4 0,1} 45. Kg1 {+1,05/5 0,1} Rb3 {-0,62/4 0,1} 46. Rd5 {+1,45/6 0,1}
Rxb5 {-0,17/4 0,1} 47. Rxb5+ {+1,80/7 0,1} Kxb5 {-0,54/4 0,1} 48. Rxa7
{+1,40/7 0,1} Ra4 {-1,00/4 0,1} 49. Rxe7 {+1,40/7 0,2} h5 {-1,37/4 0,1} 50.
Rc7 {+1,75/6 0,2} Ra1+ {-1,28/4 0,1} 51. Kh2 {+1,75/4 0,1} Ra4
{-1,40/4 0,1} 52. e7 {+1,85/4 0,1} Rh4+ {-26,60/4 0,1} 53. Kg1
{+1,90/4 0,1} Kb6 {-26,97/4 0,1} 54. Rc6+ {+8,90/4 0,1} Kxc6 {-17,80/4 0,1}
55. e8=Q+ {+9,00/4 0,1} Kc7 {-42,34/4 0,1} 56. Qe7+ {+9,10/4 0,1} Kb8
{-43,34/4 0,1} 57. Qxh4 {+9,65/5 0,1} Kc8 {-43,94/4 0,1} 58. Qxh5
{+10,25/5 0,1} Kd7 {-44,11/4 0,1} 59. Qd5+ {+10,25/4 0,1} Ke7
{-44,14/4 0,1} 60. Kf2 {+10,95/5 0,1} Kf6 {-44,14/4 0,1} 61. Ke3
{+10,85/4 0,1} Kg6 {-44,11/4 0,1} 62. Qe6+ {+11,10/4 0,1} Kg7
{-44,11/4 0,1} 63. Kd4 {+11,20/5 0,1} Kh8 {-44,14/4 0,1} 64. Qg4
{+11,40/5 0,1} Kh7 {-44,22/4 0,1} 65. Kc4 {+11,40/5 0,1} Kh8 {-44,17/4 0,1}
66. Kd5 {+11,40/5 0,1} Kh7 {-44,20/4 0,1} 67. Kd4 {+11,40/5 0,1} Kh8
{-44,17/4 0,1} 68. Ke4 {+11,40/5 0,1} Kh7 {-44,11/4 0,1} 69. Kf4
{+11,40/5 0,1} Kh8 {-44,14/4 0,1} 70. Qg5 {+11,40/5 0,1} Kh7 {-44,17/4 0,1}
71. Ke3 {+11,40/5 0,1} Kh8 {-44,14/4 0,1} 72. Kd3 {+11,40/5 0,1} Kh7
{-44,20/4 0,1} 73. Kc3 {+11,40/5 0,1} Kh8 {-44,22/4 0,1} 74. Kc4
{+11,40/5 0,1} Kh7 {-44,17/4 0,1} 75. Kd3 {+11,40/5 0,1} Kh8 {-44,17/4 0,1}
76. Qh6+ {+11,30/4 0,1} Kg8 {-44,17/4 0,1} 77. Qg6+ {+11,15/4 0,1} Kf8
{-44,17/4 0,1} 78. Qe6 {+11,25/4 0,1} Kg7 {-44,17/4 0,1} 79. Ke4
{+11,20/4 0,1} Kh7 {-44,14/4 0,1} 80. Qe7+ {+11,35/4 0,1} Kg6
{-44,14/4 0,1} 81. g4 {+11,45/4 0,1} Kh6 {-44,14/4 0,1} 82. Ke5
{+11,45/4 0,1} Kg6 {-44,17/4 0,1} 83. Kd4 {+11,45/4 0,1} Kh6 {-44,20/4 0,1}
84. Qf6+ {+11,45/4 0,1} Kh7 {-44,17/4 0,1} 85. g5 {+11,50/4 0,1} Kg8
{-44,17/4 0,1} 86. g6 {+11,45/1 0,1}
{Xboard adjudication: Stalemate} 1/2-1/2
[/pgn]


[pgn]
[Event "Computer Chess Game"]
[Date "2021.01.25"]
[White "Rustic Alpha 1"]
[Black "Monchester 1.0.1-7-ga533423"]
[Result "1/2-1/2"]
[TimeControl "10"]

1. d4 {+0,20/5} c6 {-0,42/4 0,1} 2. Bf4 {+0,50/5 0,1} Qa5+ {-0,48/4 0,1} 3.
Bd2 {+0,60/4 0,1} Qb5 {-0,34/4 0,1} 4. Qc1 {+0,60/5 0,1} Nf6 {-0,37/4 0,2}
5. e4 {+1,20/5 0,1} Qa4 {-0,25/4 0,2} 6. Nf3 {+1,50/5 0,1} c5 {-0,94/4 0,2}
7. b3 {+1,65/5 0,1} Qc6 {-0,48/4 0,2} 8. d5 {+1,15/5 0,1} Qb6 {-0,51/4 0,2}
9. Nc3 {+1,00/5 0,1} d6 {-0,82/4 0,2} 10. Na4 {+0,90/4 0,1} Qc7
{-1,14/4 0,3} 11. Bd3 {+0,70/5 0,2} Bd7 {-0,48/4 0,3} 12. c4 {+0,65/5 0,2}
Bxa4 {+1,40/4 0,3} 13. bxa4 {+0,90/5 0,2} Ng4 {+1,00/4 0,2} 14. Qb2
{+1,20/4 0,2} Qb6 {+1,00/4 0,3} 15. Rb1 {+1,85/5 0,2} Qxb2 {+0,97/4 0,3}
16. Rxb2 {+1,30/7 0,2} b6 {+0,48/4 0,1} 17. h3 {+1,30/5 0,2} Ne5
{+0,48/4 0,1} 18. Nxe5 {+1,25/7 0,2} dxe5 {+0,74/4 0,1} 19. f4
{+1,25/5 0,2} Nd7 {+0,82/4 0,1} 20. f5 {+0,85/6 0,2} Rc8 {+0,97/4 0,1} 21.
g4 {+1,55/5 0,3} g6 {+1,02/4 0,1} 22. Rb5 {+1,15/6 0,3} a6 {+1,45/4 0,1}
23. Rb1 {+1,15/7 0,3} Kd8 {+1,22/4 0,1} 24. O-O {+1,45/6 0,3} gxf5
{+1,02/4 0,1} 25. Rxf5 {+1,45/7 0,4} f6 {+0,65/4 0,1} 26. h4 {+1,50/5 0,1}
Rg8 {+0,82/4 0,1} 27. Be2 {+1,50/5 0,1} Kc7 {+0,74/4 0,1} 28. Rd1
{+1,35/4 0,1} Ra8 {+0,88/4 0,1} 29. Rh5 {+1,40/4 0,1} Rh8 {+0,85/4 0,1} 30.
g5 {+1,30/5 0,1} fxg5 {+0,94/4 0,1} 31. hxg5 {+1,30/5 0,1} Re8
{+0,82/4 0,1} 32. g6 {+1,50/4 0,1} Rg8 {+1,42/4 0,1} 33. Rxh7 {+0,90/5 0,1}
Rxg6+ {+1,02/4 0,1} 34. Kh1 {+0,90/4 0,1} Nf6 {-5,22/4 0,1} 35. Bh5
{+0,90/5 0,1} Nxh5 {-0,57/4 0,1} 36. Rxh5 {+0,80/6 0,1} Bg7 {-0,91/4 0,1}
37. Bc3 {+0,85/5 0,1} Kd7 {-0,77/4 0,1} 38. Rf1 {+1,20/5 0,1} Rh8
{-0,74/4 0,1} 39. Rxh8 {+0,70/7 0,1} Bxh8 {-0,42/4 0,1} 40. Rf8
{+0,70/5 0,1} Rh6+ {-0,37/4 0,1} 41. Kg1 {+0,60/5 0,1} Rh3 {-0,40/4 0,1}
42. Bd2 {+0,75/6 0,1} Bg7 {-0,22/4 0,1} 43. Rg8 {+0,75/6 0,1} Bf6
{-0,80/4 0,1} 44. Ra8 {+0,55/6 0,1} Rd3 {-0,68/4 0,1} 45. Bh6 {+0,40/6 0,1}
Rg3+ {-0,65/4 0,1} 46. Kf2 {+0,40/6 0,1} Ra3 {-0,71/4 0,1} 47. Rxa6
{-0,30/7 0,1} Rxa2+ {-0,34/4 0,1} 48. Kf3 {-0,30/6 0,1} Ra3+ {-0,57/4 0,1}
49. Kg4 {-0,25/6 0,2} Rb3 {-0,65/4 0,1} 50. a5 {+0,75/7 0,2} bxa5
{-0,65/4 0,1} 51. Rxa5 {+1,20/6 0,1} e6 {-0,97/4 0,1} 52. Ra7+
{+1,40/5 0,1} Kd8 {-1,28/4 0,1} 53. dxe6 {+1,70/5 0,1} Rb2 {-1,37/4 0,1}
54. Bf8 {+2,60/5 0,1} Rg2+ {-1,82/4 0,1} 55. Kf3 {+3,50/4 0,1} Rc2
{-1,97/4 0,1} 56. e7+ {+3,55/5 0,1} Bxe7 {-8,60/4 0,1} 57. Bxe7+
{+4,10/6 0,1} Ke8 {-8,42/4 0,1} 58. Bxc5 {+4,50/6 0,1} Rc3+ {-8,42/4 0,1}
59. Kf2 {+4,50/5 0,1} Rc2+ {-8,42/4 0,1} 60. Kg3 {+4,50/5 0,1} Rc3+
{-8,42/4 0,1} 61. Kg2 {+4,50/5 0,1} Rc2+ {-8,42/4 0,1} 62. Kh3
{+4,50/5 0,1} Rc3+ {-8,42/4 0,1} 63. Kg4 {+4,50/6 0,1} Rxc4 {-9,08/4 0,1}
64. Re7+ {+4,50/5 0,1} Kf8 {-9,40/4 0,1} 65. Rxe5+ {+4,70/5 0,1} Kf7
{-9,37/4 0,1} 66. Kf4 {+4,70/5 0,1} Rc2 {-9,34/4 0,1} 67. Rf5+
{+4,80/5 0,1} Kg6 {-9,31/4 0,1} 68. Bd4 {+4,85/5 0,1} Rc7 {-9,31/4 0,1} 69.
Rg5+ {+4,95/5 0,1} Kh6 {-9,31/4 0,1} 70. Ra5 {+4,95/5 0,1} Rb7
{-9,28/4 0,1} 71. Ra7 {+5,15/5 0,1} Rxa7 {-9,25/4 0,1} 72. Bxa7
{+5,55/7 0,1} Kh7 {-9,34/4 0,1} 73. Kf5 {+5,65/7 0,1} Kg7 {-9,40/4 0,1} 74.
e5 {+5,75/7 0,1} Kg8 {-9,37/4 0,1} 75. Kf6 {+6,15/7 0,1} Kh7 {-9,40/4 0,1}
76. e6 {+12,65/6 0,1} Kh6 {-50,40/4 0,1} 77. e7 {+13,20/6 0,1} Kh5
{-51,14/4 0,1} 78. e8=Q+ {+13,60/5 0,1} Kg4 {-51,05/4 0,1} 79. Qe4+
{+13,60/4 0,1} Kg3 {-50,94/4 0,1} 80. Ke5 {+13,55/4 0,1} Kh3 {-50,85/4 0,1}
81. Kd5 {+13,75/4 0,1} Kg3 {-50,74/4 0,1} 82. Bd4 {+13,75/4 0,1} Kh3
{-50,65/4 0,1} 83. Qf3+ {+13,85/3 0,1} Kh2 {-1000,02/4 0,1} 84. Qg4
{+1000,02/4 0,1} Kh1 {-1000,01/2 0,1} 85. Qe4+ {+13,80/1 0,1} Kh2
{-1000,02/4 0,1} 86. Be5+ {+13,85/1 0,1} Kh3 {-1000,02/4 0,1} 87. Kd4
{+13,80/1 0,1}
{Xboard adjudication: Stalemate} 1/2-1/2
[/pgn]


Fun stalemate, but that one is probably out of horizon at such fast time control:

[pgn]
[Event "Computer Chess Game"]
[Date "2021.01.25"]
[White "Rustic Alpha 1"]
[Black "Monchester 1.0.1-7-ga533423"]
[Result "1/2-1/2"]
[TimeControl "10"]

1. d4 {+0,20/5} e6 {-0,40/4 0,1} 2. Bd2 {+0,20/5 0,1} Nf6 {-0,34/4 0,1} 3.
Nf3 {+0,20/5 0,1} Nc6 {-0,37/4 0,1} 4. e3 {+0,50/5 0,1} Bb4 {-0,34/4 0,2}
5. Bxb4 {+0,80/5 0,1} Nxb4 {-0,80/4 0,2} 6. Be2 {+0,25/4 0,1} Ng4
{-0,51/4 0,2} 7. c3 {+0,95/4 0,1} Nc6 {-1,02/4 0,2} 8. d5 {+0,75/4 0,1}
Nce5 {-1,22/4 0,3} 9. Nxe5 {+1,45/5 0,1} Nxe5 {-1,31/4 0,3} 10. f4
{+1,25/5 0,1} Ng6 {-1,00/4 0,2} 11. O-O {+0,95/4 0,2} Ne7 {-0,71/4 0,2} 12.
c4 {+1,00/5 0,2} exd5 {-0,31/4 0,1} 13. cxd5 {+0,95/6 0,2} c6 {-0,42/4 0,1}
14. Qd4 {+1,05/6 0,2} Kf8 {-1,22/4 0,2} 15. d6 {+1,40/6 0,2} Ng8
{-1,05/4 0,2} 16. Nc3 {+1,75/5 0,2} Qb6 {-0,54/4 0,2} 17. Qxb6
{+1,70/6 0,2} axb6 {-0,74/4 0,1} 18. e4 {+1,75/5 0,2} Nf6 {-0,54/4 0,1} 19.
g4 {+1,85/6 0,2} Ne8 {-0,40/4 0,1} 20. Rad1 {+1,85/6 0,2} g6 {-0,48/4 0,1}
21. a3 {+1,85/6 0,3} h6 {-0,51/4 0,1} 22. h3 {+1,85/6 0,3} f6 {-0,51/4 0,1}
23. Bc4 {+1,90/6 0,3} h5 {-0,48/4 0,1} 24. e5 {+1,95/6 0,3} hxg4
{+0,08/4 0,1} 25. hxg4 {+1,95/7 0,4} b5 {-0,42/4 0,1} 26. Bd3 {+1,95/5 0,1}
Rh4 {-0,45/4 0,1} 27. g5 {+1,95/5 0,1} Rg4+ {-0,22/4 0,1} 28. Kh1
{+1,85/5 0,1} Rh4+ {-0,31/4 0,1} 29. Kg2 {+1,90/5 0,1} f5 {-0,68/4 0,1} 30.
Be2 {+1,90/5 0,1} b6 {-0,94/4 0,1} 31. Kg3 {+1,95/5 0,1} Rh7 {-0,94/4 0,1}
32. Kf3 {+1,80/5 0,1} Rb8 {-0,71/4 0,1} 33. Ke3 {+1,80/5 0,1} Rh3+
{-0,77/4 0,1} 34. Kf2 {+1,95/4 0,1} Kg7 {-0,71/4 0,1} 35. Kg2 {+1,95/5 0,1}
Rh8 {-0,94/4 0,1} 36. Rh1 {+1,85/5 0,1} Rxh1 {-0,71/4 0,1} 37. Rxh1
{+1,70/6 0,1} Ra8 {-1,02/4 0,1} 38. Kf2 {+1,70/5 0,1} Bb7 {-1,00/4 0,1} 39.
Kg1 {+1,70/5 0,1} Bc8 {-1,02/4 0,1} 40. Rh6 {+1,75/5 0,1} Ra7 {-1,14/4 0,1}
41. Na2 {+1,85/5 0,1} Ra4 {-0,82/4 0,1} 42. Nb4 {+1,70/6 0,1} Ra8
{-1,05/4 0,1} 43. Kh2 {+1,75/5 0,1} c5 {-0,80/4 0,1} 44. Nd5 {+2,60/6 0,1}
Ba6 {-1,82/4 0,1} 45. Nxb6 {+3,25/6 0,1} Ra7 {-2,25/4 0,1} 46. Nd5
{+3,25/6 0,1} b4 {-2,05/4 0,1} 47. Bxa6 {+3,70/7 0,1} Rxa6 {-2,02/4 0,1}
48. axb4 {+3,40/7 0,1} Ra2 {-2,54/4 0,1} 49. bxc5 {+3,55/7 0,2} Rxb2+
{-2,54/4 0,1} 50. Kh1 {+3,55/6 0,2} Rc2 {-2,20/4 0,1} 51. Ne7 {+3,55/5 0,1}
Rc1+ {-2,17/4 0,1} 52. Kg2 {+3,55/5 0,1} Rc2+ {-2,31/4 0,1} 53. Kf1
{+3,55/4 0,1} Rc1+ {-2,25/4 0,1} 54. Ke2 {+3,60/5 0,1} Rc2+ {-2,42/4 0,1}
55. Kd3 {+3,70/5 0,1} Rxc5 {-2,85/4 0,1} 56. Rxg6+ {+4,65/5 0,1} Kf7
{-10,88/4 0,1} 57. Rg8 {+5,00/5 0,1} Ra5 {-11,51/4 0,1} 58. g6+
{+6,80/4 0,1} Ke6 {-12,17/4 0,1} 59. Rxe8 {+6,60/6 0,1} Ra3+ {-12,08/4 0,1}
60. Kd2 {+6,60/4 0,1} Rd3+ {-11,94/4 0,1} 61. Ke2 {+6,65/4 0,1} Re3+
{-11,97/4 0,1} 62. Kd1 {+6,40/4 0,1} Re1+ {-11,94/4 0,1} 63. Kc2
{+6,60/4 0,1} Re2+ {-11,80/4 0,1} 64. Kc3 {+6,55/4 0,1} Rc2+ {-11,85/4 0,1}
65. Kb3 {+5,85/4 0,1} Rb2+ {-11,71/4 0,1} 66. Ka3 {+5,65/4 0,1} Rb3+
{-11,68/4 0,1} 67. Ka4 {+5,65/5 0,1} Rb4+ {-11,45/4 0,1} 68. Kxb4
{+0,00/5 0,1}
{Xboard adjudication: Stalemate} 1/2-1/2
[/pgn]

Maybe avoidable losses

Loss after material grabbing 23. Qxh8 with reported 6-ply lookahead by Rustic:

[pgn]
[Event "Computer Chess Game"]
[Date "2021.01.25"]
[White "Rustic Alpha 1"]
[Black "Monchester 1.0.1-7-ga533423"]
[Result "0-1"]
[TimeControl "10"]

1. d4 {+0,20/5} e6 {-0,42/4 0,1} 2. Bd2 {+0,20/5 0,1} Nc6 {-0,28/4 0,1} 3.
Nf3 {+0,25/5 0,1} Nf6 {-0,37/4 0,2} 4. e3 {+0,50/5 0,1} Bb4 {-0,37/4 0,2}
5. Bxb4 {+0,80/5 0,1} Nxb4 {-0,60/4 0,2} 6. Be2 {+0,25/4 0,1} h6
{-0,54/4 0,2} 7. Qd2 {+0,55/4 0,1} Nbd5 {-1,11/4 0,2} 8. c4 {+0,90/5 0,1}
Ne7 {-0,57/4 0,2} 9. Nc3 {+0,70/5 0,1} Nc6 {-0,57/4 0,2} 10. d5
{+1,05/4 0,1} exd5 {-0,48/4 0,3} 11. cxd5 {+1,45/5 0,2} Ne7 {-0,91/4 0,2}
12. Qd4 {+1,10/4 0,2} b5 {-8,77/4 0,3} 13. Bxb5 {+2,10/4 0,2} c6
{-3,82/4 0,3} 14. Bc4 {+1,95/5 0,2} cxd5 {-2,48/4 0,4} 15. Bxd5
{+1,85/6 0,2} Nexd5 {-3,22/4 0,4} 16. Nxd5 {+1,75/6 0,2} Nxd5 {-3,68/4 0,2}
17. Qxd5 {+2,65/6 0,2} Bb7 {-11,20/4 0,2} 18. Qxb7 {+4,65/6 0,2} Rb8
{-11,48/4 0,2} 19. Qxa7 {+4,90/6 0,2} Rxb2 {-11,82/4 0,2} 20. Qd4
{+5,00/5 0,2} Qf6 {-11,42/4 0,2} 21. Qe4+ {+5,10/5 0,3} Kd8 {-36,25/4 0,1}
22. Qa8+ {+8,50/5 0,3} Ke7 {-36,54/4 0,1} 23. Qxh8 {+5,40/6 0,3} Qc3+
{-36,00/4 0,2} 24. Kf1 {+2,80/5 0,3} Qc2 {-28,02/4 0,2} 25. Nd2
{-1000,03/6 0,4} Qxd2 {+15,77/4 0,1} 26. Qd8+ {-1000,02/6 0,1} Kxd8
{+1000,02/3 0,1} 27. Kg1 {-1000,01/6 0,1} Qxf2# {+1000,01/1 0,1}
{Xboard adjudication: Checkmate} 0-1
[/pgn]

Fun multi-queen ending with epaulette mate, which seems like if check extension is applied as reported in new fix branch, it should be successfully avoided.

[pgn]
[Event "Computer Chess Game"]
[Site "nemiroff"]
[Date "2021.01.25"]
[White "Monchester 1.0.1-7-ga533423"]
[Black "Rustic Alpha 1"]
[Result "1-0"]
[TimeControl "10"]

1. Nc3 {-0,28/4} e5 {+0,10/5 0,1} 2. Nd5 {-0,42/4 0,1} c6 {+0,75/5 0,1} 3.
Nc3 {-0,62/4 0,1} b5 {+0,55/5 0,1} 4. e3 {-0,65/4 0,1} b4 {+0,30/4 0,1} 5.
Nce2 {-0,68/4 0,1} d5 {+0,35/4 0,1} 6. Rb1 {-0,91/4 0,1} Qa5 {+0,75/5 0,1}
7. Ra1 {-1,22/4 0,1} Nf6 {+0,75/5 0,1} 8. Ng3 {-1,00/4 0,1} Bd6
{+1,10/5 0,1} 9. f3 {-0,88/4 0,2} Be6 {+1,10/4 0,1} 10. Kf2 {-0,91/4 0,1}
d4 {+1,30/4 0,1} 11. exd4 {-1,05/4 0,2} exd4 {+1,35/5 0,2} 12. Ne4
{-1,34/4 0,2} Nxe4+ {+1,30/5 0,2} 13. fxe4 {-1,42/4 0,1} O-O {+1,40/5 0,2}
14. a4 {-1,02/4 0,2} f5 {+1,75/5 0,2} 15. e5 {-1,65/4 0,2} Bxe5
{+2,30/6 0,2} 16. Bd3 {-1,77/4 0,1} Nd7 {+2,65/5 0,2} 17. h4 {-1,88/4 0,2}
Rad8 {+2,75/5 0,2} 18. Nf3 {-1,68/4 0,2} Qc5 {+2,65/5 0,2} 19. Ne1
{-1,74/4 0,2} Bd5 {+2,85/5 0,2} 20. Rb1 {-2,00/4 0,2} Be4 {+3,00/5 0,2} 21.
h5 {-1,82/4 0,1} g6 {+3,05/5 0,3} 22. hxg6 {-1,11/4 0,1} hxg6 {+2,90/6 0,3}
23. Rh3 {-1,77/4 0,2} Nb6 {+3,15/6 0,3} 24. a5 {-1,68/4 0,2} Qxa5
{+4,00/6 0,3} 25. Bxe4 {-2,42/4 0,2} fxe4+ {+6,70/5 0,4} 26. Nf3
{-27,14/4 0,1} Qa2 {+6,90/5 0,1} 27. Rh6 {-26,94/4 0,2} Qxb1 {+8,30/5 0,1}
28. Rxg6+ {-35,74/4 0,1} Bg7 {+8,50/4 0,1} 29. Qe1 {-37,02/4 0,1} Qxc2
{+10,70/5 0,1} 30. Kg1 {-37,40/4 0,1} exf3 {+12,30/6 0,1} 31. Qe6+
{-45,51/4 0,2} Kh7 {+13,30/5 0,1} 32. Rg5 {-46,28/4 0,2} f2+ {+15,95/4 0,1}
33. Kh2 {-79,14/4 0,1} f1=Q {+16,05/4 0,1} 34. Rh5+ {-70,65/4 0,5} Bh6
{-1000,04/5 0,1} 35. Qxh6+ {-70,74/4 0,5} Kg8 {-1000,03/4 0,1} 36. Rg5+
{-70,59/4 0,3} Kf7 {-1000,02/4 0,1} 37. Rg7+ {+1000,02/3 0,2} Ke8
{-1000,01/5 0,1} 38. Qe6# {+1000,01/1 0,3}
{Xboard adjudication: Checkmate} 1-0
[/pgn]
Guenther wrote: Tue Jan 26, 2021 9:08 am Hi Taimo, You should report the most strange ones (as above) to CCRL.
Hey Guenther! I do not see much point in complaining to CCRL anymore about the testing of 0.99 beta, but I have thought about asking CCRL to do 1.0+ testing when I get the 1.0.1+ out, maybe then I will also take time to point out some questionable adjudications.
Monchester 1.0, chess engine playing at scholastic level: https://github.com/unserializable/monchester ("Daddy, it is gonna take your horsie!")
Tickle Monchester at: https://lichess.org/@/monchester
User avatar
Guenther
Posts: 4606
Joined: Wed Oct 01, 2008 6:33 am
Location: Regensburg, Germany
Full name: Guenther Simon

Re: Progress on Rustic

Post by Guenther »

unserializable wrote: Tue Jan 26, 2021 10:30 am
...

Fun multi-queen ending with epaulette mate, which seems like if check extension is applied as reported in new fix branch, it should be successfully avoided.

[pgn]
[Event "Computer Chess Game"]
[Site "nemiroff"]
[Date "2021.01.25"]
[White "Monchester 1.0.1-7-ga533423"]
[Black "Rustic Alpha 1"]
[Result "1-0"]
[TimeControl "10"]

1. Nc3 {-0,28/4} e5 {+0,10/5 0,1} 2. Nd5 {-0,42/4 0,1} c6 {+0,75/5 0,1} 3.
Nc3 {-0,62/4 0,1} b5 {+0,55/5 0,1} 4. e3 {-0,65/4 0,1} b4 {+0,30/4 0,1} 5.
Nce2 {-0,68/4 0,1} d5 {+0,35/4 0,1} 6. Rb1 {-0,91/4 0,1} Qa5 {+0,75/5 0,1}
7. Ra1 {-1,22/4 0,1} Nf6 {+0,75/5 0,1} 8. Ng3 {-1,00/4 0,1} Bd6
{+1,10/5 0,1} 9. f3 {-0,88/4 0,2} Be6 {+1,10/4 0,1} 10. Kf2 {-0,91/4 0,1}
d4 {+1,30/4 0,1} 11. exd4 {-1,05/4 0,2} exd4 {+1,35/5 0,2} 12. Ne4
{-1,34/4 0,2} Nxe4+ {+1,30/5 0,2} 13. fxe4 {-1,42/4 0,1} O-O {+1,40/5 0,2}
14. a4 {-1,02/4 0,2} f5 {+1,75/5 0,2} 15. e5 {-1,65/4 0,2} Bxe5
{+2,30/6 0,2} 16. Bd3 {-1,77/4 0,1} Nd7 {+2,65/5 0,2} 17. h4 {-1,88/4 0,2}
Rad8 {+2,75/5 0,2} 18. Nf3 {-1,68/4 0,2} Qc5 {+2,65/5 0,2} 19. Ne1
{-1,74/4 0,2} Bd5 {+2,85/5 0,2} 20. Rb1 {-2,00/4 0,2} Be4 {+3,00/5 0,2} 21.
h5 {-1,82/4 0,1} g6 {+3,05/5 0,3} 22. hxg6 {-1,11/4 0,1} hxg6 {+2,90/6 0,3}
23. Rh3 {-1,77/4 0,2} Nb6 {+3,15/6 0,3} 24. a5 {-1,68/4 0,2} Qxa5
{+4,00/6 0,3} 25. Bxe4 {-2,42/4 0,2} fxe4+ {+6,70/5 0,4} 26. Nf3
{-27,14/4 0,1} Qa2 {+6,90/5 0,1} 27. Rh6 {-26,94/4 0,2} Qxb1 {+8,30/5 0,1}
28. Rxg6+ {-35,74/4 0,1} Bg7 {+8,50/4 0,1} 29. Qe1 {-37,02/4 0,1} Qxc2
{+10,70/5 0,1} 30. Kg1 {-37,40/4 0,1} exf3 {+12,30/6 0,1} 31. Qe6+
{-45,51/4 0,2} Kh7 {+13,30/5 0,1} 32. Rg5 {-46,28/4 0,2} f2+ {+15,95/4 0,1}
33. Kh2 {-79,14/4 0,1} f1=Q {+16,05/4 0,1} 34. Rh5+ {-70,65/4 0,5} Bh6
{-1000,04/5 0,1} 35. Qxh6+ {-70,74/4 0,5} Kg8 {-1000,03/4 0,1} 36. Rg5+
{-70,59/4 0,3} Kf7 {-1000,02/4 0,1} 37. Rg7+ {+1000,02/3 0,2} Ke8
{-1000,01/5 0,1} 38. Qe6# {+1000,01/1 0,3}
{Xboard adjudication: Checkmate} 1-0
[/pgn]
Guenther wrote: Tue Jan 26, 2021 9:08 am Hi Taimo, You should report the most strange ones (as above) to CCRL.
Hey Guenther! I do not see much point in complaining to CCRL anymore about the testing of 0.99 beta, but I have thought about asking CCRL to do 1.0+ testing when I get the 1.0.1+ out, maybe then I will also take time to point out some questionable adjudications.
You are probably right, also it gives the chance your rating plus with a newer version looks better ;-)

Back to the Rustic thread. The last game you showed above might reveal a bug in Monchester too?
It still showed negative eval after the wrong f1=Q and I don't understand why? It only changed the eval sign
with mate in two on board - shouldn't it see it earlier at least, or is this just because depth = 4 plies
and everything above is just material count?

BTW is it also possible that Rustic thought it should play f1=N+!, but underpromotion is not implemented yet?
https://rwbc-chess.de

trollwatch:
Chessqueen + chessica + AlexChess + Eduard + Sylwy
Sven
Posts: 4052
Joined: Thu May 15, 2008 9:57 pm
Location: Berlin, Germany
Full name: Sven Schüle

Re: Progress on Rustic

Post by Sven »

unserializable wrote: Mon Jan 25, 2021 11:48 pm
mvanthoor wrote: Mon Jan 25, 2021 11:29 pm I haven't extensively checked the code, but it seems Monchester is either stuck at 4 moves deep, or it limits itself to that search depth. That would be one explanation for the low rating.
Yes, it is constant strength at 4 plies, no matter the hardware or time controls. It is meant as reference engine and for scholastic chess, for sparring it is suitable for beginning engines or mass-testing. In blitz, it is rated currently around 1550 at lichess.

Draw you posted has notable 253 depth extension search there: 14. ... Kh8 {0.00/253 0.003s}.

EDIT: I will take a look at Rustics 'qsearch-fix' branch tomorrow, additional games against older version are still running.
Hi Taimo,

your engine could reach much more than depth 4 by simply changing your search from full minimax to negamax + alphabeta and very basic move ordering. After looking briefly into your code I think the changes would not be too hard to do for you as an experienced developer, most of them in compmove.c, I guess:

1) In function Score() replace the two-level move loop (i.e. loop over all pieces and there over all moves per piece) by a simple loop over a linear array of MoveInfo instances, aka "move list" (and do necessary preparations for that). The size of that move list (which I would keep as local as possible) can be limited to e.g. 256 moves since there is no known FIDE chess position with that many legal moves (I remember about 230).

2) Extend struct MoveInfo by a "score" member and set it to the MVV/LVA score for all captures, zero for all other moves. Sort the move list in descending order based on that score (for the purpose of alphabeta there is even a slightly faster way than that, as an optimization for later).

3) Change function Score() from minimax to negamax logic by defining all scores from the viewpoint of the active color and making the recursive call like "score = -Score(Board, ..., depth - 1, ...)". The "judged" parameter would become obsolete. Updating the best score "r" would become more simple since there would not be two cases.

4) Add parameters "int alpha, int beta" to Score(), drop the variable "r" and let "alpha" track your best score instead, do the recursive call as "score = -Score(Board, ..., depth - 1, -beta, -alpha, ..)", add the cutoff "if (score >= beta) return beta;" prior to updating alpha ("if (score > alpha) alpha = score;"), and make sure you only update the PV if alpha < score < beta.

That should bring you to depth 7 at least within the same thinking time ...

EDIT: Negamax is not strictly required in order for alphabeta to work but it makes life easier ... And I would also throw out all kinds of score randomization and add a very basic positional scoring, e.g. mobility. And then, next step would be qsearch :wink:
Sven Schüle (engine author: Jumbo, KnockOut, Surprise)