An opinion on dynamic vs static PSTs

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

Mike Sherwin
Posts: 867
Joined: Fri Aug 21, 2020 1:25 am
Location: Planet Earth, Sol system
Full name: Michael J Sherwin

An opinion on dynamic vs static PSTs

Post by Mike Sherwin »

Featuring a game between MinimalChessEngine Chili (static PST) and RomiChess (dynamic PST). It is probably not a fair comparison but still I believe it is instructional.
[pgn][Event "TSCP.at"]
[Site "DESKTOP-HFVHK2B"]
[Date "2021.04.26"]
[Round "19"]
[White "MinimalChessEngine"]
[Black "RomiChess64P3n"]
[Result "0-1"]
[BlackElo "2200"]
[ECO "B70"]
[Opening "Sicilian"]
[Time "19:42:22"]
[Variation "Dragon, 6.Be2 Bg7 7.O-O"]
[WhiteElo "2200"]
[TimeControl "5+0"]
[Termination "normal"]
[PlyCount "85"]
[WhiteType "human"]
[BlackType "human"]

1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be2 Bg7 7. O-O {(O-O
O-O Bc1-e3 Nb8-d7 Ra1-c1 e7-e5) +0.24/6} Bd7 {(c8d7 c1e3 b8c6 d4c6 d7c6
d1d3) -0.78/12} 8. Bg5 {(Bc1-g5 O-O Nc3-d5 Nb8-c6 Nd4xc6 Bd7xc6) +0.29/6}
O-O {(e8g8 d1d3 b8c6 f1d1 d8b6 d4c6 d7c6 a1b1 a8c8 g5f4 e7e5 f4g5)
-0.61/12} 9. Nd5 {(Nc3-d5 Nb8-c6 Bg5xf6 Bg7xf6 Nd5xf6+ e7xf6) +0.18/6} Nxd5
{(f6d5 e4d5 d8b6 g5e3 b6b2 d1d3 b2b4 f1b1 b4a5 b1b7 a5d5 e2f3 d5e5 b7c7)
-0.09/16} 10. exd5 {(e4xd5 h7-h6 Bg5-f4 Nb8-a6 Ra1-c1 Na6-b4) +0.26/6} Qb6
{(d8b6 g5e3 b6b2 d1d3 b2b4 f1b1 b4a5 b1b7 a5d5 e2f3 d5e5 a1e1 f8c8 c2c4
e7e6 e1e2) +0.04/16} 11. Nf3 {(Nd4-f3 Rf8-e8 Bg5-e3 Qb6-c7 c2-c3 e7-e5)
+0.29/6} h6 {(h7h6g5c1 d7f5 e2d3 f5d3 d1d3 b8d7 d3e2 f8e8 c2c3 b6c5 f1d1
d7e5 f3e5) +0.15/14} 12. Be3 {(Bg5-e3 Qb6-c7 Ra1-c1 e7-e5 c2-c3 Bd7-f5)
+0.39/6} Qxb2 {(b6b2 a1b1 b2a2 b1b7 f8c8 c2c4 a2a6 d1b1 d7f5 b1b5 a6a2 f1e1
g7c3 e1c1 a7a6) +0.54/16} 13. Rb1 {(Ra1-b1 Qb2xa2 Rb1xb7 Rf8-c8 c2-c4
e7-e5) +0.64/6} Qxa2 {(b2a2b1b7 f8e8 c2c4 d7c8 b7b5 a7a5 e2d3 c8a6 d1b3
a2b3 b5b3 e8c8 f1b1 b8d7 b1c1) +0.83/16} 14. Rxb7 {(Rb1xb7 e7-e5 c2-c4
e5-e4 Nf3-d4 Qa2-a5) +0.38/6} Re8 {(f8e8c2c4 d7c8 b7b4 a7a5 b4a4 a2b2 e3d2
g7c3 d2c1 b2b6 c1e3 b6c7 e3h6 c8d7) +0.71/15} 15. c4 {(c2-c4 Bd7-c8 Rb7-b4
Qa2-a5 Rb4-b5 Qa5-c7) +0.31/6 1} Bc8 {(d7c8 b7b4 a7a6 f1e1 b8d7 e2d3 a2a5
b4a4 a5c3 d1c2 a8b8 c2c3) +0.86/15} 16. Rb4 {(Rb7-b4 Qa2-a5 Rb4-b5 Qa5-c7
c4-c5 Bc8-b7) +0.13/6} a6 {(a7a6 f1e1 b8d7 e2d3 a6a5 b4b5 a5a4 e1e2 a2a3
d1c2 d7c5 e3c5 d6c5 d5d6) +0.91/15} 17. Rb6 {(Rb4-b6 Bc8-g4 Rf1-e1 Bg4xf3
g2xf3 Nb8-d7) +0.31/6} Nd7 {(b8d7 b6b1 a6a5 e2d3 d7c5 e3c5 d6c5 b1b5 a2a3
b5b3 a3a4 b3b5 a4d1) +1.09/14} 18. Rc6 {(Rb6-c6 Qa2-a5 Be3-d4 Nd7-e5 Bd4-b6
Qa5-c3) +0.19/6} Qa5 {(a2a5 d1c1 g7c3 e3d4 c3d4 f3d4 d7c5 c1h6 c8d7 f1b1
a5c3 h6e3 c3e3) +1.39/14} 19. Bd4 {(Be3-d4 Bg7xd4 Qd1xd4 Bc8-b7 Rf1-a1
Qa5-d8) -0.02/6} Bxd4 {(g7d4 d1d4 c8b7 f1a1 a5d8 d4e3 b7c6 d5c6 d7c5 f3d2
a8c8 e2f3 h6h5 f3d5 e7e6 d5e4 c8b8) +2.31/17} 20. Qxd4 {(Qd1xd4 Bc8-b7
Rf1-a1 Qa5-d8 Ra1-d1 e7-e5 Qd4-g4) -1.37/7} Bb7 {(c8b7f1a1 a5d8 d4e3 h6h5
f3d4 b7c6 d5c6 d7c5 e3g5 d8b6 e2f3 c5e4 g5e3 b6b2 a1f1) +2.16/17} 21. Ra1
{(Rf1-a1 Qa5-d8 Qd4-e3 Bb7xc6 d5xc6 Nd7-b8) -1.29/6} Qd8 {(a5d8 d4f4 h6h5
a1b1 b7c6 d5c6 e7e5 f4e4 d7c5 e4d5 a8c8 f3d2 d8c7 e2f3 a6a5 b1b2) +2.19/16}
22. Qe3 {(Qd4-e3 Bb7xc6 d5xc6 Nd7-b8 Qe3-e4 e7-e5) -1.39/6} h5 {(h6h5 f3d4
d7c5 e2f3 b7c6 d5c6 d8b6 e3g5 b6b2 a1d1 b2c3 c6c7 a8a7 f3c6 e8c8) +2.31/15}
23. Rd1 {(Ra1-d1 Bb7xc6 d5xc6 Nd7-c5 Qe3-h6 Nc5-b3) -1.26/6} Bxc6 {(b7c6
d5c6 d7c5 f3d2 d8b6 e2f3 a8c8 d1b1 b6a5 f3d5 c8b8 b1b8 e8b8 e3d4 e7e6 d5e4)
+2.55/16 1} 24. dxc6 {(d5xc6 Nd7-f6 Qe3-h6 Nf6-g4 Qh6-g5 e7-e5) -1.45/6}
Nb8 {(d7b8e3h6) +2.31/15} 25. Qe4 {(Qe3-e4 Qd8-c7 Nf3-d4 e7-e5 Be2-f3
h5-h4) -1.05/6} Qc8 {(d8c8 f3d4 e7e5 d4b5 a6b5 c4b5 c8c7 e4d5 e8d8 d1b1
a8a5 e2c4 a5a3 d5e4 g8h7 e4d5) +2.91/16 1} 26. Ng5 {(Nf3-g5 Nb8xc6 Be2-f3
Nc6-e5 Qe4xa8 Qc8xa8) -1.89/6} Qxc6 {(c8c6 e4d4 e7e5 d4d3 f7f5 d3d6 a6a5
d6c6 b8c6 d1d6 c6e7 g5f3 e5e4 f3e5 a8d8 d6d8) +2.81/16} 27. Qf4 {(Qe4-f4
f7-f5 Be2-f3 Qc6-a4 Ng5-e6 Nb8-c6) -1.69/6} Rf8 {(e8f8 e2h5 c6a4 h5f3 b8d7
f4e4 d7e5 c4c5 e5f3 e4f3 d6c5 g5f7 a8b8 f7h6 g8g7 f3g4) +2.63/15} 28. Bf3
{(Be2-f3 Qc6-a4 Rd1-e1 Qa4-b4 Qf4-e3 Ra8-a7) -1.75/6} Qa4 {(c6a4 g5e4 a4b3
c4c5 d6d5 d1d5 b8c6 e4g3 b3c3 d5d1 a8c8 f3c6 c8c6 g3e4 c3b2 d1d7 e7e6)
+2.90/17} 29. Ne4 {(Ng5-e4 Qa4-b3 Rd1xd6 e7xd6 Ne4-f6+ Kg8-g7) -1.57/6} Qb3
{(a4b3c4c5 d6d5 d1d5 b8c6 e4g3 a8b8 f4g5 b3c2 g3f1 f7f6 d5d2 f6g5 d2c2
f8c8) +2.92/16 1} 30. c5 {(c4-c5 d6-d5 Rd1xd5 Nb8-c6 Qf4-g5 Qb3-b1+)
-1.37/6} d5 {(d6d5d1d5 b8c6 e4g3 a8b8 f4g5 b3c2 g3f1 b8b1 f3h5 a6a5)
+3.10/15} 31. Rxd5 {(Rd1xd5 Nb8-c6 Qf4-g5 Qb3-b1+ Rd5-d1 Ra8-b8) -1.43/6}
Nc6 {(b8c6 d5d2 a8c8 h2h4 f8d8 d2d8 c8d8 e4f6 e7f6 f3c6 b3c3 f4e3 c3e3 f2e3
a6a5) +2.95/13} 32. Ng3 {(Ne4-g3 Qb3-c3 Qf4-e4 e7-e6 Rd5-d7 Qc3-c1+)
-1.75/6} Qc2 {(b3c2 d5d1) +2.72/12} 33. Qg5 {(Qf4-g5 Ra8-b8 Rd5-d7 Rb8-b1+
Ng3-f1 Rb1-b2) -1.87/6} Rfb8 {(f8b8 d5d1) +3.08/14} 34. Bxh5 {(Bf3xh5
Rb8-b1+ Ng3-f1 Qc2-c1 Qg5xc1 Rb1xc1) -2.01/6} Rb1+ {(b8b1 g3f1 b1e1 g5g4
a6a5 d5d1 e1d1 g4d1 c2c5 h5f3 a5a4 f1e3 a4a3 d1e2) +3.82/13} 35. Nf1
{(Ng3-f1 Rb1-e1 Qg5-g4 Ra8-b8 Rd5-d1 Re1xd1 Qg4xd1) -2.92/7 1} Rab8 {(a8b8
g5e3 g6h5 e3g5 c2g6 g5h5 g6h5 d5h5 b8b2 h5g5 g8f8 g5d5 a6a5 d5d7 a5a4)
+5.15/13} 36. Rd2 {(Rd5-d2 Rb1xf1+ Kg1xf1 Rb8-b1+ Kf1-e2 Qc2-e4+ Qg5-e3)
-2.55/7 1} Rxf1+ {(b1f1 g1f1 b8b1 f1e2 c6d4 e2e3 b1b3 e3f4 c2d2 f4g4 d2e2
f2f3 e2g2 g4h4 d4f3 h5f3 b3b4 g5g4 g2h2 h4g5 f7f6 g5g6 h2h7 g6h7) +M12/17}
37. Kxf1 {(Kg1xf1 Rb8-b1+ Kf1-e2 Qc2-e4+ Qg5-e3 Qe4-c4+ Qe3-d3) -2.57/7}
Rb1+ {(b8b1h5d1) +M37/17} 38. Ke2 {(Kf1-e2 Qc2-c4+ Rd2-d3 Rb1-b2+ Ke2-e1
Qc4xd3 Bh5-f3) -4.79/7} Nd4+ {(c6d4 e2e3 b1b3 e3f4 c2d2 f4g4 d2e2 f2f3 e2g2
g4h4 d4f3 h5f3 b3b4 g5g4 g2h2 h4g5 f7f6 g5g6 h2h7 g6h7) +M11/2} 39. Ke3
{(Ke2-e3 Rb1-b3+ Ke3-f4 Qc2xd2+ Kf4-g4 f7-f5+ Kg4-h4) -13.02/7} Rb3+
{(b1b3e3f4 c2d2 f4g4 d2e2 f2f3 e2g2 g4h4 d4f3 h5f3 b3b4 g5g4 g2h2 h4g5 f7f6
g5g6 h2h7 g6h7) +M11/16} 40. Kf4 {(Ke3-f4 Qc2xd2+ Kf4-g4 f7-f5+ Kg4-h4
Qd2xf2+ Qg5-g3) -13.02/7} Qxd2+ {(c2d2f4g4 d2e2 f2f3 e2g2 g4h4 d4f3 h5f3
b3b4 g5g4 g2h2 h4g5 f7f6) +M11/15} 41. Kg4 {(Kf4-g4 f7-f5+ Kg4-h4 Qd2xf2+
Qg5-g3 Rb3xg3 h2xg3) -13.02/7} Qe2+ {(d2e2 f2f3 e2g2 g4h4 d4f3 h5f3 b3b4
g5g4 g2h2 h4g5 f7f6) +M9/2} 42. Kh4 {(Kg4-h4 Qe2xf2+ Qg5-g3 Nd4-f5+ Kh4-g5
Nf5xg3) -15.00/6} Qxf2+ {(e2f2 g2g3) +M6/3} 43. Qg3 {(Qg5-g3 Nd4-f5+ Kh4-g5
Rb3xg3+ h2xg3 Qf2-e3+ Kg5-g4) -99.99/7 White resigns} 0-1
[/pgn]
The opening ends in this position.
[d]rnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7
From here Chili plays excellently to reach this position.
[d]rn1q1rk1/pp1bppbp/3p2p1/3P2B1/3N4/8/PPP1BPPP/R2Q1RK1 b - - 0 10
SF13 SAYS
36/56 01:42 737,670k 7,208k -0.46 Qd8-b6 Bg5-e3 Qb6xb2 Qd1-d3 Qb2-b4 Ra1-b1 Qb4-a5 Rb1xb7 Qa5xa2 c2-c4 Rf8-c8 Nd4-b5 Rc8-d8 Nb5-c7 Bd7-c8 Rb7-b5 a7-a6 Rb5-b3 Bc8-f5 Rb3-a3 Qa2-b2 Qd3-b3 Qb2xe2 Nc7xa8 Bg7-e5 f2-f4 Be5-f6 Ra3-a2 Qe2-d3 Qb3xd3 Bf5xd3 Rf1-c1 Nb8-d7 Na8-c7 Nd7-c5 Ra2-d2 Bd3-f5 Be3xc5 d6xc5 Nc7xa6 Bf6-d4+ Rd2xd4 c5xd4 Na6-b4 d4-d3 Rc1-d1 Rd8-c8 Nb4-c6 Kg8-f8 Kg1-f2 Bf5-e4 g2-g3

