What would be the Elo rating of a computer which plays all optimal moves?
By playing all optimal moves, I mean that it always wins if possible, or else draws if that is the best result possible.
ELO is not an absolute measurement; it is only meaningful relevant to the ELOs of other players. This is because it is only calculated based on performance against other rated players. The "Maximum ELO", which seems to be what you're looking for, is therefore equal to the ELO of a player at such a time when his ELO is so high that he cannot gain any ELO points for defeating the second-highest-rated player.
The answer to your question, then, relies on at least the following two questions:
What is the highest-rated opponent that this theoretical machine could always defeat?
How much higher than that rating does an ELO need to be, in order not to gain any points from a victory?
The problem is this: if you play this machine against itself, the outcome is undefined. If we assume (since we don't know) that Chess is a fair game (Black and White have equal winning/drawing chances), then this machine can't raise its ELO indefinitely by repeatedly playing and defeating another version of itself, because it'll lose half the time and not get anywhere. So without hacking the system (see below), there is an upper bound somewhere.
What that upper bound is, however, is very fluid and somewhat ill-defined, because players' ratings are always in motion, and because rating systems are not equivalent. So to give you a value, let me make a couple of simplifying assumptions.
- "Perfect play" is always a victory. (If draws are possible with perfect play from one side, it doesn't change the endpoint, but it does make it take longer to reach the top).
- We use the FIDE ELO system, including the k-factor tiers (the k-factor will be 10 in the range we care about).
- FIDE only uses integer ELO values.
- The highest-rated opponent for this machine is Magnus Carlsen, currently rated at 2881.
- Magnus is willing and able to play against this machine as many times as needed for the machine to reach its peak ELO. Between games against the machine, Magnus will play other humans to regain his 2881 ELO rating.
Given these assumptions, the machine will max out at about 3351 ELO1, where if it wins, its ELO will increase by less than half a point (
+0.49 to 3351.49), which will be discarded (rounded down to
If a competitor achieves an ELO above 2881, than the upper bound increases. This fact allows us to pull the following (very silly) stunt, if we so choose:
- We have a machine that always wins.
- Presumably, we could build another one.
- We pit the machine against Magnus until it achieves FIDE ELO 3351.
- We disable perfect play on the machine (Machine 1). We set Machine 1 to always lose.
- We build another machine, Machine 2, and play it against Machine 1 until it cannot gain more ELO points.
- Repeat steps 4-5 with new machines ad nauseam to create a machine with an arbitrarily-high FIDE ELO.
1 I haven't done all the calculations myself by hand. I just plugged the appropriate numbers into this calculator. It's entirely possible that the formula used there differs from the current FIDE rules, but the basic premise is the same even if the numbers are inexact.
This is extremely hard to say, because the initial position is probably a draw. Besides playing perfectly, the computer also has to set problems for the opponent.
If the position is a draw, then there may be fifteen different moves that don't lose. The computer will have no reason to prefer one over another, so perhaps it'll just decide to drop a pawn or so knowing it can hold all the endgames. Why not?
This is already very obvious when trying to use tablebases to learn how to draw worse endgames. In, say, Rook + Bishop vs Rook, the computer (playing the stronger side) will sometimes just give away the rook or bishop!
"Perfect chess" is hard to define.
I suspect that current engines, that aim for a good position, would very often get superior positions against perfect engines. They would just never manage to actually win them, of course. Against human grandmasters with some experience playing the perfect table-based engines, I suspect that perfect engines would have a lower TPR than current engines.
The max rating of a system is going to depend on the details of the system and who the participants are. There's not just one "Elo" formula, and the details can be important.
Under FIDE ratings regulation 8.54, "A difference in rating of more than 400 points shall be counted for rating purposes as though it were a difference of 400 points." This allows a rating to become arbitrarily high, regardless of the strength of the opponents - you can always get at least one rating point by winning.
Under the USCF correspondence chess ratings system, "Rating differences that exceed 350 points are figured as 350 points." So, similar to the FIDE system, points could continue to be gained even with a large ratings difference, allowing a rating to become arbitrarily high.
However, under the USCF rating system for OTB play, ratings are stored as floating points instead of integers, and there isn't a maximum allowable difference listed, allowing someone to gain a fraction of a point for a win against someone far below them.
The question then becomes: how often could the human get a point off the computer? If the human could, on average, get one point every 10,001 games (either a win or two draws), the computer's rating would stabilize at 1600 points above the human. If the human could get a point every 1,001 games, the computer's rating would stabilize at 1200 points above.
And if this ever moved out of the theoretical, then once it became clear that this computer is perfect, GMs would begin to copy its moves, especially in the opening but probably going into what would ordinarily be the middlegame. I think we'd start seeing draws much more often once this happens - it's much easier to draw if you're essentially playing it against itself for the first 20 moves, and you know the line to that point isn't losing.
5200 ELO or greater, based on this: