Igel - open source chess engine forked from GreKo 2018.01.

(c) 2018-2026 Volodymyr Shcherbyna <volodymyr@shcherbyna.com> (Igel author)
(c) 2002-2018 Vladimir Medvedev <vrm@bk.ru> (GreKo author)

Igel 3.8.0
-------------
18.10.2026

- implement null move pruning verification search
- store probcut result in tt
- support systems with small stack size (such as alpine linux)
- tune 42 search parameters with spsa (400k games)
- implement capture history
- cache accumulator
- implement adaptive lmr
- implement correction history
- release new standard network 6b953e78
- store static evaluation in tt
- fix insufficient material detection
- handle en passant in tb root probing
- update statistics for tb moves

Igel 3.7.0
-------------
26.08.2026

- fix draw detection
- fix history overflow
- fix mate score for probcut
- use fifty move guard on tt in qsearch
- update piece stack for null move pruning
- improve tt replace strategy
- fix ply coherence in singular search
- fix undefined behavior in history
- fix undo bug
- apply incheck futility guard
- use tt for skipmove positions
- order moves during probcut
- detect bmi2 in basic makefile
- support vnni256
- optimize quiets pickup
- speed-up castling
- store tt wdl result as a bonus
- fix tb probing with wrong castling rights
- reduce tt captures
- minimize see calls
- implement finny table
- implement counter move table
- track best move stability
- use tt for null moves
- release new standard network
- implement evalfile parameter
- fix tb tt bug
- restore hce build for tcec
- probe dtz
- fix tt castling bit for frc
- cache hash entry
- speed-up inferencing code
- implement avx512 support
- improve voting system
- fix gcc14 build
- implement frc mode
- improve speed
- support longer games
- optimize sort
- penalize bad captures

Igel 3.6.0
-------------
28-Jan-2024

- extend by 2 in singular extension on non pv move
- improve low bound condition in singular extension
- check beta score in probcut condition
- store in TT in standing pat in qsearch
- implement iid
- tune null move depth
- tune razor depth
- remove instant moves handling

Igel 3.5.0
-------------
22-Jun-2023

- new network architecture
- new network c049c117

Igel 3.4.0
-------------
30-Jan-2023

- fixing major bug in accumulator handling for null moves
- avoid heap objects (std::vector) in search function
- switching to pure nnue evaluation
- new network architecture HalfKav2_hm
- new network ign-3-debc71a4

Igel 3.3.0
-------------
15-Jan-2023

- new network architecture HalfKav2
- new network ign-2-51ba2968

Igel 3.2.0
-------------
17-Dec-2022

- smaller margin for prunning quiets
- scale down eval to 1000
- history extensions only on non pv moves
- adjust scale formula
- less reductions in lmp when not improving
- negative extensions
- futility pruning improvements
- implement cutnode
- new network ign-1-9a48854b created by using prev network (ign-1-3e998e78) and re-trained with a different lambda

Igel 3.1.0
-------------
03-Jun-2022

- Scale eval at 1280
- More aggressive prunning of quiets when not improving
- Use 150 cp when razoring
- Avoid tt cutoff for rule50
- Improve statistics in SMP mode
- New network trained using 16B of d5-d8 data from Igel HCE/ign-1-139b702b with d16 validation using ign-1-139b702b

Igel 3.0.5
-------------
28-Apr-2021

- Train a new network using Igel 2.6.0 (HCE), Igel 2.9.0 (NNUE) and Igel 3.0.0 (NNUE) data: ign-1-d593efbd
- Better time management in sd time control
- Skip tt cutoff for null moves in search
- Skip null move prunning on tt hit
- Vote for best thread in SMP mode
- Less aggressive time use in non repeated tc

Igel 3.0.0
-------------
04-Apr-2021

- Train a new network using Igel 2.6.0 (HCE) and Igel 2.9.0 (NNUE) data: ign-1-139b702b
- Fix in check extensions
- Use incbin on Linux to inject network file into the binary
- Tune null move prunning conditions
- Tune probcut prunning conditions
- Tune quiets prunning
- Fix bogus condition for history calculation
- Implement more aggressive null move prunning
- Stop extension of captures
- Prevent explosion of history extensions
- Implement better time management for sudden death time control
- Count not played quiets for LMP prunning
- Remove dummy 100 multiplier for history ordering calculation
- Fix compilation issues with gcc 10 and Android NDK's Clang
- Remove unused counter move table
- Fix out of boundary access for history array
- Fix issue with singular extensions - reported by ChizhovVadim (author of CounterGo chess engine)
- Fix crash when 'ucinewgame' command is not issued - reported by Ipmanchess
- Fix crash when thread position is not initialized - reported by Ipmanchess

Igel 2.9.0
-------------
25-Dec-2020

- Switch to own network based on Igel search and evaluation (ign-0-9b1937cc)
- NNUE dynamic eval scaling

Igel 2.8.0
-------------
23-Sep-2020

- Fix null move prunning bug (54 elo)
- Use 250cp as lazy eval threshould
- Improve time management for sudden death time controls
- Use Dietrich Kappe's Night Nurse improved net (internal version ninu-0.2.5b.nnue)

Igel 2.7.0
-------------
19-Aug-2020

- Switch to NNUE as a main evaluation function
- Use Dietrich Kappe's Night Nurse NNUE net as a default net for Igel 2.7.0 release

Igel 2.6.0
-------------
01-Aug-2020

- Implement piece threats evaluation
- Simplify connected pass pawn evaluation
- Implement backward pawn evaluation
- Apply tempo after interpolation and speed up null move evaluation
- Implement verification qsearch for probcut
- Remove L1 normalisation from tuner and retune all params
- Implement trapped rook evaluation
- Implement razoring in search
- Implement king danger evaluation
- Implement hanging piece evaluation
- Implement weak pawn evaluation
- Implement restricted piece evaluation
- Implement lazy evaluation with a threshould of 300cp
- Implement multicut search
- Implement threat by a protected pawn evaluation
- Improve safe check evaluations
- Bench 7538060

Igel 2.5.0
-------------
15-Jun-2020

- Implement OpenBench support
- Implement BMI2 instruction support for faster search
- Implement prefetch instruction support for faster search
- Implement ponder support
- Implement improved sudden death time control management
- Implement use of hugepages in Linux OS
- Implement more efficient tt management and re-write tt replacement scheme to 'always replace'
- Implement proper handling of chopper moves
- Implement improved king safety evaluation
- Implement improved weights management
- Implement symmetric evaluation function
- Set tt score in qsearch
- Set bestmove as a hashmove by default
- Bugfix for knight outpost
- Bugfix for depth skipping in smp mode
- Implement pst based evaluation for connected passers
- Bugfix for probcut in check
- Factor in 'improving' even when in checks
- Adjust bestscore from tt score
- Bugfix shuffling of moves at root in smp mode
- Bench 8175057

