Tue, 04 Aug 2026 19:41:34 -0500
Do not prune new insertions on first round
/*! Definition of an admissible domain. */ use alg_tools::instance::{Instance, Space}; use alg_tools::loc::Loc; use alg_tools::sets::{Cube, Set}; use alg_tools::types::Num; use rand::distr::Uniform; use rand::prelude::{Rng, StdRng}; /// Admissible domain pub trait AdmissibleDomain<Point: Space>: Set<Point> { // Generate a random point in the domain fn random_point(&mut self) -> Option<Point> { None } } impl<F: Num + PartialOrd + Sized, const N: usize> AdmissibleDomain<Loc<N, F>> for Cube<N, F> {} /// pub struct FullSpace; impl<A: Space> Set<A> for FullSpace { fn contains<I: Instance<A>>(&self, _: I) -> bool { true } } impl<F: Num + PartialOrd + Sized, const N: usize> AdmissibleDomain<Loc<N, F>> for FullSpace {} pub struct UniformRandom<S, R: Rng = StdRng>(pub S, pub R); impl<A: Space, S: Set<A>, R: Rng> Set<A> for UniformRandom<S, R> { fn contains<I: Instance<A>>(&self, item: I) -> bool { self.0.contains(item) } } impl<const N: usize, R: Rng> AdmissibleDomain<Loc<N, f64>> for UniformRandom<Cube<N, f64>, R> { fn random_point(&mut self) -> Option<Loc<N, f64>> { let UniformRandom(ref cube, ref mut rng) = *self; Some(Loc(cube.map(|a, b| rng.sample(Uniform::new(a, b).unwrap())))) } }