Pedantic Developer's Log Stardate...

Discussion of chess software programming and technical issues.

Moderators: hgm, chrisw, Rebel

Guenther
Posts: 4718
Joined: Wed Oct 01, 2008 6:33 am
Location: Regensburg, Germany
Full name: Guenther Simon

Re: Pedantic Developer's Log Stardate...

Post by Guenther »

JoAnnP38 wrote: Mon Jan 09, 2023 2:55 pm
...

Question to the group -- does anyone know of any UCI engines rated between 1800 and 2200? I'm guessing this is the around the ELO strength of Pedantic, but I really need to see it win some games before I can be sure.

...


Rating classifications between C2 and B3 cover this. (scaled similarily to CCRL blitz ratings)
A more precise explanation can be found in the TOC+ sheet.


You can use sort/filter columns as you like even with just reading access.

Guenther (maintainer of this XB/UCI chronology)
https://rwbc-chess.de

[Trolls n'existent pas...]
JoAnnP38
Posts: 253
Joined: Mon Aug 26, 2019 4:34 pm
Location: Clearwater, Florida USA
Full name: JoAnn Peeler

Re: Pedantic Developer's Log Stardate...

Post by JoAnnP38 »

Okay, I found an engine supposedly rated 2050 ELO and I actually won a game for the first time. However, in the rematch I am scratching my head. Why doesn't Pedantic see the move a2a1Q at 40 that leads to mate? I've debugged it a little and see that the increase in material is being updated. The PV pedantic suggests doesn't even push it into the horizon. Sigh... more work, more work.

[pgn]
[Event "Pedantic-v-potato.at"]
[Site "LAPTOP-STUDIO-1"]
[Date "2023.01.10"]
[Round "8"]
[White "Pedantic"]
[Black "Smallpotato"]
[Result "0-1"]
[WhiteElo "1150"]
[BlackElo "2050"]
[EventDate "????.??.??"]
[ECO "A61"]
[PlyCount "82"]
[BlackType "program"]
[Opening "Benoni"]
[Termination "normal"]
[Time "05:46:47"]
[TimeControl "120+6"]
[Variation "6.Nf3 g6 7.Bf4 a6"]
[WhiteType "program"]

1.d4 Nf6 2.c4 e6 3.Nf3 c5 4.d5 d6 5.Nc3 exd5 6.cxd5 g6 7.Bf4 a6 8.a4 Bg7 9.h3
O-O 10.e3 Nh5 11.Bh2 Bxc3+ {(Bxc3+ bxc3 Nf6 Bc4 Ne4 O-O Re8 Qc2 b6 Bf4) +0.09/10
4} 12.bxc3 {(b2xc3 Qd8-f6 Bf1-e2 Bc8-f5 Qd1-b3 Nb8-d7 O-O-O Rf8-e8 Kc1-b2 Ra8-b8
Rh1-e1 Nd7-e5 Qb3-b6) +1.05/12 10} 12...Nf6 {(Nf6 Qb3 Ne4 Bd3 f5 O-O b6 Bf4)
+0.02/10 5} 13.Qb3 {(Qd1-b3 Bc8-f5 Qb3xb7 Qd8-a5 Ra1-c1 Nb8-d7 Bh2xd6 Rf8-e8
Bf1-c4 Qa5xa4 Qb7-b3 Qa4-a5) +1.74/12 7} 13...b6 {(b6) +0.01/10 9} 14.O-O-O
{(O-O-O Bc8-b7 Bf1-c4 Nf6-e4 Qb3-c2 Rf8-e8 Kc1-b2 Nb8-d7 Bh2-f4 Qd8-f6 Rh1-e1)
+1.96/11 6} 14...Ne4 {(Ne4 Qc2 Re8 Bd3 f5 Bf4 Bb7 c4 Nd7 Bxe4) +0.18/10 5}
15.Qc2 {(Qb3-c2 Rf8-e8 Bf1-d3 Bc8-f5 Kc1-b2 Nb8-d7 Rh1-f1 Qd8-f6 Bh2-f4 Nd7-e5
Bf4xe5 Re8xe5 Nf3xe5) +1.16/14 15} 15...f5 {(f5 Bd3 Qf6 Bxe4 fxe4 Nd2 Qxf2 Bxd6
Re8 Bc7) +0.30/10 5} 16.Bd3 {(Bf1-d3 Rf8-e8 Bd3xe4 f5xe4 Nf3-d2 b6-b5 a4xb5
a6xb5 Qc2-b1 b5-b4 c3xb4 Bc8-f5) +1.27/12 7} 16...Qf6 {(Qf6 Rdf1 Bb7 Bxe4 fxe4
Nd2 Bxd5 c4 Qa1+ Nb1 Bc6) +0.15/11 9} 17.Bxe4 {(Bd3xe4 f5xe4 Nf3-d2 Qf6xf2
Bh2xd6 Rf8-e8 Nd2-c4 Qf2-f6 Rh1-f1 Bc8-f5 g2-g4 b6-b5 g4xf5 b5xc4) +2.42/14 7}
17...fxe4 {(fxe4 Nd2 Qxf2 Bxd6 Re8 Nc4 Qxc2+ Kxc2 Nd7 Rb1 Bb7) -0.21/11 7}
18.Nd2 {(Nf3-d2 Qf6xf2 Bh2xd6 Rf8-e8 Nd2-c4 Qf2-f6 Kc1-b2 Bc8-f5 Rh1-f1 Nb8-d7
Rf1-f2 Ra8-c8 g2-g4 b6-b5) +1.65/14 6} 18...Qxf2 {(Qxf2 Bxd6 Re8 Nc4 Qxc2+ Kxc2
Nd7 Bc7 Rf8 Nxb6 Rf2+) -0.39/11 7} 19.Bxd6 {(Bh2xd6 Rf8-e8 Nd2-c4 Qf2-f6 g2-g4
Nb8-d7 Rh1-f1 Qf6-h4 Qc2-f2 Qh4xf2 Rf1xf2 Bc8-b7 Kc1-b2 Kg8-g7) +2.44/14 2}
19...Re8 {(Re8 Nc4 Qxc2+ Kxc2 Nd7 Bc7 Rf8 Nxb6 Nxb6 Bxb6 c4) -0.35/11 6} 20.Nc4
{(Nd2-c4 Qf2-f6 Bd6-f4 Nb8-d7 Rh1-f1 Qf6-h4 Qc2-f2 Qh4xf2 Rf1xf2 Re8-e7 Bf4-g3
Re7-f7 d5-d6) +2.82/13 0} 20...Qxc2+ {(Qxc2+ Kxc2 Nd7 Bc7 b5 Nd6 Re7 Bd8 Re5
axb5 axb5 Nxb5) -0.50/12 6} 21.Kxc2 Nd7 {(Nd7 Bf4 Rf8 Rhg1 a5 Bc7 Rf6 Rb1 Ba6
Nxb6) -0.22/13 15} 22.Rb1 {(Rd1-b1 a6-a5 Nc4xb6 Nd7xb6 Rb1xb6 Bc8-a6 Kc2-b3
Re8-d8 h3-h4 Ba6-e2 Rh1-e1 Ra8-a6 Bd6xc5) +2.34/13 6} 22...b5 {(b5 Na5 bxa4 Nc6
Kh8 Ra1 Nb6 Ne7 Bb7 Kc1 Rxe7 Bxe7 Nxd5) +0.45/13 13} 23.Na5 {(Nc4-a5 Nd7-b6
Rh1-d1 Nb6xa4 Na5-c6 Bc8-d7 Rd1-f1 Kg8-g7 Bd6-e5+ Kg7-g8 Be5-d6 Kg8-g7 Rf1-f2
Bd7-f5 g2-g4) +1.11/14 7} 23...bxa4 {(bxa4 Ra1 Ne5 Nc6 Nxc6 dxc6 Re6 Rhd1 Rf6
Rxa4 Rf2+) +0.30/12 20} 24.Nc6 {(Na5-c6 a4-a3 Nc6-e7+ Kg8-g7 Ne7xc8 Re8xc8
Rb1-b7 Rc8-d8 Kc2-b3 Kg7-g8 Rh1-f1 Nd7-f8 Bd6xc5) +1.74/14 19} 24...a5 {(a5 Ne7+
Kh8 Nxc8 Raxc8 Rb5 Ra8 Ra1 Nf6 c4 a3 Rxc5) +0.55/12 11} 25.Ne7+ {(Nc6-e7+ Re8xe7
Bd6xe7 Bc8-a6 Kc2-d2 a4-a3 Rb1-a1 Kg8-f7 Be7-d6 Nd7-b6 Bd6xc5 Nb6xd5 Ra1xa3
Ba6-b5) +1.11/13 12} 25...Kh8 {(Kh8 Nxc8 Raxc8 Rb5 c4 Ra1 Nf6 Rf1 Ng8 Kc1 Ra8
Bc7 a3) +0.29/13 14} 26.Nxc8 {(Ne7xc8 Ra8xc8 Rb1-b5 Nd7-e5 Bd6xc5 Kh8-g8 Rh1-f1
a4-a3 Bc5xa3 Ne5-c4 Ba3-c1 a5-a4 Rb5-b7 Re8-d8 Rf1-d1 Rd8-d6) +1.04/16 9}
26...Raxc8 {(Raxc8 Rb5 a3 Ra1 Ne5 Bxc5 Nc4 Kb3 Rxc5 Rxc5 Nxe3 Rxa5 Kg8) -0.02/13
9} 27.Rb5 {(Rb1-b5 c5-c4 g2-g4 Rc8-d8 Bd6-c7 Rd8-a8 Rh1-a1 Re8-c8 Rb5-b7 Rc8-f8
Ra1xa4 Rf8-f2+ Kc2-d1 Nd7-c5 Bc7-e5+ Kh8-g8 Rb7-g7+) +1.25/15 1} 27...a3 {(a3
Ra1 Ne5 Bxc5 Nc4 Bd4+ Kg8 Rb7 Red8 Rg7+ Kf8 Rxh7 Rxd5) -0.07/13 11} 28.Ra1
{(Rh1-a1 Rc8-d8 Ra1xa3 Nd7-e5 Bd6xc5 Rd8xd5 Ra3xa5 Ne5-c4 Bc5-d4+ Rd5xd4 c3xd4
Nc4xa5 Rb5xa5 Re8-c8+ Kc2-d2 Kh8-g7 Ra5-a7+ Kg7-f6 Ra7xh7) +1.78/16 12}
28...Ne5 {(Ne5 Bxc5 Nc4 Bd4+ Kg8 Rb7 Red8 Rg7+ Kf8 Rxh7 Rxd5 Kc1) -0.37/12 3}
29.Bxc5 {(Bd6xc5 Kh8-g8 Ra1xa3 Re8-d8 Bc5-d4 Ne5-c4 Ra3-a4 Rd8-f8 Kc2-b3 Nc4-d2+
Kb3-c2 Nd2-c4 Kc2-b3 Nc4-d2+ Kb3-c2 Nd2-c4) +1.98/14 6} 29...Nd3 {(Nd3 Rxa3 Nxc5
Rxc5 Rxc5 Rb3 Kg8 Kc1 Re5 Rb7) -0.68/11 4} 30.Bd4+ {(Bc5-d4+ Kh8-g8 Rb5-b7
Rc8-b8 Rb7-g7+ Kg8-h8 Rg7-a7+ Kh8-g8 Ra7-g7+ Kg8-h8 Rg7xg6+ Re8-e5 Bd4xe5+
Nd3xe5 Rg6-e6 Rb8-b2+ Kc2-d1 a3-a2 Ra1xa2 Rb2xa2 Re6xe5) +2.25/14 9} 30...Kg8
{(Kg8 Rb7 Ne5 Rxa3 Ra8 Ra4 Ra6 Bxe5 Rxe5 Rb5 Ra8 Rbxa5 Rae8 Kb1 Rd8) -1.33/13 4}
31.Rb7 {(Rb5-b7 Nd3-e5 Ra1xa3 Rc8-a8 Ra3-a1 h7-h6 Ra1-f1 Ra8-a6 h3-h4 Ra6-d6
Bd4xe5 Re8xe5 Rb7-b8+ Kg8-g7 Rb8-b7+) +3.06/14 10} 31...Ne5 {(Ne5 Rxa3 Ra8 Ra4
Ra6 Bxe5 Rxe5 Rb8+ Kg7 Rb5 Rg5 g4 Kg8) -1.51/13 12} 32.Rxa3 {(Ra1xa3 Rc8-a8
Ra3-a1 Ra8-a6 Kc2-b3 Ra6-a8 Rb7-b5 Ra8-b8 Ra1xa5 Ne5-d3 Kb3-c2 Rb8xb5 Ra5xb5
Nd3-e1+ Kc2-d2 Ne1xg2) +2.90/15 0} 32...Ra8 {(Ra8 Ra4 g5 g4 Nf3 Rg7+ Kh8 Rxg5+
Nxd4+ cxd4 Rac8+) -2.12/11 4} 33.Ra1 {(Ra3-a1 h7-h5 c3-c4 Ra8-c8 Kc2-b3 Rc8-b8
Rb7xb8 Re8xb8+ Kb3-c3 Ne5-d3 Ra1xa5 Rb8-b2 Ra5-a8+ Kg8-f7 Ra8-a7+ Kf7-f8)
+2.97/14 4} 33...a4 {(a4 d6 Nf7 g4 g5 d7 Rf8 Rf1 Nd6 Rxf8+ Rxf8) -1.64/11 7}
34.d6 {(d5-d6 h7-h5 g2-g4 h5xg4 h3xg4 g6-g5 Ra1-f1 Re8-e6 c3-c4 Ra8-c8 Bd4xe5
Re6xe5 Kc2-c3) +3.40/13 7} 34...Nf7 {(Nf7 Rf1 Rf8 Re7 a3 d7 a2 c4 Rad8 Ra1 Nd6)
-1.76/11 8} 35.d7 {(d6-d7 Re8-f8 Bd4-c5 Nf7-d8 Rb7-c7 Rf8-f2+ Kc2-b1 Ra8-b8+
Bc5-b4 Rf2-f1+ Kb1-b2 Rf1xa1 Kb2xa1 Rb8-b7 Rc7xb7 Nd8xb7 Ka1-b2 Kg8-f7) +3.26/15
19} 35...Rf8 {(Rf8 Rf1 Rfd8 Bf6 Nd6 Rc7 Rf8 d8=Q Rfxd8 Bxd8 Rxd8 Ra7 Nc4)
-1.90/13 12} 36.Rd1 {(Ra1-d1 Nf7-d8 Rb7-b6 Rf8-f2+ Kc2-c1 Kg8-f7 Bd4-c5 Nd8-e6
Bc5-d6 a4-a3 Rb6-b3 Rf2-a2 Kc1-b1 Ra2xg2 Rb3xa3 Ra8xa3 Bd6xa3 Rg2-h2) +2.73/17
57} 36...Nd8 {(Nd8 Rb2 a3 Ra2) -1.33/11 5} 37.Rb6 {(Rb7-b6 Rf8-f2+ Kc2-c1 Kg8-f7
Bd4-c5 h7-h5 Bc5-a3 Nd8-e6 Rd1-d6 Rf2-f6 Kc1-c2 Rf6-f2+ Rd6-d2) +2.69/13 7}
37...Rf2+ {(Rf2+ Kb1 Rxg2 Rb4 Rf2 Ka1 Ra6 Bb6 Ra8) -1.29/13 25} 38.Kc1 {(Kc2-c1
Kg8-f7 Bd4-c5 Nd8-e6 Bc5-d6 Ra8-d8 Rb6-b7 Rf2xg2 Rd1-f1+ Kf7-g7 c3-c4 h7-h6
Bd6-e5+ Kg7-g8 Be5-d6 Rd8-a8 Rf1-f6 Rg2-g1+ Kc1-c2 Rg1-g2+) +2.82/16 0} 38...a3
{(a3 Kb1 Rxg2 Rb5 a2+ Ka1 Rh2 Re5 h5 Rxe4 Nb7 Bb6) -0.35/12 11} 39.Bc5 {(Bd4-c5
Rf2xg2 Rb6-b3 Rg2-g3 h3-h4 Kg8-f7 Rb3xa3 Ra8xa3 Bc5xa3 Rg3xe3 Kc1-c2 Nd8-e6
Ba3-d6 Re3-f3) +2.68/14 8} 39...a2 {(a2 Rb1 a1=Q Rd6 Rf1+ Kc2 Qxb1+ Kd2 Ra2#)
+M43/11 0} 40.Bd6 {(Bc5-d6 Rf2-e2 Bd6-e5 Re2xe3 Kc1-c2 Re3-e2+ Kc2-b3 Ra8-a5
Rd1-a1 Re2xg2) -0.37/10 7} 40...a1=Q+ {(a1=Q+ Rb1 Qxc3#) +M41/5 0} 41.Rb1 Qxc3# 0-1
[/pgn]
okidoki
Posts: 17
Joined: Thu Jun 30, 2022 12:46 pm
Full name: Kabir Kumar

Re: Pedantic Developer's Log Stardate...

Post by okidoki »

JoAnnP38 wrote: Tue Jan 10, 2023 7:39 pm d see that the increase in material is being updated. The PV pedantic suggests doesn't even push it into the horizon. Sigh... more work, more work.
I haven't checked the source if Pedantic implements extra pruning. However you can check if plain negamax(full search without pruning) finds the mate . This quick check might save lot of hours IMO.
JVMerlino
Posts: 1386
Joined: Wed Mar 08, 2006 10:15 pm
Location: San Francisco, California

Re: Pedantic Developer's Log Stardate...

Post by JVMerlino »

JoAnnP38 wrote: Tue Jan 10, 2023 7:39 pm Okay, I found an engine supposedly rated 2050 ELO and I actually won a game for the first time. However, in the rematch I am scratching my head. Why doesn't Pedantic see the move a2a1Q at 40 that leads to mate? I've debugged it a little and see that the increase in material is being updated. The PV pedantic suggests doesn't even push it into the horizon. Sigh... more work, more work.
[fen]r2n2k1/3P3p/1R4p1/2B5/4p3/2P1P2P/p4rP1/2KR4 w - - 0 40[/fen]

It's a mate in 4 for Black regardless. So unless Pedantic has a bug with movegen or make/unmake of promotions, I'd take a wild guess that the problem is that you're not correctly adjusting a hash value for mate scores based on the remaining depth.
JoAnnP38
Posts: 253
Joined: Mon Aug 26, 2019 4:34 pm
Location: Clearwater, Florida USA
Full name: JoAnn Peeler

Re: Pedantic Developer's Log Stardate...

Post by JoAnnP38 »

JVMerlino wrote: Fri Jan 13, 2023 5:13 pm It's a mate in 4 for Black regardless. So unless Pedantic has a bug with movegen or make/unmake of promotions, I'd take a wild guess that the problem is that you're not correctly adjusting a hash value for mate scores based on the remaining depth.
okidoki wrote: Fri Jan 13, 2023 4:40 pm I haven't checked the source if Pedantic implements extra pruning. However, you can check if plain negamax(full search without pruning) finds the mate. This quick check might save lot of hours IMO.
I think you guys were both right. I only solved the problem by going back to basics and creating the simplest Negamax search I could -- no quiesence, no transposition tables, no pruning and no null window searches. An as @okidoki points out I discovered my problems. Biggest one had to do with the transposition table. I had some logic reversed which of course broke the search. As I slowly added features back into the search I found other bugs, so it was a very fruitful endeavor. I wish I had started like that. I depended on my unit tests, but if you are developing code around ideas that you don't fully grok... Well, the tests are only as good as my knowledge.

I'm very close to putting a pin in the engine development so I can start writing the client that will adjudicate the genetic algorithm and hopefully result in a strong evaluation. I'm making progress!
JVMerlino
Posts: 1386
Joined: Wed Mar 08, 2006 10:15 pm
Location: San Francisco, California

Re: Pedantic Developer's Log Stardate...

Post by JVMerlino »

Excellent! Looking forward to your first release. :-)
JoAnnP38
Posts: 253
Joined: Mon Aug 26, 2019 4:34 pm
Location: Clearwater, Florida USA
Full name: JoAnn Peeler

Re: Pedantic Developer's Log Stardate...

Post by JoAnnP38 »

I have finally finished tinkering around with Pedantic to the point where I can announce a Pedantic v0.1 "pre-release." There will not be an official release until I have completed the portions of the project required to optimize the evaluation. The entire project at this point is a bloated piece of @#%@ (okay, maybe not quite that bad.) It currently implements three flavors of search:
  1. MTD(f) - memory enhanced test-driver algorithm.
  2. Principal Variation Search
  3. MinimalChess 0.6 Emulation (a search inspired by MinimalChess)
Please don't confuse my rough emulation of MinimalChess search with the actual app. Pedantic is slower and really only uses the heuristic parts of MinimalChess's search design. It is still integrated with the Pedantic evaluation, quiesence search, and it is currently being called with aspiration windows (MinimalChess doesn't use them). I needed a baseline (that I wouldn't be tempted to change) to compare my development on other searches. At some point it will probably be removed from the Pedantic application.

This engine supports enough of the UCI protocol to run in Arena and has its own opening book and supports pondering. I have not tested it recently with pondering turned off so you may run into problems there. It has a few command-line switches that can be used to control its function. Here is the output of help that shows each option:

Code: Select all

>Pedantic /?
Description:
  The pedantic chess engine.

Usage:
  Pedantic [command] [options]

Options:
  --version       Show version information
  -?, -h, --help  Show help and usage information

Commands:
  uci    Start the pedantic application in UCI mode.
  perft  Run a standard Perft test.
  
 >Pedantic perft /?
Description:
  Run a standard Perft test.

Usage:
  Pedantic perft [options]

Options:
  --type <Average|Details|Normal>  Specifies the perft variant to execute. [default: Normal]
  --depth <depth>                  Specifies the maximum depth for the perft test. [default: 6]
  --fen <fen>                      Specifies the starting position if other than the default. []
  -?, -h, --help                   Show help and usage information
  
 >Pedantic uci /?
Description:
  Start the pedantic application in UCI mode.

Usage:
  Pedantic uci [options]

Options:
  --search <Minimal|Mtd|Pv>  Specifies the search type to use. [default: Pv]
  --input <input>            Specify a file read UCI commands from. []
  --error <error>            Output errors to specified file. []
  -?, -h, --help             Show help and usage information
Note: The performance of the perft tests is currently much lower than I have posted here on this forum because my perft tests reuse the same move generation and execution logic that normal game play uses. This includes all of the incremental updates required for evaluation.

Using the MTD(f) search it currently has a rating around 1700 (a bit lower than I was shooting for) and I believe that is currently its strongest search method. Its end game play is unfortunately pretty bad. Hopefully, I can pick up a 100-200 or so ELO after I have finished the next phase of my project that will optimize all of the weights used by the evaluation function. Once I have finished the optimization stage, I will officially release Pedantic and start on a C++ port that removes the bloat. My goal is to get to a competition worthy engine, but I still have a lot to learn so that is a long way off. So many tricks of the trade still evade my understanding. :oops: The evaluation currently evaluates the following positional features:
  • Game Phase
  • Material
  • Piece position
  • Mobility
  • Development
  • King Safety
  • Pawn Structure (blocked pawns, isolated pawns, backward pawns, doubled pawns, passed pawns, pawn majorities, and others...)
  • Knight/Bishop outposts
  • Other miscellaneous positional qualities
If anyone dares to run this "pre-release" or look at its code (see my signature for github url) and would like to offer friendly criticisms, please feel free. Just keep in mind that it is still far from what I would called polished or for that matter fully tested. (Can any software ever be called "fully" tested?) There are still a lot of quirks I have to live with (like knowing when to exit an iterative search when forced mate or draw is detected) but it doesn't currently inhibit me from testing the engine in Arena.
Last edited by JoAnnP38 on Wed Jan 25, 2023 6:33 am, edited 1 time in total.
JoAnnP38
Posts: 253
Joined: Mon Aug 26, 2019 4:34 pm
Location: Clearwater, Florida USA
Full name: JoAnn Peeler

Re: Pedantic Developer's Log Stardate...

Post by JoAnnP38 »

lithander wrote: Tue Jan 10, 2023 11:43 am
JoAnnP38 wrote: Mon Jan 09, 2023 2:55 pm Question to the group -- does anyone know of any UCI engines rated between 1800 and 2200? I'm guessing this is the around the ELO strength of Pedantic, but I really need to see it win some games before I can be sure.
You could play against earlier version like 0.4 (1890 Elo) or version 0.5 (2270 Elo) of MinimalChess of course. And you may want to try Leorik 1.0 which is also in the desired Elo range (2150) but has the interesting property that it does not implement any unsafe pruning techniques, reductions, extensions etc. Not even null-move pruning. This causes a high branching factor and the search remains quite shallow even at higher time controls. But it solves all mate puzzle with the shortest path for example because it never overlooks a move. This could expose some weaknesses in your engine if you overdo it with the pruning and reductions!
Sorry, but both of those implementations are too strong for Pedantic at the moment. I am currently using Celestial 1.0 rated about 1700 to test against. My raw nps speed is around 2-3 times slower than Celestial which was developed in rust, so I have to adjust all my heuristics to minimize the number of nodes I actually evaluate. I thought that optimizing the evaluation would be the challenging part, but this entire process of tinkering with pruning, reductions, and extensions has had me pulling my hair out at times. Hopefully, Pedantic will be strong enough to test against your engines in the future.
User avatar
lithander
Posts: 881
Joined: Sun Dec 27, 2020 2:40 am
Location: Bremen, Germany
Full name: Thomas Jahn

Re: Pedantic Developer's Log Stardate...

Post by lithander »

JoAnnP38 wrote: Wed Jan 25, 2023 6:29 am I thought that optimizing the evaluation would be the challenging part, but this entire process of tinkering with pruning, reductions, and extensions has had me pulling my hair out at times.
Yeah, I know exactly what you mean. For the first couple of months I basically tried to implement what I heard people talk about on the forums but without looking implementation details up. Narrow windows, and null move pruning and late move reductions and qsearch of course. Progress was relatively smooth and steady. But I didn't do much in terms of selectivity and when I ran out of ideas I thought I could just read up on all the specific extensions and reductions on the wiki and add some of them. But then nothing seemed to work. Maybe you can't add them one at a time but some of them have to go together? Or I did some fundamental error somewhere down the line and now my engine is too different? I couldn't figure out exactly why.

By now I've accepted that if I want to make progress with Leorik I shouldn't look too closely at what others are doing and be prepared to challenge what seems to be generally accepted. For example, why have both extensions and reductions? Why not have only reductions - which is an implicit extension of everything you don't reduce, right? Or when I look at how Stockfish get's to incredible depths so quickly... I don't know how they do that but certainly not by only pruning near the leafs. In the light of that calling it extended futility pruning because you start with the pruning at depth==2 instead of 1... well, seems like something from the 80s when search depth was much shallower. How about we *really* go and extend that?

I'm having more fun that way, my code is more aesthetically pleasing to me because there are less special cases and if I hit the wall at some point I can always go and look into NNUE or something. It's hobby, do whatever is fun to you! :)
Minimal Chess (simple, open source, C#) - Youtube & Github
Leorik (competitive, in active development, C#) - Github & Lichess
JoAnnP38
Posts: 253
Joined: Mon Aug 26, 2019 4:34 pm
Location: Clearwater, Florida USA
Full name: JoAnn Peeler

Re: Pedantic Developer's Log Stardate...

Post by JoAnnP38 »

lithander wrote: Wed Jan 25, 2023 1:21 pm
JoAnnP38 wrote: Wed Jan 25, 2023 6:29 am I thought that optimizing the evaluation would be the challenging part, but this entire process of tinkering with pruning, reductions, and extensions has had me pulling my hair out at times.
Yeah, I know exactly what you mean. For the first couple of months I basically tried to implement what I heard people talk about on the forums but without looking implementation details up. Narrow windows, and null move pruning and late move reductions and qsearch of course. Progress was relatively smooth and steady. But I didn't do much in terms of selectivity and when I ran out of ideas I thought I could just read up on all the specific extensions and reductions on the wiki and add some of them. But then nothing seemed to work. Maybe you can't add them one at a time but some of them have to go together? Or I did some fundamental error somewhere down the line and now my engine is too different? I couldn't figure out exactly why.
I still think there is black magic involved. I am almost ready to call in the local voodoo priestess! :D

I think the biggest thing I've learned is that reductions are best reserved for the null window search and if you get a cut-off or it appears to raise alpha then I do a full width search without reductions. That way I always have good or reliable information on my PV nodes. Of course, when I'm using MTD(f) search, I do a zero-width with reductions and follow it up with a zero-width without to verify cut-offs. I'm a fan of MTD(f).
lithander wrote: Wed Jan 25, 2023 1:21 pm By now I've accepted that if I want to make progress with Leorik I shouldn't look too closely at what others are doing and be prepared to challenge what seems to be generally accepted. For example, why have both extensions and reductions? Why not have only reductions - which is an implicit extension of everything you don't reduce, right? Or when I look at how Stockfish get's to incredible depths so quickly... I don't know how they do that but certainly not by only pruning near the leafs. In the light of that calling it extended futility pruning because you start with the pruning at depth==2 instead of 1... well, seems like something from the 80s when search depth was much shallower. How about we *really* go and extend that?
At this point I have looked at extensions both ways. I really need to get serious about setting up a test suite I can use to evaluate the benefit of these changes. Many of the changes may only benefit a minority of positions but without a good test I only have my hunches to lead me (which is probably a very bad idea.)