Igel 2.4.0
-------------
22-Mar-2020

- Implement singlular extensions
- Detect drop of score and using time more aggressively
- Remove IID and simplify search
- Do not tt cutoff on pv moves
- Simplification for nullmove pruning
- Simplification for connected pawn evalution
- Basic endgame knowledge to detect draw in eval/search
- Retune everything + decrease number of tunnable parameters from 2600 to 1500
- Apply LMR when at least one legal move has been played
- Decrease reductions in LMR for pv moves

Igel 2.3.1
-------------
14-Jan-2020

- Re-write the root search routine
- Re-write aspiration loop with a smaller aspiration window
- Do not cutoff qsearch on pv moves in qsearch
- Handle repetitions at the qsearch entance
- More strict pruning conditions for quiet moves
- Proper way to pass position to child threads in SMP mode to handle repetitions
- Unified condition to killer moves as non-tactical moves
- Perft tests for six different positions

Igel 2.3.0
-------------
01-Jan-2020

- Fix issue when reductions in LMR could lead to directly qsearch
- Rename uci option 'Level' into 'Skill Level'
- Do not apply razoring when in check
- Do not apply 'improving' factor when in check
- Do not prune quiets at root
- Fetch history only when a quiet move is detected
- Improve branching factor and apply LMR more aggressively
- Fix compilaton issue with clang/gcc9 compiler

Igel 2.2.1
-------------
29-Dec-2019

- Rename uci option 'Level' into 'Skill Level'
- Do not apply razoring when in check
- Do not apply 'improving' factor when in check
- Do not prune quiets at root
- Fetch history only when a quiet move is detected
- Improve branching factor and apply LMR more aggressively
- Fix compilaton issue with clang compiler

Igel 2.2.0
-------------
23-Dec-2019

- Fix futility pruning and use it only after at least one legal move has been played
- Fix 32bit overflow in syzygy probing code that caused bugs when probing 7 piece positions
- Fix syncronisation issue that caused "connection stalled" in Linux OS
- Fix overflow bug that prevented using transposition table bigger than 32 GB
- Improve performance in SMP mode and avoid copying the pawn hash table for each worker
- Improve performance in SMP mode when clearing large hash size (more than 64 Gb)
- Improve performance in SMP mode and solve cache coherency issues when calculating node/tbhits count
- Improve performance of tuner and perform multithreaded texel tuning
- Impove performance and use hardware instruction to count leading zeroes (lsb/poplsb)
- Improve performance in SMP mode and start worker threads before the main thread
- Improve performance in SMP mode and skip random depths by worker threads (Laser/Ethereal method)
- Improve performance in Linux OS and use -flto compiler option (around 10% of increase of NPS)

Igel 2.1.0
-------------
20-Nov-2019

- Implement ponder option
- Implement level uci option: where 1 to 10 is a level suitable for amateurs, level 11 to 19 suitable for professional players and level 20 is suitable for chess engines
- Re-tuning evaluation using licess-quite set and texel tunning

Igel 2.0.0
-------------
05-Oct-2019

- Fix evaluation bug in SMP mode that significantly affects performance (~300 elo)

Igel 1.9.2
-------------
24-Sep-2019

- Tuning of evaluation parameters

Igel 1.9.1
-------------
22-Sep-2019

- Fix time control mode "nodes limit"
- Fix problem when a bestmove may become 0 in case tb search failed
- Fix bug #96: incorrect evaluation of position 4k3/8/8/8/5n2/1R6/6P1/5K2 w KQkq -
- Fix bug #97: incorrect evaluation of king exposed
- Expose evaluation of a position by implementing "eval" command option

Igel 1.9.0
-------------
01-Sep-2019
- Support macOS
- Use different base for evaluation parameters and tune them using coordinate descent
- Implement queen and knight mobility evaluation
- Improve speed when checking time limits
- Fix underrun bug when clearing pieceStack
- Extend recaptures only when searching in PV
- Disable ponder until discovered issues are fixed

Igel 1.8.3
-------------
28-Jul-2019
- Drop into qsearch at depth <= 0 without checking for tt
- Avoid null move prunning if a tt hit has been discovered
- Fix the detection of a root position
- SEE margin improvements

Igel 1.8.2
-------------
17-Jul-2019
- Improve time management of worker threads when number of workers is high
- Improve time management in absolute time controls

Igel 1.8.0
-------------
09-Jul-2019
- Re-write UCI communication functionality
- Implement ponder (aka 'permanent brain')
- Do not store result from interrupted search in tt hash
- Do not return result from interrupted search as 'best move'
- Fix the pv count when returning draw or moves from tt hash
- Move to Visual Studio 2019 cmake syntax

Igel 1.7.0
-------------
17-Jun-2019
- Avoid LMR for moves that make pawn pushes to 5th and 6th ranks
- Apply LMR at shallow depths
- Implement counter move, follow up move and history move pruning 
- Implement probcut
- Avoid prunning in IID path
- Enable LMR during endgames

Igel 1.6.0
-------------
26-May-2019
- Re-write killer moves functionality and drop mate killers
- Re-write move ordering and introduce counter move heuristics
- Re-write LMR functionality: take into account 'improving' factor and prune more aggressively
- Increase MAX_PLY to 128 from 64
- Use tt moves in qsearch as a first move

Igel 1.5.1
-------------
09-May-2019
- Improving time management
- Fix old cpu builds by removing popcount instructions
- Optimize lazy smp code

Igel 1.5.0
-------------
05-May-2019
- Improving usage of transposition table in search and qsearch
- New pruning techniques: static null pruning, mate distance pruning
- New eval params + texel tuning + code refactoring of eval function

Igel 1.4.2
-------------
09-Apr-2019
- Texel tunning using Zurichess test positions (725k) taken from http://www.zurichess.xyz/blog/texels-tuning-method/
- Fixing a bug with evaluation of pair of the knights. The buggy code was evaluating the pair of black kings and the pair of white kings

Strength compared to Igel 1.4.1 and other engines:

