Fizbo chess engine

Fizbo is an original chess engine written by Youri Matiounine.

Current version is 1.9 and can be downloaded from the link at the bottom of this page.

There are 4 versions of the executable:

1. file "fizbo19x64" is the primary engine, and will only run under Windows and requires CPU with "popcount" instruction.
2. file "fizbo19x64_no_pc" does not require "popcount" CPU instruction and can be run on older computers.
3. file "fizbo19x64_no_pc_linux" also does not require Windows virtual memory allocation functions and can be
run on Linux
4. file "fizbo19x64_bmi2" is for modern CPUs with BMI2 instruction set. Specifically, the engine uses instructions PEXT and BLSR. If also uses various AVX2 instructions.


Changes in version 1.9, released December 31, 2016
1. minor bug fixes.
2. minor changes to search.
3. extensive changes to evaluation.
Expected playing strength is approximately +70 ELO vs Fizbo 1.8. Mostly due to new evaluation features.

Estimated strength with 1 CPU/4 CPU is 3,180/3,250 ELO respectively (#6 on CCRL 40/40 list).

Changes in version 1.8, released August 26, 2016
1. added BMI2 executable.
2. reworked and improved pondering logic, fixing pondering time-out bug.
3. reworked parallel search logic. Now it should scale a lot better running on >4 CPUs. This also fixed a bug that sometimes crashed the engine when running on 10 or more CPUs. Scaling for 4 CPUs appears to be largely unchanged.
4. multiple small changes to search and evaluation resulting in approximately +40 ELO improvement in playing strength.

Changes in version 1.7, released March 23, 2016 (executables last changed April 4th 2016, to exclude illegal moves from PV, to add longer PV, seldepth/nps/currmove/hashfull/tbhits to the output, and to correct pondering bug):
1. add support for 6-piece SYZYGY tablebases, including option " EGTBProbeLimit" - set to 5 by default - that allows one to only use 5-pieces (or 4-piece) tables, even if 6-piece tables are present.
2. extensive changes to evaluation function: change existing evaluation features, add multiple new features (including large pawn patterns), change the way evaluation coefficients are tuned. Estimated increase in playing strength is >50 ELO.

Changes in version 1.6, released January 29, 2016 (executables last changed on January 31st to verify that SYZYGY files exist before using them):
1. fixed a timing bug - now engine should no longer time out.
2. fixed a bug in EGTB logic - now engine should work when only 4-piece (and not 5-piece) syzygy tables are present.
3. fixed a bug in main transposition table - now it can be made larger than 2Gb.
4. added option "UseEGTBInsideSearch": when set to false, engine will only use EGTB in root position, not inside search. This allows EGTBs to be used when they are stored on hard drive and not on SSD.
5. various small modifications to search and evaluation, resulting in approximately +30 ELO for 1 core play.
6. multiple changes to parallel search, which now should work as intended. Estimated benefit from running on 4 cores is around +90 ELO.

Changes in version 1.5, released August 16, 2015 (executables last changed on August 29th to remove default SYZYGY path, and to correct a bug in parallel search; single CPU search is unchanged.):
1. engine is now using UCI protocol. This should make it more compatible with modern chess interfaces.
2. various small modifications, mostly to search, resulting in approximately +40 ELO.
3. parallel search had a bug fixed, and should now work as intended. Estimated benefit from running on 4 cores is around 80 ELO.

Changes in version 1.4, released May 18, 2015:
1. various small modifications to search and evaluation, resulting in approximately +30 ELO.
2. engine can now change size of main transposition table on the fly, using Xboard protocol command "memory N". Size of TT is rounded to nearest power of 2.
3. engine can now use 3-4-5 piece syzygy endgame bit-bases and table-bases. Path of syzygy tables can be passed to the engine using Xboard protocol command "egbpath TYPE PATH". On engine start-up it is also taken from environmental variables DTZDIR and WDLDIR, for DTZ and WDL tables respectively.
4. parallel search is now more advanced, allowing multiple active split-points at the same time. This should improve performance on 8 and more CPU cores (sadly, performance on 4 cores is mostly unchanged, aside from increased strength of single core engine).

Changes in version 1.31, released November 21, 2014:
corrected a bug that occasionally crashed the engine (sometimes castling move was made in a position where after castling king would be under attack by opponent's king). Also made some minor changes to evaluation, so that results of version 1.31 will not match results of version 1.3! But playing strength is mostly unchanged.

Changes in version 1.3, released November 12, 2014:
 1. improved transposition table management
    fixed a bug
    reduce size of TT entry to 8 bytes
    started using TT in Q search
    added prefetch
    better aging
2. added aspiration window
3. various small modifications to search and evaluation.
Single CPU improvement over version 1.2 is around +80 ELO (based on self-play at 1 sec/move).

Changes in version 1.2, released July 27, 2014:
 1. improved search
    more aggressive LMR
    better time management
    other misc search enhancements
    single CPU improvement over version 1.1 is +70 ELO (based on self-play at 1 sec/move)
2. added parallel search
    based on a version of enhanced PV splitting algorithm - only one split-point is active at a time
    activated by Xboard command "cores N"
    supports up to 8 cores, but scaling beyond 4 cores is very poor
    estimated improvement on 4 CPU cores is +90 ELO (based on self-play at 1 sec/move)

Features of version 1.1:
 released May 10, 2014
 uses Winboard protocol
 runs on 1 CPU core only
 requires 64-bit Windows
 main transposition table size if fixed at 128 Mb; total RAM use is 144 Mb
 this version does not use endgame bit-bases or table-bases
 no opening book
 is compiled without "AVX" switch, so should run on any Intel "i" CPU
 two versions. The one ending in "no_pc" does not require "popcount" CPU instruction