Hitting a wall at ~1860 Elo

Discussion of chess software programming and technical issues.

Moderator: Ras

User avatar
mvanthoor
Posts: 1784
Joined: Wed Jul 03, 2019 4:42 pm
Location: Netherlands
Full name: Marcel Vanthoor

Re: Hitting a wall at ~1860 Elo

Post by mvanthoor »

mar wrote: Thu Jun 03, 2021 1:20 am well, there's nothing special about the psq tables in "PeSTO" except that they're tuned.
PeSTO (the engine) is strong solely due to its superior search.

when I replaced my whole HCE with PSQ tables from PeSTO, I lost 200 elo immediately.
Obviously, as you removed all of your dynamic knowledge...
reaching 3k is really hard (those who claim otherwise are either liars or frauds :) - I'm like 30-40 elo away on single core (CCRL 40/15) - all I can say that you need both a very good search and eval to even think about reaching it. I can't imagine any 3k engine whose eval isn't tuned.
I know; my personal goal is 2895, to be able to defeat my long-time default chess engine Fritz 11 by proxy in a match :P (Currently I'm not using Fritz 11 as an engine anymore, but I still use the GUI...)
a good evaluation function is worth hundreds of elo, with PSQ only you lack basically everything that forms a decent evaluation function.
it's also important to understand which types of endgames are drawish and either avoid those or enter those (because even in midgame, the engine considers lots of simplifications at the tip of its search)
I hope to have a bit of an advantage here, because I'm a fairly decent chess player; i.e., it's probably easier for me to write a good evaluation, than to write a good search. (Without having to heavily research the topic.)
as for hitting a wall - nullmove and LMR should give you a massive elo boost, tuning your eval will give you a massive elo boost as well
Tuning, null move and LMR are on the agenda after killers, pvs, aw, and history :)

The "hitting the wall" was meant because of the fact that I added two functions to the engine which barely gained any Elo in a somewhat slower gauntlet, but as said: I think Niels nailed it. The slower gauntlet has MUCH longer searches, obviously, and having no bounds on the history (and also increasing it unnecessarily in the alpha region) probably messed up the move ordering. That would negate much of the speed increase given by other functions.

As I merged everything into master already (because the additions did work in the hyper-fast test), I just disabled everything but the killer moves, and I'm going to re-test again and re-add / rewrite per function.
Author of Rustic, an engine written in Rust.
Releases | Code | Docs | Progress | CCRL
mar
Posts: 2667
Joined: Fri Nov 26, 2010 2:00 pm
Location: Czech Republic
Full name: Martin Sedlak

Re: Hitting a wall at ~1860 Elo

Post by mar »

mvanthoor wrote: Thu Jun 03, 2021 1:41 am I know; my personal goal is 2895, to be able to defeat my long-time default chess engine Fritz 11 by proxy in a match :P (Currently I'm not using Fritz 11 as an engine anymore, but I still use the GUI...)
well, 2895 is a curious goal :) even if the engine is on par elo-wise against other opponents, it doesn't mean it will beat Fritz 11 head to head.
typically engines score better against some programs and worse against others close in rating
Uri Blass
Posts: 10909
Joined: Thu Mar 09, 2006 12:37 am
Location: Tel-Aviv Israel

Re: Hitting a wall at ~1860 Elo

Post by Uri Blass »

mar wrote: Thu Jun 03, 2021 1:20 am
mvanthoor wrote: Thu Jun 03, 2021 12:24 am
emadsen wrote: Thu Jun 03, 2021 12:18 am I wouldn't characterize PESTO as containing "massive" positional knowledge. There's nothing magical about PESTO PSTs. I really don't understand the attention they get. Perhaps for a virgin engine, without sensible PSTs, adding PESTO significantly improves playing strength. But for a mature engine with PSTs calcuated from advancement, centrality, and corner-avoidance, calibrated via Texel tuning to ensure harmony with other eval params, PESTO adds nothing.
You're right of course, but compared to an engine that has only one set of hand-written PST's, the PeSTO-tables do contain a massive amount of positional knowledge. They get so much attention just _because_ of the fact that they are well tuned. You can just plug them into your engine (along with the mechanics of a tapered evaluation obviously), and you can expect a ~250-300 point Elo boost. That's why they're "magical".

I prefer to create my own "PeSTO" tables though :)
well, there's nothing special about the psq tables in "PeSTO" except that they're tuned.
PeSTO (the engine) is strong solely due to its superior search.

when I replaced my whole HCE with PSQ tables from PeSTO, I lost 200 elo immediately.