Igel 1.4.2 64 POPCNT vs 1.4.1 64 POPCNT
tc=all/10+0.1
threads=1
hash=1024
book=up to 12 moves for both engines
EGTB=3-4-5 piece
Score of Igel 1.4.2 64 POPCNT vs Igel 1.4.1 64 POPCNT: 1656 - 1236 - 725  [0.558] 3617
Elo difference: 40.53 +/- 10.16

Igel 1.4.2 64 POPCNT vs 1.4.1 64 POPCNT
tc=all/60+0.6
threads=1
hash=1024
book=up to 12 moves for both engines
EGTB=3-4-5 piece
Score of Igel 1.4.2 64 POPCNT vs Igel 1.4.1 64 POPCNT: 1166 - 887 - 627  [0.552] 2680
Elo difference: 36.30 +/- 11.54

Igel 1.4.1
-------------
25-Mar-2019
- Fix bug with evaluation of a position at a max ply

Igel 1.4
-------------
17-Mar-2019
- Implemented support for syzygy tablebases (uci options SyzygyPath and SyzygyProbeDepth)
- Changed the move ordering during root search
- Changed evaluation of late end-games
- Minor memory optimisations (decrease memory usage by ~2 Mb)
- Cosmetic changes: report tbhits, proper node count from primary & lazy smp threads

Strength compared to Igel 1.2, Igel 1.3 (various configurations) and other engines:

Igel 1.4 64 POPCNT vs 1.3 64 POPCNT
tc=all/60+0.6
threads=11 (for Igel 1.4)
threads=1  (for Igel 1.3)
hash=6144
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used only by Igel 1.4, because Igel 1.3 does not support EGTB)
Score of Igel 1.4 64 POPCNT vs Igel 1.3 64 POPCNT: 118 - 13 - 54  [0.784] 185
Elo difference: 223.72 +/- 46.36

Igel 1.4 64 POPCNT vs Igel 1.2 64 POPCNT
tc=all/10+0.1
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used only by Igel 1.4, because Igel 1.2 does not support EGTB)
Score of Igel 1.4 64 POPCNT vs Igel 1.2 64 POPCNT: 883 - 440 - 677  [0.611] 2000
Elo difference: 78.25 +/- 12.52

Igel 1.4 64 POPCNT vs Igel 1.2 64 POPCNT
tc=all/10+0.1
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=disabled for both engines
Score of Igel 1.4 64 POPCNT vs Igel 1.2 64 POPCNT: 813 - 506 - 686  [0.577] 2005
Elo difference: 53.62 +/- 12.39

Igel 1.4 64 POPCNT vs Igel 1.3 64 POPCNT
tc=all/10+0.1
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=disabled for both engines
Score of Igel 1.4 64 POPCNT vs Igel 1.3 64 POPCNT: 727 - 536 - 740  [0.548] 2003
Elo difference: 33.23 +/- 12.09

Igel 1.4 64 POPCNT vs Igel 1.3 64 POPCNT
tc=all/10+0.1
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used only by Igel 1.4, because Igel 1.3 does not support EGTB)
Score of Igel 1.4 64 POPCNT vs Igel 1.3 64 POPCNT: 789 - 538 - 673  [0.563] 2000
Elo difference: 43.83 +/- 12.44

Igel 1.4 64 POPCNT vs GreKo 2018 (2708)
tc=40/960 (CCRL 40/40)
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used only by Igel, because Greko does not support EGTB)
Score of Igel 1.4 64 POPCNT vs GreKo 2018: 10 - 13 - 27  [0.470] 50
Elo difference: -20.87 +/- 65.99

Igel 1.4 64 POPCNT vs WyldChess 1.51 64 POPCNT (2687)
tc=40/960 (CCRL 40/40)
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used by Igel and WyldChess)
Score of Igel 1.4 64 POPCNT vs WyldChess: 19 - 18 - 13  [0.510] 50
Elo difference: 6.95 +/- 84.36

Igel 1.4 64 POPCNT vs ECE-X3.5 64 (2646)
tc=40/960 (CCRL 40/40)
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used only by Igel, because ECE-X3.5 does not support EGTB)
Score of Igel 1.4 64 POPCNT vs ECE-X3.5 64Bit: 23 - 21 - 6  [0.520] 50
Elo difference: 13.90 +/- 92.40

Igel 1.4 64 POPCNT vs DanaSah 7.3 (2640)
tc=40/960 (CCRL 40/40)
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used only by Igel, because DanaSah 7.3 does not support EGTB)
Score of Igel 1.4 64 POPCNT vs DanaSah 7.3: 19 - 15 - 15  [0.541] 49
Elo difference: 28.43 +/- 82.62

Igel 1.4 64 POPCNT vs Fridolin 3.00 (2672)
tc=40/960 (CCRL 40/40)
threads=1
hash=1024
book=up to 8 moves for both engines
EGTB=3-4-5 piece (used by Igel and Fridolin)
Score of Igel 1.4 64 POPCNT vs Fridolin 3.00: 11 - 18 - 19  [0.427] 48
Elo difference: -51.03 +/- 77.93

Igel 1.3
-------------
05-Mar-2019
- New eval terms for pair of rooks, knights, bishops
- Connected pawn evaluation

Strength compared to 1.2

threads=1
hash=1024
tc all/60+0.6
Score of Igel 1.2 64 POPCNT vs Igel 1.3 64 POPCNT: 947 - 1093 - 1360 [0.479] 3400
Elo difference: -14.93 +/- 9.04

threads=1  (for 1.2)
threads=11 (for 1.3)
hash=6GB
tc all/60+0.6
Score of Igel 1.2 64 POPCNT vs Igel 1.3 64 POPCNT: 38 - 138 - 97  [0.317] 273
Elo difference: -133.47 +/- 34.12                                               

Igel 1.2
-------------
06-Aug-2018
- Fixed tt bug that resulted in random blunders
- Fixed NPS bug
- Fixed infinite stop bug
- Implemented POPCNT support

Igel 1.1
-------------
03-Jul-2018
- Remove leftovers of Strength option to allow running in ChessGUI software 

Igel 0.8
-------------
30-Jun-2018

First release of igel engine, derivative of GreKo 2018.01

What's new:
- lazy smp
- more compact tt (30% smaller than in GreKo)
- max tt size increased from 1024 Mb to 16384 Mb
- razoring at depth <= 2
- futility check improvements
- variable reduction depth in null move prunning
- smaller, variable aspiration window
- variable time management that takes into account opponent time
- miscellaneous improvements

Removed features:
- xboard

GreKo 2018.01
-------------
31-Jan-2018

