diff --git a/src/logic/future_moves.rs b/src/logic/future_moves.rs index 0ba82f4..3fec03a 100644 --- a/src/logic/future_moves.rs +++ b/src/logic/future_moves.rs @@ -160,27 +160,31 @@ impl FutureMoves { ) }; - self.leaf_moves() + let allowed_size = self.config.max_arena_size - self.arena.len(); + let got = self + .leaf_moves() .into_iter() .filter(|&i| self.depth_of(i) == self.current_depth) .collect::>() .into_par_iter() .progress_with_style(ProgressStyle::with_template(pstyle_inner).unwrap()) .map(|parent_idx| (parent_idx, self.generate_children_raw(parent_idx))) - .collect::)>>() - .into_iter() - .for_each(|(parent_idx, moves)| { - let start_idx = self.arena.len(); - self.arena.extend(moves); + .take_any(allowed_size) + .collect::)>>(); + let got_len = got.len(); - let new_indices = start_idx..self.arena.len(); - self.arena[parent_idx].children.extend(new_indices); - }); + got.into_iter().for_each(|(parent_idx, moves)| { + let start_idx = self.arena.len(); + self.arena.extend(moves); + + let new_indices = start_idx..self.arena.len(); + self.arena[parent_idx].children.extend(new_indices); + }); self.prune_bad_children(); self.current_depth += 1; - - if self.arena.len() >= self.config.max_arena_size { + if got_len == allowed_size { + // got.len() has hit the upper limit of size permitted break; } } diff --git a/src/main.rs b/src/main.rs index 631bf0a..f975fcd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,7 +32,7 @@ fn main() { min_arena_depth: 14, top_k_children: 2, up_to_minus: 10, - max_arena_size: 400_000_000, + max_arena_size: 200_000_000, do_prune: true, print: true, children_eval_method: Default::default(),