RomiChess plays Qd8-b6. And this is where Chili fails to understand the needs of the position and un-develops the knight with d4-f3.

RomiChess SAYS
RomiChess64P3n:
1 00:00 939 939 -0.04 c2c3
2 00:00 1k 1k -0.04 c2c3 g7d4
3 00:00 3k 3k -0.04 c2c3 g7d4
4 00:00 5k 5k -0.04 c2c3 g7d4 c3d4 b6b2
5 00:00 15k 15k -0.54 c2c3
6 00:00 43k 43k -0.89 d4b3 g7b2 g5e7 b2a1 e7f8 a1e5
7 00:00 98k 9,842k -0.61 g5e3 b6b2
8 00:00 151k 7,525k -0.31 g5e3 b6b2
9 00:00 237k 7,911k -0.31 g5e3 b6b2 d1d3 f8c8 f1b1 b2c3 d3c3 c8c3 b1b7
10 00:00 372k 9,292k -0.31 g5e3 b6b2 d1d3 f8c8 f1b1 b2c3 d3c3 c8c3 b1b7
11 00:00 596k 8,514k -0.31 g5e3 b6b2 d1d3 f8c8 f1b1 b2c3 d3c3 c8c3 b1b7 g7d4
12 00:00 971k 8,830k -0.31 g5e3 b6b2 d1d3 f8c8 f1b1 b2c3 d3c3 c8c3 b1b7 g7d4 e3d4 c3c2
13 00:00 1,542k 8,566k -0.31 g5e3 b6b2 d1d3 f8c8 f1b1 b2c3 d3c3 c8c3 b1b7 g7d4 e3d4 c3c2
14 00:00 4,345k 8,690k -0.30 g5e3 b6b2 d1d3 b2b4 f1b1 b4a5 b1b7 a5d5 e2f3 d5e5 a1e1 f8c8 f3e4 g7f6
15 00:00 6,483k 8,760k -0.19 g5e3 b6b2 d1d3 b2b4 f1b1 b4a5 b1b7 a5d5 e2f3 d5e5 a1e1 f8c8 c2c4 e7e6 f3e4
16 00:01 9,076k 8,812k -0.17 g5e3 b6b2 d1d3 b2b4 f1b1 b4a5 b1b7 a5d5 e2f3 d5e5 a1e1 f8c8 d3e4 e5e4 f3e4 g7f6
17 00:01 15,274k 8,880k -0.21 g5e3b6b2 d1d3 b2b4 f1b1 b4a5 b1b7 a5d5 e2f3 d5e5 a1e1 f8c8 d3e4 g7f6 e4d5 h7h6 f3e4

