What's New?

This is Arasan 20.5, released in April, 2018.

Changes in Arasan 20.5
1) Have tuner output objective value to params file.
2) Bug fix in more() function of RootMoveGenerator.
3) Fixes to Syzygy code: enable locking when multi-threaded.
4) Fix very shallow search when MultiPV greater than the number of legal moves.
5) Fix UCI score output when tb hit at root - now outputs score based on tb score (worked with multipv but not when multipv == 1).
6) Do not exit search for forced mate if UCI and search type is fixed depth or fixed time..
8) Remove Nalimov and Gaviota tb support.
9) Fix mate score output in GUI.
10) Add code to save/restore window flags and state in GUI.

Changes in Arasan 20.4 (Jan. 2018):
1) Fix Linux/Mac Makefile so PGO works with clang.
2) Code cleanup. Replace NULL with nullptr in most places (except some C library calls).
3) Fix serious bug in Syzygy tb code for handling cursed losses.
4) Fix "ecocoder" target in Makefile and fix ecocoder code (sync with changes to Notation).
5) Updates to "pgnselect" utility program.
6) A few fixes in the tuner program. Remove ordinal objective (was not working properly).
7) Add -d option to test command so can do fixed depth. Profile uses fixed depth now.
8) Some updates to the label_positions.py tool.
9) Re-tune parameters with larger traning set and more frequent PV updates:
10) Bug fixes in "easy move" code.
11) Some minor changes/fixes to root move ordering:
12) Bug fixes for UCI multi-pv mode.
13) Add UCI contempt option.

Changes in Arasan 20.3 (Nov. 2017):
1) Change queen mobility scoring: square reach beyond 23 squares gets
same score.
2) Re-work scoring for material imbalance with pawns.
3) Bug fixes for EPD/FEN handling (mostly affects utility programs).
4) Bug fixes for bitbases. Mate scores from bitbases were not being
transmitted to the search. Also bitbase scores were being added to
other eval terms which are not relevant for KPK.
5) Syzygy code (Fathom) is imported as a git submodule now.
6) Code restructuring, move piece values into Param class.
7) Change eval scale so Pawn value = 128 (vs. 1000 in 20.2).
8) Implement UCI "searchmoves" option to "go" command.
9) Bug fixes in parameter tuner.
10) If special-case endgame detected, skip other endgame scoring and
just use the special-case code.
11) In UCI MultiPV mode, ensure bestmove that is eventually sent is the
highest-scoring move, and re-order PVs if necessary so that they are
in decreasing score order.
12) Implement BMI2 (PEXT/PDEP) attack computation.
13) Change evasion pruning in qearch.
14) Pack hash entries into 2 64-bits words instead of 3.

Changes in Arasan 20.2 (July 2017):
1) Add probcut to search.:
2) Detect King and Rook pawn vs wrong-color Bishop configuration:
and score near draw, even if opponent has pawns.:
3) Change history score calculation (similar to Stockfish).:
4) Implement countermove history similar to Stockfish and use in move:
ordering. Consolidate history/refutation/countermove history stuff:
into SearchContext class and remove separate History and Refutations:
classes.:
5) Sync with changes to jdart1/Fathom. In particular, pick up a fix for:
crashes when running multithreaded.:
6) Changes/fixes to strength limitation feature.:
7) Fix possible out of range errors in razoring code.:
8) Fixes to king cover parameter tuning code. Re-tune parameters:
. 9) Changes to LMR. Adjust LMR amount based on history values:
. 10) Remove Util class and replace with std library functions.:
11) Allow null move at depth = 1 ply.:
12) Changes to futility, reverse futility, and razoring margins.:
13) Fix possible bug in output of time control increment to PGN.:
14) Separate scoring for outposts in middlegame/endgame.:

Changes in Arasan 20.1 (April, 2017)::
1) Fixes to UCI multipv handling.
2) Fix logic for terminating search on tablebase hit..
3) Bug fixes in parameter tuning code. Use actual sigmoid function when tuning king safety, not an approximated lookup table..
4) Add file-dependent scoring for passed pawns..
5) Fix bug in scoring for rooks behind passed pawns..
6) Allow setting Arasan version string on make command line. Builds done.
between release tags now have versions generated from git commit # (if.
done from a git repository)..
7) In UCI mode, return a move even in cases where a legal draw position.
(according to 3-move rule) exists before search is started. Fixes problems.
with some UCI UIs..
8) Allow LMR of some evasion moves..
9) Remove "forced move" extension (1 single reply to check)..
10) More code cleanup and conversion to C++ 11..
11) Some Android portability fixes. Note: Android build still not fully supported.

Changes in Arasan 20.//>0 (Jan. 2017):
1) Fix to handling of UCI_LimitStrength and UCI_Elo options. These can now be processed in either order and will set the search strength correctly.
2) Revised tuning program. Only the "Texel" method is supported now. Tuner uses a "mean-squared error" objective and takes a labeled EPD file as input. Various optimization methods can be selected. Optimization steps are scaled appropriately based on parameter ranges.
3) Changes to king cover and king safety scoring.
4) Bug fix: Ensure hash move is always checked for validity (was not being done for evasions).
5) Fix possible race condition updating root PV.
6) Add some utility programs and Python scripts to source package.
7) Considerable code cleanup and fixing warnings and possible bugs, notably in Syzygy tb code.

Changes in Arasan 19.2 (August 2016):
1) In UCI mode, don't set tb type when a tb path is received if that path is empty or the string "". Fixes issues under Shredder GUI.
2) Fixes to Syzygy tablebase handling. Don't correct TABLEBASE_WIN scores for depth when storing/retrieving from the hash table. Adjust search scores based on the tablebase score, when available.
3) Make UCI option handling insensitive to the case of the option name, per the UCI spec. Add some error handling for invalid option names.
4) Remove threat extension and related code.
5) Change razoring margins.
6) Simplify king safety scoring and make most king safety parameters tunable.
7) Tuner now uses the Texel method by default and supports the ADAM gradient descent algorithm.
8) Changes to King cover calculation. Give bonus for King cover only if King.
on rank <=2, and do not rate cover relative to King rank.

