Hacker News new | ask | show | jobs
by purplejacket 477 days ago
Here's a FEN of the famous position from the Spassky-Fischer world championship match where Fischer weirdly played Bxh2 on move 29 and Spassky went on to win the game:

5k2/pp4pp/4pp2/1P6/8/P2KP3/5PPb/2B5 w - - 0 30

Full PGN here:

[Event "Spassky - Fischer World Championship Match"] [Site "Reykjavik ISL"] [Date "1972.07.11"] [EventDate "?"] [Round "1"] [Result "1-0"] [White "Boris Spassky"] [Black "Robert James Fischer"] [ECO "E56"] [WhiteElo "?"] [BlackElo "?"] [PlyCount "111"]

1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Bb4 5. e3 O-O 6. Bd3 c5 7. O-O Nc6 8. a3 Ba5 9. Ne2 dxc4 10. Bxc4 Bb6 11. dxc5 Qxd1 12. Rxd1 Bxc5 13. b4 Be7 14. Bb2 Bd7 15. Rac1 Rfd8 16. Ned4 Nxd4 17. Nxd4 Ba4 18. Bb3 Bxb3 19. Nxb3 Rxd1+ 20. Rxd1 Rc8 21. Kf1 Kf8 22. Ke2 Ne4 23. Rc1 Rxc1 24. Bxc1 f6 25. Na5 Nd6 26. Kd3 Bd8 27. Nc4 Bc7 28. Nxd6 Bxd6 29. b5 Bxh2 30. g3 h5 31. Ke2 h4 32. Kf3 Ke7 33. Kg2 hxg3 34. fxg3 Bxg3 35. Kxg3 Kd6 36. a4 Kd5 37. Ba3 Ke4 38. Bc5 a6 39. b6 f5 40. Kh4 f4 41. exf4 Kxf4 42. Kh5 Kf5 43. Be3 Ke4 44. Bf2 Kf5 45. Bh4 e5 46. Bg5 e4 47. Be3 Kf6 48. Kg4 Ke5 49. Kg5 Kd5 50. Kf5 a5 51. Bf2 g5 52. Kxg5 Kc4 53. Kf5 Kb4 54. Kxe4 Kxa4 55. Kd5 Kb5 56. Kd6 1-0

5 comments

My father-in-law told me he watched that game live when he was a kid, and he just gasped when Fischer played Bxh2. (This is before engines or eval bars). Spassky did well to convert, but this is more about Fischer's mistake than Spassky.

This is the kind of blunder that you'd expect from a strong club player, not from Bobby Fischer. Although I understand that Fischer was brilliant but inconsistent, and to be fair, the last chess championship matches had a share of blunders.

It's almost a certainty Fischer didn't just "not notice" the bishop would be trapped, he just miscalculated further down the line (in fact if you plug it into an engine, it shows an equal evaluation)

It's one of the single biggest misconceptions ever, it gets repeated endlessly

> in fact if you plug it into an engine, it shows an equal evaluation

I don't think this is true, and engine evals aren't everything.

Two positions can have equal evaluations, but one can be trivial to play optimally and the other can be tricky and have a 10 move long sequence of "only moves" that are really hard to calculate. The latter is a much worse move, if you are not a chess engine.

Your last paragraph is the nicest capsule description of this very important and yet widely misunderstood computer chess concept I've seen. Thanks! I'm going to use this (probably poorly paraphrased due to my failing memory:).
I've often seen this described as the "sharpness" of a position
That’s reasonable, but the question we really want to know is how difficult it will be to equalize, which is a measure of both the number of equalizing moves and how difficult it is to find them. If the only moves are obvious, it’s not as bad as you might originally think.

In other words the correct calculation of subjective difficulty is a dot product, not simply a count of the number of equalizing moves.

Yah, I'm not saying that a way to figure out the "difficulty of position" is to simply count the number of "only moves" or a volatility measure. There's sometimes a sequence of obvious trades to make, and that's hardly a difficult position.

