TCEC Grand Champion Runner-up Stockfish Leela Chess Zero 53 (14) 47 (8) ← TCEC Season 19 TCEC Season 21

The 20th season of the Top Chess Engine Championship began on 1 December 2020 and ended on 1 February 2021. The defending champion was Stockfish, which defeated Leela Chess Zero in the previous season's superfinal. The season 20 superfinal was a rematch between the same two engines. Stockfish once again came out ahead, winning by 6 games (+14 -8 =78).

Overview TCEC underwent some major changes for season 20. There were a plethora of new engines participating in the Qualification League for the first time. Furthermore, two major new rules changes went into effect:

Engines are no longer disqualified if they crash three times, although crashes are still treated as losses. The "TCEC win rule", which stated that games are adjudicated as won if both engines showed a +10 eval or greater for 5 consecutive moves, is abolished. Instead, games are played until mate, 3-fold repetition, the 50-move rule is reached, a Syzygya particular Endgame tablebase 6-piece tablebase position is reached, or if the "TCEC draw rule" kicks in.This draw rule adjudicates the game as drawn if, at Black's move 35 or later, the evals from both playing engines are between [-0.15, +0.15] for 10 plies without a pawn advance or capture.

The decision to treat crashes differently also meant that the number of crashes was no longer used for tiebreaks. Furthermore, r-mobility was lifted to the second tiebreak condition.

Finally, the advent of NNUE in the previous season led to several engines that implemented NNUE showing quantum leaps in strength. To keep the participant lineup unique, TCEC implemented guidelines for engines that utilize NNUE: one is allowed to use basic NNUE code freely, but modifications are encouraged, and all training data should be generated from the engine's own search and eval code.

Qualification League When the qualification league started, several engines had not responded to the invitations sent by TCEC. As a result, the number of promoting engines increased from the original two to four.The engines originally scheduled to play in League 4 but did not respond were chess22k and Asymptote.

The qualification league contained mostly engines playing in TCEC for the first time. New entrant Seer wound up winning the league easily, scoring 8 wins and conceding none. Fellow new entrant Halogen finished second, a point behind, after losing the head-to-head against Seer. Koivisto had the most polarized performance: in its 12 games, it won five times but crashed the remaining seven games. The result left it half a point behind A0lite and just out of the promotion spots.

Koivisto's polarized performance led TCEC to implement an exceptional ruling: although updates are not usually allowed between the lower leagues, if an engine promotes, it would be allowed to fix any crash-causing bugs.

League table <onlyinclude>

Results Engines play each other twice, once as white and once as black.

League 4 Similar to the qualification league, the number of engines promoting from League 4 was increased to three because of the lack of response from Gogobello.

QL winner Seer won League 4 with a dominating performance, scoring 8 wins and only losing one game. It further scored a win against 2nd-placed Weiss, as well as defeating tail-enders A0lite, Bagatur, and FabChess 2-0. Weiss remained in contention until the very last round in spite of its loss to Seer. It won 9 games, but also lost three, to finally finish half a point behind. Fourth-place finisher Monolith scored a win against Weiss and third-place finisher Tucano, but nonetheless finished behind Tucano because of Tucano's strong performance against the bottom half of the field: Tucano scored +5 against the four bottom-placed engines, while Monolith was only even. With three promotion slots only, Tucano squeezed past Monolith, half a point ahead.

League table <onlyinclude>

Results Engines play each other twice, once as white and once as black.

League 3

Wielding new NNUE evaluation functions, Minic and Nemorino finished comfortably above the competition in first and second place. The two engines tied in points - Nemorino had one fewer win, but also lost no games - and the head-to-head score was even as well. The tie was eventually broken by r-mobility, the first time this criterion was used. Nemorino wound up ahead. r-mobility also broke the tie between third-placed Seer, fourth-placed Tucano and fifth-placed Combusken, this time causing Seer to promote. The three engines, along with six-placed Weiss, were very close with each other throughout the league. Seer threw away one game against Weiss (diagram), who also scored a win against Combusken. However, Weiss lost both games against Nemorino, and was only even against Counter, Topple and Pirarucu. This caused Weiss to eventually finish sixth, half a point behind its other three rivals.

League table <onlyinclude>

League 2 After an update before the start, League 3 winner Nemorino won League 2, scoring 8 wins and only losing one game. Second place was closely contested, with eventual third-place finisher Vajolet getting whitewashed by both Nemorino and fourth-placed Pedone, but dominating the bottom half of the table. Both Vajolet and Defenchess managed to finish a point ahead of Pedone, but r-mobility tiebreaks had to be used to decide Defenchess as the promoting engine.

At the other end of the table, in a surprising reversal of fortunes, fellow promoted engine Minic, which had finished level on points with Nemorino in League 3, suffered 6 losses with only one win to finish in the relegation zone. r-mobility tiebreaks then condemned Minic to relegation, with the third promoted engine Seer finishing just above Minic in spite of not winning any games.

League table <onlyinclude>

League 1 A new, high-biasThis means the advantage one move out of the opening book is higher than normal. opening book led to a very bloody League 1, as engine after engine took turns to win an opening. By the end of the league there had been 13 game pairs in which engines traded wins. Nonetheless, there were also a lot of decisive game pairs, and every engine lost at least one opening.This means the opening ended 1.5-0.5. When the dust settled Ethereal finished first, two points ahead of rofChade and Igel. rofChade lost both openings to Ethereal, but beat Nemorino and Defenchess twice. Comparatively, Igel won both openings against Ethereal, but also lost both openings to Xiphos, eventually missing out on promotion to rofChade on r-mobility tiebreaks.

