Step 1. (delta bug fix)

I noticed that Stockfish uses the fixed value for delta (18) which produces too many fails low/high when position is winning/losing, slowing down finding mates/winning combinations.
With many tests on short time controls, I've found that \(17+0.025\cdot|previousScore|\) is a good (neutral) alternative.

Step 2. (formula for initial reductions)

If an Elo strengh is given by the function \(f(d)\), where \(d\) is a depth of the search, then it seems logical that an Elo difference between full and reduced search should be proportional to the rate of Elo change,
leading to the following differential equation $$ f(d)-f(d-r)=c\cdot f'(d)\,. $$ As I proved [link] that \(f(d)=A\ln(d)+C\,\) is a good choice for an Elo strength function, we obtain $$ \ln(d)-\ln(d-r)=\frac{c}{d}\,, $$ with the solution \(r=d(1-e^{-c/d})\). Combining with the Stockfish reduction formula (\(\,r=\ln(d)\ln(mc)/2\,\)) I have found the following candidate $$ r=0.245\cdot d(1-e^{-7/d})\ln(mc)\,, $$ which proved to be solid in testing (16:12 against CorChess beta after 140 games at 900+10 th 3).

Step 3. (version b3)

Formula for initial reductions was retuned (0.245 -> 0.22; 7 -> 8.5), and lazy evaluation was removed from the code.

Step 4. (version 1.1)

Ideas from version b3 were refined further.
In 10000 games match at 40+0.4 time control CorChess 1.1 defeated Stockfish with 1557-1493-6950 (+2.2 Elo).

Step 5. (version 1.2)

I included null move fix tested recently in the Stockfish testing framework:

Step 6. (version 1.3)

As it is very difficult to tune formula for initial reductions, values were set to fit well with the Stockfish formula for depths up to 12.
Regression test was done and it was OK.

Step 7. (version 1.4)

I included one nice patch rejected in Stockfish:

Step 8. (version 1.5)

Null move logic was improved. Version 1.5 won four 1000 games tournaments in a row against version 1.4,
with total advantage of 7 Elo (time control: 160+1.6).

Step 9. (versions 1.6, 1.7)

I accepted two strong patches that failed yellow:

Step 10. (version 1.8)

Large Pages support, with code from SugaR, is introduced. It brings around 10% of speed improvement.
It is enabled by default but check how it works on your system.

Step 11. (version 1.9)

Enhanced verification search tested and implemented in CorChess.
Revert to old time management.

Step 12. (version 2.0)

CorChess uses Contempt 7 by default.

Step 13. (version 2.1)

Cleaning and retest of CorChess features was done.
I decided to keep CorChess as close to Stockfish,
introducing only features important in correspondence chess.

Step 14. (version 2.2)

Contempt 0 now disables also dynamic contempt.

Step 15. (version 2.3)

A subtle bug with depth zero null move search was fixed.

Step 16. (version 2.4)

Set default contempt to 12.

Step 17.

From version 2.5 I only try to tune some parameters.

Step 18. (version 3.0)

Large Pages support was removed because of better overclocking potential, and skipping thread scheme was removed because of bad behaviour on long time controls.