Skip to main content

Random

Struct Random 

Source
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

Source

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

Source§

fn next( &mut self, _baseline: &ConfigSnapshot, visited: &HashSet<Variation>, ) -> Option<Variation>

Produce the next untested variation, or None if the space is exhausted. Read more
Source§

fn name(&self) -> &'static str

Strategy name used in log messages and experiment reports.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more