Code: Select all
[Event "Arena 3.0 / Rybka 4. No evaluation/line for the last move 17. Rd8#"]
[Site "Paris (France)"]
[Date "1858"]
[White "Morphy Paul"]
[Black "Duke Karl Count Isouard"]
[Result "1-0"]
[Termination "normal"]
[PlyCount "33"]
[WhiteType "human"]
[BlackType "human"]
----- Error -------- Score IF This line was played
1. e4 . 0.03 0.20 e4.
.....e5 . 0.03 0.17 e7-e6 Nb1-c3
2. Nf3 o . 0.05 0.20 Ng1-f3 Nb8-c6 Bf1-b5 Ng8-f6
.....d6 xxx . 0.22 0.15 Nb8-c6 Nb1-c3 Ng8-f6 d2-d4 e5xd4 Nf3xd4 Bf8-b4 N
3. d4 . 0.00 0.37 d2-d4 e5xd4 Nf3xd4 c7-c5 Bf1-b5+ Bc8-d7 Bb5xd7+
.....Bg4 xxx . 0.18 0.40 e5xd4 Nf3xd4
4. dxe5 . 0.03 0.58 d4xe5 Nb8-d7 h2-h3 Bg4xf3
.....Bxf3 xxxx . 0.30 0.55 Nb8-d7 h2-h3 Bg4xf3 Qd1xf3 d6xe5 Nb1-c3 c7-c6 Bf
5. Qxf3 . 0.00 0.85 Qd1xf3 Nb8-d7 e5xd6 Bf8xd6 Nb1-c3 Ng8-f6 Bc1-f4
.....dxe5 x . 0.10 0.85 d6xe5 Bf1-c4 Qd8-f6 Nb1-c3 Qf6xf3 g2xf3 Nb8-c6 N
6. Bc4 . 0.04 0.95 Bf1-c4 Qd8-f6 Qf3-b3 Nb8-d7 Qb3xb7 Ra8-b8 Qb7-d5
.....Nf6 xxxxx. 0.56 0.91 Qd8-f6 Qf3-b3 Nb8-d7 Qb3xb7 Ra8-b8 Qb7-d5 Bf8-b4
7. Qb3 . 0.00 1.47 Qf3-b3 Bf8-c5 Bc4xf7+ Ke8-f8
.....Qe7 . 0.00 1.47 Bf8-c5 Bc4xf7+ Ke8-f8 Bf7-d5 Nb8-d7
8. Nc3 ooooo. 0.58 1.46 Qb3xb7 Qe7-b4+ Qb7xb4 Bf8xb4+ Ke1-e2 h7-h6 Rh1-d
.....c6 . 0.00 0.88 c7-c6 Bc1-g5 Nb8-a6 Bc4xa6 b7xa6 Bg5xf6 g7xf6 Qb
9. Bg5 . 0.00 0.88 Bc1-g5 Nb8-a6 Bc4xa6 b7xa6 Bg5xf6 g7xf6 Qb3-c4 Q
.....b5 xxxxxxx 1.35 0.98 Nb8-a6 Bc4xa6 b7xa6
10. Nxb5 . 0.00 2.33 Nc3xb5 Qe7-b4+ Qb3xb4 Bf8xb4+ c2-c3 c6xb5 Bc4xb5
.....cxb5 xxxxxxxxx 2.65 2.39 Qe7-b4+ Qb3xb4 Bf8xb4+ c2-c3 c6xb5 Bc4xb5+ Ke8-e
11. Bxb5+ . 0.00 5.04 Bc4xb5+ Ke8-d8
.....Nbd7 xxxxxx 0.79 5.04 Ke8-d8
12. O-O-O . 0.00 5.83 O-O-O Qe7-c5 Bg5xf6 g7xf6 Bb5xd7+ Ke8-e7 Kc1-b1
.....Rd8 xxxxx. 0.47 6.41 Qe7-c5 Bg5xf6 g7xf6 Bb5xd7+ Ke8-e7 Kc1-b1 Bf8-h6
13. Rxd7 . 0.00 6.88 Rd1xd7 Nf6xd7 Bg5xe7 Bf8xe7 Rh1-d1
.....Rxd7 xxxxxxx 1.49 6.88 Nf6xd7 Bg5xe7 Bf8xe7 Rh1-d1 h7-h6 Bb5xd7+ Rd8xd7
14. Rd1 . 0.00 8.37 Rh1-d1 Qe7-b4 Bg5xf6 g7xf6 Bb5xd7+ Ke8-d8 Bd7-c6
.....Qe6 xxxxxxxxxxxx 5.93 8.37 Qe7-b4 Bg5xf6 g7xf6 Bb5xd7+ Ke8-d8 Bd7-c6+ Kd8-c
15. Bxd7+ . 0.00 14.30 Bb5xd7+ Qe6xd7 Qb3-b8+ Ke8-e7 Qb8xe5+ Ke7-d8 Bg5
.....Nxd7 xxxxxxxxxxx 5.33 14.67 Qe6xd7 Qb3-b8+ Ke8-e7 Qb8xe5+ Ke7-d8 Bg5xf6+ g7x
16. Qb8+ . 0.00 20.00 Qb3-b8+ Nd7xb8 Rd1-d8+
.....Nxb8 . 0.00 20.00 Nd7xb8 Rd1-d8+
17. Rd8#
White Black
Total error 0.73 19.40
Evaluated moves 16 16
Error/move 0.046 1.212
Performancerating 3095
- positional (err<0.70) 3095 2160
* the moves
* the errors (the 'graphs' oooo/xxxx and the exact number)
* the score during the game
* the expected lines
the dotted line indicates where the errors are greater than 0.70 (tactical errors).
A mating sore is set to 20.
Finally there is a little attempt to estimate the players performancerating.
It is calculated from these fix-points:
avg.error=0.000000 gives rating=3400
avg.error=0.210000 gives rating=2000
avg.error=0.322400 gives rating=1500
avg.error=0.500000 gives rating=1105
The 'positional' performancerating is without the tactical errors.
With this you can fx
* see your performancerating if you had not made an error or two...
* see how you engines positionally play is...
The input is an analysed game saved in pgn-format like this.
Code: Select all
[Event "Arena 3.0 / Rybka 4. No evaluation/line for the last move 17. Rd8#"]
[Site "Paris (France)"]
[Date "1858"]
[White "Morphy Paul"]
[Black "Duke Karl Count Isouard"]
[Result "1-0"]
[Termination "normal"]
[PlyCount "33"]
[WhiteType "human"]
[BlackType "human"]
1. e4 {(e7-e6 Nb1-c3) +0.17/17 30} e5 {(Ng1-f3 Nb8-c6 Bf1-b5 Ng8-f6)
-0.20/17 30} 2. Nf3 {(Nb8-c6 Nb1-c3 Ng8-f6 d2-d4 e5xd4 Nf3xd4 Bf8-b4 Nd4xc6
b7xc6 Bf1-d3 d7-d5 e4xd5 c6xd5 Qd1-e2+ Bb4-e7) +0.15/17 30} d6 {(d2-d4
e5xd4 Nf3xd4 c7-c5 Bf1-b5+ Bc8-d7 Bb5xd7+ Qd8xd7 Nd4-f5 g7-g6 Nf5-e3
Nb8-c6) -0.37/17 30} 3. d4 {(e5xd4 Nf3xd4) +0.40/17 30} Bg4 {(d4xe5 Nb8-d7
h2-h3 Bg4xf3) -0.58/16 30} 4. dxe5 {(Nb8-d7 h2-h3 Bg4xf3 Qd1xf3 d6xe5
Nb1-c3 c7-c6 Bf1-e2 Ng8-f6) +0.55/17 30} Bxf3 {(Qd1xf3 Nb8-d7 e5xd6 Bf8xd6
Nb1-c3 Ng8-f6 Bc1-f4 Qd8-e7 Bf4xd6 Qe7xd6 Qf3-g3 Qd6xg3 h2xg3 Ra8-d8 Ra1-d1
c7-c6 Bf1-e2 Ke8-e7 f2-f4 h7-h5) -0.85/16 30} 5. Qxf3 {(d6xe5 Bf1-c4 Qd8-f6
Nb1-c3 Qf6xf3 g2xf3 Nb8-c6 Nc3-b5 Ra8-c8 Bc1-d2) +0.85/17 30} dxe5 {(Bf1-c4
Qd8-f6 Qf3-b3 Nb8-d7 Qb3xb7 Ra8-b8 Qb7-d5 Qf6-g6) -0.95/16 30} 6. Bc4
{(Qd8-f6 Qf3-b3 Nb8-d7 Qb3xb7 Ra8-b8 Qb7-d5 Bf8-b4+ c2-c3 Ng8-e7 Qd5-d3
Bb4-d6) +0.91/16 30} Nf6 {(Qf3-b3 Bf8-c5 Bc4xf7+ Ke8-f8) -1.47/16 30} 7.
Qb3 {(Bf8-c5 Bc4xf7+ Ke8-f8 Bf7-d5 Nb8-d7) +1.47/15 30} Qe7 {(Qb3xb7
Qe7-b4+ Qb7xb4 Bf8xb4+ Ke1-e2 h7-h6 Rh1-d1 Ke8-e7 Ke2-f3 Bb4-c5 c2-c3
Nb8-d7 b2-b4 Bc5-b6 a2-a3) -1.46/16 30} 8. Nc3 {(c7-c6 Bc1-g5 Nb8-a6 Bc4xa6
b7xa6 Bg5xf6 g7xf6 Qb3-c4 Qe7-b7) +0.88/16 30} c6 {(Bc1-g5 Nb8-a6 Bc4xa6
b7xa6 Bg5xf6 g7xf6 Qb3-c4 Qe7-b7) -0.88/15 30} 9. Bg5 {(Nb8-a6 Bc4xa6
b7xa6) +0.98/17 30} b5 {(Nc3xb5 Qe7-b4+ Qb3xb4 Bf8xb4+ c2-c3 c6xb5 Bc4xb5+
Ke8-e7 c3xb4) -2.33/17 30} 10. Nxb5 {(Qe7-b4+ Qb3xb4 Bf8xb4+ c2-c3 c6xb5
Bc4xb5+ Ke8-e7 c3xb4 Rh8-c8) +2.39/17 30} cxb5 {(Bc4xb5+ Ke8-d8) -5.04/12
30} 11. Bxb5+ {(Ke8-d8) +5.04/12 30} Nbd7 {(O-O-O Qe7-c5 Bg5xf6 g7xf6
Bb5xd7+ Ke8-e7 Kc1-b1 Bf8-h6 Rd1-d5 Ra8-b8 Rd5xc5 Rb8xb3 a2xb3 Ke7xd7
Rh1-d1+ Kd7-e6 Rc5-c6+ Ke6-e7 Rc6-c7+ Ke7-e6 Rd1-d7 Bh6-f8 Rd7xf7 Bf8-c5
f2-f3 h7-h5 Rf7-g7 Ke6-d6 Rg7-d7+ Kd6-e6 Rd7-d5) -5.83/14 30} 12. O-O-O
{(Qe7-c5 Bg5xf6 g7xf6 Bb5xd7+ Ke8-e7 Kc1-b1 Bf8-h6 Rd1-d5 Ra8-b8 Rd5xc5)
+6.41/16 30} Rd8 {(Rd1xd7 Nf6xd7 Bg5xe7 Bf8xe7 Rh1-d1) -6.88/12 30} 13.
Rxd7 {(Nf6xd7 Bg5xe7 Bf8xe7 Rh1-d1 h7-h6 Bb5xd7+ Rd8xd7 Qb3-a4 Be7-g5+
Kc1-b1) +6.88/13 30} Rxd7 {(Rh1-d1 Qe7-b4 Bg5xf6 g7xf6 Bb5xd7+ Ke8-d8
Bd7-c6+ Kd8-c7 Rd1-d7+ Kc7-c8 Qb3-h3 Bf8-h6+ Kc1-d1 Kc8-b8 Qh3xh6 Kb8-c8
Qh6xf6 Rh8-f8 Qf6-f5) -8.37/14 30} 14. Rd1 {(Qe7-b4 Bg5xf6 g7xf6 Bb5xd7+
Ke8-d8 Bd7-c6+ Kd8-c7 Rd1-d7+ Kc7-c8 Qb3-h3 Bf8-h6+ Kc1-d1) +8.37/13 30}
Qe6 {(Bb5xd7+ Qe6xd7 Qb3-b8+ Ke8-e7 Qb8xe5+ Ke7-d8 Bg5xf6+ g7xf6 Qe5xf6+
Kd8-c7 Rd1xd7+ Kc7xd7 Qf6xh8 Kd7-e8 Qh8xh7 Bf8-d6 h2-h4 a7-a5 Qh7-f5 a5-a4
e4-e5 Bd6-e7 Qf5-c8+ Be7-d8 Qc8-c6+ Ke8-f8 Qc6xa4 Bd8-e7 h4-h5 f7-f6
Qa4-f4) -14.30/14 30} 15. Bxd7+ {(Qe6xd7 Qb3-b8+ Ke8-e7 Qb8xe5+ Ke7-d8
Bg5xf6+ g7xf6) +14.67/15 30} Nxd7 {(Qb3-b8+ Nd7xb8 Rd1-d8+) -M2/16 30} 16.
Qb8+ {(Nd7xb8 Rd1-d8+) +M1/27 30} Nxb8 17. Rd8# 1-0
The order differs:
Arena 3.0/Rybka4 - line-score-move
Arena 1.1/Rybka4 - move-line-score
Winboard/Fruit.. - move-score-line
This has made my code a bit of a mess.
If I should redo it I would make 4 passes
1) get the info from the input-file and store it in arrays.
2) add the missing information and change sign of scores
3) calculate the errors
4) make the print-out.
I have tried to do it all in one pass....
Some other things often make it difficult:
1) there is no score/line for the starting position.
I have made +0.20/e4 the default
2) there is no score/line for forced moves.
I just copy the previous score/line.
3) there is no score in the final position.
without this the last move cannot be evaluated.
this score can be added manually.
I have mainly focused on Arena 3.0.
For Winboard I have only had a little testfile
(I am not sure if the sign of the scores are correct here)
The input for the analyses must be a clean pgn-file.
No comments, no variations etc.
My program ignores an empty {} in the output, that is all right now.
I have not tested many games so far.
I hope it works with promotion and ep.
The moves must not contain blanks; only after the movenumber fx 13... e2-e4
If the GUI/engine only delivers one of the score/line my program probably fails.
They must both be there - or none of them.
The exception is that you may insert a score fx {+3.11} manually after the last move.
See more examples of input and output in a separate post.
I have not released this function yet.
I would like to test it more.
If you are eager to try this, you can post me your email and I will send Dabbaba to you.