Changes in Arasan 19.1 (Aug. 2016):
1) Change/fix root move reordering. After wide search phase, just move the pv move first and other moves down.
2) Scoring change: limit range of KING_MOBILITY_ENDGAME array.
3) Add scoring for threats of lower-valued pieces and pawns against higher-valued pieces (previously only pawn threats were scored)..
4) Add support for thread affinity via the hwloc library (not enabled in the release builds; must recompile from source to get this)..
5) Add restrictions on SEE pruning: don't prune evasions, and only prune checking moves if they are not discovered check..
6) Change extension logic: extend checks if not losing or if discovered. Other checks can be pruned (SEE pruning) or reduced. Remove FORCED2 extension (2 legal evasions)..
7) Pick up en passant fixes from Fathom library..
8) Add fixes for Android compatibility (although note: Makefiles still do not support Android cross-compilation)..
9) Fix bugs in Syzygy probing to avoid non-progress in endgames where a repetition has occurred..
10) Non-POPCNT builds use a better software POPCNT implementation..
11) Change IID conditions: allow IID in check if in PV. In non-PV node, score must not be too bad (like Protector)..
12) In "wide" search mode do not shrink upper bound of search window..
13) Small changes to LMR reduction formula..
14) Fixes to terminate multithreaded searches faster when fail-high detected..
15) Changes to draw score calculation when ratings are available and to logic for "accept draw.".
16) Fix MVV/LVA calculation for move ordering..

Changes in Arasan 19.0.1 (May 2016):
1) Fix tablebase options in UCI mode. Comment out default path from arasan.rc.

Changes in Arasan 19.0 (April 2016):
1) Adjust scoring for some pawnless endgames.
2) Add Syzygy tablebase support, using Fathom library.
3) Convert codebase to C++ 11. Remove support for older compilers. Use standard types from stdint. Use platform bswap macros where available for byte re-ordering. Misc other code cleanups and portability fixes.
4) Update killers on lower bound hash hit. But not if in check. Move guard conditions for killer/history update to search.cpp and make them consistent.
5) Change qsearch pruning conditions.
6) Limit threat move extension to low depth as Stockfish did.
7) Fixes to IID. Change IID depth conditions.
8) Omit all forms of forward pruning (before the move gen/ search loop) when any of IID, VERIFY or SINGULAR flags are set.
9) Allow fractional (half-depth) reductions. Limit reductions so they don't hit the q-search. Don't set LMR flag if reduction is 0. Change min LMR search depth to 3 ply.
10) Use only 2 killer moves (not also killers from previous ply as formerly).
11) Do pruning after LMR and using reduced depth (except use non-reduced depth for LMP).
12) Modify how history scores are maintained and used (similar to Texel).
13) Make history & refutation tables local to threads.

Changes in Arasan 18.3 (Feb. 2016):
1) Bug fix: properly handle "cores" and "memory" options for Winboard.
2) Adjust futility margins and allow futility pruning up to depth 5.
3) Modify pruning condiitions slightly.
4) Bug fix: guard against null move in updateHistoryMove.
5) Bug fix: fix locking for PV update.
6) Properly handle errors opening files in tuner program. Don't allow validation (-V) when running multi-threaded (does not work). Some code cleanup in the tuner.
7) Fix UCI tablebase type selection option.
8) Remove some restrictions on LMR.
9) Fix padding in NodeInfo for better alignment.
10) Allow reduction of moves in the killer and refutations phases of movegen.
11) Bug fix: initialize child node from parent in searchSMP.

Changes in Arasan 18.2 (December, 2015):
1) Make more parameters tunable, including TRADE_DOWN array. Fix gradient computation for Q + minor vs Q material param.
2) Revise and simplify endgame scoring. Combine endgame score cache with king cover cache (since they can use the same hash signature). Allow larger values for king endgame scores. Add distance function to Scoring. Use local calc instead of array lookup for this function.
3) Re-tune all parameters using latest rating gauntlet games as training file.
4) Add value fields to effective hash (fixes possible crashes in endgame when running multi-threaded).
5) Add MSVC project files to repository.
6) For Linux builds with gcc, turn on Link Time Optimization along with PGO.
7) Lots of book changes/improvements.

Changes in Arasan 18.1 (Nov. 2015):
1) Less aggressive LMR and LMP.
2) More parameters are made tunable.
3) Tuning code revised to support MMTO and Texel methods and params adjusted via tuning.
4) Bug fixes in potential passer scoring.
5) Score Q + minor vs Q as draw.
6) In a multi-threaded search, maintain a move index in the move generator and pass it to the threads, for better/more consistent move order-based pruning & reductions.
7) Increase max split depth.
8) Change how passed pawn blockers are scored and tune penalities.
9) Fix scoring for two rooks on the 7th rank.
10) After reduced depth search fails high, don't re-search with narrow window and no reduction, unless reduction was > 1 ply.
11) Modify formula for time extension when failing low.
12) Bug fix: do not ponder after draw claim in Winboard mode.
13) Increase SEE pruning depth but disable if alpha is a mate score.

