Tuesday, May 26, 2020

Season 18 league 1, final results

Final standings


Fire and rofChade promote to the premier league. Fire led most of the league, with two wins in the first half and three in the second half. rofChade was in a group of engines that fought for 2nd place, it beat two of its direct competitors in the second half to promote.

RubiChess and Pedone relegate to league 2. Pedone was the weak engine of the league after promoting from league 2, it lost 5 games in the second half. RubiChess only lost 3 games in the league, it was close to the central group of engines but couldn't catch up to them. The other engine that promoted from league 2 was Booot, it was close to the bottom after the first half, it won its last two games to escape relegation.

Fire and rofChade will play in the premier division with Leela, Stockfish, AllieStein, Komodo, Stoofvlees and Ethereal, all played in season 17 premier division. We will not see Houdini or KomodoMCTS this season.

Notable games
Game 5, RubiChess - Fire: RubiChess had an advanced passer in the center, while Fire opened the king side and threatened the white king. RubiChess gave material to protect its king, the game reached a BBN vs RNN position. It took Fire a while to move its king forward and capture a pawn, the game was adjudicated a few moves later.
Game 11, rofChade - Pedone: rofChade was a pawn up in a RRB vs RRB position. rofChade created connected passers on the queen side, Pedone had a central passer. rofChade lost a bishop for the black passer, Pedone lost a rook for the white passers. The RR vs RB ending was a win for white.
Game 16, Pedone - Fritz: Pedone attacked on the king side in a closed position, and its queen got trapped. After the black king walked out of danger to the queen side Fritz forced a Q for R trade and the game reached a RB vs QN position. The game was adjudicated before Fritz started to capture pawns.
Game 24, Fire - Booot: Fire went up a pawn and reduced to a RRB vs RRB position. Fire had connected passers on the queen side, after exchanging a pair of rooks it pushed them forward. Booot blocked the passers with its king, Fire captured another pawn and the game was adjudicated.
Game 27, Booot - Fritz: The engines castled in opposite directions and Booot pushed pawns and opened a file on the king side. The black king was in danger and Fritz lost two pawns in its defense. Booot reduced to a winning RRN vs RRN position.
Game 28, ScorpioNN - Fire: A miniature that ended in a 3-fold repetition on move 17.
Game 30, Xiphos - Defenchess: Xiphos attacked on the king side, the black king hid in the corner supported by one pawn. When it was ready Xiphos exchanged all pieces and got a winning B vs pawns ending.
Game 31, Defenchess - Pedone: Defenchess pushed a pawn to h6 and trapped a black bishop in the corner. The engines exchanged pieces slowly, Pedone couldn't get its bishop out. The game reached a BN vs BN position, Defenchess was virtually a piece up, enough for a win.
Game 36, Pedone - Booot: In a QBN vs QBN position that looked drawn Booot decided to trade its bishop for 3 pawns. Pedone reduced to a QB vs Q position, Booot avoided exchanging queens and gave checks as long as it can. The white king came forward and the game was adjudicated.
Game 40, Defenchess - RubiChess: The engines shuffled in a RBB vs RNN position when Defenchess exchanged a pair of minor pieces and moved its rook to the back rank. RubiChess couldn't protect its pawns, Defenchess went 3 pawns up to win.

Scores after 9 rounds: Fire +2, rofChade Xiphos Defenchess +1, ScorpioNN Arasan Fritz 0, Booot -1, RubiChess Pedone -2. The league is very close, only 2 points separate first and last place. Fire has a small lead, 3 more engines have positive scores. Pedone and Booot that promoted from league 2 are at the bottom, together with RubiChess. Arasan and ScorpioNN have 9 draws.

Game 46, Pedone - ScorpioNN: Pedone castled long, ScorpioNN pushed pawns on the queen side and attacked. Pedone gave a bishop to stop the pawns, the engines reduced to a RR vs RRN position and the extra piece gave ScorpioNN the win.
Game 51, Fire - Pedone: The engines mostly shuffled for 35 moves, then Pedone tried to attack on the queen side. Pedone captured two pawns but its queen became trapped, it gave a rook for a knight to open a way out. Then Pedone blundered and through an attack on the black king Fire captured a rook. The material advantage gave Fire the win.
Game 61, Fritz - Pedone: Fritz attacked the king side while Pedone created an advanced passer on the queen side. Fritz captured a pinned knight and managed to block the black passer on the 2nd rank. It took a while for Fritz to reduce to a RN vs R ending, push a passer of its own and get the win.
Game 62, Fire - Arasan: Both engines castled long and Arasan pushed pawns on the king side, its e pawn stayed behind and was weak. After a long struggle Fire captured the e pawn and took control of the center. Fire went two pawns up in a QRN vs QRN position, it exposed the black king with a pawn sacrifice. It used a mate threat to capture the knight and reach a winning RN vs R ending.
Game 67, rofChade - Defenchess: rofChade gave a pawn and created a queen side passer, while Defenchess had connected passers in the center. Defenchess gave a rook for a bishop to capture the white passer, rofCHade captured one of the black passers and the game reached a RR vs RB ending. rofChade exchanged a pair of rooks and the game was adjudicated, both engines agreed white was winning though it was not clear to me.

