TCEC Season 20
The 20th season of the Top Chess Engine Championship began on 1 December 2020. The defending champion is Stockfish, which defeated Leela Chess Zero in the previous season's superfinal.
Overview
TCEC underwent some major changes this season. There are a plethora of new engines participating in the Qualification League for the first time. Furthermore, two major new rules changes went into effect:[1]
- 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 till mate, 3-fold repetition, the 50-move rule is reached, a Syzygy[2] 6-piece tablebase position is reached, or if the "TCEC draw rule" kicks in.[3]
The decision to treat crashes differently also means that the number of crashes is no longer used for tiebreaks.[1]
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.[1]
Results
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.[4][5]
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.[1]
Pos | Engine | Pld | W | D | L | Pts | Qualification |
---|---|---|---|---|---|---|---|
1 | Seer | 12 | 8 | 4 | 0 | 10 | Advance to League 4 |
2 | Halogen | 12 | 8 | 2 | 2 | 9 | |
3 | MrBob | 12 | 6 | 4 | 2 | 8 | |
4 | A0lite | 12 | 3 | 5 | 4 | 5.5 | |
5 | Koivisto | 12 | 5 | 0 | 7 | 5 | |
6 | Cheese | 12 | 2 | 2 | 8 | 3 | |
7 | Stash | 12 | 1 | 1 | 10 | 1.5 |
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.[4][6]
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.
Pos | Engine | Pld | W | D | L | Pts | Qualification |
---|---|---|---|---|---|---|---|
1 | Seer | 18 | 8 | 9 | 1 | 12.5 | Advance to League 3 |
2 | Weiss | 18 | 9 | 6 | 3 | 12 | |
3 | Tucano | 18 | 6 | 9 | 3 | 10.5 | |
4 | Monolith | 18 | 4 | 12 | 2 | 10 | |
5 | Halogen | 18 | 3 | 13 | 2 | 9.5 | |
6 | ChessFighter | 18 | 2 | 14 | 2 | 9 | |
7 | FabChess | 18 | 4 | 8 | 6 | 8 | |
8 | MrBob | 18 | 1 | 13 | 4 | 7.5 | |
9 | A0lite | 18 | 1 | 11 | 6 | 6.5 | |
10 | Bagatur | 18 | 1 | 7 | 10 | 4.5 | Relegate to QL |
League 3
a | b | c | d | e | f | g | h | ||
8 | 8 | ||||||||
7 | 7 | ||||||||
6 | 6 | ||||||||
5 | 5 | ||||||||
4 | 4 | ||||||||
3 | 3 | ||||||||
2 | 2 | ||||||||
1 | 1 | ||||||||
a | b | c | d | e | f | g | h |
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.[8] 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.
Pos | Engine | Pld | W | D | L | Pts | Qualification |
---|---|---|---|---|---|---|---|
1 | Nemorino | 18 | 7 | 11 | 0 | 12.5 | Advance to League 2 |
2 | Minic | 18 | 8 | 9 | 1 | 12.5 | |
3 | Seer | 18 | 5 | 11 | 2 | 10.5 | |
4 | Tucano | 18 | 5 | 11 | 2 | 10.5 | |
5 | Combusken | 18 | 7 | 7 | 4 | 10.5 | |
6 | Weiss | 18 | 6 | 8 | 4 | 10 | |
7 | Counter | 18 | 2 | 11 | 5 | 7.5 | |
8 | Topple | 18 | 4 | 7 | 7 | 7.5 | |
9 | Pirarucu | 18 | 1 | 10 | 7 | 6 | |
10 | Marvin | 18 | 0 | 5 | 13 | 2.5 | Relegate to L4 |
League 2
After an update before the start,[4][6] 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 half 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.
Pos | Engine | Pld | W | D | L | Pts | Qualification |
---|---|---|---|---|---|---|---|
1 | Nemorino | 18 | 8 | 9 | 1 | 12.5 | Advance to League 1 |
2 | Defenchess | 18 | 6 | 10 | 2 | 11 | |
3 | Vajolet | 18 | 8 | 6 | 4 | 11 | |
4 | Pedone | 18 | 7 | 6 | 5 | 10 | |
5 | Winter | 18 | 5 | 9 | 4 | 9.5 | |
6 | Fritz | 18 | 3 | 12 | 3 | 9 | |
7 | Arasan | 18 | 4 | 9 | 5 | 8.5 | |
8 | Seer | 18 | 0 | 13 | 5 | 6.5 | |
9 | Minic | 18 | 1 | 11 | 6 | 6.5 | Relegate to L3 |
10 | Wasp | 18 | 1 | 9 | 8 | 5.5 |
League 1
A new, high-bias[9] 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.[10] 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.
Pos | Engine | Pld | W | D | L | Pts | Qualification |
---|---|---|---|---|---|---|---|
1 | Ethereal | 28 | 11 | 13 | 4 | 17.5 | Advance to Premier Division |
2 | rofChade | 28 | 11 | 9 | 8 | 15.5 | |
3 | Igel | 28 | 9 | 13 | 6 | 15.5 | |
4 | SlowChess | 28 | 8 | 12 | 8 | 14 | |
5 | RubiChess | 28 | 9 | 10 | 9 | 14 | |
6 | Xiphos | 28 | 7 | 14 | 7 | 14 | |
7 | Nemorino | 28 | 6 | 14 | 8 | 13 | Relegate to L2 |
8 | Defenchess | 28 | 3 | 11 | 14 | 8.5 |
Premier Division
A high-bias opening book, similar to that used in League one, 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 in points, and win the division because it had better r-mobility tiebreaks. It successfully managed to draw, and Leela won 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.
Pos | Engine | Pld | W | D | L | Pts | Qualification |
---|---|---|---|---|---|---|---|
1 | Leela Chess Zero | 56 | 24 | 28 | 4 | 38 | Advance to Superfinal |
2 | Stockfish | 56 | 24 | 28 | 4 | 38 | |
3 | KomodoDragon | 56 | 20 | 25 | 11 | 32.5 | |
4 | AllieStein | 56 | 15 | 32 | 9 | 31 | |
5 | Stoofvlees | 56 | 15 | 24 | 17 | 27 | |
6 | ScorpioNN | 56 | 4 | 34 | 18 | 21 | |
7 | Ethereal | 56 | 6 | 27 | 23 | 19.5 | Relegate to L1 |
8 | rofChade | 56 | 4 | 26 | 26 | 17 |
Superfinal
Stockfish won the superfinal. Jeroen Noomen, who writes the opening book used, decided to order the openings such that the most balanced openings 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.[11]
References
- "TCEC Season 20 rules". Retrieved 5 December 2020.
- a particular Endgame tablebase
- 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.
- "TCEC Season 20 Engines - TCEC wiki". wiki.chessdom.org.
- The engines originally scheduled to play in League 4 but did not respond were chess22k and Asymptote. "TCEC Season 20 engines (old)".
- "TCEC Season 20 Engines - TCEC wiki". wiki.chessdom.org.
- Fiekas, Niklas. "KRNvKRBP – Syzygy endgame tablebases". syzygy-tables.info.
- "TCEC Season 20, L3, Game 90: Nemorino 6.03_NNUE-Weiss 1.2-dev – TCEC Bayes Elo".
- This means the advantage one move out of the opening book is higher than normal.
- This means the opening ended 1.5-0.5.
- Live games are available at https://tcec-chess.com/#