Changes in Arasan 18.0 (July 2015):
1) Add refutation table, similar to Gull & Rodent. This is global and refutations are produced in the phase of move generation after killers.
2) Major restructuring to support automated parameter tuning. Internal scores are now in millipawns (1/1000 pawn).
3) Changes to material balance scoring: in particular, better evaluation of some "near draw" situations.
4) Detect K vs K+B+wrong color pawns as draw with >1 pawn (on same file). 5) When in UCI analysis mode, output a move even in legal draw situations (except stalemate).
6) Changes to reduced-strength mode. Instead of randomizing eval, now at low strength settings the program will select sub-optimal moves occasionally.
7) Changes to time management when search fails low.
8) Changes to king safety scoring and tuning of related parameters.
9) Change conditions for static null pruning and razoring. Adjust razor margins.
10) LMR changes: reduce only by full ply increments. Adjust LMR reduction formula.
11) Replace eval-dependent null depth reduction with a strictly depth- dependent formula.
12) Fix GUI bug: changing strength setting during a game was not working.

Changes in Arasan 17.5 (Jan. 2015)
1) Modify and tune connected passer scoring.
2) Fixes to book weight computation.
3) Adjust queen mobility scoring.
4) Fix slow unload under Windows.
5) Add endgame mobility scoring for king (+3 ELO).
6) Fix asymmetry in Knight outpost scores.
7) More accurate eval of reduced-material endgames. Fix scoring for pawnless Q vs RN.
8) Changes to time management. Extend time if failing low at end of search, but only long enough to resolve the fail-low. In addition, though: extend if score is dropping relative to last search - amt of extension now varies with how much score has dropped.
9) Increase king position scores when opponent has very low material.
10) Some tuning of scoring for blocked passed pawns. A penalty is given now if the pawn is blocked but not at the immediate square in front.
11) Some fixes for Intel C++ (icc) compilation.

Changes in Arasan 17.4 (Oct. 2014):
1) Deeper LMR (and different reduction formula) After a LMR search fails high, first re-search with no reduction but zero width bounds, then only do a full-width, full-depth search.
2) Reduce q-search pruning margin.
3) Bug fix for pondering in Winboard mode. Engine could fail to ponder again after a successful ponder.
4) Bug fixes to Winboard analysis mode.
5) Bug fix in Board::wouldAttack.
6) Widen somewhat the range of conditions that will prevent a move from being pruned, based on the null-move threat (if there is one).
7) Simpify & tune late-move pruning code and remove vestiges of history pruning.
8) Add .EXPORT_ALL_VARIABLES target to Linux Makefile, to make build targets work that depend on redefining CC etc.

Changes in Arasan 17.3 (Sept. 2014):
1) Reduce doubled pawn score in endgame.
2) Fix some bugs involving hash size settings for UCI.
3) Minor changes to outpost scores.
4) Fix a couple bugs in "makebook" program.
5) Some king safety enhancements.
6) Tuning of futility pruning parameters.
7) History pruning disabled.
8) Fixes to history and killer move handling.
9) Simplify capture extension code and disable "easy nove" if capturing the last piece.
10) Increase see pruning depth to 1.5 ply.

Changes in Arasan 17.2:
1) Fix "st" command in Winboard protocol to interpret time as seconds.
2) Scoring changes: king safety, king cover, weak pawns.

Changes in Arasan 17.1 (May 2014):
1) Scoring changes: connected passer code, knight and bishop piece square tables, new king safety scoring.
2) Add special-case eval code for K vs K+R and K vs K+Q endgames.
3) Bug fix: validate hash move in q-search before using it.
4) Changes to handling of book selectivity option.
5) Adjust variable strength option so bottom end of strength scale is lower (will blunder sometimes).
6) Increase ply depth in reduced strength mode for very low material endgames (engine was having difficulty mating in these cases even at moderate strength settings). This also fixes some problems with playing into stalemate.
7) Better handling of out-of-memory errors when allocating hashtable.
8) GUI fix: initialize all engine options at start of game. Fixes problem with resignation setting not being obeyed.
9) GUI fix: clear any previous game result and other details after loading a position file.

Changes in Arasan 17.0b (Apr. 2014):
1) GUI fix: PGN reading was not working. Also fixed PGN reader to skip variations (if present).

Changes in Arasan 17.0a:
1) GUI fix: takeback was not working properly.
2) GUI fix: changing strength during a game was not working.

Changes in Arasan 17.0 (March, 2014):
1) A common hashtable is now used in both quiescence and non- quiescence search, instead of using a separate q-search eval cache (hashtable stores static evals so also serves as an eval cache).
2) Scoring module no longer does lazy eval.
3) Opening book format has changed. Manual tuned book file is now annotated PGN instead of a custom text format. Book code is simplified.
4) Opening book is no longer modified at runtime by result and score learning. Only position learning (aka permanent brain) is supported now.
5) Improvements to opening book and ECO classifier.
6) Qsearch no longer does pre-selection of capture targets.
Qsearch forward pruning margin and logic changed.
7) Bug Fix: correct time field of "post" output for Winboard/xboard (was off by factor of 10).
8) Bug fix: declare on startup for UCI that the tablebase type option is "Tablebase type", not "TablebaseType".
9) Bug fix: check for previous move legal before returning draw score.
10) Bug fix: Don't apply history pruning to moves before the history phase of move generation.
11) Bug fix to KP + wrong Bishop vs. K draw detection.
12) Bug fixes to lockless hashing. But also: restore validity check for moves fetched from hash, since lockless hashing is not 100% reliable.
13) A few evaluation changes.
14) Improved debug output when -DSEARCH_STATS enabled.
15) Performance fix: remove unneeded update of node count at end of search function.
16) Change to time usage: generally uses more time in early phase of games.
17) Changes to razoring.

