
People here may know the engine Shallow Blue by Rhys Rustad-Elliot. I got interested in it when I found its website, where the author has a nice explanation on magic bitboards, that helped me to understand this concept:
https://rhysre.net/fast-chess-move-gene ... oards.html
Shallow Blue has a rating on CCRL that fluctuates around 1720. Now I'm actually at a point where I can take on an engine like this, so I did.
I'm noticing two things:
1. Rustic has no features beyond MVV-LVA in the alpha/beta search, material counting and a PSQT. Compared to this, Shallow Blue has a massive list of features, including search optimizations, tapered evaluation and even a transposition table.
2. Shallow Blue is SLOW. It is so slow, that I'm wondering if I did something wrong, or the author of SB did. Look at the screenshot below...

My engine calculates 3.000K - 5.000K (3-5 million) positions per second. Shallow Blue tops out at 300K. I've quickly looked through search.cc in SB's repository, and I can only find "_nodes++" in QSearch... it would explain the low node count, if the author forgot to increment nodes in alpha/beta. (I increment the node count when I actually go and do some work, in the node, so just before the move loop, both in alpha/beta, and in qsearch; so I don't count a node if it exists immediately.)
Still, according to the feature list, Shallow Blue has a TT (even though it's UCI command doesn't report it); it also looks like it's using it, because it has 62 MB of RAM in use. (And this rises all the time... maybe a memory leak.) The strange thing is, even IF SB is using its TT, Rustic clobbers it with regard to search depth; it's often 2-3 ply ahead.
I've played about a 50 games against this engine, with different time controls, and Rustic scores about 40%. This would put it about 70 Elo below Shallow Blue, at +/- 1650. (I know this is a very tentative score, as it's only one engine and only 50 games.) The questions for me are:
- Am I counting my nodes wrong? I suppose not... perft runs at 36 million moves/sec (including all the incremental stuff), so I can believe that the engine reaches 3-5 million nodes / sec in a normal game, as it doesn't have much of an evaluation yet. Take into account that SB possibly counts its nodes wrong, this could explain the massive speed difference.
- If SB has a TT and search optimizations that Rustic does not have, how can it still be behind in the depth it reaches? Bugs... or very slow implementations much copying of data instead of referencing it? (My engine did a lot of unnecessary zero-initializations, which Fabian helpfully pointed out how to circumvent in Rust, which increased my engine's speed by from perft @ 10 million nodes/s to 30 milion.)
- It seems to somehow make up for the lack of speed with knowledge, having a tapered evaluation, a pawn hash table, and many evaluation terms that Rustic doens't yet have. How much would it be possible to compensate slowness with knowledge, or the other way around?
In the end, I find it strange that an engine such as ShallowBlue has only a 1720 rating, with all of those features; I also find it exciting that my own engine (tentatively) seems to sit at around 1650 with basically NO features.
If ShallowBlue was YOUR engine, where would you first look to improve it?