reaching 3k is really hard (those who claim otherwise are either liars or frauds :) - I'm like 30-40 elo away on single core (CCRL 40/15) - all I can say that you need both a very good search and eval to even think about reaching it. I can't imagine any 3k engine whose eval isn't tuned.

a good evaluation function is worth hundreds of elo, with PSQ only you lack basically everything that forms a decent evaluation function.
it's also important to understand which types of endgames are drawish and either avoid those or enter those (because even in midgame, the engine considers lots of simplifications at the tip of its search)

as for hitting a wall - nullmove and LMR should give you a massive elo boost, tuning your eval will give you a massive elo boost as well
I believe that it is possible to achieve 3000 elo with good search and evaluation that is not tuned.

I do not believe that a logical untuned evaluation that include mobility passed pawns and king safety can be worse than PeSTO tuned evaluation.
mar
Posts: 2667
Joined: Fri Nov 26, 2010 2:00 pm
Location: Czech Republic
Full name: Martin Sedlak

Re: Hitting a wall at ~1860 Elo

Post by mar »

Uri Blass wrote: Thu Jun 03, 2021 10:46 am I believe that it is possible to achieve 3000 elo with good search and evaluation that is not tuned.

I do not believe that a logical untuned evaluation that include mobility passed pawns and king safety can be worse than PeSTO tuned evaluation.
maybe - if you copy-paste a top 20 engine's search, but that misses the point I was trying to make
Koivisto
Posts: 56
Joined: Fri Sep 04, 2020 10:30 pm
Full name: Kim Kahre

Re: Hitting a wall at ~1860 Elo

Post by Koivisto »

mvanthoor wrote: Thu Jun 03, 2021 1:41 am
mar wrote: Thu Jun 03, 2021 1:20 am well, there's nothing special about the psq tables in "PeSTO" except that they're tuned.
PeSTO (the engine) is strong solely due to its superior search.

when I replaced my whole HCE with PSQ tables from PeSTO, I lost 200 elo immediately.
a good evaluation function is worth hundreds of elo, with PSQ only you lack basically everything that forms a decent evaluation function.
it's also important to understand which types of endgames are drawish and either avoid those or enter those (because even in midgame, the engine considers lots of simplifications at the tip of its search)
I hope to have a bit of an advantage here, because I'm a fairly decent chess player; i.e., it's probably easier for me to write a good evaluation, than to write a good search. (Without having to heavily research the topic.)
From experience I'd say beeing a decent chess player is way way way less important than a solid bugfree and well tuned implementation. In general I'd say there is a very strong correlation between people looking at top 20 (well top 5 really) engine code and elo - don't take the elo race too seriously.

love & waffles :)
User avatar
lithander
Posts: 915
Joined: Sun Dec 27, 2020 2:40 am
Location: Bremen, Germany
Full name: Thomas Jahn

Re: Hitting a wall at ~1860 Elo

Post by lithander »

Koivisto wrote: Thu Jun 03, 2021 3:05 pm From experience I'd say beeing a decent chess player is way way way less important than a solid bugfree and well tuned implementation.
That matches my experience. It was liberating when I realized that I don't have to hand-craft my evaluation. Instead you can just prepare a few tables like PSTs and have an auto-tuning algorithm find the correct numbers for you. The tables will encode knowledge that you don't need to have. Maybe you even learn something! ;) (because a lot of the numbers make sense retrospectively)

This is not limitted to PSTs I just added another tuned "lookup table" that results in the engine getting an idea of terms like mobility and pawn structure, threatening and guarding valuable pieces etc...

And in the end NNUE is also the same thing: As long as you have the programming knowledge and good training data you can make something like that work without being a good chess player.
Koivisto wrote: Thu Jun 03, 2021 3:05 pm In general I'd say there is a very strong correlation between people looking at top 20 (well top 5 really) engine code and elo - don't take the elo race too seriously.
If you don't want look at other engine's source code or if you try to be original or even both you'll end up in different part of the ranking list for sure but still you'll care about ELO. At least I do. Otherwise how could you make sure that your new features work? That you are not just adding code but indeed developing your engine towards stronger play?