Changes in Arasan 16.3 (Dec. 2013):
1) Generate/search discovered checks in qsearch.
2) Changes to forward pruning in qsearch: re-introduce futility + SEE pruning in addition to filtering capture targets in movegen. But do not prune discovered check candidates.
3) Prune some non-capture evasions in qsearch.
4) Changes to check and capture extensions.
5) Refine extension logic when null move search shows there is a threat related to a previous move that was reduced.
6) Defer SEE pruning until a legal move has been found/searched (fixes bugs in mate + stalemate detection).
7) Speed enhancements in SEE, pin detection, and check status computation.
8) Changes to weak pawn and outpost scoring.
9) Cleanup code and add some extra checks in the Notation class.
10) Fix in move generator: do not repeat hash move in winning capture phase.
11) Use shorter time check interval for very short time controls. Convert timing code to use high-resolution timer.
12) Change formula for computing min book weight from selectivity setting, to play a wider variety of opening moves.

Changes in Arasan 16.2 (October 2013):

1) Fix adjacent passed pawn code so bonus for this is independent of the connected passer bonus. Adjust various passed pawn related scoring params.
2) Add engine console command for perft.
3) Adjust scores for Rook on 7th and make dependent on game phase.
4) Fixes to weak pawn scoring and outpost code.
5) Simplify and fix SEE function. Use variant version with quick exit when only need to know if score is above or below a threshold.
6) Improvements to move ordering for check evasions.
7) Fix bad bug in lazy eval code of scoring module.
8) Bug fix: don't set the retrieved hash entry type to Invalid in cases where the score is in bounds but moves have been pruned.
9) Bug fix: remove redundant increment of parentNode->num_try in searchSMP.
10) Further clean up & optimize pinned piece detection.
11) Static null margins & futility margins adjusted.
12) Fix KBPK draw detection.
13) Makefile support added for a popcnt-enabled 64-bit Windows build.

Changes in Arasan 16.1 (Sept. 2013):
1) Fix UCI protocol bug that could cause engine to hang in cases where
ponder is on and game is terminating due to a draw by repetition
or rule.
2) Some speed optimizations for pin detection.
3) Bug fix in razoring code (return razor value from search).
4) Fix time & nps display for UCI (was off by factor of 10)
5) Some pawn scoring changes.
6) Bug fix: correct some of the constants in Attacks class.
7) Fix problem in UCI multi-PV analysis mode.
8) Allow LMR for checking moves and recaptures if they do not
meet the extension conditions (still disable LMR if side
to move is in check).
9) Fix console input handling in Windows.
10) Add -o (output file) option to "test" command.
11) GUI uses .chm help file format, for compatibility with Windows Vista, 7, 8.

Changes in Arasan 16.0 (July 2013):
1) Improvements to multi-core and multi-processor performance: limit
global memory usage, do dynamic adjustment of split depth.
2) Change book format, book weights are 0..100 not 0..10 now. New
larger opening book is included with Arasan binaries.
3) Book selectivity logic changed (again).
4) Fix bug in 50-move draw detection.
5) Move sorting no longer uses node counts; now an initial sort is
done by move score, then subsequently PV moves are moved to the front
each iteration, keeping other moves in the same order.
6) Check extensions are more limited now. Overall limit on extensions
at high ply counts from root is removed.
7) Search time can be extended more in case of fail-low or resolving a
fail-high.
8) Aspiration window changes. Fix bug that can cause array overflow in
aspiration window code.
9) Somewhat experimental self-play code added for testing (not enabled
in release builds by default).
10) Numerous adjustments to evaluation weights.
11) Score pawnless KRB vs KR and KRN vs KR as draws.
12) Bug fix: allow resignation when in fixed depth search and depth<=1.
13) Fix bug in handling of fail_high_root flag.
14) Convert to conditional variables for thread synchronizaton on Linux
+ Mac (fixes Mac OS problem where semaphores may not be cleaned up
on exit).
15) Fix stack size for threads on Mac OS (avoids bus error crash in deep
searches).

Changes in Arasan 15.6 (May 2013):
1) Bug fix in search (affects multi-core searching only).
2) Book selectivity logic changed (50 setting is a bit more selective now).
3) book.random option is fixed (was not working).
4) Book move kibitz for ICS is fixed so that weights are shown normalized
and the book selectivity rules are applied.
5) Fix "makebook" program to handle comments after PGN result.

Changes in Arasan 15.5 (Apr. 2013):
1) Fix bug that can cause illegal move from pondering.
2) Check for checkmate before returning 50-move draw.
3) Send Winboard variants in feature line (only "normal" is supported).

Changes in Arasan 15.4 (Apr. 2013):
1) Internal time accouting is now in millseconds, not centiseconds.
2) Fix time management to reduce losses on time in very fast games.
3) Native GUI now recognizes "offer draw" command (fixes bug in draw
detection). Also though engine now reverts to using result command
in cases of draw by rule before a move is made.
4) Remove extra quote from response to "protover" command in Winboard
(so myname feature works).
5) Modify how book selectivity setting works. Selectivity has to be lower
now to select very rare moves.
6) A few more code portability fixes.
7) Fix UCI protocol bugs leading to occasional loss on time with ponder on.
8) Fix strength option scaling so play is stronger at high values.

Changes in Arasan 15.3 (April 2013):
1) Fix a bug in king cover calculation.
2) Modify root LMR logic.
3) Reduce memory usage for "makebook" utility by shrinking/packing structures.
4) Fix "makebook" so it works on Linux.
5) Improve makebook speed by optimizing Board::reset.
6) Some tweaks to trade down scoring, especially to discourage trading down
from a possibly winnable to a drawish endgame.
7) Change hashtable replacement policy so exact hash code matches always
replace existing entries.
8) Main search probes q-search cache for a pv move if the main hash table
does not provide one.
9) Improved ordering of evasion moves.
10) Add extra time to search if resolving a fail-high at the root.
11) Thread limit raised to 64.
12) Thread split depth is dynamic based on number of threads.
13) Some code portability fixes, in particular fixing big-endian support.

