What is the purpose of chess engines?
Posted: Sat Nov 16, 2019 5:21 pm
In LCZero we basically optimize for one metric: strength of the engine, measured as Elo rating compared to other engines and older version of itself, for games starting from startpos. While maximizing Elo seems like an obvious and pure goal, it may not be fully aligned with purpose of an engine.
So the question is: what the purpose of the engine is (both Lc0 and in general)? What are chess engines used for?
I’m not a chess player and don’t really understand know how exactly chess engines are used by humans.
I guess understanding of the usage would help adding some direction to the project.
So, here is a list of uses of chess engines that I can think of:
1. To participate in TCEC / CCCC / other competitions.
That one is the one I understand. And despite saying that we don’t optimize for competitions, this is what our current metrics aligned with the most.
What features would be useful if we wanted to optimize for that? Probably something like:
- Training on popular openings (e.g. KGA; it’s not possible to force LCZero to play KGA in some “automated” way. All our attempts to pick more diverse openings so that includes KGA made it also include openings like 1. Nh3 f6).
- Try to encourage more entertainment style (as competitions are for viewers more than for result tables).
- Training against specific opponents?
2. To play against humans.
That’s also understandable. Traditionally, people don’t like to play against engines, but supposedly LCZero has different kind of mistakes and is fun to play against.
It seems that to support this case better, we need to have pre-set set of configurations for different levels, maybe some variety of online bots, but for the engine itself I guess functionality is already there, just not exposed enough.
3. To help correspondence chess players.
Here it’s already vague. As far as I understand, correspondence chess nowadays is kind of the same as computer chess, so it has roughly the same requirements, namely to win more games against very strong opponents. Optimizations would include:
- Scale better and support very long thinking times (e.g. days on high-end hardware)
- Anything else?
4. To analyze your games.
Here is where I start to not understand it. Do you need more than one engine to do that? I assume people do many mistakes anyway, and those are much larger than subtleties between engines, so do people really need anything above lichess-level analysis?
It would be nice for an engine e.g. to be able to show not only which player stays better in a given position, but also why is the position good/bad, but we are not there yet. But that’s something to think about.
5. To assist opening preparation.
That I have no clue at all. Do I understand correctly that it’s mostly top GMs who use engines to find novelties, others mostly do opening preparation by looking at opening stats rather than engine?
And how exactly it happens? A person puts some “novelty” sequence and then starts an engine to see if there is an easily findable refutation? Or setting a “non-novelty” position and starts engine hoping that one of “novelty” moves will show up near the top? And then looks what is the possible answers and how to react on them?
Do they put engines overnight to calculate some positions or do they only keep it running for a few minutes? Is there any real benefit of using more than one engine? Is there any engine-driven preparation outside of openings (exact middlegame position will not occur, but maybe it’s useful to analyze example of some position “types”)?
So, my questions:
1. Is there anything I miss/got wrong in the list above?
2. Which of the use cases do you think are the most useful / used by the most people / should be a top priority for chess engine development? (Lc0 in particular, but other engines too).
3. How do you personally use chess engines?
So the question is: what the purpose of the engine is (both Lc0 and in general)? What are chess engines used for?
I’m not a chess player and don’t really understand know how exactly chess engines are used by humans.
I guess understanding of the usage would help adding some direction to the project.
So, here is a list of uses of chess engines that I can think of:
1. To participate in TCEC / CCCC / other competitions.
That one is the one I understand. And despite saying that we don’t optimize for competitions, this is what our current metrics aligned with the most.
What features would be useful if we wanted to optimize for that? Probably something like:
- Training on popular openings (e.g. KGA; it’s not possible to force LCZero to play KGA in some “automated” way. All our attempts to pick more diverse openings so that includes KGA made it also include openings like 1. Nh3 f6).
- Try to encourage more entertainment style (as competitions are for viewers more than for result tables).
- Training against specific opponents?
2. To play against humans.
That’s also understandable. Traditionally, people don’t like to play against engines, but supposedly LCZero has different kind of mistakes and is fun to play against.
It seems that to support this case better, we need to have pre-set set of configurations for different levels, maybe some variety of online bots, but for the engine itself I guess functionality is already there, just not exposed enough.
3. To help correspondence chess players.
Here it’s already vague. As far as I understand, correspondence chess nowadays is kind of the same as computer chess, so it has roughly the same requirements, namely to win more games against very strong opponents. Optimizations would include:
- Scale better and support very long thinking times (e.g. days on high-end hardware)
- Anything else?
4. To analyze your games.
Here is where I start to not understand it. Do you need more than one engine to do that? I assume people do many mistakes anyway, and those are much larger than subtleties between engines, so do people really need anything above lichess-level analysis?
It would be nice for an engine e.g. to be able to show not only which player stays better in a given position, but also why is the position good/bad, but we are not there yet. But that’s something to think about.
5. To assist opening preparation.
That I have no clue at all. Do I understand correctly that it’s mostly top GMs who use engines to find novelties, others mostly do opening preparation by looking at opening stats rather than engine?
And how exactly it happens? A person puts some “novelty” sequence and then starts an engine to see if there is an easily findable refutation? Or setting a “non-novelty” position and starts engine hoping that one of “novelty” moves will show up near the top? And then looks what is the possible answers and how to react on them?
Do they put engines overnight to calculate some positions or do they only keep it running for a few minutes? Is there any real benefit of using more than one engine? Is there any engine-driven preparation outside of openings (exact middlegame position will not occur, but maybe it’s useful to analyze example of some position “types”)?
So, my questions:
1. Is there anything I miss/got wrong in the list above?
2. Which of the use cases do you think are the most useful / used by the most people / should be a top priority for chess engine development? (Lc0 in particular, but other engines too).
3. How do you personally use chess engines?