RomiChess (after restart) never considers Nd4-f3 and finds the SF approved move Bg5-e3 by depth 7.

And even TSCP understands the position better than Chili.
Tscp181:
1 00:00 170 170 +1.12 g5e7 b6d4 e7f8 d4d1 a1d1 g7f8
2 00:00 428 428 +1.12 g5e7 b6d4 e7f8 d4d1 a1d1 g7f8
3 00:00 3k 3k +0.65 d4b3 g7b2 g5e7 b2a1 e7f8
4 00:00 15k 1,523k +0.52 d4b3 g7b2 g5e7 f8e8
5 00:00 107k 1,343k +0.61 d4b3 g7b2 g5e7 f8e8 a1b1 e8e7 b1b2
6 00:00 685k 1,246k +0.45 d4b3 g7b2 g5e7 b2a1 e7f8 a1e5
7 00:03 4,469k 1,273k +0.50 d4b3 g7b2 g5e7 b2a1 e7f8 a1f6 f8h6
8 00:19 24,588k 1,231k +0.30 d4b3 g7b2 g5e7 b2a1 e7f8 a1f6 f8h6 b8a6

While Chile never considers the two best moves.
MinimalChessEngine:
Search scheduled to take 59985ms!
1 00:00 248 248k +0.71 c2-c3
2 00:00 1k 1,001k +0.53 c2-c3 e7-e6
3 00:00 6k 892k +0.53 c2-c3 e7-e5 d5xe6/ep
4 00:00 26k 951k +0.46 c2-c3 Rf8-e8 Ra1-b1 e7-e6
5 00:00 148k 1,177k +0.29 c2-c3 Qb6xb2 Ra1-c1 Rf8-c8 Rc1-c2
6 00:00 860k 1,592k +0.29 Nd4-f3 Rf8-e8 Bg5-e3 Qb6-c7 c2-c3 e7-e5
7 00:02 4,412k 1,900k +0.33 Nd4-f3 e7-e6 d5xe6 Bd7xe6 Bg5-e7 Rf8-e8 Be7xd6
8 00:12 24,250k 1,915k +0.25 Nd4-f3 Rf8-e8 Bg5-e3 Qb6-c7 Be3-d4 e7-e5 d5xe6/ep Bd7xe6

