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).