The 18th season of the Top Chess Engine Championship began on 4 May 2020 and ended on 3 July 2020. The defending champion was Leela Chess Zero, which defeated Stockfish in the previous season's superfinal. The two season 17 superfinalists qualified again for the superfinal. This time Stockfish won, winning by 7 games (+23−16=61).
TCEC Grand Champion Runner-up Stockfish Leela Chess Zero 53.5 (23) 46.5 (16) ← TCEC Season 17 TCEC Season 19 →
Overview For this season, there are five leagues: the Qualification League (QL), League Three, League Two, League One, and Premier Division. Two engines promote in every league, with the top two engines of the Premier Division contesting a 100-game superfinal. Updates are allowed only between League Three and League Two, between League One and Premier Division, and between Premier Division and the superfinal. In a small change to previous seasons' rules, draw adjudication now occurs if the evaluations of both engines are within +/− 0.15 for five consecutive moves, after move 35. This increases the threshold of evaluation compared to +/− 0.08 for the previous season.
In contrast to previous seasons, only active engines that are stronger than the best humans are invited to participate. The addition of the "active" criterion means that several veteran competitors, such as former champions Jonny and Houdini, are not participating. Further, a more stringent uniqueness criterion meant that PeSTO (which shares a search algorithm with rofChade) and Komodo MCTS (which shares an evaluation algorithm with Komodo) are not participating.
Tiebreak rules The tiebreak rules for TCEC Season 18 are:
For any event except the superfinal: the number of crashes. Head-to-head score. Number of wins. Sonneborn–Berger score. A decision by the tournament organizers.
Hardware changes For this season, TCEC upgraded its GPU servers to four V100s, while the CPU servers largely stayed the same.
Results
Qualification League Ten engines participated in the Qualification League. Seven engines returned from the previous year, Monolith returned after a two-season hiatus, and two new engines (Combusken and Weiss) made their first appearances. The league turned out to be very closely contested: every engine lost at least two games, and in the final standings, only 2 points separated winner Counter from 7th-placed Combusken. This meant that seven engines were in with a chance up until the final games. Eventual 2nd-place finisher Asymptote staged a mini-comeback after a poor first round to finish second, ahead of 3rd-placed Monolith on the back of a head-to-head win. chess22k, the only engine that had promoted out of QL previously, started well but stalled in the second half and ended in 4th place. Tail-enders Bagatur and Weiss were heavily handicapped by only being able to make use of one thread while their competitors usually ran on 176, and finished with only 5/18 and 1.5/18 respectively. <onlyinclude>
League Three Ten engines participated in League 3. Every engine here played in Qualification League last year, and while the top and bottom engines were unchanged, the order of the middle engines saw some shifting. Demolito took advantage of S17 QL winner Defenchess leaving for greener pastures to win League 3 with 12/18. Second place was closely contested, with Igel taking a 1-point lead after 60 games, only to see Gogobello storm from behind with a string of victories, including an impressive win as black over Demolito, and place second by 0.5 points. Meanwhile, Pirarucu, which finished ahead of both Igel and Gogobello last year, placed a disappointing 6th, though it did hand Gogobello its only loss. On the other end, QL promoters Counter and Asymptote found League 3 far more unwelcoming and relegated back to QL with 7/18 and 6/18 respectively. Counter initially looked like it could hold on, starting out with 10 straight draws, but finished with 4 losses and 4 draws in its remaining games, becoming the only engine not to win a game. <onlyinclude>
League Two Booot, Chiron, and ChessBrainVB, which did not play in the previous season because they did not run on Wine, all returned to play this season in League Two. Among the competitors three engines quickly distanced themselves from their rivals: Booot, Pedone and Winter. Booot was comfortably in the lead for most of the division and was the first to promote, while Winter trailed after losing a game against Pedone. In one of the final games of the league, Winter scored a win against Booot, which put it half a point ahead of Pedone; however, it was all for naught as Pedone drew its game in hand against Chiron, which tied the scores between the two and let Pedone qualify on tiebreak.
At the bottom of the table, in a repeat of League Three, the two promoted engines Demolito and Gogobello found the competition much stiffer and were both relegated back to League Three. <onlyinclude>
League One Fire, which had performed respectably in last season's Premier Division in spite of not having been updated for over a year, won League One. Along with last season's promotion rival rofChade, it did not lose a game the entire league, with both finishing comfortably above third-placed Booot. In contrast, the middle of the table was fiercely contested. Booot was the only engine to score two wins against its mid-table rivals, defeating Fritz and ScorpioNN, but it lost a game to last-place Pedone. Defenchess lost a game to Xiphos, but it along with Fritz was able to 2–0 Pedone, thereby taking 4th and 5th respectively. Last season's Premier Division engine ScorpioNN, as well as League One contender Xiphos, both performed solidly and lost only one game; however, they also only scored one win which was insufficient to fight for the top spots. At the other end of the table, promoted engine Pedone was quickly outclassed, losing eight games. For the other relegation spot, both Arasan and RubiChess failed to score any wins, but Arasan lost only one game, leaving RubiChess to relegate. <onlyinclude>
Premier Division
In the Premier Division, Stoofvlees (which had not been updated since Season 17) took a surprising lead after the first round robin. It recorded the only double-kill (winning with both sides of the same opening) against rofChade, and by the end of the first round robin, was on +4 while pre-tournament favorites Stockfish, Leela and AllieStein were only +2. The lead did not last, however. Stockfish played a sterling second round robin, including a win against both Stoofvlees and AllieStein, to take first place. Leela also closed the gap by not losing any games while defeating Ethereal, rofChade and Fire. By the third round robin, Stockfish was effectively qualified for the superfinal, while the second slot was still up for grabs. Leela effectively eliminated Stoofvlees after the latter blundered a simple tactic (see diagram). AllieStein was only a win behind, however, and had superior tiebreakers to boot. Leela defeated Ethereal, only for AllieStein to keep pace by beating Komodo. It looked as though Stoofvlees' blunder might've been decisive to Leela qualifying for the superfinal. The question was finally settled in game 164 when AllieStein lost the reverse game to Komodo, which qualified Leela for the superfinal. Both Leela and first-placed finisher Stockfish did not lose a game in the division.
Superfinal
The superfinal was contested between reigning champion Leela Chess Zero and last season's runner-up Stockfish. The 100-game match began with both engines winning in a King's Indian Defense, before Stockfish took the lead by winning three consecutive openings, including a stunning performance with the white pieces in Game 8, tactically outclassing Leela in the middle-game. After a balanced interlude, Stockfish won game 24 to open up a commanding 4-point lead, the largest deficit Leela had ever faced in a superfinal. Leela finally got back to winning ways with a strong performance in game 29, and narrowed the gap further by winning game 33. However, with wins in games 52, 56 and 58, Stockfish established its dominance once again. Leela fought back with a win in game 63, and then followed this up by winning game 65 (see game analysis below) with what was perhaps the single best performance from either engine in the entire superfinal; Leela played an astonishing queen sacrifice on move 21 that Stockfish not only didn't spot, but then took a further three moves to work out it was completely winning – GM Matthew Sadler would later call this game Leela's queen sac Immortal. However, Stockfish countered with wins in games 68, 77, 88 and 92 to secure what would prove to be a decisive lead. With eight games left, Leela needed to win seven of them in order to win. It managed to win game 93, but subsequently lost the reverse in game 94, which gave Stockfish an unassailable lead. Leela scored a consolation win in game 97 to make the final score +23−16=61 in favour of Stockfish.
One game pair in the superfinal stood out as unique: games 17-18 featured an opening which, to GM Sadler's knowledge, was playable. However, both finalists evaluated the book exit position (diagram) as providing a decisive advantage for White. GM Sadler opined that these two games might eventually be the final refutation of the entire variation.
Notable games In an article published shortly after the superfinal, GM Matthew Sadler wrote that Stockfish was a deserving winner: its developers had been producing patches at a frantic pace, it showed an exceptional tactical eye, and it even looked like it had learned how to play the King's Indian Defense. The superfinal produced numerous interesting games, but GM Sadler highlights two in particular for their creativity and beauty. Most of the notes below are by GM Sadler.
Game 8 This opening featured a dubious line of the Triangle setup against the Queen's Gambit. After successfully defending the Black position in Game 7, Stockfish unleashed this demolition job with the white pieces.
White: Stockfish (chess) Black: Leela Chess Zero Opening: Queen's Gambit Declined (ECO D31)
1. d4 d5 2. c4 c6 3. Nf3 e6 4. Nc3 dxc4 5. Bg5 f6 6. Bd2 b5 (see diagram) Black's fifth move is known to be dubious, with Triangle system experts Ruslan Shcherbakov and Mikhail Krasenkow both critical of it. Nonetheless, these first six moves were included in the TCEC opening book, forcing both engines to defend Black's position.
7. a4 In game 7 when Leela had the white pieces, she had played 7.e4. After 7...a5 8.a4 Bb4 9.axb5 Bxc3 10.Bxc3 cxb5 11.Nh4 g6 12.b3 f5 (amazingly, Stockfish is defending with only pawn moves) 13.d5 Qxh4 14.Bxh8 Qxe4+ 15.Be2 Qxd5 16.bxc4 Qxd1+ 17.Bxd1 b4 we have an unusual position where after 17 moves, all remaining pieces are on the first and eighth ranks. Black has given up a rook and bishop for two knights and connected passed pawns on the a- and b-files. The bishop pair in an open position gave Leela some initiative, but Stockfish was able to hold without much drama.
7... b4 8. Ne4 f5 In keeping with its style, Leela seeks active counterplay instead of trying to defend its position (which is full of weaknesses) passively.
9. Ng3 Nf6 10. e3 Attacking the c4-pawn.
10... Ba6 11. Be2 (see diagram) Stockfish could play 11.Rc1 attacking the c4-pawn immediately, but chooses to delay instead. GM Sadler called this move 'clever', since it challenges Leela to find a way to develop her pieces while still fending off the attack on the c4-pawn when it does come.
11... c5 Leela could react with simple development such as 11...Qd5 or 11...Bd6, but takes the aggressive approach instead. This is a risky move, opening the position before castling.
12. dxc5 Nbd7