And this highlights the difference of dynamic vs static PSTs! The dynamic PSTs of RomiChess just simply understands the needs of the position better than Chili PSTs even though the eval is not the same as SF.

And after Nd4-f3 SF SAYS
42/54 01:15 564,902k 7,476k 0.00 h7-h6 Bg5-e3 Qb6xb2 Be3-d4 Bg7xd4 Nf3xd4 Qb2-c3 Ra1-b1 Nb8-a6 Rb1-b3 Qc3-c7 Rb3-g3 Na6-c5 Be2-d3 Nc5xd3 Qd1xd3 Qc7-a5 c2-c4 Ra8-c8 h2-h4 Qa5-c5 Rf1-c1 b7-b5 Rg3xg6+ f7xg6 Qd3xg6+ Kg8-h8 Qg6xh6+ Kh8-g8 Qh6-g6+ Kg8-h8

RomiChess plays h7-h6.

And in this position.
[d]rn3rk1/pR1bppb1/3p2pp/3P4/8/4BN2/q1P1BPPP/3Q1RK1 b - - 0 14
SF SAYS
25/36 00:09 65,944k 7,232k +0.66 Rf8-e8 Qd1-d2 h6-h5 Rb7-c7 Re8-c8 Rc7xc8+ Bd7xc8 Be3-g5 Nb8-d7 Bg5xe7 Bc8-a6 Be7xd6 Ba6xe2 Qd2xe2 Qa2xd5 Rf1-d1 Qd5-f5 Nf3-d4 Qf5-g4 Qe2-d3 Nd7-e5 Bd6xe5 Bg7xe5 Qd3-f3 Qg4xf3 Nd4xf3 Be5-g7 c2-c4

