module BishBosh.Search.SearchState(
SearchState(
getPositionHashQuantifiedGameTree,
getDynamicMoveData
),
euthanise,
mkSearchState,
initialise
) where
import qualified BishBosh.Component.Move as Component.Move
import qualified BishBosh.Evaluation.PositionHashQuantifiedGameTree as Evaluation.PositionHashQuantifiedGameTree
import qualified BishBosh.Input.SearchOptions as Input.SearchOptions
import qualified BishBosh.Property.Empty as Property.Empty
import qualified BishBosh.Search.DynamicMoveData as Search.DynamicMoveData
data SearchState x y positionHash criterionValue weightedMean = MkSearchState {
getPositionHashQuantifiedGameTree :: Evaluation.PositionHashQuantifiedGameTree.PositionHashQuantifiedGameTree x y positionHash criterionValue weightedMean,
getDynamicMoveData :: Search.DynamicMoveData.DynamicMoveData x y positionHash
}
instance (
Enum x,
Enum y,
Ord x,
Ord y,
Show x,
Show y,
Show criterionValue,
Show positionHash,
Show weightedMean
) => Show (SearchState x y positionHash criterionValue weightedMean) where
showsPrec _ _ = showString "SearchState {...}"
mkSearchState
:: Evaluation.PositionHashQuantifiedGameTree.PositionHashQuantifiedGameTree x y positionHash criterionValue weightedMean
-> Search.DynamicMoveData.DynamicMoveData x y positionHash
-> SearchState x y positionHash criterionValue weightedMean
mkSearchState = MkSearchState
initialise :: Evaluation.PositionHashQuantifiedGameTree.PositionHashQuantifiedGameTree x y positionHash criterionValue weightedMean -> SearchState x y positionHash criterionValue weightedMean
initialise positionHashQuantifiedGameTree = MkSearchState {
getPositionHashQuantifiedGameTree = positionHashQuantifiedGameTree,
getDynamicMoveData = Property.Empty.empty
}
euthanise
:: Component.Move.NPlies
-> Input.SearchOptions.MaybeRetireAfterNMoves
-> Input.SearchOptions.MaybeRetireAfterNMoves
-> SearchState x y positionHash criterionValue weightedMean
-> SearchState x y positionHash criterionValue weightedMean
euthanise nPlies maybeRetireKillerMovesAfter maybeRetireTranspositionsAfter searchState@MkSearchState { getDynamicMoveData = dynamicMoveData } = searchState {
getDynamicMoveData = Search.DynamicMoveData.euthanise nPlies maybeRetireKillerMovesAfter maybeRetireTranspositionsAfter dynamicMoveData
}