Scores after 14 rounds: Fire +4, rofChade +2, Xiphos ScorpioNN Fritz 1, Defenchess 0, Arasan Booot -1, RubiChess -2, Pedone -5. Fire had two wins in the last 5 games, it increases its lead at the top and is close to promotion. Pedone lost 3 of its last 5 games and it will probably relegate. The races for 2nd and 9th places are still undecided with 4 rounds left.

Game 74, RubiChess - rofChade: rofChade played better in a closed position, it increased pressure on both sides until it was ready, then reduced to a BB vs BN position. One white bishop was trapped, rofChade captured two pawns and then traded its knight for the bishop. The remaining same color bishop ending was a win for black.
Game 76, Pedone - Defenchess: Pedone captured a pawn and ignored the danger to its king. Defenchess sacrificed a knight to expose the white king, Pedone started to lose material to stop the attack. DefenChess was a rook up when the game was adjudicated.

Scores after 16 rounds: Fire +4, rofChade +3, Xiphos ScorpioNN Fritz Defenchess 1, Arasan Booot -1, RubiChess -3, Pedone -6. Two rounds left. Fire and rofChade have a small lead at the top, the race for promotion is not over yet. Pedone will relegate, RubiChess needs a miracle to survive.

Game 81, Booot - Pedone: The game reached a QRR vs QRB position, Booot traded RR for Q to clear most of the pawns and reduce to a Q vs RB ending. Pedone could have held with better play, when Booot's king moved forward to support a passer the black defense collapsed.
Game 83, Fritz - rofChade: rofChade had a negative eval above 1 with a pawn majority on the king side. It gave a rook for a knight and created a passer, the game reached a RB vs BN position. rofChade captured white pawns, the game was adjudicated in a B vs R ending with black 3 pawns up.
Game 84, Fire - Xiphos: Fire developed an attack slowly, it opened the king side and doubled rooks in the center. Xiphos gave a rook for a bishop, the center opened up and the black king was exposed. Fire had too many threats, it captured a bishop and the game was adjudicated.

Fire and rofChade secure their promotion with wins. Booot is safe after its win, Arasan is a point away from RubiChess.

RubiChess drew against Pedone, both relegate to league 1.

Game 90, ScorpioNN - Booot: ScorpioNN castled long, Booot sacrificed a knight and attacked the white king. Booot regained the material and reduced to a RBB vs RBN position, black two pawns up. It took a while for the black pawns to advance, eventually ScorpioNN lost a rook to stop a passer.

Monday, May 25, 2020

Season 18 league 1 statistics

A summary statistics table of previous stages and seasons. 

Draw rate, wins


Final draw rate was 77.8%.


Game termination

The three most common game termination causes were:

50.0% - TCEC draw rule
22.2% - TCEC win rule
15.6% - 3-Fold repetition


There were no crashes in the stage.

Moves per game


Median= 53.3
Average= 57.2

There was only 1 game longer than 100 moves, lasting 197 moves (RubiChess - Defenchess, game 85, draw).

Time per game (hours)

Median= 1:25
Average= 1:23

Openings

There were 8-move book openings in this stage chosen by Cato. The first letter of the ECO codes was distributed as follows:

The engines had almost no freedom to choose the opening variant, all the game pairs repeated the same ECO code twice, and all but one repeated the same opening variant.

Reverse pairs, wins


Reverse pairs, same moves

Pairs of reverse games diverged very quickly, 33.3% diverged immediately out of book, 75.6% of the pairs diverged at most after 1 move. The longest repeated sequence of moves was 9 plys (Booot - Xiphos games 9 and 54, English symmetrical, hedgehog system, two draws)

Tuesday, May 19, 2020

Season 18 bookless bonus

While we waited for league 1 to start the TCEC organizers ran a bonus match between Stockfish and Leela which was (kind of) without using books. There was a similar match in season 14 where I did some analysis on the openings the engines chose, and I was interested in comparing the matches.

There were 50 games played in the match, less than the 100 games last time. There were no predefined book sequences in the first 24 games, and the remaining 26 games were played with a book sequence of 1 ply, played in reverse pairs. Leela was the regular engine that plays in TCEC. Stockfish was a special version called Bookfish, that used an online database of opening moves run by noobpwnftw (who also provides TCEC with the hardware used for the tournament). So the opening moves Stockfish used were pre-calculated and pre-analyzed - using Stockfish. Does that mean that Stockfish used a book? It's complicated, but this was certainly not a regular TCEC Stockfish. To complicate things further, Bookfish was configured to add some randomness in its move choices. It could play a non-optimal move as long as its evaluation was close enough to optimal.