(fix) * Hashtable fix: do not record score returned from unfinished iteration.
(chg) * Evaluation terms for passed pawns modified.
(chg) * Time management formula modified. Better for very short time controls.
(old) * Variable strength is back.

This version supports reduction of strength by adjustement of search speed.
You can use UCI parameter "Strength" or run GreKo with a command line parameter:

GreKo.exe -s <level>

where level is an integer number from 0 to 100:

Level    Knps   Rating
----------------------------
    0     0.1     1600
   20       1     1800
   40      10     2000
   60     100     2200
   80    1000     2400
  100   10000     2600

You can use any intermediate value for level, speed of search will be interpolated.

GreKo 2017
-----------
08-Jan-2018

*** HAPPY NEW YEAR!!! ***

(new) * Rewritten almost from scratch. Code cleanup.
(new) * Evaluation function redesigned.
(new) * Trained on CCRL games collection (700K+ games) and self-play matches.
(chg) * Time management formula changed.

This version is mostly for experiments with evaluation function tuning.
It doesn't have some features from previous versions (opening book, multipv, variable strength).
Estimated rating 2700-2750 on CCRL scale.

To set hash size in WB mode use command line argument:

GreKo.exe -h <hash size in Mb>

GreKo 2016
-----------
31-Dec-2016

*** HAPPY NEW YEAR!!! ***

(chg) * Search changes: tuning LMR and Nullmove reduction formulas.
(chg) * New terms in evaluation: piece-to-King tropism, strong and weak fields, etc.
(chg) * UCI handles for board control, mobility, pawns etc. replaced with single
        parameter: PositionalKnowledge.
(chg) * Evaluation weights auto-tuned in self-play matches.
(chg) * Source code clean-up: removed unnecessary pseudo-OOP classes Search, Bitboard and Engine.
        More procedural style of code: less verbose, easier to read and type.
(chg) * Fixed compiler warnings in gcc build.


GreKo 2015 ML
-------------

(new) * Added build-it command "learn" for learning from PGN file.
(chg) * Evaluation weights tuned, based on self-play.

This is yet another final release. All search and evaluation algorithms are the same as in GreKo 2015.
ML stands for "machine learning". This is the first time automated evaluation tuning is used in GreKo.

GreKo 2015 ML implements algorithm which is very similar to Texel's Tuning Method (https://chessprogramming.wikispaces.com/Texel's+Tuning+Method).
Main difference is using fast eval() function instead of expensive qsearch() for making predictions of game results.

GreKo's evaluation is parameterized with 27 weight coefficients with the following default values:

 1. VAL_P                =  100
 2. VAL_N                =  400
 3. VAL_B                =  400
 4. VAL_R                =  600
 5. VAL_Q                = 1200
 6. PawnDoubled          =  -10
 7. PawnIsolated         =  -19
 8. PawnBackwards        =   -5
 9. PawnCenter           =    9
10. PawnPassedFreeMax    =  128
11. PawnPassedBlockedMax =  101
12. PawnPassedKingDist   =    9
13. PawnPassedSquare     =  200
14. KnightCenter         =   27
15. KnightOutpost        =    7
16. KnightMobility       =   19
17. BishopPairMidgame    =   20
18. BishopPairEndgame    =   95
19. BishopCenter         =    9
20. BishopMobility       =   72
21. Rook7th              =   24
22. RookOpen             =   17
23. RookMobility         =   40
24. QueenKingTropism     =   99
25. KingCenterMid        =  -41
26. KingCenterEnd        =   33
27. KingPawnShield       =  120

These numbers are stored in file weights.txt. If this file doesn't exist it is created with default values when program starts.

To begin learning in console mode please execute the following command:

learn <games_file> [minIndex] [maxIndex]

where:

games_file - path to PGN file, with or without .pgn extension (for example, for database.pgn you can type "learn database")
minIndex   - low bound of learning interval (optional, 1...27, default = 6)
maxIndex   - high bound of learning interval (optional, 1...27, default = 27)

If minIndex and maxIndex are not specified learning will affect only positional subset of weights, point values remain unchanged. Tuning weights of pieces usually takes longer time and does not always increase playing strength.

On the first execution of learn command for a particular PGN file the program creates FEN file with the same name (database.fen in our example). It contains FEN notation for positions to learn from (not in check, not after capture) plus some additional information (game result, ply, move played). On the next run only this file is used. If you have changed your PGN file and want to repeat learning please delete FEN file first.

During learning some information is printed to console (with copy in file learning.log): number of iteration, current values of weight, loss function on training and validation datasets. After learning new weights are in weights.txt, the original set is in weights.old file.

For files with ~10 K games learning usually takes 1-3 hours on a standard PC. The function was tested with volumes up to 100 K games. Larger files can cause an out of memory error. Intermediate values of coefficients are always in weights.txt, which can prevent data loss in case of unexpected process termination.

Learning algorithm is randomized, on each run the whole dataset from FEN file is randomly divided into training (80%) and validation (20%) subsets. This can lead to slightly different final vectors of weights after different runs.

GreKo 2015
----------
18-Nov-2015

GreKo 2015 is the final release of the third "major" GreKo series, which started in 2006 with GreKo 5.0.
No future changes, improvements or fixes (even critical) are planned on this codebase now.

It is essentially GreKo 12.8, the strongest version in CCRL rating list so far, with two bugfixes:

(fix) * Fixed possible bug in conditions for KBP-K endgame recognition.
(fix) * Mobility table for knights - fixed asymmetry.

Version 13.1
------------
07-Oct-2015

(fix) * Fixed possible bug in conditions for KBP-K endgame recognition.
(new) * Different weights for pawns in opening/middlegame/endgame: 80...120.

Version 13.0
------------
01-Oct-2015

(new) * Penalty for pawn islands in endgame.
(chg) * Default lazy eval margin changed to 250 centipawns.
(chg) * Mobility table for knights - fixed asymmetry.

Version 12.9
------------
01-Aug-2015

(chg) * Better time management for time controls like "N moves in M minutes".
(chg) * Separate configurable null-move reduction value for non-PV and PV.
        Default R=3 and R=0, which means not using null-move on PV.

Version 12.8a
--------------
15-July-2015

(chg) * Changed time management for zero-increment time controls.

Version 12.8
------------
19-May-2015

(new) * Added UCI option QChecks: generate checks in qserch when qply < QChecks. Default value = 2.
(chg) * Do not use LMR in late endgame and when move is a killer move.
(chg) * Small changes in search extensions logic.

Version 12.6
------------
25-Apr-2015