Changes in Arasan 15.2 (Feb. 2013)
1) Some speed improvements especially when multithreaded.
2) Code cleanup and bug fixes related to draw handling (could lose on
time in server games, in rare cases, due to problems in this area).
3) Some more code conversion to C++ style intead of C. Use STL pair template.
4) Minimum search time changed to 10ms to better support very fast test
games.
5) Bug fix in code for checks in qsearch: ensure checking moves do not
place own king in check.
6) Some weights changed in scoring module based on CLOP.
7) Simplified razoring code.
8) Qsearch forward pruning changes. We use only pre-selection of captures
now, not traditional forward pruning. Margins for this adjusted.
9) Linux-specific bug fix for occasional crashes when >2 threads in use.
10) Fix in aspiration window code for rare overflow condition when
failing low with a mate score.
11) Fix bug setting hash sizes > 2GB through Winboard/UCI.
12) Somewhat more general Rook pawn vs wrong color Bishop draw detection.

Changes in Arasan 15.1 (Nov. 2012):
1) Correctly parse Winboard "level" command that includes a fractional
part in the time increment.
2) Fix bug in result learning code: incorrect learn value when drawing
a high-rated opponent as Black.
3) Fixes to eval for potential passed pawns. Small increase in castling
scores.
4) Changes to "trade down" material scoring.
5) Remove a redundant check for moving a pinned piece when searching
checks in q-search.
6) Fix UCI multipv output when there are fewer legal moves than the
specified multipv count.
7) Change max hash table size for GUI.

Changes in Arasan 15.0 (Sept. 2012):
1) Increase static null pruning threshold at low depths.
2) Scoring fixes/improvements: king cover, potential passed pawns,
bad bishop.
3) Fix code that tracks node count per ply 0 move, for move ordering.
4) Changes to LMR reduction amounts and ply 0 reduction threshold.
5) Avoid null move if hash table info indicates it would fail to
generate cutoff.
6) Losing checks are no longer extended, in any case. Threat extension
is now done differently, similar to Stockfish.
7) Re-work of SMP code to increase thread usage by supporting the
"helpful master" algorithm.
8) Fix a bug in communicating with the Fritz interface, specifically
the "process testsuite" command.
9) Fix UCI and console score output so upperbound & lowerbound status
displayed when appropriate.
10) Fix setting Strength option from native GUI.
11) Some GNU Makefile fixes for MingW support. clang is also supported
now.

Changes in Arasan 14.3 (July 2012):
1) King safety is scaled by the opponent's material value (fixing a bug).
2) Adjustments and fixes to strength reduction feature.
3) Fix to material scoring for R vs 2 minors.
4) Do not terminate search after forced move if in analysis mode.

Changes in Arasan 14.2b:
1) Fix sporadic hang in GUI under Windows 7.

Changes in Arasan14.2a:
1) Another fix for "ping" handing in engine to cure hang problems in Arasan
GUI.
2) Strength reduction operates during pondering.

Changes in Arasan 14.2 (June 2012):
1) The chess engine handled input from the the UI in several places
and had duplicate code for scanning input and breaking it into lines.
This is now centralized and simplifed.
2) Some other code cleanup, especially conversion from C-style string
handling to C++.
3) Simplified code for lazy eval. Partial (lazy) scores are no longer
cached in the scoring module (such scores were seldom used anyway).
4) Outpost scores reduced.
5) Tweaked threshold values for history pruning and late move pruning (due
to a bug, 14.1 actually did only late move pruning above depth = 1 ply).
6) Reduced thresholds for static null pruning.
7) Some changes to LMR and root move reduction logic.
8) Bug fix: ensure final stage of ply 0 search window widening sets a
correct upper/lower bound.
9) Improvement to logic for searching checks in q-search.
10) Fix material eval adjustment for Q vs 2R.
11) Support is added for varying the engine strength via UCI or Winboard
options (Arasan GUI supports this too).
12) GUI bug fix: search could hang when a "Go" command is issued when it
is the user's turn to move, and the user then makes a manual move before
the search completes.
13) Winboard driver fixes: pings could be processed out of order in some
cases. Also, an extra move could be sent after Winboard has send a
"resign" or "result" command.

Changes in Arasan 4.1 (Mar. 2012):
1) Fix (again) UCI promotion move formatting bug.
2) Fix Winboard "memory" command.
3) Support added for MingW environment (use Linux Makefile for this)
4) Q-search selectively generates only moves that will likely reach
futilty threshold.
5) Fix icc Makefile (on Windows).
6) Fix bug in PV display in Windows GUI.

Changes in Arasan 14.0 (Mar. 2012):
1) Board::wouldCheck function handles promotions.
2) Much simplifed time management, functions better in particular under very
short time controls.
3) LMR is performed at root node (formerly was not).
4) Null move uses R=3 with verification.
5) Simplified hash table implementation.
6) Move generator defers SEE test on captures until the move is used (this
was done previously in the qsearch but not elsewhere).
7) Better sort algorithm in move generator.
8) Fixes to learning code. Hash table (w/ learn info) was being cleared
at each new game, now learn info is retained.
10) Some code cleanup, esp. conversion from char * to C++ string usage.
11) Arasan uses Gaviota tablebases. Fix tb probing when en passant
capture possible. Tablebase hits now are cached in the hash table.
12) Additional UCI & winboard options supported. GUI now uses the standard
winboard options command to send options to the engine.
13) Fix bug involving mate scores in UCI analysis mode.
14) Makebook program can directly consume PGN.
15) Arasan engine source is released under the MIT license (same license used
by the Gaviota tablebase code).

Changes in Arasan 13.4 (Dec. 2011):
1) Fixes to UCI analysis mode.
2) Fix handling of UCI Threads option.
3) Arasan GUI allows changing thread count for search.
4) Support "cores," "memory" and "egt" features in Winboard. Note: Arasan
command-line switches take precedence over Winboard settings.
5) Memory for the evaluation cache is now dynamically allocated and
is sized relative to the main hash table.
6) Some changes to pruning and lazy eval logic.
7) Fixed faulty bitbase data. Fixed "eval" command to handle bitbase
and tablebase probes properly.
8) Improvements to UCI time management for very short time controls.

