pub struct MonteCarloTreeSearch<G: Game> { /* private fields */ }
Expand description

A strategy that uses random playouts to explore the game tree to decide on the best move. This can be used without an Evaluator, just using the rules of the game.

Implementations§

source§

impl<G: Game> MonteCarloTreeSearch<G>

source

pub fn new(options: MCTSOptions) -> Self

source

pub fn new_with_policy( options: MCTSOptions, policy: Box<dyn RolloutPolicy<G = G> + Sync> ) -> Self

Create a searcher with a custom rollout policy. You could bias the random move generation to prefer certain kinds of moves, always choose winning moves, etc.

source

pub fn set_max_rollouts(&mut self, rollouts: u32)

Instead of a timeout, run this many rollouts to choose a move.

Trait Implementations§

source§

impl<G> Strategy<G> for MonteCarloTreeSearch<G>where G: Sync + Game, G::S: Clone + Send, G::M: Copy + Sync,

source§

fn choose_move(&mut self, s: &G::S) -> Option<G::M>

source§

fn set_timeout(&mut self, timeout: Duration)

For strategies that can ponder indefinitely, set the timeout. This can be changed between calls to choose_move.
source§

fn set_max_depth(&mut self, depth: u8)

Set the maximum depth to evaluate (instead of the timeout). This can be changed between calls to choose_move.
source§

fn principal_variation(&self) -> Vec<G::M>

From the last choose_move call, return the principal variation, i.e. the best sequence of moves for both players.

Auto Trait Implementations§

§

impl<G> !RefUnwindSafe for MonteCarloTreeSearch<G>

§

impl<G> !Send for MonteCarloTreeSearch<G>

§

impl<G> Sync for MonteCarloTreeSearch<G>where G: Sync, <G as Game>::M: Sync,

§

impl<G> Unpin for MonteCarloTreeSearch<G>where G: Unpin, <G as Game>::M: Unpin,

§

impl<G> !UnwindSafe for MonteCarloTreeSearch<G>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V