othello/src/allocs.rs

46 lines
1.3 KiB
Rust

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());
}