SearchAlgorithm
Contract for bot strategies in the Dice Chess Engine.
Implementations receive the current dicechess.engine.domain.GameState and the multiset of available dice rolls, then return the chosen full-turn path wrapped in a ScoredSequence, or None when the position has no legal moves (the active player must pass).
Implementations are expected to be thread-safe singletons (e.g., Scala object).
==Resignation== No shouldResign hook exists on SearchAlgorithm by design. Resignation is an operational decision handled by the bot runtime / host application layer rather than the search strategy.
Attributes
- Source
- SearchAlgorithm.scala
- Graph
-
- Supertypes
-
class Objecttrait Matchableclass Any
- Known subtypes
-
object AggressiveSearchobject CheckmateAwareSearchtrait DrawOfferLogicobject MonteCarloSearchobject GreedySearchobject GreedySearchV2class OpeningBookBotobject RandomKingCaptureSearchobject RandomSearchclass TacticianSearchtrait TimeBudgetedSearchclass ExpectimaxSearchclass OnnxEvalSearchclass OnnxExpectimaxSearchShow all
Members list
Value members
Abstract methods
Finds and returns the best full-turn path according to this strategy.
Finds and returns the best full-turn path according to this strategy.
Value parameters
- state
-
the current dicechess.engine.domain.GameState;
state.activeColoridentifies the side to move
Attributes
- Returns
-
Some([[ScoredSequence]])when at least one legal path exists;Nonewhen the player must pass - Source
- SearchAlgorithm.scala
Concrete methods
Estimates the winning probability in [0.0, 1.0] for the side to move. Convenience over winProbability for offer decisions, where the deciding side is the active colour; do not override it, override winProbability.
Estimates the winning probability in [0.0, 1.0] for the side to move. Convenience over winProbability for offer decisions, where the deciding side is the active colour; do not override it, override winProbability.
Attributes
- Source
- SearchAlgorithm.scala
Finds the best full-turn path, drawing any randomness (e.g. tie-breaking among equally-valued turns) from the supplied random. Lets a caller make a whole game reproducible from one seed — most importantly the bot arena, which otherwise gets a fresh unseeded Random per move and so is non-deterministic.
Finds the best full-turn path, drawing any randomness (e.g. tie-breaking among equally-valued turns) from the supplied random. Lets a caller make a whole game reproducible from one seed — most importantly the bot arena, which otherwise gets a fresh unseeded Random per move and so is non-deterministic.
The default ignores random and delegates to the no-arg findBestMove; randomised strategies override it to route their tie-breaking through the given source.
Attributes
- Source
- SearchAlgorithm.scala
Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, evaluated from the perspective of responder.
Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, evaluated from the perspective of responder.
This is the single policy point for the take/drop decision: strategies that want their own threshold or estimator override this overload. The two-argument form below only delegates here, so a policy written against it is bypassed whenever a caller names the responder explicitly (which every caller holding a doubleDecision state must, see the hazard note there).
Value parameters
- currentStake
-
the proposed double stake (e.g. 2, 4...)
- responder
-
the colour of the player responding to the double offer
- state
-
current game state (dice pool is empty); its active colour is the side to move, which in a double decision is the offerer, not the responder
Attributes
- Returns
-
true to accept the double (Take), false to resign the current stake (Drop)
- Source
- SearchAlgorithm.scala
Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, taking the side to move as the responder. Kept for source and binary compatibility; it delegates to the three-argument overload.
Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, taking the side to move as the responder. Kept for source and binary compatibility; it delegates to the three-argument overload.
Value parameters
- currentStake
-
the proposed double stake (e.g. 2, 4...)
- state
-
current game state (dice pool is empty)
Attributes
- Returns
-
true to accept the double (Take), false to resign the current stake (Drop)
- Note
-
Perspective hazard: this overload evaluates the win probability of
state.activeColor. In a double decision state,state.activeColoris the player who offered the double, NOT the responder, so a caller that feeds the delivered position here asks whether the offerer should take. Callers must prefershouldAcceptDouble(state, currentStake, responder); strategies must override that overload, not this one. - Source
- SearchAlgorithm.scala
Determines whether the bot should accept a draw offered by the opponent.
Determines whether the bot should accept a draw offered by the opponent.
Value parameters
- state
-
current game state
Attributes
- Returns
-
true to accept the draw
- Source
- SearchAlgorithm.scala
Determines whether the bot should offer a double before its dice roll.
Determines whether the bot should offer a double before its dice roll.
Value parameters
- currentStake
-
the current stake of the game
- state
-
current game state (dice pool is empty)
Attributes
- Returns
-
true to offer a double, false otherwise
- Source
- SearchAlgorithm.scala
Determines whether the bot should offer a draw in the current position.
Determines whether the bot should offer a draw in the current position.
Value parameters
- state
-
current game state
Attributes
- Returns
-
true to offer a draw
- Source
- SearchAlgorithm.scala
Estimates the winning probability in [0.0, 1.0] of color, whichever side is to move.
Estimates the winning probability in [0.0, 1.0] of color, whichever side is to move.
This is the estimator hook: a strategy with its own equity model (for example a Monte-Carlo rollout) overrides this method, so that both the offer decision (active colour) and the take/drop decision (responder colour) see the same estimate. The default maps the centipawn evaluation to a probability with a logistic sigmoid.
Attributes
- Source
- SearchAlgorithm.scala