Leela beat Stockfish in both parts of the match, 2-0 with 22 draws in the bookless part and 3-0 with 23 draws in the 1-ply openings. Leela was better in virtually all games, Stockfish constantly fought to get a draw. At least some of this is a result of the online book setup. After playing many automatic book moves, more than 12 usually, Stockfish's first real eval of the position was almost always in favor of Leela. This was when Stockfish was white and black. Not what you would expect from a well designed book. I would say that the randomness allowed is the main reason for this, but the book may be weaker that expected. There is also the possibility that Leela is just better, we have seen before that Leela's training makes its internal "book" very strong, especially from the opening position.

The 1-ply openings were all different, each played in one pair. This made sure the games did not repeat themselves. Quite incredibly, all pairs diverged at the second ply - not a single case where Leela and Bookfish chose the same reply to the 1-ply opening.

The bookless part of the match was more repetitive. The randomness in Bookfish caused the opening tree to widen faster than in the previous match, and there were only 24 games which is a smaller sample than the previous 100. One thing that was similar to the previous match is that Leela almost always plays the same move when faced with the same position. Up to ply 24, in all games, there were only two exceptions to this rule. Surprisingly, these exceptions were in the opening move.

Stockfish as white had 4 opening move choices, with a constanst reply by Leela: c4 e5 (5 times), d4 Nf6 (3 times), e4 e5 (twice) and Nf3 d5 (twice). After Stockfish's next move there were already 10 different move sequences. Only games 3, 9 and 17 continue to repeat until ply 10 in the English Opening: King's English, Nimzowitsch - Flohr variation (moves c4 e5 Nf3 e4 Nd4 Nc6 e3 Nxd4 exd4 Qf6). Games 3 and 9 continued to repeat until ply 14.

Leela as white started with d4 in 10 games and e4 in 2 games. In the previous match Leela played e4 exclusively, it changed its mind since then. The e4 games diverged after Stockfish's reply to a Sicilian opening and a French opening. The d4 games were more repetitive. Stockfish replied d5 in two games, the engines repeated 9 plys in the QGD exchange, positional variation. In the remaining games Stockfish replied Nf6 and the games continued d4 Nf6 c4 e6 Nf3. In 4 games the engines continued b6 g3 in the Queen's Indian Fianchetto variation, two of these games repeated until ply 13. The other 4 games continued d5 Nc3 and switched to a QGD. All 4 games repeated until ply 13 in the Semi Slav defense. Games 4 and 24 repeated 49 plys (!!!).

Monday, May 18, 2020

Season 18 league 2, final results

Final standings


Booot and Pedone promote to league 1. Both engines led the league without loss after the first half. In the second half Booot increased its lead despite losing a game to Winter, Pedone remained without loss but only had one win in the second half. Winter had  +3 performance in the second half of the league and it caught up with Pedone in the last round, but Pedone had a head-to-head tiebreak advantage that ensured its promotion.

Demolito and Gogobello relegate back to league 3. As in league 3 the two engines that promoted from a lower league are relegated back. Gogobello was at the bottom of the league from the start, though it managed a win in the second half. It seemed Demolito would survive the league, Nemorino was in 9th place with a crash tiebreak handicap. In the second half Demolito lost more games, it was still 0.5 points ahead of Nemorino entering the last round. However Nemorino beat ChessBrain in its last game and Demolito lost in the very last game of the league, and they switched places.

Both the promotion and relegation races turned out to be very close in this league, and both were decided in the last round.

The engines to play in league1:
Played in season 17 premier league: Fire, ScorpioNN
Played in season 17 CPU league 1 - DefenChess, Rubichess, rofChade, Xiphos, Arasan
Missed season 17 due to crashes - Fritz
Promoted from league 2 - Booot, Pedone

Notable games

