TCEC Season 17


The 17th season of the Top Chess Engine Championship began on 2 January 2020 and ended on 22 April 2020. TCEC Season 16 3rd-place finisher Leela Chess Zero won the championship, defeating the defending champion Stockfish 52.5-47.5 in the superfinal.
Season 17 featured for the first time two separate leagues, one for GPU-based engines and one for CPU-based engines. TCEC also raised the computing power available to both CPU and GPU engines. The hardware for CPU engines was doubled to 88 cores, while the hardware for GPU engines was raised to 4 RTX 2080 Ti's.

Overview

In keeping with its identity as a competition run at long time controls on high-end hardware, TCEC secured a hardware upgrade for the competing CPU engines. Among other changes, the number of cores available is doubled from 44 to 88, the operating system used is now Linux, and Syzygy endgame tablebases are now cached directly in the RAM for faster access. Because this upgrade advantages CPU engines compared to GPU engines, TCEC split the qualification paths to Premier Division by introducing separate leagues for CPU and GPU engines. While an upgrade to the GPU servers is being secured, the CPU leagues are played first.

Structure

For CPU engines, there will first be a Qualification League consisting of 16 engines, followed by League 2 and League 1. In the Qualification League the top 6 engines promote. In League 2 the top 4 engines promote. The engines in each league are seeded based on their performances in previous seasons. For GPU engines, there will be one league only, with up to 16 competitors. The top 2 GPU engines will then contest a playoff against the top 4 CPU engines in League 1, with the four highest-placing engines promoting to Premier Division.
Premier Division is also expanded from 8 engines to 10. Six engines – Stockfish, Komodo, Houdini, Leela Chess Zero, AllieStein, and Stoofvlees – are seeded directly to Premier Division, based on their top 6 finishes in the previous season. Finally, the top two engines in Premier Division qualify for the 100-game superfinal match.

Results

CPU Qualification League

After not competing for five seasons, Season 11 Div 3 engine Defenchess trailblazed the qualification league. It scored 18 wins while conceding no losses, finishing 3.5 points clear at the top. It was the only undefeated engine. Demolito and Winter also locked up two of the promotion spots smoothly, but the remaining three slots were closely contested. Among the competitors, Igel was the only engine to not lose to Defenchess and Demolito, but it lost to bottom-half engines FabChess and Topple. Comparatively, iCE was whitewashed by Defenchess and Igel, but it turned in a strong performance against its other rivals, losing only one other game to Winter. Pirarucu went through a tense moment when it lost to Winter in the penultimate round; however, it pulled out a win with Black against Topple to promote. 7th-placed Minic was in a promotion spot all the way up to the final round, when it lost to Gogobello while iCE beat Counter. This left the two tied at 17.5 points. Minic had the better Sonneborn–Berger score, but it also had one crash, and the number of crashes was the first tiebreak. Nonetheless, in a stroke of good fortune for Minic, the League Two engines chess22k and Fritz crashed three times during testing for the division. By TCEC rules, if this happened, the author would have to update the engine or it is disqualified. chess22k's and Fritz's authors were not able to update the engines in time, resulting in Minic and PeSTO promoting as lucky losers.

CPU League Two

Former Premier Division engine Fire won League Two. It had been relegated in the previous season because its developer had submitted a drastically different neural network-based version that turned out to be significantly weaker. This season, the original, traditional engine played, and it dominated with an undefeated 22/28. It defeated seven engines, including fourth-place Vajolet, 2–0. Second-placed Defenchess also turned in a strong performance, finishing with an undefeated 20.5/28. For the other promoted engines, Winter and PeSTO performed surprisingly well, comfortably finishing above their peers in 7th and 8th respectively. The remaining five promoted engines occupied the bottom five spots and were all relegated along with Wasp.
After the division concluded, in a repeat of testing for League Two, four League One engines either pulled out or did not run on the new Linux operating system, resulting in the 5th-8th placed engines in League Two promoting.

CPU League One

