rooklift / nibbler

Chess analysis GUI for UCI engines, with extra features for Leela (Lc0) in particular.
GNU General Public License v3.0
577 stars 72 forks source link

PGN output does not show evaluation for all moves #274

Open CKingX opened 3 weeks ago

CKingX commented 3 weeks ago

Using LC0 has no issues. Using Stockfish 17 with autoevaluate, although it creates evaluation for all moves, the PGN output does not show evaluation for all moves. Here is the output (there is evaluation missing like for move 5 for black):

Using the latest version of Nibbler

[Event "Live Chess"]
[Site "Chess.com"]
[Date "2024.11.01"]
[Round "?"]
[White "redacted"]
[Black "redacted"]
[Result "0-1"]

1. e4 {EV: 55.5%, CP: +0.38} c6 2. Nc3 {EV: 54.4%, CP: +0.31} d5 {EV: 46.0%, CP:
+0.29} 3. Nf3 {EV: 53.0%, CP: +0.22} Bg4 {EV: 46.7%, CP: +0.25} 4. Be2 {EV:
53.5%, CP: +0.26} e6 {EV: 46.3%, CP: +0.27} 5. d4 {EV: 53.1%, CP: +0.23} Bxf3 6.
Bxf3 {EV: 57.9%, CP: +0.52} c5 7. O-O {EV: 99.1%, CP: +2.09} cxd4 {EV: 3.9%, CP:
+1.67} 8. Qxd4 {EV: 97.0%, CP: +1.74} Bd6 9. exd5 {EV: 99.9%, CP: +3.68} Nc6
{EV: 0.1%, CP: +4.06} 10. dxc6 {EV: 99.9%, CP: +4.77} Bxh2+ {EV: 4.7%, CP:
+1.53} 11. Kxh2 {EV: 96.0%, CP: +1.57} Qxd4 {EV: 6.3%, CP: +1.42} 12. Nb5 Qe5+
{EV: 99.9%, CP: -2.49} 13. Kg1 {EV: 0.1%, CP: -2.65} Qxb5 {EV: 99.9%, CP: -2.68}
14. cxb7 {EV: 0.1%, CP: -2.73} Rb8 {EV: 99.9%, CP: -2.74} 15. a4 {EV: 0.1%, CP:
-2.88} Qc5 16. c3 Qc7 {EV: 99.9%, CP: -3.41} 17. g3 {EV: 0.1%, CP: -3.68} Nf6
18. Bf4 {EV: 0.1%, CP: -3.33} e5 {EV: 99.9%, CP: -3.33} 19. Bxe5 {EV: 0.1%, CP:
-3.21} Qxe5 {EV: 99.9%, CP: -3.42} 20. Rae1 {EV: 0.1%, CP: -3.44} Qxe1 {EV:
99.9%, CP: -3.46} 21. Rxe1+ {EV: 0.1%, CP: -3.51} Kd7 {EV: 99.9%, CP: -3.26} 22.
g4 Rhe8 {EV: 99.9%, CP: -3.96} 23. Rd1+ {EV: 0.1%, CP: -3.95} Kc7 {EV: 99.9%,
CP: -3.96} 24. b4 {EV: 0.1%, CP: -4.01} a6 25. b5 {EV: 0.1%, CP: -3.30} axb5
{EV: 99.9%, CP: -3.89} 26. axb5 {EV: 0.1%, CP: -3.87} Nxg4 27. Bxg4 {EV: 2.6%,
CP: -1.49} Kxb7 {EV: 91.6%, CP: -1.27} 28. Rd7+ {EV: 8.5%, CP: -1.26} Kb6 {EV:
99.8%, CP: -1.89} 29. Rxf7 {EV: 0.2%, CP: -1.94} Rb7 {EV: 99.9%, CP: -2.64} 30.
Rf5 {EV: 0.1%, CP: -2.68} Re1+ {EV: 99.9%, CP: -2.77} 31. Kg2 {EV: 0.1%, CP:
-3.14} Rbe7 {EV: 99.9%, CP: -2.12} 32. c4 {EV: 0.1%, CP: -2.40} R1e5 33. Rf8
{EV: 1.2%, CP: -1.61} Rg5 {EV: 61.8%, CP: -0.81} 34. Kh3 {EV: 23.9%, CP: -1.01}
Re1 {EV: 78.8%, CP: -1.05} 35. f4 Rc5 {EV: 99.9%, CP: -2.25} 36. Rb8+ {EV: 0.1%,
CP: -2.40} Ka7 {EV: 99.9%, CP: -2.52} 37. Rh8 Rxc4 {EV: 99.9%, CP: -3.31} 38.
Rxh7 Rh1+ {EV: 99.9%, CP: -199.84} 0-1
rooklift commented 3 weeks ago

Interesting.

Note to self: If we say foo is the node in question, it seems foo.parent.table.moveinfo[foo.move].__touched is false in these cases, leading to the early return here: https://github.com/rooklift/nibbler/blob/master/files/src/renderer/51_node.js#L310-L312

rooklift commented 3 weeks ago

Ah, thinking about it, I think this is what happens when Stockfish never analysed the move that was actually played, at the position where it was an option.

Ideally it should be able to tell you about the value of the move by looking at the position that was actually reached. At this time I can't quite remember why it works the way it does.

CKingX commented 3 weeks ago

Thank you! It seems to show the score for all the moves in the graph and in the infobox image