Game 2, Pedone - Demolito: Pedone gave two rooks for three minor pieces, then created a passer and pushed it to the 7th rank. Demolito gave a rook for a knight to capture the passer, the BN vs R ending was a win for white.
Game 4, Winter - ChessBrain: The game reached a RB vs RBN position, white 3 pawns up. Winter created connected passers, ChessBrain captured one and lost its bishop. Winter slowly outplayed ChessBrain, it was 3 pawns up in a rook ending when the game was adjudicated.
Game 13, Winter - Demolito: The engines played a RB vs RN ending for a many moves, Winter was a pawn up but the game seemed to be heading for a draw. Demolito went wrong somewhere, Winter managed to push a pawn forward and Demolito eventually traded a rook for it and lost the game.
Game 15, Booot - ChessBrain: Booot pushed a passer to the 7th rank in a RRB vs RRB position. After exchanging a pair of rooks ChessBrain blundered, Booot slowly brought its king forward to support the passer. This forced a trade of a rook for the passer giving Booot the win.
Game 17, Chiron - Booot: Booot was up a pawn early with a pawn majority on the king side. The game reached a RBN vs RBN position and ended after Chiron lost a bishop for a pawn.
Game 18, Demolito - Wasp: Demolito missed a win in a RB vs RN ending.
Game 20, Pedone - Nemorino: Nemorino blundered in a RB vs RB position, allowing Pedone to reduce to a winning rook ending.
Game 22, Winter - Pedone: Pedone opened files, went a pawn up and took the initiative. Winter held on for a while, but a combination of an advanced passer and an attack on the white king caused the defense to collapse.
Game 28, Vajolet - Booot: Booot gave a rook for a bishop and slowly developed a strong attack on the white king. Too many white pieces were stuck on the queen side, Vajolet began losing material and the game was adjudicated.
Game 29, Pedone - Wasp: Pedone pushed the black pieces back, then reduced to a QRN vs QRN position. Wasp captured the black knight through an attack on the king, leading to a winning RN vs R ending.
Game 30, Nemorino - Winter: Winter played a RR vs RBN ending better. The black king moved forward and created back rank threats, Nemorino lost material and the game.
Game 32, Wasp - Nemorino: Wasp was up a pawn in a QRR vs QRR position, with a pair of connected passers. Nemorino gave a pawn and pushed a passer to the 2nd rank, the double rook ending was a win for white.
Game 35, Chiron - Demolito: Demolito created an advanced passer on the queen side early in the game. Then it opened the king side and attacked the white king. Chiron couldn't handle both threats, the game was adjudicate before Demolito won material.
Game 37, Vajolet - Chiron: Vajolet chose a Q vs BBN imbalace early in the game. The white queen moved forward and captured pawns, Chiron captured a rook for a bishop, an attack on the white king led to more material gain for the win.
Game 39, Nemorino - Booot: Nemorino was up a rook for a bishop, in a QRR vs QRB position Booot had a passer and the white king was vulnerable on the long diagonal. Booot created a connected pair of passers on the other side and the white defense collapsed. Nemorino also crashed instead of resigning.
Game 40, Winter - Wasp: Winter gave pawns to open the king side, then regained the pawns. The black pawn structure was weak, after some preparations Winter reduced to a winning rook ending.

Scores after 9 rounds: Booot Pedone +5, Winter +3, Wasp Chiron 0, Vajolet Demolito -1, ChessBrain -2, Nemorino -3, Gogobello -6. Booot and Pedone are leading the table, both without loss. Winter is not far behind. At the bottom Gogobello is on its way to relegate back to league 3. The second relegation spot is still contested.

Game 50, Booot - Wasp: Booot outplayed Wasp in a QRB vs QRB position. The black king was exposed and there were more pawn targets for Booot. Wasp held on for a while but eventually its king fell in a mating net.
Game 54, Nemorino - Demolito: Nemorino traded RB for Q and a few moves later saw it was a bad idea. The game reached a Q vs RN ending, Demolito was two pawns up with an advanced passer. Demolito promoted a pawn before the game was adjudicated.
Game 58, Demolito - Winter: Demolito gave a rook to get rid of an advanced passer and a strong bishop. Winter used the white king's vulnerability to reduce to a winning N vs R ending.
Game 59, Chiron - Wasp: After 80 moves of mostly shuffling the position opened up. Chiron pushed a passer to the 6th rank in a RRB vs RRN position, Wasp gave a rook for a bishop to get rid of it. The R vs N ending was a win for white.
Game 61, ChessBrain - Gogobello: ChessBrain gave a rook for a bishop early in the game, without getting anything out of it. The game reached a BB vs RN position, after trading a few pawns Gogobello created a passer. The white bishops couldn't stop the black king moving forward for support, the game ended in a tablebase win for black. First win in the league for Gogobello.
Game 62, Booot - Chiron: The black king was vulnerable on light squares and Booot slowly developed a king side attack. Chiron's queen side passer was a weak counter, Booot started to gain material and the game was adjudicated.
Game 63, Wasp - Demolito: Wasp had connected passers in the center, Demolito gave a bishop to remove them. The game reached a RBB vs RN position, black 3 pawns up. The white pieces were stronger, Wasp trapped the black rook and captured it for a bishop, the material advantage was enough for a win.
Game 64, Winter - Vajolet: Vajolet had weak pawns on the queen side, Winter captured one and reduced to a RB vs RB ending a pawn up. It took a while for Winter to capture a second pawn, create a passer and win.
Game 69, Demolito - Booot: In a RRB vs RRN position Demolito went 3 pawns up but because of a mate threat it had to give a rook for a knight. Booot moved its king forward and used the same mate threat to reduce to a winning B vs R ending.
Game 70, Chiron - ChessBrain: Chiron was up a pawn with a passer from the start, it gave away both of these and the game reduced to a BN vs NN position. ChessBrain took the initiative, created connected passers in the center and pushed them forward. Chiron gave two pawns to block the passers, and the game was adjudicated.

