Coming Soon: Stockfish 11, The Greatest Chess Engine Of All Time!
Stockfish icon originally by Klein Maetschke

Coming Soon: Stockfish 11, The Greatest Chess Engine Of All Time!

the_real_greco
the_real_greco
|
9

What's the biggest event in chess? The World Chess Championship? The Puzzle Battle World Championship? Whenever Magnus Carlsen finally loses a game?

Not even close. Everything else pales to the upcoming release of Stockfish 11!

The Champion. The King. The Fish. 

All Hail The Fish. (Stockfish icon by Klein Maetschke.)

You might have thought, What? Who even needs a stronger engine? Wasn't Stockfish already an oracle, basically? Didn't Stockfish just win the CCC? Aren't computers already destroying the game of chess as we know it?

These are questions Stockfish does not consider. He does not care. He simply becomes stronger. Here are a few of the more comprehensible updates in Stockfish 11.


First up is a really simple update. 

113 113 // RookOnQueenFile contains bonuses for each rook when
114 114 // on the same file as their queen.
115 constexpr Score RookOnQueenFile = S(10, 0);
115 constexpr Score RookOnQueenFile = S(11, 4);


Added by multiple-time author xoto10, this adds an evaluation bonus for a rook being on the same file as the friendly queen. It took several rounds of tweaking and testing before being committed.

The first set of bonuses (red, +0.10 in the opening/middlegame, +0.00 in the endgame) were tried, but did not add any strength to the the engine. Then the second set (green, +0.11 in the opening/middlegame, +0.04 in the endgame), was found to add roughly 2.5 Elo.

Xoto's change was small, but an intuitive one: piece coordination is always a good thing. 


Next up is a bugfix (!), that has been an ongoing problem for Stockfish. In some cases, Stockfish can't tell if it's about to hit the 50-move rule. This is a product of storing positions for later use; excluding the 50-move-rule counter from stored positions means positions can be reused much more frequently.

Overall this exclusion adds strength, so the developers have historically accepted some tiny number of nonsense blunders near tablebase positions. Most users never see these blunders, since they're very rare (even if you're nearing the 50-move rule).

But here's a catastrophic example from CCC11 (Stockfish plays 111. Kb4, which loses):


The 'fix' for this issue was letting Stockfish's main search continue after 45/50 moves, instead of using stored positions in transposition tables for depths 45-50. This method makes sure the 50-move-rule counter is (mostly) never forgotten. The blunders might still be possible, but are even rarer (and I'm not certain anyone has encountered one yet).

Knowing what it does, maybe this code snippet makes sense:

718 update_continuation_histories(ss, pos.moved_piece(ttMove), to_sq(ttMove), penalty);
717 }
718 }
719 return ttValue;
719
720 if (pos.rule50_count() < 90)
721 return ttValue;

.

Or not! In any case let's all thank joergoster, who's been writing for the Fish since 2014!


One of the least exciting parts of Stockfish is its code cleanups. But since they're necessary I'll highlight one by protonspring, which simplifies the code for generating PseudoMoves (moves that look legal before considering checks). Users won't notice any change, but if you're super curious here it is.

These simplifications mean that Stockfish's code continues to be comprehensible and possible to improve. It's quiet but noble work. 


There are other updates- many, many others! They all can be seen at https://github.com/official-stockfish/Stockfish/commits/master

Also, remember that Stockfish is fueled by CPU donations, from users like you. If you want to see Stockfish 12, get involved at Fishtest! (https://tests.stockfishchess.org/tests). 

Onward Fish!