oxymcts 0.1.0

Library for general traits and default implementations for Monte Carlo Tree Search
Documentation
use crate::{DefaultMcts, GameTrait};
use rand::prelude::SliceRandom;
use rand::thread_rng;

pub fn mcts_uct_agent<Game: GameTrait>(state: &Game, playouts: usize, c: f64) -> Game::Move {
    let mut mcts = DefaultMcts::new(state);
    for _ in 0..playouts {
        mcts.execute(&c, ());
    }
    mcts.best_move(&c)
}

pub fn random_agent<Game: GameTrait>(state: &Game) -> Game::Move {
    state
        .legals_moves()
        .choose(&mut thread_rng())
        .unwrap()
        .clone()
}