(chg) * Default weight for material changed from 60 to 50 percent.
(chg) * Default lazy eval margin changed from 150 to 200 centipawns.
(chg) * Small optimizations in moves sorting: less swaps, return hash move immediately.

Version 12.5
------------
21-Dec-2014

(fix) * Case insensitive parsing for UCI "setoption" command, in line with UCI protocol description.
(chg) * Time management formula changed, providing much stronger play at superfast controls.
(chg) * Replaced std::vector with fixed-syze arrays for storing principal variations in search.
(chg) * Recapture extensions added.
(chg) * Extensions now are limited with the rule: ply < 2 * (current iteration number).
(chg) * LMR if turned off in late endgames.
(chg) * Code reformatting here and there.

Version 12.1
------------
07-Oct-2014

(fix) * Linux build: fixed missed typedef in types.h.
(fix) * Linux build: fixed compiler warnings.
(fix) * Linux build: fixed time measurement in perft.
(chg) * Evaluation: scale bishops pair between midgame and endgame.
        About +15 Elo in self-play after 600 games.

Version 12.0
------------
1-Apr-2014

*** JUBILEE EDITION ***

Change in the version number marks 12-year anniversary of GreKo :)

(new) * Added internal iterative deepening code (IID search).
(chg) * Late moves reduction logic changed (count quiet moves only).
(chg) * Default evaluation weights modified.

Version 10.3.1
--------------
16-Mar-2014

This is a bugfix release. No changes in playing strength or style expected.

(fix) * Typedefs for Windows build fixed.
(fix) * Fixed incorrect draw claim in "King + minor vs. King + minor" endgames.
(chg) * Evaluation size changed from 32 to 16 bits.
(chg) * Hash entry size changed from 24 to 16 bytes.
(chg) * Small protocol fix for Xboard (start in UCI mode).
(chg) * "console" command (for debug in command line).

Version 10.3
------------
31-Dec-2013

*** HAPPY NEW YEAR !!! ***

(fix) * Engine output in Xboard mode modified.
(fix) * Time management improved. Do not leave much unused time in games with increment.
(chg) * Lazy eval margin reduced from 400 to 150 centipawns (as before v10.2).
(chg) * Non-linear scale for passed pawns, mobility, king safety.
(chg) * Different scoring for blocked and free passed pawns.
(chg) * New formula for adjustable speed/rating -- thanks to Alexander Schmidt.
(chg) * Default UCI_ELO changed to 2800.
(chg) * Source code reformatted a bit.

Version 10.2
------------
30-June-2013

(new) * Draw score parameter added (sort of contempt factor).
(chg) * More configurable parameters for search and evaluation.
(chg) * Lazy eval margin increased from 150 to 400 centipawns.

Version 10.0
------------
01-Mar-2013

(fix) * Change in function signature in unix.cpp, to fix Unix build.
(old) * Rollback to search/evaluation from v9.7, which is stronger than v9.8.
(new) * Nullmove depth condition changed from (depth > 2) to (depth > 1).
(chg) * Source code reformatted for better readability.

Version 9.8
-----------
31-Dec-2012

(new) * Randomizing eval UCI/config parameter (just for fun).
(chg) * Evaluation: PSQ-tables changed, bonus for moving forward.
(chg) * SEE and MVV/LVA code updated, more clean design.
(chg) * Small tweaks in search.
(chg) * Mate threats extensions.
(chg) * Bitboards code reformatted.

Version 9.7
-----------
31-Aug-2012

(chg) * Endgame heuristics for KBP-K and opposite color bishops.
(chg) * Depth limits for null-move and LMR modified.
(chg) * Hash overwriting rule modified (simpler).

Version 9.6
-----------
05-Aug-2012

(chg) * Return to scheme with one killer move per ply (plays better).
(chg) * LMR: history condition restored.
(chg) * UCI parameters for evaluation modified.
(chg) * Elo/Knps formula modified: play weaker at handicap levels.
(chg) * Code cleanup. Return to C++98 Standard.

Version 9.5
-----------
24-June-2012

(fix) * Config file parameter names fixed.
(new) * Evaluation weights: config and UCI options.
(chg) * LMR conditions modified.

Version 9.3.1
-------------
15-June-2012

(fix) * 'position fen ...' UCI command fixed.

Version 9.3
-----------
12-June-2012

(fix) * Fixed pv output in UCI mode.
(fix) * Claim draw after 3rd repetition.
(new) * 'uci go depth ...' option added.
(chg) * Checks in qsearch code modified.

Version 9.2
-----------
15-May-2012

(chg) * Source code refactoring. No changes in search/eval.
(chg) * New formula for Elo/Knps settings.

Version 9.0
-----------
31-Dec-2011

(chg) * MVV/LVA instead of SEE in sorting moves (works much faster).
(chg) * Small optimization for sorting procedure in qsearch.
(chg) * Conditions for LMR modified.
(chg) * Null move on PV granted.
(chg) * Using std::vector for game history and undo information.

Version 8.2
-----------
01-Aug-2011

(chg) * Search code refactoring: 
        global functions and variables converted to class members.
(chg) * History counters scheme changed.
(chg) * Use history condition in LMR.
(chg) * New terms in evaluation: 
        - king-pawn distance in endgame, 
        - knight mobility, 
        - trapped bishop.
(chg) * Evaluation weights tuned.
(chg) * Small optimization in hash table.
(chg) * Hash overwriting logic changed.

Version 8.1.1
-------------
08-July-2011

(fix) * Fixed bug in opening book lookup code: added check for moves legality.

Version 8.1
-----------
05-July-2011

(chg) * Futility code optimized.
(chg) * Fixed a typo in evaluation.
(chg) * Small code refactoring.

Version 8.0
-----------
31-Dec-2010

(new) * Mating moves in sort ordering.
(chg) * LMR conditions changed; verification when LMR score exceeds alpha.
(chg) * Evaluation function completely rewritten.

Version 7.2
-----------
05-Aug-2010

(chg) * Returned to pseudo-legal move generator. Faster, simpler.
(chg) * Single reply extensions removed.
(chg) * Late move reduction in a very basic form. No verification re-search.
(chg) * Limited strength levels tuned.

Version 7.1
-----------
19-July-2010

(new) * New options: UCI_LimitStrength, UCI_Elo and LimitKNPS.
(chg) * Time management tuned.

Version 7.0
-----------
21-June-2010

(chg) * Search modified.

Version 6.5
-----------
01-June-2009

