OliThink 5.7.8 has been released.
Its main new feature is "reverse futility pruning".
I tried "standard futility pruning" and "razoring" several times before and they never worked well. This "reverse" version, though, is a breakthrough in strength.
It's only a few lines of code, so there is no big change, 1606* lines now.
Code: Select all
if (!ch && !pvnode && d <= 8) {
w = evallazy(c, mat);
if (w > beta + 85*d) return w;
}
Here is a little tourney that shows the improvement against different engines:
Code: Select all
# PLAYER : RATING ERROR POINTS PLAYED (%) W D L D(%) CFS(%)
1 Scorpio_2.8.8 MCTS+NN : 8 27 256.0 500 51.2 221 70 209 14.0 73
2 OliThink 5.7.8 : 0 ---- 1178.0 2000 58.9 996 364 640 18.2 100
3 Fruit 2.1 : -37 28 223.5 500 44.7 171 105 224 21.0 84
4 K2 v.087 : -57 29 209.5 500 41.9 156 107 237 21.4 100
5 Arasan 11.7 : -178 31 133.0 500 26.6 92 82 326 16.4 ---
White advantage = -5.62 +/- 7.44
Draw rate (equal opponents) = 18.99 % +/- 0.90
Still, with more pruning and increasing general strength, the tactical impact on particular positions gets completely lost. Two example positions are in this thread.
Here is an interesting game between OliThink 5.7.8 and Archux 1.1 (a nice derivative of Strelka). Amazing game!
[pgn][Event "Computer Chess Game"]
[Site "Olivers-MacBook-2.local"]
[Date "2020.09.15"]
[Round "-"]
[White "OliThink 5.7.8"]
[Black "Archux 1.1"]
[Result "1-0"]
[TimeControl "40/60"]
[Annotator "4. -0.08 1... -0.24"]
1. e4 e5 {-0.24/14 2.3} 2. Nf3 Nc6 {-0.09/14 1.2} 3. Bb5 Bc5 {-0.13/13 1.0}
4. d3 {-0.08/16 1.9} Nf6 {-0.08/13 1.4} 5. Nc3 {-0.02/16 1.5} O-O
{+0.05/13 1.1} 6. Na4 {+0.00/16 1.0} Bd6 {+0.09/13 1.4} 7. Nc3
{+0.00/19 0.6} a6 {+0.21/14 1.2} 8. Ba4 {+0.10/15 1.0} b5 {+0.21/14 1.0} 9.
Bb3 {+0.17/17 1.4} Na5 {+0.24/14 0.9} 10. O-O {+0.34/16 1.1} Bb7
{+0.24/14 1.0} 11. Be3 {+0.33/18 0.4} Qe7 {+0.28/13 0.8} 12. Nh4
{+0.53/17 1.0} g6 {+0.35/14 2.3} 13. Bg5 {+0.43/17 0.1} Nxb3 {+0.31/13 0.5}
14. axb3 {+0.37/16 0.6} Qe6 {+0.30/13 0.8} 15. Nf3 {+0.31/17 2.4} Bc5
{+0.33/12 0.6} 16. Kh1 {+0.38/14 1.3} Rfe8 {+0.45/13 2.9} 17. Qe1
{+0.30/15 1.7} Bc6 {+0.50/12 2.6} 18. Nd1 {+0.31/15 1.4} d5 {+0.70/12 0.9}
19. Nd2 {-0.10/16 1.7} d4 {+1.17/13 1.4} 20. f4 {+0.01/17 1.3} exf4
{+1.04/13 1.5} 21. Bxf4 {+0.11/18 0.3} Nd5 {+1.09/11 0.3} 22. Bg3
{+0.05/18 1.3} Nb4 {+0.58/13 1.8} 23. Nf2 {+0.08/17 0.1} Rac8
{+0.82/12 2.7} 24. Qc1 {+0.50/14 1.4} Bb7 {+0.54/12 1.1} 25. Nf3
{+0.40/16 2.5} f6 {+0.51/12 1.6} 26. Qd2 {+0.34/15 0.4} Rf8 {+0.45/12 1.8}
27. c3 {+0.48/17 2.0} Nc6 {+0.39/14 1.6} 28. b4 {+0.45/17 0.5} Bb6
{+0.23/14 9} 29. Rac1 {+0.40/17} Rf7 {+0.28/13 1.1} 30. c4 {+0.64/14 3} g5
{+0.17/13 2.8} 31. Rfe1 {+0.69/15 2.0} h6 {+0.35/12 0.5} 32. Kg1
{+0.53/15 2.5} Kg7 {+0.38/12 1.2} 33. h3 {+0.47/16 3} Rd7 {+0.14/12 1.1}
34. b3 {+0.52/14 2.4} Rg8 {+0.31/10 0.7} 35. Rf1 {+0.47/14 4} Rf7
{+0.26/10 0.5} 36. Ra1 {+0.56/13 1.9} Re8 {+0.34/10 0.4} 37. Kh1
{+0.58/14 2.2} Rd8 {+0.38/10 0.6} 38. Rfe1 {+0.57/14 2.0} a5 {+0.56/11 0.9}
39. bxa5 {+0.68/17 1.6} Bc5 {+0.22/12 0.5} 40. cxb5 {+1.03/20 1.7} Bb4
{+0.29/13 0.6} 41. Qc2 {+1.15/19} Bxe1 {+0.12/15 1.8} 42. Rxe1
{+1.15/21 0.2} Nb4 {+0.41/15 1.5} 43. Qc4 {+1.15/21 0.3} Qxc4
{+0.44/15 2.6} 44. bxc4 {+1.15/21 0.1} h5 {+0.50/14 1.6} 45. a6
{+1.15/20 1.4} Ba8 {+0.18/14 1.3} 46. a7 {+1.15/18 2.2} c5 {+0.88/12 0.8}
47. Bb8 {+1.15/17 1.5} Kh8 {+0.78/12 1.5} 48. Ra1 {+1.15/16 1.5} Rg7
{+0.61/13 2.2} 49. Nh2 {+1.15/17 1.2} Kh7 {+0.78/13 1.6} 50. Kg1
{+1.15/18 0.1} Rdg8 {+0.65/12 1.4} 51. Ra4 {+1.15/18 1.5} Nc2
{+0.46/13 0.9} 52. g4 {+1.76/16 1.3} h4 {+0.00/14 1.0} 53. Ra6
{+2.11/17 1.1} Rf7 {+0.04/14 0.8} 54. Rc6 {+2.15/18 1.3} Rd8 {+0.00/14 1.3}
55. Rxc5 {+2.15/20 1.3} Ne1 {-0.19/14 1.1} 56. Kf1 {+2.15/19 1.9} Nc2
{-0.25/15 0.9} 57. Nf3 {+2.15/14 0.5} Bb7 {-0.32/14 0.9} 58. b6
{+2.88/14 1.5} Kg6 {-0.42/13 1.0} 59. Ke2 {+2.92/18 1.8} Re8 {-1.48/14 8}
60. Rc7 {+4.11/20 1.7} Rxc7 {-1.46/15 0.9} 61. bxc7 {+4.29/21 0.8} Rc8
{-3.02/15 3} 62. Kd2 {+5.07/25 2.8} Nb4 {-3.61/16 0.9} 63. Nxd4
{+5.43/24 1.8} Ba8 {-3.69/16 1.3} 64. Nb5 {+6.10/23 2.0} Na6 {-4.27/16 0.8}
65. d4 {+6.66/23 1.9} Rf8 {-4.73/17 3} 66. Nd6 {+7.97/22 1.7} Nxc7
{-5.04/19 0.7} 67. Bxc7 {+8.73/23 1.1} Kg7 {-6.30/19 8} 68. d5
{+9.29/24 1.5} Rg8 {-7.44/17 0.7} 69. c5 {+11.20/22 1.8} Kf8 {-8.44/17 1.2}
70. c6 {+12.77/26 1.5} Ke7 {-8.82/16 0.3} 71. Nf5+ {+14.66/26 2.6} Ke8
{-17.49/19 3} 72. Bb8 {+20.43/27 2.9} Rf8 {-18.92/17 1.6} 73. c7
{+21.75/24 1.5} Kf7 {-19.40/14 0.4} 74. Nd6+ {+21.97/22 1.1} Kg6
{-17.52/16 0.6} 75. c8=Q {+1000.13/24 5} Rxc8 {-19.22/17 0.3} 76. Nxc8
{+1000.11/25 3} Kf7 {-19.71/15 0.1} 77. Nb6 {+1000.10/22} Bb7
{-13.63/12 0.1} 78. Nd3 {+1000.10/20} f5 {-20.64/11} 79. exf5
{+1000.08/16 0.1} Kf8 {-23.07/10} 80. Nc5 {+1000.06/18} Ba8 {-22.38/6} 81.
Nxa8 {+1000.06/11} Kg7 {-1000.05/8} 82. Nb6 {+1000.05/11} Kg8 {-1000.04/6}
83. a8=Q {+1000.04/7} Kh7 {-1000.02/3} 84. Be5 {+1000.02/3} Kh6
{-1000.01/1} 85. Qh8# {+1000.01/1}
{Xboard adjudication: Checkmate} 1-0
[/pgn]
OliThink sacrifices a rook in move 41 and overruns black with an army of pawns.
PS: *Strelka 2.0 with 6114 lines of code may be the second smallest engine > 2500 ELO. Fruit 2.1 has 15320 lines).