It's hard to capture "obvious". One metric is how far you need to look down the eval tree to know a move is good, but even that is flawed.

Yes, it would be hard to avoid stepping into the scope of psychology to truly answer the question, because what might be easy for you might not be for me, even if we had equal elo ratings. (Trivial example, we might have equal elos but I try out a new opening you normally play.) You can probably learn a function to give a reasonable estimate though.
Is there a chess metric that combines centipawns with a complexity metric?
you are replying to a comment that says "he miscalculated an equal position further down the line" and your point of objection is that he miscalculated an equal position further down the line?

still your move

You've not understood what is said.

If on move 29, you choose a move that is slightly worse but leave yourself in an extremely difficult position for you but an easy one for the other guy...

And then only on move 40 does the eval extremely diverge...

In my opinion, your real blunder was on move 29, not 40. Just because an engine could hold a position doesn't make it a reasonable move.

but that says nothing about what Fisher was thinking, so while your opinion is valid, it's not more valid than the comment you replied to, especially when your comment mimics the structure of his comment in the way I pointed out.
> in fact if you plug it into an engine, it shows an equal evaluation

This isn't true - that move takes the game from dead equal, to +0.7 (70 centipawns favor for Boris).

It isn't a total blunder but it's objectively a poor move.

A better engine or running the engine deeper will show 0.0 (or you need to show there are alternatives for White before 40... f4?!)

Though this may be a situation where the weaker engine is actually more helpful in assessing the practical situation: +0.7 is a better reflection of the relative chances in a human game than 0.0.

Interesting, I never knew that. Engine does give +0.6 to Spassky, so the move slightly made Fischer's position worse (https://lichess.org/study/Eyl4uwTZ/TUx5RZIk) and the engine thinks f4 (on move 40) was the blunder.

I'm not qualified to analyse this, I read into it a bit more and apparently he was trying to complicate the game, the 1973 tournament book only marks it as ?!.

> the engine thinks f4 (on move 40) was the blunder.

The engine knows what move would be a blunder for computer play.

It doesn't know what move made the position impossibly tricky for a human to maintain for black.

Every game that I analyze, there's possible moves where the computer will trade endless complexity for one's side for a couple centipawn advantage. These are moves that a human should not play.

It's difficult to convey why computer evaluations are not always a good measure for whether a move made by a human is good.

I think the main point is that computers are so much better than humans at playing chess that what might be a reasonable move for them is effectively a terrible blunder for a human. It's like comparing a student driver with an F1 pro, and saying, "It's totally reasonable for the student driver to yank the wheel to the right when driving at 300 km/h, because an F1 driver would be able to recover from that." The point is that the student driver won't be able to follow up with near-superhuman ability to save the situation.

Yes-- this is well put.

Of course, in this case, the engine doesn't think this is a particularly reasonable move; the evaluation just fails to show how bad it would be for a human-- even a near-superhuman chess player like prime Fischer-- to play.

> It's one of the single biggest misconceptions ever, it gets repeated endlessly

FM Roese here (best DWZ 2399). I agree, figuring or even conjecturing that Fischer overlooked 30.g3 is totally insane. However he also did not saw the theoretical draw, this strikes me even more off. He never opened up about his idea, so in all likelihood he calculated something very stupid.

> if you plug it into an engine, it shows an equal evaluation

They criticized this argument rightly, but many basically repeated your mistake in the process of doing so. All engines use some evolved adaption of iterative refinement, be it either "Iterative deepening" (of an alpha beta search) [1] or "UCT" [2]. If you post computer evaluations you should at the very least give the reported nominal search depth and the engine name and version, otherwise you are just asking for trouble. On computer chess fora [0] they often post the whole log file bluntly.

[0] https://www.talkchess.com/

[1] https://www.chessprogramming.org/Iterative_Deepening

