diff options
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/Cargo.toml | 12 | ||||
| -rw-r--r-- | cli/src/eval.rs | 8 | ||||
| -rw-r--r-- | cli/src/main.rs | 86 | ||||
| -rw-r--r-- | cli/src/perft.rs | 26 |
4 files changed, 0 insertions, 132 deletions
diff --git a/cli/Cargo.toml b/cli/Cargo.toml deleted file mode 100644 index 093c594..0000000 --- a/cli/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "cli" -version = "0.1.0" -authors = ["Mike White <botahamec@outlook.com>"] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -clap = "2" -ai = {path = "../ai"} -rayon = "1.5"
\ No newline at end of file diff --git a/cli/src/eval.rs b/cli/src/eval.rs deleted file mode 100644 index 8076af1..0000000 --- a/cli/src/eval.rs +++ /dev/null @@ -1,8 +0,0 @@ -use ai::{CheckersBitBoard, Move}; -pub fn eval(depth: usize) -> f32 { - ai::eval_multithreaded(depth, 0.0, 1.0, CheckersBitBoard::starting_position()) -} - -pub fn best_move(depth: usize) -> Move { - ai::best_move(depth, CheckersBitBoard::starting_position()) -} diff --git a/cli/src/main.rs b/cli/src/main.rs deleted file mode 100644 index d230398..0000000 --- a/cli/src/main.rs +++ /dev/null @@ -1,86 +0,0 @@ -use ai::CheckersBitBoard; -use clap::{App, Arg, SubCommand}; - -mod eval; -mod perft; - -fn main() { - let matches = App::new("Ampere") - .version("0.1") - .author("Botahamec <botahamec@outlook.com>") - .about("An American Checkers AI") - .subcommand( - SubCommand::with_name("perft") - .about("Calculate the number of possible moves") - .arg( - Arg::with_name("depth") - .required(true) - .short("d") - .takes_value(true) - .help("The depth to go to"), - ), - ) - .subcommand( - SubCommand::with_name("eval") - .about("Calculate the advantage") - .arg( - Arg::with_name("depth") - .required(true) - .short("d") - .takes_value(true) - .help("The depth to go to"), - ), - ) - .subcommand( - SubCommand::with_name("best") - .about("Calculate the best move") - .arg( - Arg::with_name("depth") - .required(true) - .short("d") - .takes_value(true) - .help("The depth to go to"), - ), - ) - .get_matches(); - - if let Some(matches) = matches.subcommand_matches("perft") { - println!( - "{}", - perft::positions( - CheckersBitBoard::starting_position(), - matches - .value_of("depth") - .unwrap() - .parse::<usize>() - .expect("Error: not a valid number") - ) - ); - } - - if let Some(matches) = matches.subcommand_matches("eval") { - println!( - "{}", - eval::eval( - matches - .value_of("depth") - .unwrap() - .parse::<usize>() - .expect("Error: not a valid number") - ) - ); - } - - if let Some(matches) = matches.subcommand_matches("best") { - println!( - "{}", - eval::best_move( - matches - .value_of("depth") - .unwrap() - .parse() - .expect("Error: not a valid number") - ) - ) - } -} diff --git a/cli/src/perft.rs b/cli/src/perft.rs deleted file mode 100644 index 535aec0..0000000 --- a/cli/src/perft.rs +++ /dev/null @@ -1,26 +0,0 @@ -use ai::{CheckersBitBoard, Move, PossibleMoves}; -use rayon::prelude::*; -use std::fmt::{Display, Formatter}; - -#[derive(Clone)] -struct PerftResult { - result: Vec<(Move, usize)>, -} - -pub fn positions(board: CheckersBitBoard, depth: usize) -> usize { - let moves = PossibleMoves::moves(board); - - if depth == 0 { - 1 - } else { - let mut total = 0; - - for current_move in moves { - // safety: we got this move out of the list of possible moves, so it's definitely valid - let board = unsafe { current_move.apply_to(board) }; - total += positions(board, depth - 1); - } - - total - } -} |
