From dd236118fe184c8dec54c04ceb7524d04b3aa5e7 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sun, 23 Feb 2025 00:50:36 -0500 Subject: [PATCH] impl prune_bad_children --- src/logic/future_moves.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/logic/future_moves.rs b/src/logic/future_moves.rs index b44a28e..f1ecf25 100644 --- a/src/logic/future_moves.rs +++ b/src/logic/future_moves.rs @@ -305,11 +305,32 @@ impl FutureMoves { fn set_root_idx_raw(&mut self, idx: usize) { self.update_root_idx_raw(idx); + self.prune_bad_children(); self.refocus_tree(); self.extend_layers(); self.compute_values(0..self.arena.len()); } + fn prune_bad_children(&mut self) { + const BOTTOM_PERC: f32 = 20.0; + let Some(root) = self.current_root else { + return; + }; + + let mut children = self.arena[root].children.clone(); + + children.sort_by_key(|&i| -self.arena[i].value); + let start_len = ((children.len()) as f32 * (1.0 - BOTTOM_PERC)) as usize; + let drained = children.drain(start_len..); + println!("{}", drained.len()); + + for i in drained { + self.arena[i].parent = None; + } + + self.arena[root].children = children; + } + /// Rebuilds the Arena based on `self.current_root`, prunes unrelated nodes fn refocus_tree(&mut self) { let Some(root) = self.current_root else {