Changes in Arasan 13.3 (Nov. 2011):
1) In Winboard mode, Arasan still accepts but does not rely on the
deprected "white" and "black" commands to keep track of the
computer's side of the game.
2) Winboard "level" command accepts time of form mm:ss and allows decimal
times.
3) More general code for trapped bishop.
4) Static null pruning is implemented.
5) Dynamic null reduction based on score (aka "smooth scaling").
6) Changes to razor & futility margins and related code.
7) Fixes to history pruning. History table is global now, not per-thread.

Changes in Arasan 13.2 (Oct. 2011):
1) Fix in search to eliminate some unnecessary re-searches.
2) Fixes to material scoring for unbalanced material positions.
3) Simplified bonus code for Bishop in endgames with pawns on both sides.
4) Revised bonus for trading material when ahead.
5) Misc. scoring fixes, esp. for connected rook on 7th.
6) Utility programs such as makebook now do not create a log file.
7) Another/better fix for UCI output after a quick mate.

Changes in Arasan 13.1 (Aug. 2011):
1) KPK bitbases are now internal to the program, not stored in files.
2) Minor change to checks in qsearch conditions.
3) Fix bug in see pruning affecting stalemate detection.
4) Fix bug where UCI PV output was omitted in case search terminated
very rapidly (for example, in cases of a forced mate).
5) Handle DOS-style CR/LF from chess interfaces such as SCID.
6) Some book additions/fixes.

Changes in Arasan 13.0 (Aug. 2011):
1) History pruning and see pruning are implemented.
2) Fixes to history code.
3) Code cleanup and parameter tweaking in evaluation, especially to
isolated pawns, pawn center scores, passed pawns, mobility, king safety.
4) Fixed bug in adjacent passer code.
5) Potential passer code is more accurate.
6) Material scoring changes: queen value is higher, re-introduced some
special case adjustments for bad trades.
7) Check extensions have been reduced to 3/4 ply.
8) Hash table code cleanup & bug fixes.
9) Intel C++ supported under Windows.
10) GUI edit menu allows paste of PGN and FEN from the clipboard into the GUI.
11) fix GUI memory leak.
12) By default, Arasan will play a somewhat wider variety of openings (the
book selectivity option can be used to change this).

Changes in Arasan 12.3 (Feb. 2011):
1) Changes to move ordering in qsearch - formerly we used to call see()
in the initial move sorting phase but now it is deferred until we
are ready to use a move - this is how most programs do it.
2) Linux version uses an ASM routine (if USE_ASM is defined) for
bit extraction - this is much faster (on CPUs that support it).
3) Small fix to pin detection.
4) Bug fixes in scoring: specifically in adjustMaterialScoreNoPawns,
outpost scoring, potential passer scoring, passer piece block.
5) Reduce penalty for open files around king (was excessive)
6) Qsearch futility prune margin increased back to 1 1/4 pawn. Changes
to LMR reduction depth and thresholds.
7) Endgame capture extension is made in more cases but is decreased to
1/2 ply extra depth
8) Several UCI protocol fixes.

Changes in Arasan 12.2 (Nov. 2010):
1) Somewhat complex trade scoring has been removed - in favor of just
adjusting piece values.
2) More aggressive futility pruning, margin is adjusted at 1/2 ply increments.
3) Changes to extension/pruning logic. LMR now done after futility. Extra
LMR is done at high depths/move counts.
4) King safety scoring changed - open files are now scored separately,
score is based on opposing Rook + Queen count.
5) Bishop pair score reduced (but increases in endgame).
6) Changes to pawn scoring: outside pawn & doubled pawn scores reduced.
7) Outside pawn calc is done via a table, like Crafty does.
8) Penalty for own pieces ahead of passer; somewhat reduced bonus for rook
behind passer.
9) EGTB values are no longer hashed (seemed to cause problems).
10) Minor GUI fix: remove trailing junk after game description.

Changes in Arasan 12.1 (Aug. 2010):
1) Remove extra "quit" output on program termination
2) Decrease thread wait time on exit
3) Fix UCI tablebase support - enable tablebases when path is set
4) Fix to outside passed pawn scoring
5) Increase king attack scores

Changes in Arasan 12.0 (Aug. 2010):
1) Eval code is changed to split eval terms more explicitly into
opening, middlegame and endgame terms and these are merged via
a weighting function based on material.
2) Some eval changes to king safety, bishop pair, etc.
3) King safety cache was also used for opponent pawn proximity - but
the hashing didn't account for opponent pawns. This is fixed by
not storing proximity in the cache.
4) Material score adjustment added for Q vs R + Pawns, and R vs pawns.
5) Some new "trade down" bonus code is present to encourage exchanging
when ahead - there was some code for this earlier but less correct.
6) Fix to futility pruning margin calculation.
7) Fixed a Winboard/xboard driver bug where some "ping" commands from
ICC were being ignored.
8) Fix a rarely occurring bug in qsearch: generating a check
that involves moving a pinned piece.
9) Fix bug in razoring code that could cause array overflow at very
large search depths (as in endgame).
10) Fix display in GUI game list dialog & main window to include year of game

Changes in Arasan 11.7a (Feb. 2010):
1) Fixes, rebuild of GUI for out of memory problem.
2) Include "Chess Usual" font in installer.
3) Include version in app name so registry path is unique for each version.