At the other end of the table, Defenchess was quickly left behind, but the last relegation spot was closely contested, with only one point separating four engines. Ultimately Nemorino was relegated.

League table <onlyinclude>

Premier Division A high-bias opening book, similar to that used in League 1, meant that Premier Division also saw many decisive games. However, many of the stronger engines were able to defend when they had the black pieces while winning game after game with the white pieces. Defending champion Stockfish cruised to an early lead when it not only defended with black successfully, but even won two games with black, against Scorpio and rofChade. It further won an opening against season 19 runner-up Leela Chess Zero in round two. As the division progressed, however, Leela kept up a relentless chase: at the end of the third round robin, it had won all but two games it played with white, and narrowed the gap further by winning an opening against Stockfish. Leela finally caught Stockfish in the fourth round robin when Stockfish lost with black against Stoofvlees. Behind for the first time, Stockfish kept things interesting with a streak of wins against rofChade, Scorpio, Ethereal, and the reverse game against Stoofvlees. It came down to the final game between Stoofvlees and Leela, which Leela needed to hold with the black pieces. This would have let it tie Stockfish on points, and win the division because it had better r-mobility tiebreaks. It successfully managed to draw, allowing Leela to win the Premier Division for the second time (after TCEC Season 17).

For the other contestants, traditional powerhouse Komodo played with a NNUE evaluation function for the first time. The effect was immediately apparent, as after flirting with relegation in previous seasons it finished solidly third this season, well behind Stockfish and Leela but ahead of AllieStein and Stoofvlees. Komodo was also the only engine other than Stockfish to win a game with the black pieces. AllieStein was the only engine to play without an update from the previous season, but still managed to finish fourth. Scorpio and Ethereal fought a close battle to avoid relegation. Scorpio blundered a few mate-in-ones due to an apparent bug in its code, but scored a head-to-head win, and was also able to draw two more games against AllieStein than Ethereal. It finally finished sixth, 1.5 points clear of the relegation zone. rofChade, the only engine playing without neural network-based eval, finished solidly last without winning a single opening.

League table <onlyinclude>

Superfinal Stockfish won the superfinal. Jeroen Noomen, who writes the opening book used, decided to order the openings such that the most balanced openings (as determined by older versions of Stockfish/Leela on weaker hardware) are played first. As a result, the first half of the superfinal saw draw after draw, with Stockfish narrowly in the lead after winning games 33 and 49. At the start of the second half, Leela narrowed the score by winning games 52 and 56. There followed a tense period where the superfinalists traded wins, but beginning from game 71 Stockfish scored six wins without reply to take a big, and as it turned out decisive, lead. Stockfish mathematically won the superfinal after drawing game 95. The final score was +14 -8 =78 in favor of Stockfish.Live games are available at https://tcec-chess.com/#

Notable games In an article published shortly after the superfinal, GM Matthew Sadler called the superfinal a 'captivating' affair which Stockfish won because it was better at defending inferior positions. The following are selected from the many games analyzed by GM Sadler.

Games 5/6

Because the openings were ordered in ascending bias, it was very unexpected for an opening pair this early to yield a 1-0, 1-0 result. In analyzing the book exit position (diagram), GM Sadler found that older versions of Stockfish could not tell how dangerous White's position is until it had searched to a high depth.

Stockfish–Leela Chess Zero, game 5 (Nimzo Indian Defense): 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 b6 6. e4 Bb7 7. e5 Bxg2 8. exf6 g6 9. Bg5 d5 10. Qg4 Bxh1 11. O-O-O dxc4 12. Bc2 Bb7 13. Nh3 Re8 14. Qh4 Bf3 15. Rg1 e5 16. Bd2 Nd7 17. Ng5 Nxf6 18. dxe5 Bxc3 19. Bxc3 Nh5 20. Qxc4 Qd5 21. Qh4 Qc6 22. Qh3 Rad8 23. Qxf3 Qxf3 24. Nxf3 Nf4 25. Bd1 b5 26. Kc2 a6 27. a3 c5 28. Rg4 Nd5 29. Ba5 Rd7 30. Bd2 f6 31. exf6 Nxf6 32. Rg1 c4 33. Kc1 Ne4 34. Be3 Rd5 35. h4 Rf5 36. Kb1 Kh8 37. Rg2 Rd5 38. Bc2 Kg7 39. Rg4 Nc5 40. Ng5 Nd3 41. b3 h6 42. Nf3 Rc8 43. Re4 Rf5 44. Nd2 Nxf2 45. Re7+ Kf6 46. Ra7 Nd3 47. Bxh6 Re8 48. Rxa6+ Re6 49. Bg5+ Ke5 50. Rxe6+ Kxe6 51. a4 bxa4 52. bxc4 Ne5 53. Bxf5+ Kxf5 54. Kb2 Ke6 55. Ka3 Kd7 56. Kxa4 Kc6 57. Nb3 Kd7 58. Kb5 Nf7 59. c5 Nd6+ 60. cxd6 Kxd6 1-0

Leela Chess Zero–Stockfish, game 6 (Nimzo Indian Defense):