Scores after 14 rounds: Booot +8, Pedone +6, Winter +5, Chiron Vajolet Wasp -1, ChessBrain -2, Demolito -3, Nemorino -4, Gogobello -7. Booot leads with a 1 point gap to 2nd place, Winter got closer to Pedone, one of them will also promote. Pedone has a head-to-head tiebreak advantage over Winter. At the bottom Demolito changed places with ChessBrain, both are still in danger. Nemorino's crash means it loses any tiebreak.

Scores after 16 rounds: Booot +8, Pedone +6, Winter +5, Chiron Vajolet Wasp -1, ChessBrain -2, Demolito -3, Nemorino -4, Gogobello -7. No change in the table after 10 straight draws. Winter drew both Nemorino and Gogobello, missing a chance to move ahead. Pedone drew against Booot, and Demolito drew against ChessBrain.

Another round of draws in round 17. Demolito drew against Gogobello. One round to go, Pedone needs a draw to promote, Demolito needs a draw to be safe, Winter and Nemorino need wins.

Game 87, Winter - Booot: Winter went a pawn up and created a passer early in the game. The engines exchanged pieces and pawns until reaching a N vs B ending, Winter captured another pawn and two white passers were too many for Booot. Booot's first and only loss in the league, Winter keeps its hope alive.
Game 88, Nemorino - ChessBrain: ChessBrain gave a rook for a knight and pawn early in the game. Nemorino was better in a QR vs QB position, it took a while but Nemorino reduced to a winning R vs B ending. Nemorino has a chance to survive.
Game 89, Pedone - Chiron: Pedone was never in danger, the game ended in a draw. Pedone promotes by a tiebreak with Winter.
Game 90, Vajolet - Demolito: Demolito had a connected pair of passers on the queen side. Vajolet blocked them, created a central passer and reduced to a RRB vs RRN position. The white passer moved to the 7th rank supported by the rooks, Vajolet used it to reach a winning R vs N ending. With this loss Demolito is relegated, Nemorino is safe.

Sunday, May 17, 2020

Season 18 league 2 statistics

A summary statistics table of previous stages and seasons. 

Draw rate, wins


Final draw rate was 60.0%.


Game termination

The three most common game termination causes were:



31.1% - TCEC win rule

30.0% - SyzygyTB
27.8% - TCEC draw rule

There were one crash in the stage by Nemorino, in a lost position.

Moves per game


Median= 60.3
Average= 62.6

There were only 4 games longer than 100 moves, the longest was 167 moves (Winter - Gogobello, game 31, draw).

Time per game (hours)
  
Median= 1:01
Average= 1:00

Openings

There were 6-move book openings in this stage chosen by Cato. The first letter of the ECO codes was distributed as follows:


The engines had less freedom to choose the opening variant, 80.0% of the game pairs repeated the same ECO code twice, and 73.3% repeated the same opening variant. In all of the game pairs the ECO first letter was repeated twice.

Reverse pairs, wins


Reverse pairs, same moves



Pairs of reverse games diverged very quickly, 37.8% diverged immediately out of book, 68.9% of the pairs diverged at most after 1 move. The longest repeated sequence of moves was 9 plys (ChessBrain - Chiron games 25 and 70, Benko gambit main line, ChessBrain won as black)

Wednesday, May 13, 2020

Season 18 league 3, final results

Final standings


Demolito and Gogobello promote to league 2. Demolito led the table from the start, Gogobello was in the leading group but only in the last few rounds it reached 2nd place after it beat Demolito. Igel started well and was in second place, but only had one win in the second half of the league and lost its place.

Asymptote and Counter relegate back to the qualification league. Asymptote was no match for the engines in this league, Counter had a fighting chance to survive but it failed in the end. Counter is the only engine that did not win a single game in the league, even Asymptote had a win.

The engines to play in league 2:
- Played in league 1 in season 16, missed season 17: Booot, ChessBrain, Chiron 
- Played in CPU league 1 in season 17: Vajolet, Pedone, Nemorino, Winter
- Played in league 2 in season 17: Wasp
- Promoted from league 3: Demolito, Gogobello

Notable games