Changes in Arasan 11.7 (Feb. 2010):
1) Fix in PGN parser for rare cases where moves need rank + file for
disambiguation.
2) Changes to LMR and other pruning logic.
3) Fix time measurement bug in Linux version.
4) Fix thread deadlock problems on Linux.
5) Convert to POSIX unnamed semaphores for Linux, to ensure semaphore
cleanup on program exit.
6) Multiple other code fixes and warning removal for Linux compiles.
7) Bug fix in Board::wouldCheck.
8) Increased scores for bishop pair, Rook on 7th
9) Fix UCI mate score output.
10) Fix crash bug in UCI mode on Vista, Windows 7

Changes in Arasan 11.6 (Nov. 2009):
1) Several speed improvements:
a. Greater use of lazy eval + partial evals are now cached.
b. Best move and score in eval cache can be independently updated.
c. Eval cache is shared across threads.
d. better alignment/sizing of structures
2) Scoring changes:
a. Bishop pair bonus decreased a bit
b. Mobility scores tweaked
c. Outpost scoring tweaked
d. Some king safety changes esp. for enemy pawns near King
3) Search changes:
a. Now using variable reduction null move again.
b. Allow reduce/prune on moves regardless of history, except the
two moves with best history are exempt.

Changes in Arasan 11.5 (Sept. 2009):
1) King safety scores are tapered off so they don't reach extreme values.
2) Mobility calculation improvements.
3) Changes to razoring logic.
4) Profile Guided Optimization (PGO) build uses deeper search on
fewer positions.

Changes in Arasan 11.4 (June 2009):
1) Fix to KBP draw code.
2) Fix Winboard/xboard driver to send "O-O" not "o-o" for castling.
3) Fix time calculation in tournament mode.
4) Scoring changes, fixes for Rook mobility & rooks on open files.
5) Scoring change in king safety: don't count Bishops more highly
than Knights in evaluating king attacks.
6) The usual book fixes/additions.

Changes in Arasan 11.3 (Mar. 2009):
1) Fix bug that caused occasional early search termination.
2) Fix Winboard communication to use a thread for greater reliablity.
3) Keep game file open - fixes some occasional failures to save games.
4) Fix Makefile to build "pgn2book" utility (some code fixes in this too).
5) Some search changes: Lessen futility margin. Enable additional extensions at ply 0. Enable a version of razoring.
6) Improved move ordering based on node counts.
7) Bug fix in outpost scoring.
8) Passed pawn scores increased.
9) Bug fix in GUI: bad PV display at high search depths.
10) Larger opening book.

Changes in Arasan 11.2 (Dec. 2008):
1) Fix square colors in mono mode in GUI display.
2) More Linux compile fixes.
3) Fixes for compilation on MacOS.
4) Bug fixes in scoring module (array overrun).
5) Some pawn race code added (ported from version 10.4).
6) Fixes to contempt factor based on ICC rating.
7) Bug fix in book learning.

Changes in Arasan 11.1 (Dec. 2008):
1) Fix mono mode in GUI display.
2) Fix compile problem with 32-bit Linux
3) Fix deadlock problem under Linux.
4) Some bug fixes in search.
5) Fix bug - contempt factor based on rating diff (when on a chess server)
was not being set.
6) Uninstaller removes .lrn file.

Changes in Arasan 11.0 (Nov. 2008):
1) Re-work to use "magic" bitboard logic instead of rotated bitboards. About
20-25% speedup from this.
2) Eval re-written to use bitboard attack functions for king saftey, mobility.
3) Some changes and fixes to search (especially LMR).
4) Check extensions are done at ply=0 now.
5) Substantial code cleanup, more consistent variable/function naming,
remove obsolete or redundant code.
6) g++ 3.2 and earlier are no longer supported.
7) Various scoring changes, including fixes to outside passed pawn scoring.
8) Remove unsafe optimization for q-search when in check.
9) Remove lock on main hash table - speeds up multi-threaded searches (thanks
to Bob Hyatt).
10) New position learning system - keeps learn data in a text file vs a
book file. Learn data is loaded into the main hash table (simpler and
avoids locking). Fixes to position learn code.
11) Fixes for loss on time with very short time controls.

Changes in Arasan 10.4 (June 2008):
1) Speedup illegal move detection in search.
2) Speedups in move generation.
3) Improved move ordering for check evasions.
4) Use IID more sparingly.
5) Several scoring changes, esp. fixes/improvements to material scoring.
6) Fix to "bk" command (to list opening book moves).
7) Time usage fixes/improvements.
8) A couple of locking fixes for more stable SMP operation.
9) Fix for invalid moves propagated to pv list

Changes in Arasan 10.3 (March 2008):
1) Fix bad search bug which caused different behavior in SMP and single
thread search code and unstable searches with 1 cpu.
2) Another search bug fix - caused problems in statemate detection.
3) Couple of scoring fixes.
4) Support Threads option in UCI mode.

Changes in Arasan 10.2 (Feb. 2008):
1) Fix possible crash bug: check for previous illegal move before hash
cutoff.
2) Forced move extension in q-search removed - caused some searches to
blow up (excessive nodes searched).
3) Limited razoring removed - in its place, wider use of LMR. Consolidate
reduction + pruning code. Disable recapture extension by default.
4) Some pawn scoring changes. Fixed asymmetric king center score in endgame.
5) Bug fixes in bad trade scoring.
6) Greater use of R=3 in null move.

Changes in Arasan 10.1 (Dec. 2007):
1) Substantially more efficient SMP support, keeps threads more active.
2) Some bug fixes in scoring and checking move generation, thanks to
Keiichiro Tashiro.
3) King safety and endgame scoring changes & fixes.
4) Fixed bug that could cause failure to move when there is a single
legal move from the tablebases.
5) Fix bug that could lead to illegal moves in pv display.
6) Fix long-existing move sorting bug.
7) Use narrower bounds on re-search (Negascout algorithm). Reduce re-search
frequency by setting flag when score is exact.
8) Fix bad search bug involving illegal move detection - in some cases a
valid score was returned after a previous illegal move. One symptom
was problems with stalemate detection.