[2] https://www.chessprogramming.org/UCT

Idk, I'm an amateur and that just looks like an obvious terrible move. I don't get it. What's to calculate?
I don't think it was purely a calculation error, it was probably also an intuitive evaluation. Bobby was trying to complicate the game and create an imbalance, where there were still winning chances if misplayed by spassky, but obviously it was a bad evaluation and it backfired. I think he was in a bit of a mood and got reckless. He had been making a lot of demands leading up to this and threats to not participate, probably got frustrated by the drawn endgame and took a big risk. I don't think he ever really opened up about his reasoning to be fair, but was asked along the lines of "were you trying to complicate the game" and he said "something like that". After losing those first two games he demanded the cameras to be removed from the playing hall and started to play really well against spassky, so possibly a psychological aspect from the cameras were also to blame. Maybe he knew he was throwing the game and it'd make for an entertaining match... the guy was sort of insane
Well Fischer wasn't an amateur and there's no evidence he just missed a one-move refutation
It still doesn't make any sense, even if he knew that the bishop was trapped. Black is the only side that can lose.
Maybe, and you can argue it was a bad practical choice, but the way it usually gets DESCRIBED is basically "Fischer missed bishop get trap lol". It's really braindead
See the board here on Lichess https://lichess.org/study/facg4YUQ/jnXlZXWo
Amazing game, thanks for sharing.
Game in BGN (https://moschetti.org/rants/bgnchess.html)

{"moves":[{"p":"P","f":"d2","t":"d4"},{"p":"n","f":"g8","t":"f6"},{"p":"P","f":"c2","t":"c4"},{"p":"p","f":"e7","t":"e6"},{"p":"N","f":"g1","t":"f3"},{"p":"p","f":"d7","t":"d5"},{"p":"N","f":"b1","t":"c3"},{"p":"b","f":"f8","t":"b4"},{"p":"P","f":"e2","t":"e3"},{"p":"k","f":"e8","t":"g8","castle":"K"},{"p":"B","f":"f1","t":"d3"},{"p":"p","f":"c7","t":"c5"},{"p":"K","f":"e1","t":"g1","castle":"K"},{"p":"n","f":"b8","t":"c6"},{"p":"P","f":"a2","t":"a3"},{"p":"b","f":"b4","t":"a5"},{"p":"N","f":"c3","t":"e2"},{"p":"p","f":"d5","t":"c4","x":"P"},{"p":"B","f":"d3","t":"c4","x":"p"},{"p":"b","f":"a5","t":"b6"},{"p":"P","f":"d4","t":"c5","x":"p"},{"p":"q","f":"d8","t":"d1","x":"Q"},{"p":"R","f":"f1","t":"d1","x":"q"},{"p":"b","f":"b6","t":"c5","x":"P"},{"p":"P","f":"b2","t":"b4"},{"p":"b","f":"c5","t":"e7"},{"p":"B","f":"c1","t":"b2"},{"p":"b","f":"c8","t":"d7"},{"p":"R","f":"a1","t":"c1"},{"p":"r","f":"f8","t":"d8"},{"p":"N","f":"e2","t":"d4"},{"p":"n","f":"c6","t":"d4","x":"N"},{"p":"N","f":"f3","t":"d4","x":"n"},{"p":"b","f":"d7","t":"a4"},{"p":"B","f":"c4","t":"b3"},{"p":"b","f":"a4","t":"b3","x":"B"},{"p":"N","f":"d4","t":"b3","x":"b"},{"p":"r","f":"d8","t":"d1","x":"R","c":1},{"p":"R","f":"c1","t":"d1","x":"r"},{"p":"r","f":"a8","t":"c8"},{"p":"K","f":"g1","t":"f1"},{"p":"k","f":"g8","t":"f8"},{"p":"K","f":"f1","t":"e2"},{"p":"n","f":"f6","t":"e4"},{"p":"R","f":"d1","t":"c1"},{"p":"r","f":"c8","t":"c1","x":"R"},{"p":"B","f":"b2","t":"c1","x":"r"},{"p":"p","f":"f7","t":"f6"},{"p":"N","f":"b3","t":"a5"},{"p":"n","f":"e4","t":"d6"},{"p":"K","f":"e2","t":"d3"},{"p":"b","f":"e7","t":"d8"},{"p":"N","f":"a5","t":"c4"},{"p":"b","f":"d8","t":"c7"},{"p":"N","f":"c4","t":"d6","x":"n"},{"p":"b","f":"c7","t":"d6","x":"N"},{"p":"P","f":"b4","t":"b5"},{"p":"b","f":"d6","t":"h2","x":"P"},{"p":"P","f":"g2","t":"g3"},{"p":"p","f":"h7","t":"h5"},{"p":"K","f":"d3","t":"e2"},{"p":"p","f":"h5","t":"h4"},{"p":"K","f":"e2","t":"f3"},{"p":"k","f":"f8","t":"e7"},{"p":"K","f":"f3","t":"g2"},{"p":"p","f":"h4","t":"g3","x":"P"},{"p":"P","f":"f2","t":"g3","x":"p"},{"p":"b","f":"h2","t":"g3","x":"P"},{"p":"K","f":"g2","t":"g3","x":"b"},{"p":"k","f":"e7","t":"d6"},{"p":"P","f":"a3","t":"a4"},{"p":"k","f":"d6","t":"d5"},{"p":"B","f":"c1","t":"a3"},{"p":"k","f":"d5","t":"e4"},{"p":"B","f":"a3","t":"c5"},{"p":"p","f":"a7","t":"a6"},{"p":"P","f":"b5","t":"b6"},{"p":"p","f":"f6","t":"f5"},{"p":"K","f":"g3","t":"h4"},{"p":"p","f":"f5","t":"f4"},{"p":"P","f":"e3","t":"f4","x":"p"},{"p":"k","f":"e4","t":"f4","x":"P"},{"p":"K","f":"h4","t":"h5"},{"p":"k","f":"f4","t":"f5"},{"p":"B","f":"c5","t":"e3"},{"p":"k","f":"f5","t":"e4"},{"p":"B","f":"e3","t":"f2"},{"p":"k","f":"e4","t":"f5"},{"p":"B","f":"f2","t":"h4"},{"p":"p","f":"e6","t":"e5"},{"p":"B","f":"h4","t":"g5"},{"p":"p","f":"e5","t":"e4"},{"p":"B","f":"g5","t":"e3"},{"p":"k","f":"f5","t":"f6"},{"p":"K","f":"h5","t":"g4"},{"p":"k","f":"f6","t":"e5"},{"p":"K","f":"g4","t":"g5"},{"p":"k","f":"e5","t":"d5"},{"p":"K","f":"g5","t":"f5"},{"p":"p","f":"a6","t":"a5"},{"p":"B","f":"e3","t":"f2"},{"p":"p","f":"g7","t":"g5"},{"p":"K","f":"f5","t":"g5","x":"p"},{"p":"k","f":"d5","t":"c4"},{"p":"K","f":"g5","t":"f5"},{"p":"k","f":"c4","t":"b4"},{"p":"K","f":"f5","t":"e4","x":"p"},{"p":"k","f":"b4","t":"a4","x":"P"},{"p":"K","f":"e4","t":"d5"},{"p":"k","f":"a4","t":"b5"},{"p":"K","f":"d5","t":"d6"}],"opening":{"ECO":"E56"},"site":"Reykjavik ISL","event":"Spassky-Fischer World Championship Match","result":"W","type":"C","players":[{"handle":{"domain":"UNK","value":"Boris Spassky"}},{"handle":{"domain":"UNK","value":"Robert James Fischer"}}]}

Why replace PGN, which any decent chess player can simply read and follow (1 e4 e5, 2 Nf3 Nf6…), or if needed play out on a chessboard, with such a huge, unparseable monstrosity?

PGN [1] already supports all the features of BGN. The only complaint of not having long algebraic notation can simply be added as a comment, maintaining the simple readability of PGN. And then it works with the extensive ecosystem of existing tools.

[1] https://en.wikipedia.org/wiki/Portable_Game_Notation

Well... it's actually more parseable. Human readability is not the primary goal of BGN. It's precise capture of information esp. things ending up in PGN comments like %eval and %clk
Again, if you need long algebraic, a single comment in a PGN stores it, it is smaller than your format, is still readable. And it could use a shorter, faster to parse, more cache friendly, format than inserting a soup of useless braces, colons, quote marks, and other clutter that simply makes BGN a complete mess to parse.

There may be a reason for zero downloads.

:-) You visited the site so props for that. But I find it odd you call the soup of braces, colons, and quotes a complete mess. That's JSON. As in industry standard everyone-uses-it JSON. If you're not familiar with the space I can see why PGN has more human readable appeal.
I've written some of the high perf JSON code used in industry, so I am well aware of it. A main reason companies (and me, and many others) work so hard on making high speed readers is to get them withing a fraction of the speed of reading many native formats.

