use crate::{ logic::{FutureMoveConfig, FutureMoves}, repr::{Board, Piece, Winner}, }; use allocative::FlameGraphBuilder; use rand::seq::IteratorRandom; #[allow(dead_code)] pub fn run() { let mut flamegraph = FlameGraphBuilder::default(); let mut fut = FutureMoves::new( Piece::Black, FutureMoveConfig { max_depth: 20, min_arena_depth: 14, top_k_children: 2, up_to_minus: 10, max_arena_size: 100_000_000, do_prune: true, print: true, children_eval_method: Default::default(), }, ); let mut board = Board::STARTING_POSITION; let mut rng = rand::rng(); let mut i = 0; while board.game_winner() == Winner::None && i < 2 { fut.update_from_board(&board); flamegraph.visit_root(&fut); fut.generate(); flamegraph.visit_root(&fut); if let Some(m) = fut.best_move().expect("FutureMoves has no move?") { board.place(m, Piece::Black).expect("failed move"); } if let Some(m) = board.possible_moves(Piece::White).choose(&mut rng) { board.place(m, Piece::White).expect("enemy failed move"); } i += 1; } println!("{}", flamegraph.finish_and_write_flame_graph()); }