Changes in Arasan 10.0 (Sept. 2007):
1) Fix to pawn scoring: a doubled pawn behind a passed pawn is no longer
counted as passed also.
2) Changes to king safety and mobility scoring. Bishop and queen attacks
and mobility are now checked in all directions (was formerly only the
"forward" direction).
3) Other scoring changes, including adjustments to piece trade scoring.
4) Multi-core/multi-procesor (SMP) support is now working, using the YBWC
algorithm. However the "helpful master" concept is not yet implemented.
5) Now supports 6-man tablebases. Some fixes added to better tolerate
incomplete 6-man tb sets.
6) Checks in q-search are on by default now. Checking moves are generated
for 1st two plies of q-search (configurable), but can be extended in
some cases.
7) Forced move extension tweaked - move generator marks move as forced
when a singular check evasion that is not a winning capture exists.
8) Some changes also to late move reduction and recapture extension code.
9) Null move verification search was broken - it works now.
10) Another fix for draw scoring - avoid draw when opponent is lower rated
11) Arasan outputs more information to UCI clients during a search.
12) UCI time management fixes.

Changes in Arasan 9.5 (October, 2006):
1) Fix bad mate scores from EGTB hit.
2) Numerous UCI fixes:
a) Fix notation for pv
b) Fix multipv output under Chessbase GUI.
c) Fix UCI pv output during ponder.
d) Fixes for hang under Shredder UI
3) Some additonal book fixes

Changes in Arasan 9.4 (Sept. 2006):
1) Some speed enhancements. For example, check evasion is incremental now.
2) Q-search has special code for check evasion. Checking move generation
can be enabled in the q-search (off by default).
3) Scoring changes: king safety, passed pawn, piece placement, bad trade.
4) Engine will kibitz if on ICC and opponent is a computer.
5) Fix for PV display under Arena with UCI: use O-O, O-O-O for castling.
6) Fix result learning information in arasan.log.
7) Fix draw accept logic - was erroneously accepting draws from lower
ranked players on ICC in some situations.
8) Fix tablebase probe logic - probes in more cases now.
9) The usual book additions/fixes.

Changes in Arasan 9.3 (July, 2006):
1) Another KBP vs K draw fix.
2) Bug fixed in pawn race scoring.
3) Passed pawn scoring changes.
4) King safety changes.
5) Some search changes. Reductions now not done in pv.
6) GUI fix: Fix Edit|Copy Game to Cliboard.
7) GUI fix: "Hint" command shows book moves.
8) GUI fix: Auto-saved games show computer side correctly.
9) Some Linux and Windows x64 specific fixes.
10) Larger opening book, book fixes.

Changes in Arasan 9.2:
1) Fix illegal move after promotion under UCI.

Changes in Arasan 9.1:
1) UCI protocol fixes
2) Fix tablebase/hashtable interaction problem
3) Some book additions/fixes

Changes in Arasan 9.0:
1) New king safety scoring routine.
2) Increased bonus for mobility in scoring module.
3) Disabled buggy code for wrong bishop draw (still recognizes
some simple cases).
4) A couple of rare crash bugs fixed.
5) Extension after repetition added.
6) "History pruning" added.
7) There is experimenal support for multi-threading, not
enabled in the compiled binaries.
8) The Linux version now compiles with gcc 4.0 and above.
9) Improved, larger opening book. Book selection logic has
been changed, so that Arasan will play a somewhat wider
selection of openings.
10) UCI protocol support.
11) GUI fixes to work on 120DPI displays. Also some fixes put in for
GUI occasionally getting out of sync with engine.

Changes in Arasan 8.4 (Feb. 2004):
1) Bug fixes in pin detection
2) Scoring changes
3) Better lazy eval in scoring module.
4) Improved pawn race scoring, handles more cases.
5) More liberal use of null move in endgames (but less aggressive use
of R=3).
6) "make install" target added to Linux Makefile.
7) use feature done=0/done=1 to bracket tablebase initialization.

Changes in Arasan 8.3 (Dec. 2004):
1) Small king safety change in eval.
2) Fix for crash on make move after "undo" in UI.
3) Some misc. code cleanup.

Changes in Arasan 8.2 (Nov. 2004):
1) Fixes to draw by repetition detection.
2) Several endgame scoring and bug fixes. Pawn race code is more accurate.
3) Remove losing moves (leading to mate) from move list - was supposed
to do this before but it works now.
4) KPK endgame is now computed using bitbases.
5) Some speed improvements in check evasion code.

Changes in Arasan 8.1 (Sept. 2004):
1) Fixed bad bug related to pawn promotions, giving unstable score with
promotion moves.
2) Some asymmetric eval added to avoid "locked" pawn positions
3) Pawn scoring changes.
4) Killer move phase now uses killers at ply-2.
5) GUI fix: "Think When Idle" option didn't work properly.

Changes in Arasan 8.0 (Aug. 2004):
1) Extended futility pruning is implemented now. Futility pruning and
razoring can be combined.
2) Passed pawns are scored higher.
3) "Capture" extension is now disabled by default.
4) Fixed some bugs in king-pawn hash table code
5) Minor changes to hash probe code.
6) Default tablebases cache size increased, changes to tablebase probe
logic. Generally this version does fewer probes.
7) New egtb code from Eugene Nalimov & Andrew Kadatch.
8) Significant changes to evaluation. Evaluation is simpler and
faster. A small evaluation cache is used.
9) Various speed enhancements, in move generator and elsewhere.
10) Some fixes to 50-move draw handling.
11) "makebook" program can now filter moves so that only moves
occurring with a minimum frequency will be included. New book
uses minimum frequency of 6 from a large PGN game collection.
12) a few minor GUI fixes.