For example, converting a 32 bit float to text for JSON, then parsing it back in later, is orders of magnitude slower than simply using the binary one. And in many languages it's not bit exact, so it creates a giant mess. I've worked on getting many projects that try to roundtrip floats correctly since the JSON layer was breaking projects (hint: C++ has precisely one, corner and rarely used, format/parse that promises to roundtrip, and this is not even guaranteed across compilers or systems or versions - only one compiler version. To do better you import your own Grisu or successor and implement tests to catch system errors.... or switch to hex format, which is much nicer). So yes, I have done tons of JSON, but I get called mostly to fix/remove/mitigate JSON since groups and people know I am the guy that fixes idiot-added JSON where it breaks things.

Next, JSON is also an order of magnitude bigger than many other formats. There's good reason AI models are not JSON, video is not JSON, etc. JSON slows down major pipelines because of the size increases and slowness of formatting and parsing compared to simply using a smarter format. Junior engineers love JSON because they don't understand the pros/cons and can jam it everywhere. Many projects I've been called in to speed up were slow due to "JSON all the things!".

Next, I've also written high performance chess engines (and all sorts of custom searching engines to do stuff like find proof games, do various things related to retrograde analysis, and construct richer data for endgame tables for my own analysis, some published...), with all the bells and whistles and bit tricks and used things like Z3 to invent better magic bitboard constants, which also improved state of the art there. So I also know that space.

Naming your format BGN for "Better Game" Notation (?) to replace PGN, when your format breaks pretty much every thing PGN was designed to be used for, and is widely used for, is simply ludicrous. It's not a better game notation - it's an unusable game notation. You want it to be a searchable, queryable format, of which many already exist, yet again yours is going to be orders of magnitude slower since you chose JSON, replacing at most bytes of chess move info with variable length (thus ensuring you cannot random access information but must parse the 1000+ characters before move 50 to see move 50...) 25+ to ~40 bytes each. Your format is simply a terrible data format, solving nothing.

And most big engines and certainly all big chess database software support all the major formats.

Did you look at either the motivation for PGN or for existing chess query supporting database format before you made this? Or in the intervening 5 years?

So I don't think you have improved anything over the previous technology. There's a reason you have zero downloads over 5 years.

Here's a hint: if you're going to make something claiming to be a better X, then you should reproduce what X was designed for, and then, and only then, add features.

> As in industry standard everyone-uses-it JSON

That's PGN. As in industry standard everyone-uses-it PGN. If you're not familiar with the space I can see why JSON has more human unreadable appeal.

Good luck getting to 1 download.