Moved all searcher related files/modules into a separate searcher folder/package
Refactored the original Searcher class into a class hierarchy:
abstract base class = Searcher
MiniMaxVariant inherits from Searcher
NegaMaxSp inherits from MiniMaxVariant
NegaMaxLazySMP inherits from NegaMaxSp
Most performance enhancing algorithms are refactored into private methods within the MiniMaxVariant class:
e.g. null move pruning, iterative deepening, aspiration windows, and quiescence
Use factory pattern (SearcherFactory) to create/build concrete Searcher objects
Refactored the MoveOrder logic as a separate abstract base class, independent from Searcher:
MvvLvaHeuristic inherits from MoveOrder
Updated config settings
Removed dodgy tests, should improve test methods for searchers in next change
Remarks:
This is purely a code refactoring, to improve code extendibility and readability
Expect no performance change
Please refer to #10 for design heuristics/considerations
The naming of functions is not ideal, naming suggestions are welcome
A lot more code refactoring can be done, but aim to keep this PR shorter and simple (incremental changes) - any further refactoring recommendations are welcome
LVGTM on first round review, follows what we discussed in #10 closely. Think some minor changes and docstrings need to be added and should go through smoothly - thanks a lot!!
Summary of change:
Searcher
class into a class hierarchy:Searcher
MiniMaxVariant
inherits fromSearcher
NegaMaxSp
inherits fromMiniMaxVariant
NegaMaxLazySMP
inherits fromNegaMaxSp
MiniMaxVariant
class:SearcherFactory
) to create/build concreteSearcher
objectsMoveOrder
logic as a separate abstract base class, independent fromSearcher
:MvvLvaHeuristic
inherits fromMoveOrder
Remarks:
Successfully merging this PR should close #10.