Game 3, iCE -Topple: iCE sacrificed a bishop for pawns to attack the black king, then reduced to a winning QN vs QB endgame.
Game 7, Gogobello - Pirarucu: Gogobello gave a rook for a knight to capture one of two connected black passers, Pirarucu reduced to a RN vs RR ending to win.
Game 10, Demolito - Minic: Demolito developed a strong king side attack that resulted in a QB vs RNN position. Demolito captured 2 pawns and its passers were enough to win.
Game 12, iCE - Demolito: iCE sacrificed a knight for pawns to attack the black king but the attack was too weak. The black king found shelter behind a white pawn, Demolito slowly exchanged pieces and an extra bishop was decisive in the endgame.
Game 22, Igel - Minic: Igel opened the king side and managed to get connected passers facing an exposed black king. Minic lost material to stop the attack and the game ended quickly.
Game 29, Minic - Pirarucu: The black queen moved forward and got trapped on the queen side, Minic opened the king side and moved a passer to the h6. The white king moved in front of the passer and threatened to promote. By the time Pirarucu freed its queen Minic was close to mating.
Game 30, iCE - Igel: iCE created a queen side passer which became more important as the engines exchanged pieces. In a RBN vs RBN position Igel's defense collapsed.
Game 32, Pirarucu - iCE: Pirarucu started a series of exchanges that led to a B vs BB ending with white 3 pawns up. However iCE stopped the white pawns and the bishop pair was enough to win with one black pawn left.
Game 33, Marvin - Minic: The black king moved forward in a closed RR vs RBB position. Minic created a passer and pushed it forward to finish the game.
Game 38, Minic - Gogobello: Gogobello was better in a RRB vs RNN position, with a strong pair of knights and an extra pawn. The black king came forward and Gogobello created connected passers to win.
Game 40, Igel - Pirarucu: When the position opened Igel had a passer on the 6th rank. Igel created a secon passer and reduced to a winning rook ending.
Game 43, Gogobello - iCE: The white queen went forward early, iCE gave a knight and attacked but was not strong enough. Gogobello found shelter for its king and was a rook up when the game ended.

Scores after 9 rounds: Demolito +4, Igel +2, Gogobello iCE +1, Minic Counter 0, Pirarucu  Marvin -1, Topple -2, Asymptote -4. Demolito is leading and Asymptote is last, both with a gap of 1 point to the closest engine. Other than that the field is quite close, with only 2 points separating 2nd and 9th place. In the middle of the table there is a contrast between drawish engines like Counter (9 draws) and Marvin (8 draws, 1 loss), and engines with many decisive games like Minic (3 wins, 3 losses) and iCE (3 wins, 2 losses).

Game 48, Topple - iCE: Topple trapped and captured a bishop for pawns, then iCE lost more material and reached a rook for pawns imbalance. The engines exchanged all pieces and the game ended quickly.
Game 53, Igel - Topple: Igel sacrificed a bishop and exposed the black king. Igel chased the black king all over the board, regaining the piece and more, until the game was adjudicated.
Game 54, iCE - Counter: iCE trapped a black bishop in the corner, then slowly exchanged pieces until only BN vs BB were left. In the end Counter gifted the trapped bishop and iCE had enough pawns to win.
Game 57, Demolito - iCE: Demolito traded its queen for two rooks, reaching a RRN vs QN position. Using a mate threat Demolito reduced to a winning knight ending.
Game 59, Topple - Pirarucu: Pirarucu blundered in a RRB vs RRN position. It couldn't stop Topple from promoting a passer, losing a rook and the game.
Game 69, Counter - Marvin: Counter was up a pawn while Marvin had more space and better pieces. The game reached a RN vs RR position, the black king moved forward and Marvin captured the knight. For reasons unknown Marvin shuffled for 30 moves before ending the game in a tablebase win.

Scores after 14 rounds: Demolito +6, Igel +3, Gogobello +2, Marvin +1, iCE Minic 0, Topple -1, Counter Pirarucu  -2, Asymptote -7. Demolito is likely to promote, Asymptote likely to relegate. The second promotion and relegation places are still undecided, 4 rounds to go.

Game 71, Topple - Asymptote: Asymptote gave a rook for a bishop and had two advanced passers in a RB vs RR position. It then gave one passer to regain material and reach a winning rook ending. First win for Asymptote in the league.
Game 72, Gogobello - Counter: Counter gave a rook for a knight and created a passer. Evals were low until Gogobello created a passer and started to push it forward. Counter managed to block the passer on the 7th rank, while Gogobello captured the black passer. The game ended in a RR vs RN position before Counter lost more material.
Game 78, Minic - Marvin: Minic was a pawn up in a RRN vs RRN position. Nothing happened for a while, then Minic reduced to a knight ending two pawns up, enough for a win.
Game 79, Demolito - Gogobello: The game reached a R vs NN imbalance early, white two pawns up. Gogobello created a central passer and increased pressure on the king side. Demolito's defense collapsed and it lost a rook and the game. First loss for Demolito in the league.

Scores after 16 rounds: Demolito +5, Gogobello +4, Igel +3, Minic +1, Marvin iCE 0, Topple Pirarucu  -2, Counter -3, Asymptote -6. Gogobello jumped to second place with two wins, one of them against Demolito. Igel still has a chance to promote as well. At the bottom Asymptote dragged Topple down with its first win, Pirarucu and Counter are also fighting against relegation.