During testing for League One, three engines did not play because they did not run on Wine, the compatibility layer that TCEC is using to run Windows programs on Linux. One further engine crashed and was not updated in time. As a result, the 5th to 8th-placed engines from League Two, Pedone, Nemorino, Winter and PeSTO, promoted as lucky losers.
In League One itself, Xiphos, which had just missed out on promotion in Season 16, vaulted to an early lead after scoring five wins with no losses. However, after this bright start, it failed to score more wins. This allowed former Division Premier engine Ethereal to seize first place, in spite of a loss to Komodo MCTS. Fellow competitors Fire and Komodo MCTS also amassed more wins than Xiphos, and by the midway point had overtaken it in the standings. By the final double round-robin, Ethereal, Fire, and Komodo MCTS had more or less secured a playoff spot. Xiphos, who had yet to lose, was barely holding on to fourth place, with rofChade and Defenchess both breathing down its neck. When it lost a crucial game to Fire, it allowed rofChade to pull even, with Defenchess half a point further back. Xiphos knocked Defenchess out of contention with a head-to-head win, but with rofChade having the superior tiebreaks, it needed to either hope for Fire to beat rofChade or to beat Vajolet in its last game. When both games ended drawn, Xiphos finished fifth, again just missing out on promotion.
For the other engines, Laser, which had pipped Xiphos to a playoff spot last season, was able to remain unbeaten until the final double round-robin. However, it collapsed in that round, losing three games. Winter scored likely the biggest upset of the league by defeating rofChade once, but the rest of the division was not kind to it and fellow lucky losers Nemorino and PeSTO, with all three engines placing in the bottom four. Former Division Premier engine Fizbo, which had been forced to run at a much slower speed because it was not able to utilize all the hardware available to it, finished solidly last, five points off the pace.

GPU league

The GPU league was cancelled because only two participants met all the uniqueness criteria: ChessFighter and ScorpioNN. Both engines automatically qualified to play against the top four engines from the CPU league one.

Playoff

Fire convincingly won the playoff for Premier Division in spite of no longer being under development. It finished with a +7 score, defeating all its rivals except ScorpioNN at least once. Komodo MCTS and ScorpioNN both lost two games, but finished comfortably in the top four, with wins against rofChade and ChessFighter. League One winner Ethereal stumbled badly in the playoffs, losing first to rofChade and then to Fire. As a result, the final promotion spot was closely contested. In the penultimate round rofChade temporarily pulled even with Ethereal by defeating ChessFighter, but Ethereal drew against Komodo MCTS to remain half a point ahead. It came down to the direct head-to-head encounter in the final round. rofChade needed to defeat Ethereal with the black pieces, which would've let it qualify because of its superior head-to-head score. However, it did not make any headway, and Ethereal squeaked into the Premier Division, half a point ahead of rofChade.

Premier Division

In an unprecedented move, TCEC played all the CPU-CPU matches first, to minimize rental costs for the GPUs.
In the CPU-CPU matches, defending champion Stockfish steamrolled its rivals. It defeated Houdini and Ethereal twice, scoring six wins in the process, one more than the rest of the division combined. Houdini, which had not been updated for over two years, was further handicapped by only being able to make use of 64 of the 176 available threads, and was last after the double round robin. Komodo MCTS was the only engine not to lose to Stockfish, but it also failed to score any wins. Fellow promoted engine Fire performed surprisingly well, scoring two wins while losing only to Stockfish. Combined with its run through the lower divisions as well as in Season 16, it set a new TCEC record of 124 games without losing.
In the CPU-GPU and GPU-GPU matches, S16 runner-up AllieStein took an early lead over S16 third-place finisher Lc0, scoring 4 wins to Lc0's 2 in the first round robin. It looked as though the season 16 result, in which AllieStein pipped Lc0 to second place in spite of the latter not losing any games, would be repeated. However, a dramatic second round robin saw Ethereal playing kingmaker. First it defeated AllieStein, then it was defeated by Lc0 after it blundered a 7-man endgame tablebase draw. After this stroke of good fortune Lc0 went on a winning streak to take the lead, defeating Stoofvlees, Komodo, and Komodo MCTS successively. However Ethereal continued to play kingmaker, this time losing to AllieStein in the reverse game and then defeating Lc0 after the latter blundered in a complicated position. Lc0 finally effectively eliminated Alliestein with a head-to-head win, which also put her ahead of Stockfish in first place, but the drama was not over as she lost another game to Komodo. This allowed Stockfish the chance to at least tie Lc0 at the top of the standings with a win over Stoofvlees, but it failed to do so. In the end, Lc0 won the premier division for the first time in spite of losing its first premier division games since Season 14, while Stockfish failed to finish first for the first time since Season 10.
In the fight to avoid relegation, Houdini, ScorpioNN and Komodo MCTS were quickly left behind, but the final slot was closely contested. Fire failed to score any more wins after its initial two, but it also only lost two more games, to AllieStein and Lc0. Ethereal, with its giant-slaying performance against Lc0 and AllieStein, had taken a surprising fourth place, ahead of traditional powerhouse Komodo. Stoofvlees had played extremely optimistically and suffered losses to the top three competitors as a result, but scored a head-to-head win against both Komodo and Ethereal while not conceding any other losses. By the final games, Ethereal had successfully reached safety, but Komodo was in real danger of relegating after finding itself in a tight position against Lc0. If it lost and Stockfish beat Stoofvlees in the final game, then it would find itself in a three-way tie with Stoofvlees and Fire, and relegated because it had the worst head-to-head score amongst the three. However, when Lc0 pushed too hard and blundered in a time scramble, the game turned into a win for Komodo that put it ahead of Ethereal and left Fire to relegate.