pub struct Random { /* private fields */ }Expand description
Uniform random sampling within parameter bounds.
At each call, a parameter is chosen uniformly at random, then a value is
sampled uniformly from its [min, max] range and quantized to the nearest
step (if configured). The sample is rejected if it was already visited.
Returns None after 1000 consecutive rejections (the space is considered
effectively exhausted for this seed).
The internal RNG is wrapped in a Mutex so that Random implements Sync,
which is required by VariationGenerator to allow ExperimentEngine to be
used in an async context. The experiment loop is sequential, so the mutex is
never contended.
§Examples
use std::collections::HashSet;
use zeph_experiments::{ConfigSnapshot, Random, SearchSpace, VariationGenerator};
let mut generator = Random::new(SearchSpace::default(), 42);
let baseline = ConfigSnapshot::default();
let visited = HashSet::new();
// Two generators with the same seed produce the same first variation.
let mut gen2 = Random::new(SearchSpace::default(), 42);
let v1 = generator.next(&baseline, &visited);
let v2 = gen2.next(&baseline, &visited);
assert_eq!(v1, v2);Implementations§
Source§impl Random
impl Random
Sourcepub fn new(search_space: SearchSpace, seed: u64) -> Self
pub fn new(search_space: SearchSpace, seed: u64) -> Self
Create a new Random generator with a deterministic seed.
Generators with the same seed and search_space will produce identical
variation sequences, making experiments reproducible.
§Examples
use zeph_experiments::{Random, SearchSpace, VariationGenerator};
let generator = Random::new(SearchSpace::default(), 1234);
assert_eq!(generator.name(), "random");Trait Implementations§
Source§impl VariationGenerator for Random
impl VariationGenerator for Random
Auto Trait Implementations§
impl !Freeze for Random
impl RefUnwindSafe for Random
impl Send for Random
impl Sync for Random
impl Unpin for Random
impl UnsafeUnpin for Random
impl UnwindSafe for Random
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request