TacticianSearch
Experimental full-turn search with cheap ordering and exact roll-coverage king threats on a bounded shortlist.
Every candidate comes from the canonical maximal-dice generator. Immediate king captures bypass evaluation. Different paths to the same complete post-turn state occupy one shortlist slot; this intentionally changes tie multiplicities relative to path-based bots. The first representative is retained, making seeded ties reproducible.
Aggressive evaluation orders the states. Rescoring replaces its boolean king-exposure penalty with roll-weighted danger, adds hypothetical attacking potential, and prices hanging material using the public PieceSafety primitive. Attacking potential assumes the board is unchanged before our next roll; it does not model an intervening reply.
The work limit bounds expensive candidate queries, not total generation or wall time. This synchronous search makes no UI responsiveness guarantee and is not registered as a default opponent.
Attributes
- Source
- TacticianSearch.scala
- Graph
-
- Supertypes
Members list
Value members
Concrete 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 - Definition Classes
- Source
- TacticianSearch.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
- Definition Classes
- Source
- TacticianSearch.scala
Inherited 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
- Inherited from:
- SearchAlgorithm
- 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. - Inherited from:
- SearchAlgorithm
- 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)
- Inherited from:
- SearchAlgorithm
- 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
- Inherited from:
- SearchAlgorithm
- 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
- Inherited from:
- SearchAlgorithm
- 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
- Inherited from:
- SearchAlgorithm
- 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
- Inherited from:
- SearchAlgorithm
- Source
- SearchAlgorithm.scala
Concrete fields
Attributes
- Source
- TacticianSearch.scala