pub struct RouletteWheel<T> { /* private fields */ }Expand description
A roulette-wheel container
Implementations§
Source§impl<T> RouletteWheel<T>
impl<T> RouletteWheel<T>
Sourcepub fn new() -> RouletteWheel<T>
pub fn new() -> RouletteWheel<T>
create a new empty random-wheel.
§Example
use roulette_wheel::RouletteWheel;
let rw = RouletteWheel::<u8>::new();Sourcepub fn with_capacity(cap: usize) -> RouletteWheel<T>
pub fn with_capacity(cap: usize) -> RouletteWheel<T>
Creates an empty RouletteWheel with space for at least n elements.
§Example
use roulette_wheel::RouletteWheel;
let rw = RouletteWheel::<u8>::with_capacity(15);
assert_eq!(rw.len(), 0);Sourcepub fn reserve(&mut self, additional: usize)
pub fn reserve(&mut self, additional: usize)
Reserves capacity for at least additional more elements to be inserted.
The collection may reserve more space to avoid frequent reallocations.
§Example
use roulette_wheel::RouletteWheel;
let mut rw = RouletteWheel::<u8>::new();
rw.reserve(20);
assert_eq!(rw.len(), 0);Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements in the wheel.
§Example
use roulette_wheel::RouletteWheel;
let rw: RouletteWheel<_> = [(0.1, 10), (0.2, 15), (0.5, 20)].iter().cloned().collect();
assert_eq!(rw.len(), 3);Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if empty else return false.
§Example
use roulette_wheel::RouletteWheel;
let empty_rw = RouletteWheel::<u8>::new();
assert_eq!(empty_rw.is_empty(), true);
let non_empty_rw: RouletteWheel<_> = [(0.1, 10), (0.2, 15), (0.5, 20)].iter().cloned().collect();
assert_eq!(non_empty_rw.is_empty(), false);Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Remove all elements in this wheel.
§Example
use roulette_wheel::RouletteWheel;
let mut rw: RouletteWheel<_> = [(0.1, 10), (0.2, 15), (0.5, 20)].iter().cloned().collect();
assert_eq!(rw.len(), 3);
rw.clear();
assert_eq!(rw.len(), 0);Sourcepub fn push(&mut self, fitness: f32, individual: T)
pub fn push(&mut self, fitness: f32, individual: T)
Add an element associated with a probability.
§Panics
This function might panic if the fitness is less than zero
or if the total fitness gives a non-finite fitness (Inf).
§Example
use roulette_wheel::RouletteWheel;
let mut rw = RouletteWheel::new();
rw.push(1.0, 'r');
rw.push(1.0, 'c');
rw.push(1.0, 'a');
assert_eq!(rw.len(), 3);Sourcepub unsafe fn unchecked_push(&mut self, fitness: f32, individual: T)
pub unsafe fn unchecked_push(&mut self, fitness: f32, individual: T)
Add an element associated with a probability. This unsafe function doesn’t check for total fitness overflow nether fitness positivity.
§Example
use roulette_wheel::RouletteWheel;
let mut rw = RouletteWheel::new();
unsafe { rw.unchecked_push(1.0, 'r') };
unsafe { rw.unchecked_push(1.0, 'c') };
unsafe { rw.unchecked_push(1.0, 'a') };
assert_eq!(rw.len(), 3);Sourcepub fn total_fitness(&self) -> f32
pub fn total_fitness(&self) -> f32
Returns the sum of all individual fitnesses.
§Example
use roulette_wheel::RouletteWheel;
let mut rw = RouletteWheel::new();
rw.push(3.0, 'r');
rw.push(2.0, 'c');
rw.push(1.5, 'a');
assert_eq!(rw.total_fitness(), 6.5);Sourcepub fn select_iter(&self) -> SelectIter<'_, ThreadRng, T> ⓘ
pub fn select_iter(&self) -> SelectIter<'_, ThreadRng, T> ⓘ
Returns an iterator over the RouletteWheel.
§Examples
use roulette_wheel::RouletteWheel;
let rw: RouletteWheel<_> = [(0.1, 10), (0.2, 15), (0.5, 20)].iter().cloned().collect();
let mut iterator = rw.select_iter();
assert_eq!(iterator.next(), Some((0.5, &20)));
assert_eq!(iterator.next(), Some((0.1, &10)));
assert_eq!(iterator.next(), Some((0.2, &15)));
assert_eq!(iterator.next(), None);Trait Implementations§
Source§impl<T: Clone> Clone for RouletteWheel<T>
impl<T: Clone> Clone for RouletteWheel<T>
Source§fn clone(&self) -> RouletteWheel<T>
fn clone(&self) -> RouletteWheel<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more