And RomiChess plays Rf8-e8. Then in this position.
[d]r1b1r1k1/3nppb1/pR1p2pp/3P4/2P5/4BN2/q3BPPP/3Q1RK1 w - - 2 18
SF SAYS
31/51 00:20 153,016k 7,415k -1.26 Rb6-b1 Nd7-c5 Nf3-d4 Bc8-d7 Rb1-a1 Qa2-b2 Ra1-b1 Qb2-c3 Rb1-c1 Qc3-a5 Nd4-c6 Qa5-a4 Be3xc5 Qa4xd1 Be2xd1 d6xc5 Rc1-b1 Bd7-f5 Rb1-b3 a6-a5 Rb3-a3 Bg7-b2 Ra3-a2 Bb2-f6 Bd1-a4 Re8-c8 Rf1-e1 Rc8-c7 Ba4-b5 Kg8-g7 g2-g3 h6-h5 Kg1-g2 h5-h4 h2-h3 Rc7-d7 Ra2xa5 Ra8xa5 Nc6xa5

And RomiChess says based on its dynamic PSTs
RomiChess64P3n:
1 00:00 324 324 -1.03 b6b1

After Chili's Rb6-c6 RomiChess says.
1 00:00 95 95 +1.42 a6a5 e2d3
...
18 00:02 25,490k 9,202k +1.75 a2a5 d1c1 a8b8 e2d3 c8b7 e3d2 a5d8 d2h6 g7h6 c1h6 b7c6 d5c6 d7c5 h6e3 d8b6 f3d4 c5d3 e3d3 a6a5

And SF SAYS
2/2 00:00 703 703k +0.46 a6-a5 h2-h3
...
18/26 00:00 3,902k 6,503k +1.95 a6-a5 Nf3-d4 a5-a4 Qd1-a1 Qa2xa1 Rf1xa1 Nd7-c5 Ra1-a3 Bc8-d7 Rc6-c7 Bg7xd4 Be3xd4 Re8-c8 Rc7xc8+ Ra8xc8 f2-f3 Rc8-b8 Kg1-f2 Rb8-b1 Kf2-e3 Kg8-f8 Ke3-f2 h6-h5 h2-h3

And RomiChess goes on to easily win the game.

(Note: before each RomiChess says or SF SAYS the engines were restarted so that the hash tables are clean)