Repository navigation
0.1.2
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
plecoto 0.4.1 - updated
pleco_engineto 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/RanksScore::centipawns()for returning the value of a score in centipawns. This is a value mostly for UCI displaying purposes.- impl
DisplayforScore. 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
PreFetchabletrait, containing only two methods,prefetch. Allows for memory prefetching of certain structures. This is created for use bypleco_enginein 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_movetoapply_move_pft_chk, and added generic prefetching parameters. These are used for a Pawn Table and Material table respectively, as mentioned above. TranspositionTablenow implements prefetching!
pleco_engine changes
- Removed the
InCheckparameter from qsearch (As Stockfish has done so recently as well). This has simplified the calling ofqsearch, as the callee doesn't need to know if it's in check, as qsearch now does that automatically. depthis now a i16 across the board. This is for having negative depths withqsearch, as it's searching past the horizon.Evalchanges:- Connectivity and Queen Slider bonus's!
- Completed the tracing function, added to the
Evalfunction as a method. - Added an
EvaluationInnerto distinguish internal vs. External access to evaluation. - removed
attacked_by_allandattacked_by_queen_diagonalfromEvaluationInner - 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_movesearch for pruning the possibility of a better non-tt move. tt_movenow defaults to the first root move when at root.- Added
improvingfactor to futility pruning. - Singular Extensions
- Shallow depth pruning
- Reduced Depth LMR Search
- Reductions / Extensions
- Added
cut_nodeandski_early_pruningfields forsearch
Materialchanges:- Fixed bug where the scale factors would default to zero, instead of the normal scale factor
- Now implements
PreFetchable.
PawnEntrychanges:- Separated out the score to be per player.
- Now implements
PreFetchable. - Bug fixes
- Added startup generated
Searchtables for continuity checking. TableBasenow 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 withinit_globals. This also means calls toTIMERhave been changed totimer(), and respectively with the transposition table. - Added
mated_inandmate_infor returning scores within a mate value. - Added
value_from_ttandvalue_to_ttfor retrieving and setting tt values with respect to the current ply. Searcher::pvnow returns results correctly, including ignoring infinite values. Also can return the distance to a mate, if available.