(new) * Fixed nodes and fixed depth modes, under UCI and WB.
(new) * Evaluation weights now can be set with UCI 'setoption' command.
(chg) * Removed not used bitboard masks.
(chg) * Time allocation algorithm changed.
(chg) * Command parser reorganized.
(chg) * Removed many terms in eval. Modified some other. Added TEMPO term.
(chg) * Futility conditions changed.
(chg) * Delta pruning conditions changed.
(chg) * Nodes counters changed to int64.
(chg) * Overall code cleanup and reformatting.
(chg) * Makefile simplified.

Version 6.4
-----------
14-May-2009

(fix) * Single reply extensions restricted to PV-nodes only. Prevents from search explosion in some won positions.
(new) * GreKo.ini file added, with evaluation weights - sort of "personality settings". Not tuned at all.
(new) * Makefile.linux added.
(chg) * Command line parameters (-hash and -log) are not used anymore. Moved to GreKo.ini file.
(chg) * Code clean-up and reformatting - a lot of obsolete code removed or changed.

Version 6.31
------------
29-Apr-2009

(chg) * Removed non-used field "flags" in hash entry, effective hash capacity increased.
(chg) * Hash allocation simplified.
(chg) * Code clean-up and reformatting.

Version 6.30
------------
05-Feb-2009

A lot of clean-up work without significant changes in core algorithms.

(chg) * Small change in CountBits() function.
(chg) * Time management scheme simplified.
(chg) * Sort values increased, to make less history scalings.
(chg) * Adjust mate scores in hash only for real mates.
(chg) * Pruning conditions changed for nullmove, futility, LMR and delta pruning.
(chg) * Removed some evaluation terms.
(chg) * Mobility evaluation changed.
(chg) * Passed pawns evaluation changed.
(chg) * Weights tuned a little.

Version 6.25
------------
15-Dec-2008

(fix) * Fixed bug with "..." in UCI mode under Arena.
(fix) * Fixed: do not leave search with empty root pv.
(chg) * Faster search: do not copy pv in beta nodes.
(chg) * Turned off nullmove and LMR on PV.
(chg) * Generate checks in qsearch only on qply == 0.
(chg) * SEE delta pruning in qsearch on qply > 1.
(chg) * Small changes in code formatting.
(chg) * Small changes in popcount function.

Version 6.1
-----------
24-Oct-2008

(fix) * Fixed "book import" and "book load" commands to make correct book merges.
(fix) * Fixed setup from FEN: correct hash for positions with black to move.
(fix) * Fixed short notation recognizer: now accepts "O-O" and "O-O-O".
(chg) * Pawn hash is now a separate 32-bit field, not a part of the main 64-bit hash.
(chg) * New opening book (not compatible with 6.0 book).
(chg) * Time management scheme tuned a little.
(chg) * Small changes in search (qchecks, pvs, extensions).
(chg) * Small speed-up in evaluation.

Version 6.0
-----------
29-Sept-2008

(fix) * Fixed bugs in move generator (en-passant) and incremental check detector (en-passant, castlings);
        all of them could lead to making illegal moves.

(new) * Opening book: internal binary format and PGN-like text files supported.
(chg) * More compact magic lookup tables (nothing special, just conventional variable bits per square approach).
(chg) * More reliable search.
(chg) * Short notation support in command line.

When GreKo starts, it reads book.bin file. If there is no book.bin, it tries to read book.txt.

You can create your own book.txt, or import games from PGN and save them as book.bin. Source PGN file
should not contain comments or variations.

How to create book (example):

White(1): book clean
White(1): book import file1.pgn 40 w
maxPly = 40
white's moves only
Games: 1193, nodes: 22730
White(1): book import file2.pgn 40 b
maxPly = 40
black's moves only
Games: 1157, nodes: 44409
White(1): book import file3.pgn
maxPly = 20
Games: 1919, nodes: 52633
White(1): book save book.bin
writing book.bin...
White(1): bk
 e4 54%, d4 33%, Nf3 8%, c4 2%, g3 0%, Nc3 0%, b3 0%

Version 5.9
-----------
02-Aug-2008

(fix) * Fix in reporting NPS under UCI
(fix) * Check extensions fixed
(chg) * Make the move instantly when checkmate is found
(chg) * Draw recognizer modified
(chg) * Bishop and bishop pair values tuned
(chg) * Small changes in search

Version 5.8.5
-------------
16-July-2008

Changes in move generator and in search:

(new) * Magic bitboards (can be turned off when MAGIC is not #defined in bitboards.h).
(new) * Legal-only move generation on all stages. At last GreKo can cheat in perft
        by not actually making moves at depth = 1 :)
(new) * Simple checks generation on first levels in qsearch.
(new) * Static exchange evaluation for captures (with batteries, without pins 
        and promotions on ply > 0).
(chg) * Pruning decisions do not rely on pv/non-pv node type, again. 
(chg) * Futility pruning turned off, again.
(chg) * Use SEE score for delta pruning in qsearch instead of VALUE[captured].
(fix) * Fixed incorrect PGN disambiguation code (introduced in 5.8, but does not affect
        playing games, just in epdtest mode) -- thanks to Dann Corbit for bug report.

Tactical abilities seem to increase:

        WACNew   WACNew   NewIQ
        1 sec.   5 sec.   10 sec.

5.7.1   271      287      243
5.8     270      286      239  (-1...-4 solved positions - due to PGN bug)
5.8.5   290      297      276

This version could be named 5.9 since it has so many changes, but I prefer to save 
numbering space for some possible improvements.

Version 5.8
-----------
10-July-2008

The main goal of this version is source code refactoring. Core datastructures
are now more "C++ style". Position and Move data encapsulated in classes.
Got rid of pointers, some #defines etc. Small optimization for all bitscan loops.

As a result the source code is 5% more compact than 5.7.1. Perft and search run
20-30% faster (at least in the initial position).

Small changes in the move generator (castlings). Search and evaluation algorithms 
are almost unchanged except for a little fix in the hashing scheme. En-passant 
and castling rights were not taken into account in the hash code, now they are.

Time management scheme changed a little, to prevent possible losses on time 
in 3+3 games. Thanks to Volker Pittlik for mentioning the bug. Multi-PV UCI mode
modified, however it is still slow and non-optimized.

Version 5.7.1
-------------
25-May-2008

(fix) Fixed bug in PVS code.

Version 5.7
-----------
19-May-2008

(fix) Mate scores in hash now handled correctly
(fix) Do not skip draw scores in hash
(fix) PV update code: replaced "for" statement with "memcpy" call
(chg) Time management tuned a little
(chg) Source code reformatted
(new) MSVC8 project file added

