diff --git a/benches/future_children.rs b/benches/future_children.rs index 5f6ef5c..217ca3e 100644 --- a/benches/future_children.rs +++ b/benches/future_children.rs @@ -13,7 +13,7 @@ fn extend_layers_no_pruning(depth: usize) -> usize { max_arena_size: usize::MAX, do_prune: false, print: false, - children_eval_method: ChildrenEvalMethod::Average, + children_eval_method: ChildrenEvalMethod::AverageDivDepth, }; let mut fut = FutureMoves::new(Piece::Black, config); fut.update_from_board(&Board::new().starting_pos()); diff --git a/src/elo.rs b/src/elo.rs index b579748..e8106bf 100644 --- a/src/elo.rs +++ b/src/elo.rs @@ -26,10 +26,10 @@ pub fn run() { max_arena_size: usize::MAX, do_prune: false, print: false, - children_eval_method: ChildrenEvalMethod::Average, + children_eval_method: ChildrenEvalMethod::AverageDivDepth, }; - let configs = [4, 6, 8] + let configs = [6] .into_iter() .map(move |d| FutureMoveConfig { max_depth: d, @@ -46,6 +46,16 @@ pub fn run() { move_c.max_depth < 8 } }) + // .flat_map(move |prev_c| { + // [ + // ChildrenEvalMethod::Average, + // ChildrenEvalMethod::AverageDivDepth, + // ] + // .map(move |children_strat| FutureMoveConfig { + // children_eval_method: children_strat, + // ..prev_c + // }) + // }); .flat_map(move |prev_c| { if !prev_c.do_prune { // do not bother making configs when pruning is disabled @@ -107,7 +117,7 @@ pub fn run() { let mut arena = PlayerArena::new(vec); - arena.prop_arena(5); + arena.prop_arena(100); println!("{}", arena); } diff --git a/src/logic/future_moves.rs b/src/logic/future_moves.rs index 1fafebc..79770db 100644 --- a/src/logic/future_moves.rs +++ b/src/logic/future_moves.rs @@ -78,6 +78,7 @@ impl std::fmt::Display for FutureMoveConfig { pub enum ChildrenEvalMethod { /// Best (by far) strat compared to Max or Min Average, + AverageDivDepth, } impl FutureMoves { @@ -271,7 +272,7 @@ impl FutureMoves { let by_depth_vec = self.by_depth(indexes); // reversed so we build up the value of the closest (in time) moves from the future - for (_, nodes) in by_depth_vec.into_iter().rev() { + for (depth, nodes) in by_depth_vec.into_iter().rev() { for idx in nodes { let children_values = self.arena[idx] .children @@ -284,6 +285,12 @@ impl FutureMoves { .into_iter() .sum::() .checked_div(self.arena[idx].children.len() as i32), + + ChildrenEvalMethod::AverageDivDepth => children_values + .into_iter() + .sum::() + .checked_div(self.arena[idx].children.len() as i32) + .and_then(|x| x.checked_div(depth as i32)), } .unwrap_or(0); @@ -560,7 +567,7 @@ mod tests { max_arena_size: 100, do_prune: false, print: false, - children_eval_method: ChildrenEvalMethod::Average, + children_eval_method: ChildrenEvalMethod::AverageDivDepth, }; #[test] diff --git a/src/main.rs b/src/main.rs index 6a71603..709efc8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,20 +24,9 @@ fn main() { max_arena_size: 100_000_000, do_prune: true, print: true, - children_eval_method: ChildrenEvalMethod::Average, + children_eval_method: ChildrenEvalMethod::AverageDivDepth, }, ); - // let player2 = complexagent::ComplexAgent::new( - // Piece::White, - // FutureMoveConfig { - // max_depth: 20, - // min_arena_depth_sub: 14, - // top_k_children: 2, - // up_to_minus: 10, - // max_arena_size: 50_000_000, - // do_prune: true, - // }, - // ); let player2 = agent::ManualAgent::new(Piece::White); let mut game = Game::new(Box::new(player1), Box::new(player2));