Pleco Versions Save

A Rust-based re-write of the Stockfish Chess Engine

0.1.6

5 years ago

Updated pleco to 0.5.0 and pleco_engine to 0.1.6

Mostly little fixes, but most importantly, Pleco now compiles on stable Rust!

pleco changes:

  • Now compiles on stable!!
  • Added nightly feature for advanced optimizations on nightly toolchain.
  • Modified move_list::MAX_MOVES to adjust for cache size based on target pointer width.
  • Removed prefetch dependency and added a new prefetch.
  • Improved PRNG::singular_bit()'s randomness (Better distribution of bits).
  • Allocation now depends on Alloc, not GlobalAlloc.
  • popcount now uses a table lookup by default. -bit_scan_forward now does an unchecked lookup on the De Bruijn table
  • minimax cleanup.

pleco_engine changes:

  • Modified prefetch instructions to use pleco::prefetch_write
  • Refactored some methods in threadpool.rs

0.1.5

5 years ago

Updated pleco to 0.4.4 and pleco_engine to 0.1.5.

Features fixes to work around nightly breaking changes, dependency changes, and bug fixes.

Seems to be around a 10-15% speed bump from the last release. Wahoo! Though, this can be mostly attributed to compiler updates, rather than any of the changes in this release.

pleco changes:

  • Turn PieceLocations Iterator from recursion to loop, to prevent stack overflow
  • Convert const arrays to static
  • Fixed `Piece::{Display,Debug}' to faster implementations (Fix #117)
  • Remove SIMD functions
  • Remove clippy cfgs.
  • Updated dependencies.

pleco_engine changes:

  • Global Timer now initialized through static array, rather than through static pointer
  • Remove clippy cfgs.
  • Remove dependency on crossbeam, as unsafely scoped threads are available in the standard library.
  • Updated benchmarks to initialize lazy_static statics before benchmarking.
  • Updated dependencies.

0.1.4

5 years ago

Updated pleco to 0.4.3 and pleco_engine to 0.1.4.

Nothing too significant, mostly fixing issues with the new allocation system.

pleco changes:

  • Added new 'unreachable_unchecked hint, removing dependency on unreachable` crate.
  • Added repr(transparent) to BitMove, Sq, and BitBoard.
  • Fixed zobrist typo
  • Added #[cold] attributes to startup functions.
  • Changed MoveType from a u16 to u8.
  • Fixed allocation issues.
  • Updated dependencies.

pleco_engine changes:

  • Added #[cold] attributes to startup functions.
  • Changed VERSION string to a macro referencing current cargo version
  • Fixed allocation issues.
  • The global Threadpool and transposition table are now in a fixed memory locations.
  • Updated dependencies.

0.1.3

6 years ago

This release addresses the recent nightly breakages in allocation. No other changes since 0.1.2.

Binary included as well.

0.1.2

6 years ago

Release of version 0.1.2

Significant bug fixes and optimizations, especially for evaluation. Many of Stockfish's searching features are implemented with this release, such as depth extensions / reductions, shallow depth pruning, and many more.

This version will fail to run with recent nightly compilers!

This is due to recent changes in std::alloc and similar modules. As such, there will be no binary for this release, as that'll come with 0.1.3 to address the recent changes in nightly. This will land very soon.

Changelog

General

  • updated pleco to 0.4.1
  • updated pleco_engine to 0.1.2
  • README's updated to reflect the work of the stockfish team.

pleco changes:

  • Fixed bug with Castling::player_can_castle() returning incorrect results.
  • Added Board::castling_bits() to return the raw u8 of the castling rights
  • Added Board::non_pawn_material_all() to return the sum of both player's npm.
  • Added Board::opposite_bishops() to check if the only non Pawn/King pieces are two bishops of opposite players, being on opposite square types.
  • File::bb() and Rank::bb()` for returning the BitBoards of Files/Ranks
  • Score::centipawns() for returning the value of a score in centipawns. This is a value mostly for UCI displaying purposes.
  • impl Display for Score. This returns a nicely formatted version of the score in centipawns.
  • Added SQ::opoosite_colors(other: SQ) for quick determining if two squares lie on oppositely colored squares.
  • Added PreFetchable trait, containing only two methods, prefetch. Allows for memory prefetching of certain structures. This is created for use by pleco_engine in applying a move. It prefetches the location of a pawn table and material table. Applying a move can still be done without prefetching, due to the use of a "dummy" structure, which gets optimized away.
  • Changed apply_unknown_move to apply_move_pft_chk, and added generic prefetching parameters. These are used for a Pawn Table and Material table respectively, as mentioned above.
  • TranspositionTable now implements prefetching!

pleco_engine changes

  • Removed the InCheck parameter from qsearch (As Stockfish has done so recently as well). This has simplified the calling of qsearch, as the callee doesn't need to know if it's in check, as qsearch now does that automatically.
  • depth is now a i16 across the board. This is for having negative depths with qsearch, as it's searching past the horizon.
  • Eval changes:
    • Connectivity and Queen Slider bonus's!
    • Completed the tracing function, added to the Eval function as a method.
    • Added an EvaluationInner to distinguish internal vs. External access to evaluation.
    • removed attacked_by_all and attacked_by_queen_diagonal from EvaluationInner
    • Added a Evaluation::scale_factor() method to further scale between mid and end-game scores
    • Significant bug fixes resulting in a more accurate evaluation. This is by far the biggest improvement currently.
  • Search algorithm changes:
    • Altered timing parameters. This will continue to fluctuate as testing continues.
    • Added an excluded_move search for pruning the possibility of a better non-tt move.
    • tt_move now defaults to the first root move when at root.
    • Added improving factor to futility pruning.
    • Singular Extensions
    • Shallow depth pruning
    • Reduced Depth LMR Search
    • Reductions / Extensions
    • Added cut_node and ski_early_pruning fields for search
  • Material changes:
    • Fixed bug where the scale factors would default to zero, instead of the normal scale factor
    • Now implements PreFetchable.
  • PawnEntry changes:
    • Separated out the score to be per player.
    • Now implements PreFetchable.
    • Bug fixes
  • Added startup generated Search tables for continuity checking.
  • TableBase now has a const size associated with it, to allow for constant indexing. Also means no more resizing.
  • Removed the use of lazy_static, and instead perform any needed statics with init_globals. This also means calls to TIMER have been changed to timer(), and respectively with the transposition table.
  • Added mated_in and mate_in for returning scores within a mate value.
  • Added value_from_tt and value_to_tt for retrieving and setting tt values with respect to the current ply.
  • Searcher::pv now returns results correctly, including ignoring infinite values. Also can return the distance to a mate, if available.

0.1.1

6 years ago

Initial Public Release of Pleco.