Version 5.6
-----------
12-Apr-2008

(fix) Fix in MVV/LVA sorting
(fix) Fix in "stop" command processing - don't report it is incorrect
(new) Futility pruning at non-PV nodes, depth = 1
(new) Delta pruning in qsearch
(chg) Replaced get_new_depth() function with more clear code
(chg) Principal variation search (PVS) instead of plain alpha-beta
(chg) Nullmove conditions changed (R = 4, etc.)
(chg) LMR conditions changed
(chg) Fifty moves draw condition - after checkmate detection
(chg) Reply to checks in qsearch (coming back)
(chg) Time management scheme changed (use more time in increment games)
(chg) Trapped bishop evaluation changed
(chg) Repetition handling changed

Version 5.5
-----------
31-Dec-2007

*** HAPPY NEW YEAR!!! ***

(chg) Hash lock 32-bit instead of 64.
(chg) New hash allocation scheme.
(chg) Futility pruning turned off.

Version 5.4
24-Jul-2007
-----------

(chg) Minor change in storing generated moves.
(chg) Recompiled as C++ code with MSVC 2005 Express (Windows) and g++ 3.3.3 (Linux).

Version 5.3
20-May-2007
-----------

(chg) Using hash eval from previous iteration for pruning
(chg) Small optimization in attack detector
(chg) Small optimization in PV handling
(fix) Fixed crash on epd-files ended with empty lines

Version 5.2.5
23-Feb-2007
-------------

(chg) Adjust checkmate scores in hash
(chg) Minor changes in evaluation (mobility, bishops pair etc.)

Version 5.2
12-Feb-2007
-----------

(fix) Main hash table size is not divided by 2 anymore.

(new) Added futility pruning, in a very simple and straightforward form.

(chg) Search: tuned some conditions for LMR and Nullmove.
(chg) Eval: King safety value scaled up a little.

Overall improvement in strength is 50...70 points for blitz games.

Version 5.1
17-Jan-2007
-----------

(new) New terms in evaluation: weak fields, pieces on strong fields, etc.
(chg) Piece-square tables tuned a little.

Version 5.05
8-Jan-2007
------------

(fix) Reply to "isready" command in thinking mode
(fix) Fixed bug with undo buffer overflow in UCI at move ~150

(new) Currentmove and nps info under UCI
(new) K+B or K+N can't win regardless of opponent's material
(new) Far passed pawns bonus

(chg) More robust and stable search
(chg) New time management scheme: not it does not lose on time in 1+0 games under Arena
(chg) Piece values tuned

Version 5.0
31-Dec-2006
-----------

Engine completely rewritten in pure C.

* Both winboard/xboard and UCI support
* Multi-PV mode in UCI
* No pondering
* No opening book and learning
* Strength is about +20 points compared to version 2.817

Command line keys for xboard:

-log        write all input and output in greko.log file
-hash 32    set hash size no more than 32 Mb (for example)

Version 3.3a
16-Jul-2006
-----------

(fix)   * Few lines in pondering code fixed. 
          Now seems to work corectly (at least, under Winboard and Arena).

Version 3.3
14-Jul-2006
-----------

1. Bugfixes.
2. Search clean-up.

(fix)   * Fixed bug in UpdateHistory which caused assertion fails from time to time (incorrect constant).
(fix)   * Now "force" command stops pondering mode. Thanks to Volker Pittlik for bug report.

(chg)   * Futility pruning thrown away from search. 
(chg)   * Out-of-check extension changed to 0.75 ply - always.
(chg)   * Nullmove parameter changed from R = (3 or 4) to const R = 3, more safe.
(chg)   * Bitboard operation PopLSB() inlined.


Version 3.2
26-Apr-2006
-----------

1. Bugfixes and code stability.
2. Evaluation clean-up. 

(fix)   * Wrong comment in MainCommandProcessor() fixed. Multithreading is not mentioned anymore,
          current GreKo is a single-threaded program.
(fix)   * A really gross bug with negative depth in UpdateHistory() & RecordHash() fixed.
          Now the depth is checked to be positive in both functions.
(chg)   * Evaluation: A lot of alchemy with attacks and mobility removed from StaticEval().
          Added very basic evaluation of R, N, B mobility instead. Works faster and better.
(chg)   * Out-of-board field index constant changed from -1 to NF = 64. Now all field index 
          variables expected to be unsigned: 0...63 for fields, 64 for offboard.
(chg)   * Mailbox arrays U[64], L[64], UR[64], ... converted to single array STEPS [8][64].

(src)   * Begin to re-format source code. Indentation style: all tabs replaced by spaces.


Version 3.1
8-Jan-2006
-----------

After one-year meditations GreKo 3.x branch is again in development. 
This version goals: 1. bugfixes, 2. some changes in search 3. reviewing old code 

(fix)   * Buffer-overrun safety code in user input. Many thanks to Dann Corbit!
(fix)   * Single-reply extension (1 ply) __really__ turned on (it worked only like simple check 
          extension in 3.0).
(fix)   * Mate threat detection now works correctly (in 3.0 it was never triggered because of 
          too small search window in nullmove).

(new)   * "perft <depth> explain" command: shows perft values for all subtrees in the root.

(chg)   * Win32 binary built with MSVC 6.0 + STLPort. Works faster than MSVC's STL version.
(chg)   * Makefile for gcc (MinGW, Linux, FreeBSD) simplified. Filenames corrected.
          No more ../bin and ../obj directories.
(chg)   * Out-of-check and pawn-on-7th extensions restricted for far-behind and far-ahead
          matearial balance, respectively.
(chg)   * Window size in root diminished to +/-50 centipawns.
(chg)   * Recapture extensions diminished from ply to ply/2.
(chg)   * Default setting: ShowEvalForWhite = 0.
   

Version 3.0
1-Jan-2005
-----------

   * Optimizations in speed.
   * Built-in random generator instead of standard rand() function.
   * Opening book now is compiler-independent (MSVC, gcc at least).

Version 2.85
31-Dec-2004
------------

        * Fixed: incorrect resignation in some drawn endgames (incorrect pruning in QSearch).
        * New feature: GreKo now can create opening book from PGN for selected player.
        * A lot of changes in evaluation (more realistic), minor changes in search (extensions, pruning).
        * Anti-zeitnot code for blitz without increment, now GreKo loses on time more rarely.

Version 2.817
01-Nov-2004

        * Fixed: bug with small hash size specified in .ini file.
        * New command: "perft verify" for testing legality of move generator.
        * Some speedup in move generator and evaluator (less bitboard operations etc.)