Btw my personal goal is the 2000 ELO barrier. And I wanted to reach that with as simple code as possible... I aim for around 700 LOC. Then I'll slap a version 1.0 on MinimalChess and call it done! ;)
Minimal Chess (simple, open source, C#) - Youtube & Github
Leorik (competitive, in active development, C#) - Github & Lichess
User avatar
mvanthoor
Posts: 1784
Joined: Wed Jul 03, 2019 4:42 pm
Location: Netherlands
Full name: Marcel Vanthoor

Re: Hitting a wall at ~1860 Elo

Post by mvanthoor »

lithander wrote: Thu Jun 03, 2021 3:48 pm That matches my experience. It was liberating when I realized that I don't have to hand-craft my evaluation. Instead you can just prepare a few tables like PSTs and have an auto-tuning algorithm find the correct numbers for you. The tables will encode knowledge that you don't need to have. Maybe you even learn something! ;) (because a lot of the numbers make sense retrospectively)

This is not limitted to PSTs I just added another tuned "lookup table" that results in the engine getting an idea of terms like mobility and pawn structure, threatening and guarding valuable pieces etc...

And in the end NNUE is also the same thing: As long as you have the programming knowledge and good training data you can make something like that work without being a good chess player.
Yes, but when your a somewhat decent chess player, you can see if your engine is playing to expectation, and you can identify weak points for which you can then create an evaluation term.
Koivisto wrote: Thu Jun 03, 2021 3:05 pm If you don't want look at other engine's source code or if you try to be original or even both you'll end up in different part of the ranking list for sure but still you'll care about ELO. At least I do. Otherwise how could you make sure that your new features work? That you are not just adding code but indeed developing your engine towards stronger play?
That's the reason why Rustic takes so long to write. I'm not just following a tutorial or snatching code. I'm not even reading code (except for what I may encounter in an explanation somewhere). I try to understand the concepts so well that I can write my own code, and can then explain to others how this works; without copy/pasting explanations from somewhere else.

I'm writing Rustic not only to be strong, but also to really _understand_ all the concepts... finally. (I've known the basics for 25 years, but my knowledge was clearly sketchy and not up to date anymore.)
Btw my personal goal is the 2000 ELO barrier. And I wanted to reach that with as simple code as possible... I aim for around 700 LOC. Then I'll slap a version 1.0 on MinimalChess and call it done! ;)
And then you'll have to write another engine, because if you quit, I might be... angry. (Read that in Worf's voice. :lol: )
Author of Rustic, an engine written in Rust.
Releases | Code | Docs | Progress | CCRL
JohnWoe
Posts: 529
Joined: Sat Mar 02, 2013 11:31 pm

Re: Hitting a wall at ~1860 Elo

Post by JohnWoe »

I like to watch my engine to play instead of watching some cutechess numbers.
I know better what to tune if smt is wrong.
Adding LMR + Null Move will give a massive boost. These are pretty much my only pruning methods.

Adding smt like KPK egtb to a chess engine is like putting in golf. It just needs to be there. Even if it doesn't show +ELO in cutechess SPRT testing...
abulmo2
Posts: 479
Joined: Fri Dec 16, 2016 11:04 am
Location: France
Full name: Richard Delorme

Re: Hitting a wall at ~1860 Elo

Post by abulmo2 »

mvanthoor wrote: Wed Jun 02, 2021 2:15 pm killer moves: +45 Elo
history: 0 Elo
aspiration window: 0 Elo
I try to remove these features from Dumb and got this:

Code: Select all

   # PLAYER                : RATING  ERROR   POINTS  PLAYED    (%)
   1 dumb                  :    0.0   ----   1847.0    3000   61.6%
   2 dumb-no_killer        :  -17.0   10.7   1755.0    3000   58.5%
   3 dumb-no_aspiration    :  -73.4   10.5   1445.0    3000   48.2%
   4 dumb-no_history       : -165.1   11.5    953.0    3000   31.8%
Richard Delorme
User avatar
mvanthoor
Posts: 1784
Joined: Wed Jul 03, 2019 4:42 pm
Location: Netherlands
Full name: Marcel Vanthoor

Re: Hitting a wall at ~1860 Elo

Post by mvanthoor »

abulmo2 wrote: Fri Jun 04, 2021 6:48 am
mvanthoor wrote: Wed Jun 02, 2021 2:15 pm killer moves: +45 Elo
history: 0 Elo
aspiration window: 0 Elo
I try to remove these features from Dumb and got this:

Code: Select all

   # PLAYER                : RATING  ERROR   POINTS  PLAYED    (%)
   1 dumb                  :    0.0   ----   1847.0    3000   61.6%
   2 dumb-no_killer        :  -17.0   10.7   1755.0    3000   58.5%
   3 dumb-no_aspiration    :  -73.4   10.5   1445.0    3000   48.2%
   4 dumb-no_history       : -165.1   11.5    953.0    3000   31.8%
Wow. So when you remove killers, dumb drops by 17 Elo... and then when you remove aspiration windows it drops to -73, and without history, it drops to -165? History gives your engine about 90 Elo if you put it on top of killers+aspiration?
Author of Rustic, an engine written in Rust.
Releases | Code | Docs | Progress | CCRL