In round 17 Counter couldn't convert in a Q vs RN endgame against Asymptote, while Topple survived against Demolito. Gogobello and Igel drew their games. No change in the table, one round to go.

Game 90, Demolito - Counter: Demolito opened the king side with its pawns, pushing a passer to h7 while the black king escaped to the center. Counter captured the passer but couldn't stop the white pieces without losing material, the game ended with Demolito 3 pawns up. 

Counter had a last chance of catching up with Pirarucu and Topple, it needed a win in its last game but it lost instead. No change in the table.

Tuesday, May 12, 2020

Season 18 league 3 statistics

A summary statistics table of previous stages and seasons. 

Draw rate, wins

 
Final draw rate was 65.6%.


Game termination

The three most common game termination causes were:


36.7% - TCEC draw rule
28.9% - TCEC win rule

18.9% - SyzygyTB


There were no crashes in the stage.

Moves per game

Median= 56.8
Average= 60.9

There were only 5 games longer than 100 moves, the longest was 156 moves (Counter - Igel, game 58, draw).

Time per game (hours)

Median= 1:02
Average= 1:00

Openings

There were 4-move book openings in this stage chosen by Cato. The first letter of the ECO codes was distributed as follows:



The engines had less freedom to choose the opening variant, 88.9% of the game pairs repeated the same ECO code twice, and 82.2% repeated the same opening variant. In all but one of the game pairs the ECO first letter was repeated twice.

Reverse pairs, wins


Reverse pairs, same moves
 