Version 2.815
01-Sept-2004

   * Evaluation rolled back to 2.69 SNG.
   * Search and other stuff like in 2.812.
   * 50 Elo stronger compared to 2.812 in my tests.

Version 2.812
23-July-2004

   * Search: inefficient copying of internal fail high/low pv's deleted.
   * Evaluation: passed pawn weights diminished.
   * Time management scheme for fail high/low in the root simplified.
   * More statistics in "epdtest" routine.

   This version is approx. 50 Elo points stronger in blitz than ver. 2.81.

Version 2.81
01-June-2004

   * Overall code clenup for some basic operations (bitboard functions, make/unmake moves etc.),
     that gives +3...5% performance in various tests.

   * Some kind of futility pruning implemented in search.

   * "epdtest" command output modified, time and nodes calculations in test suites corrected.

   * New default settings: Learning=0, ShowEvalForWhite=0.

Version 2.80
15-May-2004

   * Fixed bug in QSearch checks generator.

Version 2.71
15-Mar-2004

   * Hash structure optimized: sizeof(CHashEntry) reduced from 32 to 16 bytes,
     sizeof(CPawnHashEntry) reduced as well.
   * New console command:     book digest <pgnfile> <depth>
     Creates plain text list of all opening lines in pgn file, useful for creation
     GreKo's repertoire file.

Version 2.70
01-Mar-2004

   * Internal iterative deepening added.
   * Opening repertoire file added.

Version 2.69 SNG
17-Feb-2004

Private version for participation in CIS Computer Championship.

   * Evaluation for pawn structure tuned. Now at last it can solve WAC-100.
   * Weak pawns are penalized less if they are not on the semi-open lines 
          (or opponent does not have rooks).

Version 2.68   
09-Feb-2004

   * First check in row is extended now by 1 halfmove, and second in a row - by 0.75.
   * New term in evaluation: Queen near weak King (in addition to Q-K tropism).
   * Display evaluation either for White or for engine (configurable).
   * Piece-field tables changed (now like in Crafty). Two new tables for K in endgame.

Version 2.67
05-Feb-2004

   * Move generator changed: under check generate only candidates to check evasion.
     Significant speedup in tactical positions and test suites.
   * New evaluation terms: pinned pieces (currently only pinned to King and Queen).
   * New parameter in GreKo.ini: OfferDraw, 0 or 1. (To avoid pop-up messagebox in games vs. Plywood :))

Version 2.65
31-Jan-2004

   * All move sorting (both in QSearch and normal search) use now SEE instead of MVV/LVA.
   * New time management scheme: add more time after fail high/low in the root.

Version 2.64
27-Jan-2004

   * Fixed GREAT bug in QSearch pruning (now it does not prune first capture).
   * Does not prune captures on first ply of QSearch at all.

Version 2.63
20-Jan-2003

   * Optimized mobility evaluation.
   * Tweaking extensions.
   * Added pawn phalangues and blocked on initial field in pawn evaluation.

Version 2.62
12-Jan-2004

   * Added simple checks on the first ply of QSearch.
   * Tweaks in evaluation.
   * Check extension returned back to 1 halfmove.
   * Yet another bugfix in KBPK endgame (wrong field color tests for black bishop).

Version 2.61
7-Jan-2004

   * Faster PopCount function (pure arithmetics instead of table lookup).
   * Tweaks in evaluation.
   * Fixed output of fail high/low PV's in epdtest routine.

Version 2.60
22-Dec-2003

   * Fixed bug in KBPK endgame (did not test file=a/h for black pawn).
   * Changes in QSearch: under check always generate all legal moves, 
          do not return static eval
   * New opening book format - more compact .bin file and more detailed "bk" command output.
   * New parameter for configuring book logic: learn weight (see GreKo.ini file).
   * Binary book and learn files now have headers with version signature.
   * Fixed (?) bug in making book from big PGN.
   * SAN parser improved for faster detection of protocol commands which are non-moves.
   * Adding more time for thinking when fail-low at the root.

Version 2.59a
08-Dec-2003

   * Check extensions hadnling fixed.

Version 2.59
07-Dec-2003

   * Some critical fixes in time management for better stability
     (got rid (?) of sudden wrong mate claiming bugs)
   * New check extension scheme: the first check is extended by 1 ply, then by 0.75
   * BAD_TRADE weight reduced to 0.40 pawn
   * "result" command parsing in pondering mode - fixed


Version 2.58
01-Dec-2003

   * g_ThinkPos replaced with CPosition parameter in all AlphaBeta() functions
   * check extension returned back to 1 halfmove (was 0.75)
   * extend only at ply <= 2 * g_IterDepth (was g_IterDepth + 11)
   * QUEEN_AND KNIGHT and BISHOP_AND ROOK returned back to static eval
   * Knight-to-King tropism only with friendly Queen on the board
   * no new hash hit after extension, just check the depth field in hash entry

Version 2.57
23-Nov-2003

   * New statistics format; more correct time calculation
   * if( !ppv0->empty() ) check before assigning PV to approved PV
   * do not print PV for unfinished iteration
   * minor tuning in eval coeffs

Version 2.56
7-Nov-2003

   * Changes in extensions using SEE score
   * More valuable passed pawns when opponent has little piece material

Version 2.54

   * New routine for bit-scan operation (LSB) using magic 0x78291ACF constant.
   * File History.txt added to source package.

Version 2.53
15-Oct-2003

   * Source code is now portable to Linux and FreeBSD. Many thanks to Andrey Shytov.
   * Got rid of all 0x88 stuff in board representation and moves generation.
   * More accurate evaluation of passed pawns and possible draw in KBP-K endgame.
   * Static exchange evaluator used in move sorting instead of old MVV/LVA scheme.
   * Mate threat extensions added.
   * Check extension value changed from 1.0 to 0.75 halfmove.

Version 2.45
1-Aug-2003

   * This version was included in DVD disc attached to "Game.EXE" #9/2003
     (Russian magazine about computer games)

Version 2.32
June 2003

   Bitboards added. Hybrid scheme (0x88 + bitboards).

Version 2.01
December 2002

   After half a year of development GreKo was re-written from scratch to improve 
   data structures and overall design. 0x88 move generator.


Version 1.10
July 2002

   Stable version with analyze and pondering support.

Version 0.41
11-May-2002

   * Hashtable implemented (using Zobrist scheme).

Version 0.36
1-Apr-2002

   * First public release of GreKo. Only basic features.
