Stockfish Chess Engine Changelog

What's new in Stockfish Chess Engine 19062709 Development

Jun 27, 2019
  • Bonus for double attacks on unsupported pawns
  • This is a functional change that rewards double attacks on an unsupported pawns.

New in Stockfish Chess Engine 19062209 Development (Jun 24, 2019)

  • Make the debug counters thread safe.
  • needed to use them in a threaded run.
  • No functional change.

New in Stockfish Chess Engine 19053114 Development (Jun 4, 2019)

  • Scale lazy threshold according to material. (#2170)

New in Stockfish Chess Engine 19051614 Development (May 17, 2019)

  • Remove unused code (#2150)
  • Remove an unused operator in has_game_cycle (thanks @vondele)
  • and modify its comment to explain other code.
  • No functional change.

New in Stockfish Chess Engine 19050523 Development (May 9, 2019)

  • LMR for captures not cracking alpha
  • Enable LMR for a capture/promotion move which does not seem
  • to have a good chance to fail high according to static eval
  • and value of captured piece.

New in Stockfish Chess Engine 19030511 Development (Mar 5, 2019)

  • Assorted trivial cleanups 2/2019
  • No functional change.

New in Stockfish Chess Engine 19022713 Development (Mar 1, 2019)

  • This removes the skipQuiets variable, as was done in an earlier round by
  • @protonspring, but fixes an oversight which led to wrong mate
  • announcements. Quiets can only be pruned when there is no mate score, so
  • set moveCountPruning at the right spot.

New in Stockfish Chess Engine 19020116 Development (Feb 2, 2019)

  • Extend discovered checks regardless of SEE

New in Stockfish Chess Engine 19013115 Development (Feb 1, 2019)

  • Simplify Stat Score bonus

New in Stockfish Chess Engine 19012917 Development (Jan 31, 2019)

  • This patch removes line 875 of search.cpp, which was updating pvHit after IID.
  • Bench testing at depth 22 shows that line 875 of search.cpp never changes the
  • value of pvHit at NonPV nodes, while at PV nodes it often changes the value
  • from true to false (and never the reverse).

New in Stockfish Chess Engine 18082902 Development (Jan 22, 2019)

  • Simplify TrappedRook
  • Simplified TrappedRook to a single penalty removing the dependency on mobility.

New in Stockfish Chess Engine 10 / 18082902 Development (Jan 22, 2019)

  • Simplify TrappedRook
  • Simplified TrappedRook to a single penalty removing the dependency on mobility.

New in Stockfish Chess Engine 18082902 Development (Aug 31, 2018)

  • Remove PawnsOnBothFlanks
  • It looks like PawnsOnBothFlanks can be removed from initiative().
  • A barrage of tests seem to confirm that the adjustment to -110 does not gain elo to offset any potential loss by removing
  • PawnsOnBothFlanks.

New in Stockfish Chess Engine 18081801 Development (Aug 20, 2018)

  • Use an affine formula to mix stats and eval
  • Follow-up for the previous patch: we use an affine formula to mix stats and evaluation in search. The idea is to give a bonus if the previous move of the opponent was historically bad, and a malus if the previous move of the opponent was historically good.
  • More precisely, if x is the stat score of the previous move by the opponent, we implement the following formulas to tweak the evaluation at an internal node of the tree for our pruning decisions at this node:
  • if x = 0, use v' = eval(P)
  • if x > 0, use v' = eval(P) - 5 - x/1024
  • if x < 0, use v' = eval(P) + 5 - x/1024
  • For reference, the previous master had this simpler rule:
  • if x > 0, use v' = eval(P) - 10
  • if x

New in Stockfish Chess Engine 18081410 Development (Aug 14, 2018)

  • Double weight of capture history
  • We double in this patch the weight of the capture history table in the local scoring of captures for move ordering.
  • The capture history table is indexed by the triplet (capturing piece, capture square, captured piece) and gets information like "it seems to have been historically good in that part of the search tree to capture a pawn with a rook on g3, even if it seems to lose material", and affect the normaly pure « Most Valuable Victim » ordering of captures.

New in Stockfish Chess Engine 18081218 Development (Aug 13, 2018)

  • Non-linear bonus for pawn count
  • This patch introduces a non-linear bonus for pawns, along with some (linear) corrections for the other pieces types.
  • The original values were obtained by a massive non-linear tuning of both pawns and other pieces by GuardianRM, while Alain Savard and Chris Cain later simplified the patch by observing that, apart from the pawn case, the tuned corrections were in fact almost affine and could be incorporated in our current code base via the piece values in types.h (offset) and the diagonal of the quadratic matrix (slope).

New in Stockfish Chess Engine 18080112 Development (Aug 3, 2018)

  • Improve Stats definition
  • Use operator const T&() instead of operator T() to avoid possible costly hidden copies of non-scalar nested types.
  • Currently StatsEntry has a single member T, so assuming sizeof(StatsEntry) == sizeof(T) it happens to work, but it's better to use the size of the proper entry type in std::fill.
  • Note that current code works because std::array items are ensured to be allocated in contiguous memory and there is no padding among nested arrays. The latter condition does not seem to be strictly enforced by the standard, so be careful here.
  • Finally use address-of operator instead of get() to fully hide the wrapper class StatsEntry at calling sites. For completness add the arrow operator too and simplify the C++ code a bit more.
  • Same binary code as previous master under the Clang compiler.

New in Stockfish Chess Engine 18073111 Development (Aug 1, 2018)

  • Small tweaks to recent code changes
  • As a note, current 2 LMR conditions on stat score could be simplified in a single line
  • r -= ((ss->statScore >= 0) - ((ss-1)->statScore >= 0)) * ONE_PLY;
  • We keep them splitted in 2 "if" statements because are easier to (immediately) read.

New in Stockfish Chess Engine 18062609 Development (Jun 30, 2018)

  • Remove make_bitboard()
  • In current master, the function make_bitboard() does nothing apart from helping initialize the SquareBB[] array. This seems like an unnecessary abstraction layer.
  • The advantage of make_bitboard() is we can define a bitboard, in a simple and general way, not only from a single square but also from a list of squares. It is more elegant, faster and readable than combining multiple SquareBB explicitly, but the last complex use case in evaluation was simplified away a few months ago.
  • If make_bitboard() becomes useful again to define complicated bitboards, it will be easy enough to reintroduce it using this pull request as an implementation reference.

New in Stockfish Chess Engine 18010422 Development (Jan 5, 2018)

  • Remove ThreatByHangingPawn bonus (#1356)
  • no ThreatByHangingPawn
  • bench: 4919682

New in Stockfish Chess Engine 18010113 Development (Jan 4, 2018)

  • Adjust copyright headers.
  • No functional change.

New in Stockfish Chess Engine 17122610 Development (Dec 29, 2017)

  • Include x-ray attacks through all queens independently of the color.
  • When calculating attacks from rooks/bishops current master includes x-rays through own queen. This patch includes also x-rays through opponent queen.

New in Stockfish Chess Engine 17121816 Development (Dec 18, 2017)

  • Allow for general transposition table sizes. (#1341)
  • For efficiency reasons current master only allows for transposition table sizes that are N = 2^k in size, the index computation can be done efficiently as (hash % N) can be written instead as (hash & 2^k - 1). On a typical computer (with 4, 8... etc Gb of RAM), this implies roughly half the RAM is left unused in analysis.
  • This issue was mentioned on fishcooking by Mindbreaker
  • http://tests.stockfishchess.org/tests/view/5a3587de0ebc590ccbb8be04
  • Recently a neat trick was proposed to map a hash into the range [0,N[ more efficiently than (hash % N) for general N, nearly as efficiently as (hash % 2^k)
  • https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
  • namely computing (hash * N / 2^32) for 32 bit hashes. This patch implements this trick and now allows for general hash sizes. Note that for N = 2^k this just amounts to using a different subset of bits from the hash. Master will use the lower k bits, this trick will use the upper k bits (of the 32 bit hash).
  • There is no slowdown as measured with [-3, 1] test
  • http://tests.stockfishchess.org/tests/view/5a3587de0ebc590ccbb8be04
  • LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
  • Total: 128498 W: 23332 L: 23395 D: 81771
  • There are two (smaller) caveats:
  • the patch is implemented for a 32 bit hash (so that a 64 bit multiply can be used), this effectively limits the number of clusters that can be used to 2^32 or to 128Gb of transpostion table. That's a change in the maximum allowed TT size, which could bother those using 256Gb or more regularly.
  • Already in master, an excluded move is hashed into the position key in rather simple way, essentially only affecting the lower 16 bits of the key. This is OK in master, since bits 0-15 end up in the index, but not in the new scheme, which picks the higher bits. This is 'fixed' by shifting the excluded move a few bits up. Eventually a better hashing scheme seems wise.
  • Despite these two caveats, I think this is a nice improvement in usability.

New in Stockfish Chess Engine 17121115 Development (Dec 11, 2017)

  • Simplify other checks #1334
  • Simplify the other check penalty computation. Compared to current master,
  • a) it uses a 143 kingDanger penalty instead of S(10, 10) for the "otherCheck" (credits to ElbertoOne for finding a suitable kingDanger range to replace the score and to Guardian for showing this could also be a neutral change at LTC). This makes our king safety model more consistent and simpler.
  • b) it might also score more than one "otherCheck" penalty for a given piece type instead of just one
  • c) it might score many pinned penalties instead of just one.
  • d) It also remove 3 conditionals and uses simpler expressions. So it was tested as a SPRT[-3, 1]

New in Stockfish Chess Engine 17120507 Development (Dec 5, 2017)

  • A better contempt implementation for Stockfish (#1325)
  • The round 2 of TCEC season 10 demonstrated the benefit of having a nice contempt implementation: it gives the strongest programs in the tournament the ability to slow down the game when they feel the position is slightly worse, prefering to stay in a complicated (even if slightly risky) middle game rather than simplifying by force into a drawn endgame.
  • The current contempt implementation of Stockfish is inadequate, and this patch is an attempt to provide a better one.
  • This contempt implementation is showing promising results in certains situations. For instance, it obtained a nice +30 Elo gain when playing with contempt=40 against Stockfish 7, compared to current master
  • master against SF 7 (20000 games at LTC): +121.2 Elo
  • this patch with contempt=40 (20000 games at LTC): +154.11 Elo
  • This was the result of real cooperative work from the Stockfish team, with key ideas coming from Stefan Geschwentner (locutus2) and Chris Cain (ceebo) while most of the community helped with feedback and computer time.
  • In this commit the bench is unchanged by default, but you can test at home with the new contempt in the UCI options. The style of play will change a lot when using contempt different of zero (I repeat: not done in this version by default, however)!
  • The Stockfish team is still deliberating over the best default contempt value in self-play and the best contempt modeling strategy, to help users choosing a contempt value when playing against much weaker programs. These informations will be given in future commits when available :-)

New in Stockfish Chess Engine 17120417 Development (Dec 4, 2017)

  • Pawn endgames directly skip early pruning.
  • Instead of checking individual steps

New in Stockfish Chess Engine 17111113 Development (Nov 13, 2017)

  • Simplify some kingring penalties expressions
  • The new "weak" expression helps simplify the safe check calculations for rooks or minors, (but the end result for all the safe checks is the exactly the same as in current master)
  • The only functional change is for the "outer king ring" (for example, squares f3 g3 h3 when white king is on g1). In current master, there was a 191 penalty if any of these was not defended at all.
  • With this pr, there is this 191 penalty if any of these is not defended at all or is only defended by a white queen.

New in Stockfish Chess Engine 17111012 Development (Nov 10, 2017)

  • Add comments to pos.see_ge()
  • In terms of technical changes this patch eliminates the return statements from the main loop of pos.see_ge() and replaces two conditional computations with a single bitwise negation.
  • No functional change

New in Stockfish Chess Engine 17110813 Development (Nov 8, 2017)

  • Always do MaxCardinality checks.
  • Stockfish currently relies on the "filter_root_moves" function also having the side effect of clamping Cardinality against MaxCardinality (the actual piece count in the tablebases). So if we skip this function, we will end up probing in the search even without tablebases installed.
  • We cannot bail out of this function before this check is done, so move the MultiPV hack a few lines below.

New in Stockfish Chess Engine 17102207 Development (Oct 26, 2017)

  • Fix premature using of all available time in x/y TC
  • In x/y time controls there was a theoretical possibility to use all available time few moves before the clock will be updated with new time. This patch fixes that issue.

New in Stockfish Chess Engine 17101111 Development (Oct 11, 2017)

  • Fix issue #1268
  • If the search is quit before skill.pick_best is called, skill.best_move might be MOVE_NONE.
  • Ensure skill.best is always assigned anyhow.
  • Also retire the tricky best_move() and let the underlying semantic to be clear and explicit.

New in Stockfish Chess Engine 17100207 Development (Oct 4, 2017)

  • Good bishops on the main diagonals
  • Bonus in midgame for bishops on long diagonals when the central squares are not occupied by pawns

New in Stockfish Chess Engine 17092916 Development (Sep 30, 2017)

  • Measure nodes after search finished.
  • Only affects nmpsec in the multithreaded case.
  • No functional change.

New in Stockfish Chess Engine 17092216 Development (Sep 22, 2017)

  • Tweak statScore condition
  • The first change (ss->statScore >= 0) does nothing.
  • The second change ((ss-1)->statScore >= 0 ) has a massive change. ss-1)->statScore is not set until (ss-1) begins to apply LMR to moves. So we now increase the reduction for bad quiets when our opponent is running through the first captures and the hash move.

New in Stockfish Chess Engine 17091212 Development (Sep 12, 2017)

  • Higher Move Overhead
  • This shoudl reduce time losses experienced by users after new time management code.

New in Stockfish Chess Engine 17090511 Development (Sep 11, 2017)

  • Extend ShelterWeakness array by dimension isKingFile
  • Use different penalties for weaknesses in the pawn shelter depending on whether it is on the king's file or not.

New in Stockfish Chess Engine 17090511 Development (Sep 5, 2017)

  • Streamlline reduction based on movecount
  • Use MoveCount History only at quiet moves and simply reduce reduction by one depth instead of increasing moveCount in formula.

New in Stockfish Chess Engine 17083108 Development (Aug 31, 2017)

  • Adjust moveCount history only at LMR

New in Stockfish Chess Engine 17083015 Development (Aug 30, 2017)

  • Simplify away non-normal moves in SEE
  • credit goes to @mstembera for suggesting this approach. SEE now deals with castling, promotion and en passant in a similar way.

New in Stockfish Chess Engine 17082609 Development (Aug 28, 2017)

  • Improve multi-threaded mate finding
  • If any thread found a 'mate in x' stop the search. Previously only mainThread would do so. Requires the bestThread selection to be adjusted to always prefer mate scores, even if the search depth is less.
  • I've tried to collect some data for this patch. On 30 cores, mate finding seems 5-30% faster on average. It is not so easy to get numbers for this, as the time to find a mate fluctuates significantly with multi-threaded runs, so it is an average over 100 searches for the same position. Furthermore, hash size and position make a difference as well.

New in Stockfish Chess Engine 17082210 Development (Aug 22, 2017)

  • Avoid constructing an empty tuple in qsearch
  • Avoid constructing, passing as a parameter and binding a useless empty tuple of pointers in the qsearch move picker constructor.
  • Also reformat the scoring function in movepicker.cpp and do some cleaning in evaluate.cpp while there

New in Stockfish Chess Engine 17082014 Development (Aug 21, 2017)

  • Restore safety margin of 60ms
  • What this patch does is:
  • Increase safety margin from 40ms to 60ms. It's worth noting that the previous code not only used 60ms incompressible safety margin, but also an additional buffer of 30ms for each "move to go".
  • remove a whart, integrating the extra 10ms in Move Overhead value instead. Additionally, this ensures that optimumtime doesn't become bigger than maximum time after maximum time has been artificially discounted by 10ms. So it keeps the code more logical.

New in Stockfish Chess Engine 17081811 Development (Aug 18, 2017)

  • Clarify stats range
  • Current update formula ensures that the possible value range is [-32 * D, 32 * D].
  • So we never overflow if abs(32 * D) < INT16_MAX
  • Thanks to Joost and mstembera to clarify this.

New in Stockfish Chess Engine 17081711 Development (Aug 17, 2017)

  • Fix involuntary conversions of ExtMove to Move
  • The trick is to create an ambiguity for the compiler in case an unwanted conversion to Move is attempted like in:
  • ExtMove m1{Move(17),4}, m2{Move(4),17};
  • std::cout

New in Stockfish Chess Engine 17081508 Development (Aug 16, 2017)

  • We use Position::set() to set root position across threads. But there are some StateInfo fields (previous, pliesFromNull, capturedPiece) that cannot be deduced from a fen string, so set() clears them and to not lose the info we need to backup and later restore setupStates->back().
  • Note that setupStates is shared by threads but is accessed in read-only mode.
  • This fixes regression introduced by df6cb446eaf21

New in Stockfish Chess Engine 17081314 Development (Aug 14, 2017)

  • Run clang-tidy 'modernize'
  • Some warnings after a run of:
  • $ clang-tidy-3.8 -checks='modernize-*' *.cpp syzygy/*.cpp -header-filter=.* -- -std=c++11
  • I have not fixed all suggestions, for instance I still prefer to declare the type instead of a spread use of 'auto'. I also perfer good old 'typedef' to the new 'using' form.
  • I have not fixed some warnings in the last functions of syzygy code because those are still the original functions and need to be completely rewritten anyhow.
  • Thanks to erbsenzaehler for the original idea

New in Stockfish Chess Engine 17081107 Development (Aug 11, 2017)

  • Simplify finished search in ponder/infinite mode.
  • In this rare case (e.g. go infinite on a stalemate), just spin till ponderhit/stop comes.
  • The Thread::wait() is a renmant of the old YBWC code, today with lazy SMP, threads don't need to wait when outside of their idle loop.
  • No functional change.

New in Stockfish Chess Engine 17080610 Development (Aug 7, 2017)

  • Remove Stack/thread dependence in movepick as a lower level routine, movepicker should not depend on the search stack or the thread class, removing a circular dependency. Instead of copying the search stack into the movepicker object, as well as accessing the thread class for one of the histories, pass the required fields explicitly to the constructor (removing the need for thread.h and implicitly search.h in movepick.cpp). The signature is thus longer, but more explicit
  • Also some renaming of histories structures while there.

New in Stockfish Chess Engine 17080203 Development (Aug 2, 2017)

  • Tweak connected pawns seed[] array values
  • Raise a little bit the values in the connected pawns seed[] array.

New in Stockfish Chess Engine 17072711 Development (Jul 27, 2017)

  • Remove redundant if-statements
  • No functional change
  • Closes #1173

New in Stockfish Chess Engine 17072402 Development (Jul 25, 2017)

  • Tuned PSQT using a custom tuner.
  • bench: 5878420
  • Closes #1177

New in Stockfish Chess Engine 17071507 Development (Jul 17, 2017)

  • Move game_phase() to material.cpp
  • For some reason, although game phase is used only in material, it is computed in Position.
  • Move computation to material, where it belongs, and remove the useless call chain.

New in Stockfish Chess Engine 17071401 Development (Jul 14, 2017)

  • Revert "Remove questionable gcc flags from profile-build"
  • This reverts commit 0371a8f8c4a043cb3e7d08b5b8e7d08d49f28324

New in Stockfish Chess Engine 17070823 Development (Jul 10, 2017)

  • Remove questionable gcc flags from profile-build
  • Optimization options for official stockfish should be consistent, easy, future proof and simple.
  • We don't want to optimize for any specific version of gcc
  • No functional change

New in Stockfish Chess Engine 17062123 Development (Jun 22, 2017)

  • Increase reduction if tt-move is a capture
  • The idea is that chances are the tt-move is best and will be difficult to raise alpha when playing a quiet move.

New in Stockfish Chess Engine 17061704 Development (Jun 19, 2017)

  • Misc coding style fixes a few comment and blank fixes.
  • No functional change

New in Stockfish Chess Engine 17060619 Development (Jun 7, 2017)

  • Reordering magic data
  • Gather all magic relevant data into a struct.
  • This changes memory layout putting everything necessary for processing a single square
  • in the same memory location thus speeding up access

New in Stockfish Chess Engine 17052608 Development (May 26, 2017)

  • Rearrange and rename all history heuristic code. Naming is now based on chessprogramming.wikispaces.com conventions and the relations among the various heuristics are now more clear and consistent.

New in Stockfish Chess Engine 17052405 Development (May 24, 2017)

  • Changed spelling back to "Bishops" in eval output
  • No functional change.

New in Stockfish Chess Engine 17052203 Development (May 22, 2017)

  • Evasion Pruning Tweak
  • Use moveCount to decide when to prune for evasion pruning

New in Stockfish Chess Engine 17051803 Development (May 18, 2017)

  • The previous patch has added a fraction of the king danger score to the endgame score of the tapered eval, so it seems natural to perform the king danger computation later in the endgame.
  • With this patch we extend the limit of such check analysis down to the material of Rook+Knight, when we have at least two pieces attacking the opponent king zone.

New in Stockfish Chess Engine 17051604 Development (May 16, 2017)

  • Limit king ring to eight squares
  • In current master the size of the king ring varies abruptly from eight squares when the king is in g8, to 12 squares when it is in g7. Because the king ring is used for estimating attack strength, this may lead to an overestimation of king danger in some positions. This patch limits the king ring to eight squares in all cases.

New in Stockfish Chess Engine 17051018 Development (May 11, 2017)

  • Default argument for see_ge()

New in Stockfish Chess Engine 17051003 Development (May 10, 2017)

  • Remove int to int conversion, unused include.
  • No functional change.
  • Closes #1112

New in Stockfish Chess Engine 17050806 Development (May 9, 2017)

  • Linear Protector bonus by distance
  • Replacing the old Protector table with a simple linear formula which takes into account a different slope for each different piece type.
  • The idea of this simplification of Protector is originated by Alain (Rocky)

New in Stockfish Chess Engine 17050404 Development (May 4, 2017)

  • Fix multiPV issue #502 :
  • In general, this patch handles the cases where we don't have a valid score for each PV line in a multiPV search. This can happen if the search has been stopped in an unfortunate moment while still in the aspiration loop. The patch consists of two parts.
  • Part 1: The new PVIdx was already part of the k-best pv's in the last iteration, and we therefore have a valid pv and score to output from the last iteration. This is taken care of with:
  • bool updated = (i

New in Stockfish Chess Engine 17043017 Development (May 2, 2017)

  • Testing the release candidate revealed only one minor issue, namely a new warning -Wimplicit-fallthrough (part of -Wextra) triggers in the movepicker. This can be silenced by adding a comment, and once we move to c++17 by adding a standard annotation [[fallthrough]];.

New in Stockfish Chess Engine 17042602 Development (Apr 26, 2017)

  • Avoid misuse of StepAttacksBB for pawns
  • Make it explicit that first index of StepAttacksBB is a piece, not a piece type.
  • No functional change

New in Stockfish Chess Engine 17042409 Development (Apr 24, 2017)

  • Assorted code style issues
  • I have removed the check for pieceCount[PAWN] > FILE_NB because totally useless.
  • No functional change.

New in Stockfish Chess Engine 17042020 Development (Apr 21, 2017)

  • simplify logic for history based pruning

New in Stockfish Chess Engine 17041719 Development (Apr 19, 2017)

  • Update Readme.md
  • Update number of threads.

New in Stockfish Chess Engine 17040916 Development (Apr 10, 2017)

  • Remove minimum to contribution from king danger to score.

New in Stockfish Chess Engine 17040305 Development (Apr 3, 2017)

  • Don't update TT at excluded move ply

New in Stockfish Chess Engine 17032800 Development (Mar 28, 2017)

  • Add assertion for the maximum number of pawns
  • No functional change

New in Stockfish Chess Engine 17032601 Development (Mar 27, 2017)

  • Introduce assert for stats update
  • Make sure updates to the stats are done in a stable way.
  • No functional change

New in Stockfish Chess Engine 17031823 Development (Mar 21, 2017)

  • Skip quiet moves based on moveCount pruning threshold and history stats
  • If we can moveCountPrune and next quiet move has negative stats, then go directly to the next move stage (Bad_Captures).
  • Reduction formula is tweaked to compensate for the decrease in move count that is used in LMR.

New in Stockfish Chess Engine 17031505 Development (Mar 15, 2017)

  • Assorted code style fixes
  • No functional change

New in Stockfish Chess Engine 17030903 Development (Mar 10, 2017)

  • Helper functions to count material for both sides
  • Syntactic sugar: helper functions to count material or pieces for both sides.
  • No functional change

New in Stockfish Chess Engine 17030603 Development (Mar 8, 2017)

  • Allow pruning advance pawn pushes if not near endgame

New in Stockfish Chess Engine 17022406 Development (Feb 24, 2017)

  • Pieces protecting king:
  • Initial protective idea by Snicolet for knight, for other pieces too
  • Patch add penalties and bonuses for pieces, depending on the distance from the own king
  • Reorder members of Material::Entry:
  • This eliminates alignment padding and reduces size from 48 to 40 bytes.
  • This makes the material HashTable smaller and more cache friendly.

New in Stockfish Chess Engine 17021923 Development (Feb 20, 2017)

  • Keep pawns on both flanks
  • Positions with pawns on only one flank tend to be more drawish. We add a term to the initiative bonus to help the attacking player keep pawns on both flanks.

New in Stockfish Chess Engine 17021506 Development (Feb 15, 2017)

  • Retire loose enemies bonus

New in Stockfish Chess Engine 17020601 Development (Feb 13, 2017)

  • Retire small bonus in passed pawn evaluation

New in Stockfish Chess Engine 17020601 Development (Feb 6, 2017)

  • Simplify scale factor computation
  • Minor non-functional simplifications in computing the scale factor.

New in Stockfish Chess Engine 17013109 Development (Jan 31, 2017)

  • Simplify away QueenContactChecks
  • Changing the definition of safe checks to include squares protected only by the king, but twice attacked by the opponent.

New in Stockfish Chess Engine 17012908 Development (Jan 30, 2017)

  • Simplify TT penalty stat (#980)

New in Stockfish Chess Engine 17011714 Development (Jan 17, 2017)

  • Update some comments (#973)
  • Use somewhat more precise comments in a couple of places.

New in Stockfish Chess Engine 17011309 Development (Jan 13, 2017)

  • Introduce lazy evaluation
  • After we have taken into account all cheap evaluation terms, we check whether the score exceeds a given threshold. If this is the case, we return a scaled down evaluation.

New in Stockfish Chess Engine 17011208 Development (Jan 12, 2017)

  • Removing CM parameter from the Stats struct. (#970)
  • After the history simplifications, we are only using Value Stats for CounterMoveHistory table. Therefore the parameter CM is not necessary.
  • No functional change.

New in Stockfish Chess Engine 17011108 Development (Jan 11, 2017)

  • StormDanger CleanUp (#964)
  • Order the enum and the array the same way they appear around line 250. Makes it much easier to follow.
  • Add comments in the array definition and critical rows. Use same terminology as elsewhere in pawns.cpp

New in Stockfish Chess Engine 17011008 Development (Jan 10, 2017)

  • Rename FromTo -> History (#963)
  • Previously, we had duplicated History:
  • one with (piece,to) called History
  • one with (from,to) called FromTo
  • Now that we have only one, rename it to History, which is the generally accepted name in the chess programming litterature for this technique.
  • Also correct some comments that had not been updated since the introduction of CMH.
  • No functional change.

New in Stockfish Chess Engine 17010912 Development (Jan 9, 2017)

  • Trevis CI: use commit bench number as a reference
  • No functional change.

New in Stockfish Chess Engine 17010610 Development (Jan 6, 2017)

  • Zero init fromToStats in constructor. (#953)
  • Extend commit fe99de to fromToStats, which fixes the last valgrind errors on a simple 'go depth 12' at startup.

New in Stockfish Chess Engine 17010509 Development (Jan 5, 2017)

  • Rejoin lines that belong to HalfDensity map (#952)
  • No functional change

New in Stockfish Chess Engine 17010209 Development (Jan 3, 2017)

  • Use consistent variable names for counterMoveStats (#949)
  • Unify naming in movepick and search, by adopting the latter convention (cmh,fmh,fmh2).

New in Stockfish Chess Engine 16122510 Development (Dec 27, 2016)

  • Further simplify unstoppable (#938) By finally moving it into passed pawns eval

New in Stockfish Chess Engine 16122216 Development (Dec 23, 2016)

  • Simplify threshold handling for probcut. (#936)
  • Just use greater equal as this is what see_ge does now.

New in Stockfish Chess Engine 16122011 Development (Dec 20, 2016)

  • piecesCount (#932)
  • All counts in search.cpp are of the form xxxCount. Conform piecesCnt to this unwritten rule.

New in Stockfish Chess Engine 16121708 Development (Dec 19, 2016)

  • Another simplification for SEE pruning

New in Stockfish Chess Engine 16121212 Development (Dec 12, 2016)

  • Simplify pruning

New in Stockfish Chess Engine 16120518 Development (Dec 6, 2016)

  • Refactor bonus and penalty calculation (#917)
  • Refactor bonus and penalty calculation
  • Compute common terms in a helper function.
  • No functional change.
  • Further refactoring
  • Remove some parenthesis that are now useless.
  • Define prevSq once, use repeatedly.
  • No functional change.

New in Stockfish Chess Engine 16120409 Development (Dec 5, 2016)

  • Remove piece condition in decrease lmr reduction check

New in Stockfish Chess Engine 16120209 Development (Dec 2, 2016)

  • Simplify pruning rule

New in Stockfish Chess Engine 16112717 Development (Nov 28, 2016)

  • TrappedRook simplification Just remove rank checks for rook and king for TrappedRook evaluation.

New in Stockfish Chess Engine 16112508 Development (Nov 25, 2016)

  • Fix the pawn hash failure when the pawn key is 0
  • This patch fixed bugs #859 and #882. At initialization we generate a new random key (Zobrist::noPawns). It's added to the pawn key of all positions, so that the pawn key of a pawnless position is no longer 0.

New in Stockfish Chess Engine 16112010 Development (Nov 21, 2016)

  • Avoid touching source files in profile-build
  • This refines the profile-build target to avoid 'touch'ing the sources, keeping meaningful modification dates and avoiding editor warnings like vi's:
  • Instead of touching sources, the (instrumented) object files are removed, which has the same effect of rebuilding them in the next step.
  • As a side effect, this simplifies the Makefile a bit.

New in Stockfish Chess Engine 16111209 Development (Nov 14, 2016)

  • Make a version of Position::do_move() without the givesCheck parameter
  • In 10 of 12 calls total to Position::do_move()the givesCheck argument is simply gives_check(m). So it's reasonable to make an overload without this parameter, which wraps the existing version.

New in Stockfish Chess Engine 16111011 Development (Nov 10, 2016)

  • FEN parsing: add a second check for correctly setting e.p. square
  • Currently, we only check if there is a pawn in place to make the en-passant capture. Now also check that there is a pawn that could just have advanced two squares. Also update the corresponding comment.
  • This makes the parsing of FENs a bit more robust, and now correctly handles positions like the one reported by Dann Corbit.

New in Stockfish Chess Engine 16110611 Development (Nov 7, 2016)

  • Fix undefined behaviour with unaligned loads in syzygy code
  • Casting a pointer to a different type with stricter alignment requirements yields to implementation dependent behaviour.
  • Practicaly everything is fine for common platforms because the CPU/OS/compiler will generate correct code, but anyhow it is better to be safe than sorry.
  • Testing with dbg_hit_on() shows that the unalignment accesses are very rare (below 0.1%) so it makes sense to split the code in a fast path for the common case and a slower path as a fallback.
  • No functional change (verified with TB enabled).

New in Stockfish Chess Engine 16103013 Development (Oct 31, 2016)

  • Bonus for attacked passed pawn promotion path
  • Bonus for each attacked square on the promotion path of an enemy passed pawn.

New in Stockfish Chess Engine 16102706 Development (Oct 28, 2016)

  • Fix a series of undefined behaviours

New in Stockfish Chess Engine 16102506 Development (Oct 28, 2016)

  • History Stat Comparison
  • Adjust LMR by comparing history stats with opponent (prior ply).
  • Endgame malus for having a king in a pawnless flank

New in Stockfish Chess Engine 16102208 Development (Oct 28, 2016)

  • Correcty resey TB hit counter
  • Restore original behaviour to reset the counter before a new move search.
  • Also fixed some warnings and added const qualifier to a couple of functions, as suggested by m_stembera.

New in Stockfish Chess Engine 16102106 Development (Oct 28, 2016)

  • Per-thread TB hit counters
  • Use a per-thread counter to reduce contention with many cores and endgame positions.

New in Stockfish Chess Engine 16102017 Development (Oct 28, 2016)

  • Simplify next_move by always scoring evasions
  • For a default bench, this fixes the last valgrind error (jump on uninitialised value).

New in Stockfish Chess Engine 16101921 Development (Oct 28, 2016)

  • Make valgrind testing part of travis ci.

New in Stockfish Chess Engine 16101809 Development (Oct 28, 2016)

  • Remove useless assignments to currentMove

New in Stockfish Chess Engine 16101808 Development (Oct 28, 2016)

  • Use explicit logic for pruning
  • Also a speedup since we don't need to recalculate SEE for extensions...as it already determined to be positive.

New in Stockfish Chess Engine 16101408 Development (Oct 28, 2016)

  • Fixes for ARM compilation: take 2

New in Stockfish Chess Engine 16101308 Development (Oct 13, 2016)

  • Revert "Fixes for ARM compilation" This reverts commit a3fe80c36ac8ee7677d1f6b7df9b2497e3f755c5.

New in Stockfish Chess Engine 16101021 Development (Oct 11, 2016)

  • AppVeyor: run bench after build
  • And show resulting bench signature.
  • The run is very slow becuase optimizations are all disabled by default /Od /RTC1

New in Stockfish Chess Engine 16100909 Development (Oct 10, 2016)

  • Simplify futility pruning return value. Return eval as it is while doing futility pruning.

New in Stockfish Chess Engine 16100600 Development (Oct 6, 2016)

  • Do not use SEE in evasion scoring. Idea by Aram Tumanian (atumanian)

New in Stockfish Chess Engine 16100509 Development (Oct 5, 2016)

  • Retire implicit malus for stonewalls

New in Stockfish Chess Engine 16100316 Development (Oct 4, 2016)

  • Allow inCheck pruning
  • This is a bit tricky because we don't want to prune the only legal evasions, even if with negative SEE. So add an assert to avoid this subtle bug to slip in later.

New in Stockfish Chess Engine 16092915 Development (Sep 30, 2016)

  • Remove useless razoring condition
  • Condition is always true! For any value of the array index! Even an out of bound array, like razor_margin[120]!!!!

New in Stockfish Chess Engine 16092510 Development (Sep 26, 2016)

  • Rename shift_bb() to shift()
  • Rename shift_bb() to shift(), and DELTA_S to SOUTH, etc. to improve code readability, especially in evaluate.cpp when they are used together
  • old b = shift_bb(pos.pieces(PAWN))
  • new b = shift(pos.pieces(PAWN))
  • While there fix some small code style issues.

New in Stockfish Chess Engine 16092208 Development (Sep 22, 2016)

  • Simplify pinners conditions in SEE()
  • Use the following transformations:
  • to check that A is included in B, testing "(A & ~B) == 0" is faster
  • than "(A & B) == A"
  • to remove the intersection of A and B from A, doing "A &= ~B;" is as
  • fast as "if (A & B) A &= ~B;" but is simpler.
  • Overall, the simpler patch version is 0.3% than current master.

New in Stockfish Chess Engine 16092108 Development (Sep 21, 2016)

  • Fix pin-aware SEE:
  • Correct pinners calculation and fix bug with pinned pieces giving check. With this patch 'pinners' only returns sliders with exactly one defensive piece between the slider and the attacked square (in other words, pinners returns exact pinners).

New in Stockfish Chess Engine 16091808 Development (Sep 19, 2016)

  • Use fixed depth bench to make PGO builds more reproducible

New in Stockfish Chess Engine 16091608 Development (Sep 16, 2016)

  • Retire KingDanger array
  • Rescales the king danger variables in evaluate_king() to suppress the KingDanger[] array. This avoids the cost of the memory accesses to the array and simplifies the non-linear transformation used.

New in Stockfish Chess Engine 16091415 Development (Sep 15, 2016)

  • Retire MovePicker::see_sign()
  • No more used after last patch.

New in Stockfish Chess Engine 16091307 Development (Sep 13, 2016)

  • Integrate next_stage() logic into next_move()
  • Measured bench speed up goes from 0,7% to 2%, given the unreliable measure a reverse simmplification test was done on fishtest:

New in Stockfish Chess Engine 16091209 Development (Sep 12, 2016)

  • Pinned aware SEE
  • Don't allow pinned pieces to attack the exchange-square as long all pinners (this includes also potential ones) are on their original
  • square. As soon a pinner moves to the exchange-square or get captured on it, we fall back to standard SEE behaviour. This correctly handles the majority of cases with absolute pins.

New in Stockfish Chess Engine 16090806 Development (Sep 8, 2016)

  • Refactor previous patch

New in Stockfish Chess Engine 16090415 Development (Sep 6, 2016)

  • Syntactic sugar to loop across pieces
  • Also add some comments to the new operator~(Piece).

New in Stockfish Chess Engine 16090409 Development (Sep 5, 2016)

  • Change from [Color][PieceType] to [Piece]
  • Speed up of almost 1% in both normal and pgo builds.

New in Stockfish Chess Engine 16090208 Development (Sep 2, 2016)

  • Change exclusion key setup
  • Should depend on which move is excluded. This allow us to remove the dedicated Position::exclusion_key().

New in Stockfish Chess Engine 16083113 Development (Aug 31, 2016)

  • Optimize order of a few conditions in search
  • Also fix size of KingDanger array to reduce memory footprint.
  • Small speed up of around 0.5%

New in Stockfish Chess Engine 16083009 Development (Aug 30, 2016)

  • Remove condition on killers in history pruning
  • Now allows main killer to be history prune.

New in Stockfish Chess Engine 16082809 Development (Aug 29, 2016)

  • Removed an extra space

New in Stockfish Chess Engine 16082509 Development (Aug 26, 2016)

  • Reformat stats update
  • Rewritten in a way to have explicit in the search the bonus/penalty we apply: hopefully this will lead to further simplification/fix of current rather messy stats update code

New in Stockfish Chess Engine 16082408 Development (Aug 24, 2016)

  • Refutation penalty on captures
  • Apply refutation penalty for prior PV quiet move on captures

New in Stockfish Chess Engine 16081810 Development (Aug 18, 2016)

  • Remove a stale assignment No more used after previous patch.

New in Stockfish Chess Engine 16081514 Development (Aug 15, 2016)

  • Use predicted depth for history pruning
  • Note: Note based off past experiments / patches... history pruning is quite TC sensitive. I believe the reason for this TC dependency is that the CMH/FMH is a very large table that takes time to fill up with. In addition having more time for will increase the accuracy of the stats' value.

New in Stockfish Chess Engine 16080209 Development (Aug 10, 2016)

  • Simplify space formula

New in Stockfish Chess Engine 16080209 Development (Aug 2, 2016)

  • Use Color-From-To history stats to help sort moves

New in Stockfish Chess Engine 16072409 Development (Jul 25, 2016)

  • Allow null pruning at depth 1
  • This removes a check that prevents null pruning at depth 1 PLY.

New in Stockfish Chess Engine 16071607 Development (Jul 18, 2016)

  • Gradually relax the NMP staticEval check
  • Gradually relax the NMP staticEval check as we go to higher depths.
  • Use tuned values.

New in Stockfish Chess Engine 16071208 Development (Jul 12, 2016)

  • Fix extract_ponder_from_tt()
  • Checking for legality of a possible ponder move must be done before we undo the first pv move, of course. (spotted by mohammed li.) This obviously only has any effect when playing in ponder mode.

New in Stockfish Chess Engine 16070809 Development (Jul 8, 2016)

  • King tropism
  • Bonus for each square that we attack in the flank where the opponent king is. Squares that we attack twice and are not protected by an enemy pawn count double.

New in Stockfish Chess Engine 16070708 Development (Jul 7, 2016)

  • More safe checks
  • Consider a check given by a rook or a minor to be a "safe check" also in the case where supported by another piece, and given on a square only defended by a queen.

New in Stockfish Chess Engine 16070216 Development (Jul 4, 2016)

  • Use staticEval in null prune condition
  • Don't null prune at depth < 12 if staticEval < beta

New in Stockfish Chess Engine 16062610 Development (Jun 27, 2016)

  • Removing inCheck condition for counter move bonus

New in Stockfish Chess Engine 16062408 Development (Jun 24, 2016)

  • Remove redundant PvNode condition
  • After commit 6d58bf777caa323 we always call PvNodes with cutNode set to false.

New in Stockfish Chess Engine 16062109 Development (Jun 21, 2016)

  • Remove scalefactor dependency

New in Stockfish Chess Engine 16061918 Development (Jun 20, 2016)

  • On IID do not always search with cutNode = true
  • On IID now search with cutNode value instead of fixed value true.

New in Stockfish Chess Engine 16061508 Development (Jun 15, 2016)

  • Don't insert pv back into tt
  • This code was added before the accurate pv patch, when we retrieved PV directly from TT.
  • It's not required for correct (and long) PVs any more and should be safe to remove it.
  • Also, allowing helper threads to repeatedly over-write TT doesn't seem to make sense(that was probably an un-intended side-effect of lazy smp). Before Lazy SMP only Main Thread used to run ID loop and insert PV into TT.

New in Stockfish Chess Engine 16061109 Development (Jun 13, 2016)

  • Filter root moves filter before copy to threads
  • Currently root moves are copied to all teh threads but are DTZ filtered only in main thread at the beginning of teh search.
  • This patch moves the TB filtering before the copy of root moves fixing issue #679

New in Stockfish Chess Engine 16060307 Development (Jun 3, 2016)

  • Tuned values for piece check and attack unit factors
  • A middle ground patch of two successful tuning patches, one at STC, the other at LTC, which now passed both.

New in Stockfish Chess Engine 16052814 Development (May 30, 2016)

  • Pins or discovered attacks on the opponent's queen
  • Bonus for pins or discovered attacks on the opponent's queen

New in Stockfish Chess Engine 16052612 Development (May 26, 2016)

  • Simplify doubled pawn
  • Only use doubled pawn malus when the doubled pawns are on consecutive squares.

New in Stockfish Chess Engine 16052019 Development (May 23, 2016)

  • More detailed dependence of time allocation on the magnitude of score change

New in Stockfish Chess Engine 16051421 Development (May 16, 2016)

  • Fix a multiPV bug in lazy SMP
  • Where the helper threads were not doing multiPV at all.
  • Regression tested sprt @ 5+0.05 th 7

New in Stockfish Chess Engine 16051313 Development (May 13, 2016)

  • Double pawn simplification:
  • Try doubled pawn simplification, with psq table compensation.

New in Stockfish Chess Engine 16051018 Development (May 11, 2016)

  • Merge good and bad quiets

New in Stockfish Chess Engine 16050620 Development (May 9, 2016)

  • Unsafe checks :
  • Introducing a new multi-purpose penalty related to King safety, which
  • includes all kind of potential checks (from unsafe or unavailable
  • squares currently occupied by some other piece)
  • This will indirectly detect and reward some pins, discovered checks, and
  • motifs such as square vacation, or rook behind its pawn and aligned with
  • King (example Black Rg8, g7 against Kg1),
  • and penalize some pawn blockers (if they move, it allows a discovered
  • check by the pawn).
  • And since it looks also at protected squares, it detects some potential
  • defense overloading.
  • Finally, the rook contact checks had been removed some time ago. This
  • test will give a small bonus for them, as well as for bishop contact
  • checks.

New in Stockfish Chess Engine 16050509 Development (May 5, 2016)

  • Retire __popcnt64 intrinsic
  • Just use _mm_popcnt_u64() that is available both for MSVC abd Intel compiler.
  • Verified on MSVC that the produced assembly has the hardware 'popcnt' instruction.

New in Stockfish Chess Engine 16050115 Development (May 3, 2016)

  • Fix a warning with MSVC
  • Introduced by 2dd24dc4e618dc7b ("Use popcount intrinsic with Intel")

New in Stockfish Chess Engine 16042402 Development (Apr 25, 2016)

  • Use FMHs to assist with LMR formula.
  • Resolves #651

New in Stockfish Chess Engine 16041800 Development (Apr 18, 2016)

  • Fix incorrect draw detection
  • In this position we should have draw for repetition:
  • position fen rnbqkbnr/2pppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves g1f3 g8f6 f3g1
  • go infinite
  • But latest patch broke it.
  • Actually we had two(!) very subtle bugs, the first is that Position::set()
  • clears the passed state and in particular 'previous' member, so
  • that on passing setupStates, 'previous' pointer was reset.
  • Second bug is even more subtle: SetupStates was based on std::vector
  • as container, but when vector grows, std::vector copies all its contents
  • to a new location invalidating all references to its entries. Because
  • all StateInfo records are linked by 'previous' pointer, this made pointers
  • go stale upon adding more element to setupStates. So revert to use a
  • std::deque that ensures references are preserved when pushing back new
  • elements.

New in Stockfish Chess Engine 16040910 Development (Apr 11, 2016)

  • Hide global visibility when not needed
  • Also move PieceValue definition in psqt.cpp, where it is initialized.
  • Fix a warning in popcount16() with Intel compiler
  • No functional change.

New in Stockfish Chess Engine 16033114 Development (Apr 1, 2016)

  • A combo patch of two tuning patches

New in Stockfish Chess Engine 16032816 Development (Mar 29, 2016)

  • Rewrite bsfq management
  • Use compiler intrinsics when possible to avoid writing platform specific asm code.
  • No functional change

New in Stockfish Chess Engine 16032721 Development (Mar 28, 2016)

  • Bonus for loose enemies
  • Bench: 8880041
  • Resolves #606

New in Stockfish Chess Engine 16031504 Development (Mar 15, 2016)

  • A small simplification in movepick.h
  • No functional change
  • Resolves #597

New in Stockfish Chess Engine 16031023 Development (Mar 11, 2016)

  • Add followup moves history for move ordering

New in Stockfish Chess Engine 16030220 Development (Mar 3, 2016)

  • Passed pawn bonus simplification

New in Stockfish Chess Engine 16030201 Development (Mar 2, 2016)

  • Tweak initiative formula
  • Give more weight to the pawns number and the vertical king distance in evaluate_initiative()
  • Resolves #594

New in Stockfish Chess Engine 16022814 Development (Feb 29, 2016)

  • Clean up depth reduction calculation
  • Might also be a slight speed up
  • No functional change
  • Resolves #593

New in Stockfish Chess Engine 16022121 Development (Feb 22, 2016)

  • Remove slowMover
  • Removes a slowMover and one paramater from move_importance function.

New in Stockfish Chess Engine 16021420 Development (Feb 15, 2016)

  • Fix futility pruning bug
  • PredictedDepth can be negative, causing the futility_margin to be negative.
  • It will be very difficult to tweak moveCount pruning and reduction formula, as they are tuned to prevent this behavior.
  • No functional change

New in Stockfish Chess Engine 16020722 Development (Feb 8, 2016)

  • Remove Weights
  • Removed remaining redundant weights for pawn structure,
  • passed pawns, space and king safety by redistributing them
  • into individual evaluation terms.

New in Stockfish Chess Engine 16012901 Development (Jan 29, 2016)

  • Time management simplification

New in Stockfish Chess Engine 16012415 Development (Jan 25, 2016)

  • rotating symmetric patterns with increasing skipsize

New in Stockfish Chess Engine 16012016 Development (Jan 20, 2016)

  • Do not probe syzygy bases when castling is possible
  • Almost no functional change. Bench is unchanged

New in Stockfish Chess Engine 16011823 Development (Jan 19, 2016)

  • Retire RootNode template
  • There is no reason to compile 3 different copies of search(). PV nodes are on the cold path, and PvNode is a template parameter, so there is no cost in computing
  • const bool RootNode = PvNode && (ss-1)->ply == 0; And this simplifies code a tiny bit as well.

New in Stockfish Chess Engine 16011622 Development (Jan 18, 2016)

  • Assorted English grammar changes
  • No functional change
  • Resolves #567

New in Stockfish Chess Engine 16011317 Development (Jan 14, 2016)

  • Adjust reductions based on history and cmh tables

New in Stockfish Chess Engine 16010910 Development (Jan 11, 2016)

  • Tune time management for LTC

New in Stockfish Chess Engine 16010318 Development (Jan 4, 2016)

  • Retire CenterBind
  • And compensate in the PSQT.

New in Stockfish Chess Engine 15122720 Development (Dec 28, 2015)

  • Bench: 8355485
  • No functional change

New in Stockfish Chess Engine 15122220 Development (Dec 23, 2015)

  • Fix compiling of 32 bit binary on 64-bit Windows
  • Two versions of mingw-w64 (targeting Win64 and Win32)
  • can be installed on Windows too.
  • No functional change
  • Resolves #532

New in Stockfish Chess Engine 15122021 Development (Dec 21, 2015)

  • Remove killer move conditions from LMR

New in Stockfish Chess Engine 15121419 Development (Dec 14, 2015)

  • Fix easy move bug in SMP mode
  • Fix a bug where we could stop the search after only 10% of time used due to a matching easy move but later switch to a different move that was never pre-screened as easy due to SMP thread select.

New in Stockfish Chess Engine 15120511 Development (Dec 7, 2015)

  • New Tuned Weights
  • More accurate evaluation weights
  • Performed better at STC
  • LLR: 1.32 (-2.94,2.94) [0.00,4.00]
  • Total: 190043 W: 37433 L: 36675 D: 115935
  • Passed LTC

New in Stockfish Chess Engine 15120315 Development (Dec 3, 2015)

  • Proper Makefile for cross compiling 64 or 32 bit PGO + LTO + static Windows binaries under Linux.
  • No functional change
  • Resolves #511

New in Stockfish Chess Engine 15120212 Development (Dec 2, 2015)

  • Introduce new Threats weights = {350, 256}
  • Raise the midgame threats weight by 37%

New in Stockfish Chess Engine 15112502 Development (Dec 1, 2015)

  • Revert "Allow cross compilation of Windows binaries on a Linux system"
  • This reverts commit 388630ae285b3f9f0c8ee4f30e754bde6688c57c.

New in Stockfish Chess Engine 15111022 Development (Nov 11, 2015)

  • Avoid friend
  • operator

New in Stockfish Chess Engine 15110311 Development (Nov 4, 2015)

  • Get rid of timer thread
  • Unfortunately std::condition_variable::wait_for() is not accurate in general case and the timer thread can wake up also after tens or even hundreds of millisecs after time has elapsded. CPU load, process priorities, number of concurrent threads, even from other processes, will have effect upon it.
  • Even official documentation says: "This function may block for longer than timeout_duration due to scheduling or resource contention delays."
  • So retire timer and use a polling scheme based on a local thread counter that counts search() calls and a small trick to keep polling frequency constant, independently from the number of threads.

New in Stockfish Chess Engine 15110211 Development (Nov 2, 2015)

  • Pick bestmove from the deepest thread

New in Stockfish Chess Engine 15103001 Development (Oct 30, 2015)

  • Reduce variation in rootDepth between different threads
  • Reduce the variation in Root Depth between different threads. This
  • prevents threads from searching at a depth much higher than Main Thread.

New in Stockfish Chess Engine 15102510 Development (Oct 26, 2015)

  • Use atomics instead of volatile
  • Rely on well defined behaviour for message passing, instead of volatile. Three
  • versions have been tested, to make sure this wouldn't cause a slowdown on any
  • platform.
  • v1: Sequentially consistent atomics
  • No mesurable regression, despite the extra memory barriers on x86. Even with 15
  • threads and extreme time pressure, both acting as a magnifying glass:

New in Stockfish Chess Engine 15102207 Development (Oct 22, 2015)

  • Update authors
  • Fishtest is a key factor of SF success. Thanks to Fishtest we have not only greately improved ELO but, even more important, we have enabled a kind of joint development and testing that it is the herat of on open source project like SF.
  • Open sourcing is not just about open code, it is about commuity development. In case of a chess engine this has never been possible before due to missing a strong and strict testing environment that allows many people to contribute in a safe and coordinate way.
  • Fishtest is a new way of developing chess engines, something that has never exsisted before.
  • No functional change.

New in Stockfish Chess Engine 15102104 Development (Oct 21, 2015)

  • Almost passed tuning attempts
  • Collect and give a second try to some almost passed tuning attempts and
  • one-line tweaks from the last month.
  • Passed STC

New in Stockfish Chess Engine 15101606 Development (Oct 16, 2015)

  • Asymmetry bonus for the attacking side
  • Use asymmetry in the position (king separation, pawn structure) to
  • compute an "initiative bonus" for the attacking side

New in Stockfish Chess Engine 15101223 Development (Oct 13, 2015)

  • Combination of two ideas
  • Apply bonus for the prior CMH that caused a fail low.
  • Balance Stats: CMH and History bonuses are updated differently.
  • This eliminates the "fudge" factor weight when scoring moves. Also
  • eliminated discontinuity in the gravity history stat formula. (i.e. stat
  • scores will no longer inverse when depth exceeds 22)

New in Stockfish Chess Engine 15100720 Development (Oct 8, 2015)

  • Retire rook contact checks
  • STC:
  • LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
  • Total: 34114 W: 6363 L: 6265 D: 21486
  • LTC:
  • LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
  • Total: 61776 W: 9349 L: 9289 D: 43138
  • LTC (after rebasing):
  • LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
  • Total: 15261 W: 2343 L: 2214 D: 10704
  • Bench: 7523382
  • Resolves #442

New in Stockfish Chess Engine 15100720 Development (Oct 7, 2015)

  • Travis CI: add gcc 4.8 for osx. This setup was still missing. Suggested by Stéphane Nicolet.

New in Stockfish Chess Engine 15100612 Development (Oct 6, 2015)

  • Travis CI: add clang and osx
  • Extend builds to clang and osx platforms.
  • And check bench numbers.

New in Stockfish Chess Engine 15100512 Development (Oct 5, 2015)

  • Add Trevis CI support
  • Add Travis CI support to GitHub repo.

New in Stockfish Chess Engine 15091918 Development (Sep 21, 2015)

  • Refine ranks and increase resulting bonus.

New in Stockfish Chess Engine 15091802 Development (Sep 18, 2015)

  • Reduce writes in TT::probe().
  • Only refresh TT entry when it's really necessary.
  • This should give a small speed boost for some machines.
  • And it's a risk-free change.
  • No functional change.
  • Resolves #429

New in Stockfish Chess Engine 15091514 Development (Sep 16, 2015)

  • Scales the endgame score by the number of pawns

New in Stockfish Chess Engine 15091020 Development (Sep 11, 2015)

  • Louis Zulli reported that Stockfish suffers from very occasional hangs with his 20 cores machine.
  • Careful SMP debugging revealed that this was caused by "a ghost split point slave", where thread
  • was marked as a split point slave, but wasn't actually working on it.
  • The only logical explanation for this was double booking, where due to SMP race, the same thread
  • is booked for two different split points simultaneously.
  • Due to very intermittent nature of the problem, we can't say exactly how this happens.
  • The current handling of Thread specific variables is risky though. Volatile variables are in some
  • cases changed without spinlock being hold. In this case standard doesn't give us any kind of
  • guarantees about how the updated values are propagated to other threads.
  • We resolve the situation by enforcing very strict locking rules:
  • Values for key thread variables (splitPointsSize, activeSplitPoint, searching)
  • can only be changed when the thread specific spinlock is held.
  • Structural changes for splitPoints[] are only allowed when the thread specific spinlock is held.
  • Thread booking decisions (per split point) can only be done when the thread specific spinlock is held.
  • With these changes hangs didn't occur anymore during 2 days torture testing on Zulli's machine.
  • We probably have a slight performance penalty in SMP mode due to more locking.