Pairs of reverse games diverged very quickly, 28.9% diverged immediately out of book, 66.7% of the pairs diverged at most after 1 move. The longest repeated sequence of moves was 14 plys (Demolito - Igel games 19 and 64, Queen's pawn game, two draws)

Saturday, May 9, 2020

Season 18 qualification league, final results


Final standings


Counter and Asymptote promote to league 3. The race for the top 2 spots was very close, 7 engines had a real chance to promote. The race was only concluded in the last round. There was a possibility of a 4-way tie at the top, but in the end Counter finished a clear first and Asymptote qualified with a tiebreak.

Losses of the bottom 3 engines accounted for most of the decisive games in the league. Weiss in particular lost 15 of 18 its games.

The qualification league was very tense, but there wasn't enough time to build up the excitement. One DRR and fast games, the league was over before we got to know the engines playing. The same will probably happen in the next few leagues.

The engines to compete in league 3:
- Played in league 2 in Season 17: Demolito, Minic, iCE, Igel, Pirarucu
- Played in the qualification league in season 17: Marvin, Gogobello, Topple
- Promotion from qualification league: Counter, Asymptote

Notable games

Game 2, FabChess - chess22k: chess22k attacked the exposed white king and won material. In a bishop vs pawns ending chess2k avoided stalemate and won with zugzwang.
Game 4, Asymptote - Monolith: The game reached a RB vs RB ending, Asymptote outplayed Monolith, captured the bishop and kept one pawn to win.
Game 5, Bagatur - ChessFighter: ChessFighter had a winning B vs N position with two pawns up, but it couldn't convert.
Game 8, Combusken - Asymptote: Combusken was up a knight for two pawns, it won the game without any pawns.
Game 10, Counter - FabChess: Counter converted a same color bishop ending.
Game 14, Bagatur - Combusken: Bagatur sacrificed a knight early and exposed the black king. It attacked the king, regained the piece and got a winning 3 pawn advantage.
Game 22, Asymptote - FabChess: FabChess played the RB vs RB ending better, capturing a pawn and creating a passer to win the game.
Game 27, chess22k - Monolith: The game reached a RN vs BN position, chess22k captured pawns to end the game.
Game 28, Counter - ChessFighter: Counter blundered when it captured a hanging pawn, then couldn't stop the black passers on the other side.
Game 42, ChessFighter - Asymptote: Asymptote blundered in the opening and lost a knight, ChessFighter slowly exchanged pieces until reaching a winning BN vs N endgame.
Game 45, chess22k - Counter: chess22k had a space advantage and Counter played defensively for 70 moves. When chess22k lost control of open files Counter turned the tables with a strong attack on the white back ranks. The board cleared, Counter created an advanced passer and ended the game in a winning RB vs RN ending.

Scores after 9 rounds: Counter +4, chess22k +3, FabChess ChessFighter +2, Monolith Combusken Asymptote +1, Tucano Bagatur -3, Weiss -8. The top of the table is still contested. The bottom is clearer, losses of the bottom three engines account for most of the decisive games.

Game 64, Asymptote - Counter: After no exchanges in the first 40 moves the position opened, and Asymptote started to capture black pawns. The game was adjudicated in a double rook ending with white 5 pawns up.
Game 67, FabChess - Asymptote: Asymptote was up a pawn early. In a QR vs QR position it seemed that FabChess could hold, but Asymptote reduced to a winning rook ending.
Game 69, chess22k - ChessFighter: chess22k played better in a QRN vs QRN position, it was able to force a RN for Q trade and the white queen was strong enough to win.

Scores after 14 rounds: Counter +5, chess22k +4, ChessFighter Monolith Asymptote +3, FabChess Combusken +2, Tucano -4, Bagatur -6, Weiss -12. With 4 rounds left there are 7 engines that have a chance of promoting. Asymptote still has to play the bottom 3 engines, the other contenders have at most one such game. The bottom 3 engines continue to lose games. Still many head to head games left within the top 7 engines. 

Game 72, Monolith - chess22k: Monolith was a pawn up in a RRB vs RRB position, then reduced to a double rook ending and captured a second pawn to win.
Game 73, ChessFighter - Counter: ChessFighter had a strong king side attack, then reduced to a winning same color bishop ending a pawn up.
Game 79, Counter - Monolith: After a balanced start in a QRN vs QRB position Counter used a king side attack to reduce to a N vs B ending 2 pawns up. One of the pawns was doubled but it was enough for a win.

Scores after 16 rounds: Counter +5, ChessFighter +4, Monolith chess22k Asymptote Combusken FabChess +3, Tucano -3, Bagatur -8, Weiss -13. The race is even closer, only a point of difference between first and seventh places. Counter is in the lead despite a loss to ChessFighter. Asymptote only got two draws against two weak engines.

Game 82, Combusken - Counter: Combusken blundered in what seemed like a drawn double rook ending, not far from a 50 move draw.
Game 83, Monolith - FabChess: Monolith was a pawn up, then reduced to a N vs B ending. The white pawns were out of the bishop's reach, Monolith captured a second pawn to end the game.
Game 84, ChessFighter - Tucano: ChessFighter reduced to a winning rook ending 2 pawns up, but it let Tocano hold, probably due to lack of tablebase support.

Scores at the top after 17 rounds: Counter +6, Monolith Asymptote ChessFighter +4, chess22k +3, Combusken FabChess +2. One round to go Counter has a one point lead, 3 engines fighting for the second spot and chess22k still with a small chance if it beats Counter in the last game.

Game 87, Asymptote - ChessFighter: When the position opened Asymptote was better, then ChessFighter let a white knight move to the 6th rank. Asymptote chased the black king until almost mate.

Asymptote won its last two games to reach second place. Monolith also won its last game but missed promotion due to a head-to-head tiebreak with Asymptote. The tiebreak situation could have been very compilcated if chess22k would have beaten Counter in the last game, creating a 4-way tie. However, the game ended in a draw and Counter kept its first place.

Season 18 qualification league statistics

A summary statistics table of previous stages and seasons. 

Draw rate, wins


Final draw rate was 41.1%.


Game termination

The three most common game termination causes were:

45.6% - TCEC win rule
21.1% - SyzygyTB
17.8% - TCEC draw rule

There were no crashes in the stage.

Moves per game

Median= 62
Average= 69.3

There were 11 games longer than 100 moves, the longest was 196 moves (Counter - Tucano, game 57, draw).

Time per game (hours)
  
Median= 1:05
Average= 1:05

Openings

There were 2-move book openings in this stage chosen by Cato. The first letter of the ECO codes was distributed as follows:
 
The engines had a lot of freedom to choose the opening variant. Only 62.2% of the game pairs repeated the same ECO code twice, and only 57.8% repeated the same opening variant. However, only in 4.4% of the game pairs the ECO first letter was not repeated twice.

Reverse pairs, wins

Reverse pairs, same moves 
 
Pairs of reverse games diverged very quickly, 44.4% diverged immediately out of book, 75.6% of the pairs diverged at most after 1 move. The longest repeated sequence of moves was 14 plys (ChessFighter - chess22k, games 24 and 69, Petrov classical attack, Marshall variation, chess22k won as white and drew as black) 

Tuesday, May 5, 2020

Season 18 starting

TCEC is back after a short cup event and a short break, Season 18 has started.

This season the hardware is ready from the start, CPU and GPU servers. The league format changed again. There will be a qualification league, and then leagues 3, 2 and 1, followed by the premier league and superfinal. The lower leagues will include 10 engines that will play one DRR, the premier league will include 8 engines that will play 3 DRRs. Two engines will promote and two engines will relegate between the leagues.

The orgranizers have decided in season 18 to allow only engines under active development to participate. I find this a bit disappointing. I have nothing against new engines and I'm in favor of improving them, but I think that we shouldn't throw away past achievments. If an engine reached its final form a year ago and it is still competitive, why should it not be allowed to compete? I can understand if there is a technical problem, such as hardware compatibility. Other than that I think an engine should play until it relegates out.

The engines playing in the qualification league are:

- Played in season 17: Counter, FabChess, Tucano, Asymptote, ChessFighter
- Returning after missing season 17: Bagatur, Monolith, chess22k
- New engines: Combusken,  Weiss