diff -r 51dbb2cc25d9 -r 8d1c959432c8 src/domain.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/domain.rs Tue Aug 04 14:12:18 2026 -0500 @@ -0,0 +1,46 @@ +/*! +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: Set { + // Generate a random point in the domain + fn random_point(&mut self) -> Option { + None + } +} + +impl AdmissibleDomain> for Cube {} + +/// +pub struct FullSpace; + +impl Set for FullSpace { + fn contains>(&self, _: I) -> bool { + true + } +} + +impl AdmissibleDomain> for FullSpace {} + +pub struct UniformRandom(pub S, pub R); + +impl, R: Rng> Set for UniformRandom { + fn contains>(&self, item: I) -> bool { + self.0.contains(item) + } +} + +impl AdmissibleDomain> for UniformRandom, R> { + fn random_point(&mut self) -> Option> { + let UniformRandom(ref cube, ref mut rng) = *self; + Some(Loc(cube.map(|a, b| rng.sample(Uniform::new(a, b).unwrap())))) + } +}