pub struct BasicPopulationState<V> { /* private fields */ }Expand description
Default PopulationState implementation: λ candidate parameters
and parallel costs. The solver keeps both sorted by ascending cost
at the start and end of every next_iter, so State::param /
State::cost always return the current best candidate.
Vehicle for RandomSearch; will be
reused by CMA-ES (S8) without changes.
Implementations§
Source§impl<V> BasicPopulationState<V>
impl<V> BasicPopulationState<V>
Sourcepub fn from_population(candidates: Vec<V>) -> Self
pub fn from_population(candidates: Vec<V>) -> Self
Build from a pre-constructed population (advanced users; custom
initial distributions). Costs are filled by the solver in
Solver::init.
§Panics
Panics if candidates is empty — a population must have at
least one member.
Sourcepub fn with_size(lambda: usize) -> Self
pub fn with_size(lambda: usize) -> Self
Empty container with lambda capacity reserved. The solver
fills it in Solver::init
(e.g. by sampling uniformly in the problem’s box).
Use this constructor when the solver owns the initial-
population distribution (the random-search style); use
from_population when the caller owns
it.
§Panics
Panics if lambda == 0.
Trait Implementations§
Source§impl<V> PopulationState for BasicPopulationState<V>
impl<V> PopulationState for BasicPopulationState<V>
Source§fn candidates(&self) -> &[V]
fn candidates(&self) -> &[V]
λ candidates, sorted by ascending cost.Source§fn costs(&self) -> &[f64]
fn costs(&self) -> &[f64]
candidates, sorted
ascending.Source§impl<P, V, M> Solver<P, BasicPopulationState<V>> for BoundedCmaEs<V, M>where
P: CostFunction<Param = V, Output = f64> + BoxConstrained,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + ClampInPlace + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + MatDiagonal<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
impl<P, V, M> Solver<P, BasicPopulationState<V>> for BoundedCmaEs<V, M>where
P: CostFunction<Param = V, Output = f64> + BoxConstrained,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + ClampInPlace + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + MatDiagonal<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
Source§fn init(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> BasicPopulationState<V>
fn init( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> BasicPopulationState<V>
Source§fn next_iter(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> (BasicPopulationState<V>, Option<TerminationReason>)
fn next_iter( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> (BasicPopulationState<V>, Option<TerminationReason>)
Source§fn terminate(
&self,
_state: &BasicPopulationState<V>,
) -> Option<TerminationReason>
fn terminate( &self, _state: &BasicPopulationState<V>, ) -> Option<TerminationReason>
Source§impl<P, I, V, M> Solver<P, BasicPopulationState<V>> for BoundedCmaInject<I, V, M>where
P: CostFunction<Param = V, Output = f64> + BoxConstrained,
I: MemeticInner<V> + Solver<P, <I as MemeticInner<V>>::State>,
I::State: State<Param = V, Float = f64>,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + ClampInPlace + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + MatDiagonal<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
impl<P, I, V, M> Solver<P, BasicPopulationState<V>> for BoundedCmaInject<I, V, M>where
P: CostFunction<Param = V, Output = f64> + BoxConstrained,
I: MemeticInner<V> + Solver<P, <I as MemeticInner<V>>::State>,
I::State: State<Param = V, Float = f64>,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + ClampInPlace + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + MatDiagonal<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
Source§fn init(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> BasicPopulationState<V>
fn init( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> BasicPopulationState<V>
Source§fn next_iter(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> (BasicPopulationState<V>, Option<TerminationReason>)
fn next_iter( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> (BasicPopulationState<V>, Option<TerminationReason>)
Source§fn terminate(
&self,
state: &BasicPopulationState<V>,
) -> Option<TerminationReason>
fn terminate( &self, state: &BasicPopulationState<V>, ) -> Option<TerminationReason>
Source§impl<P, V, M> Solver<P, BasicPopulationState<V>> for CmaEs<V, M>where
P: CostFunction<Param = V, Output = f64>,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
impl<P, V, M> Solver<P, BasicPopulationState<V>> for CmaEs<V, M>where
P: CostFunction<Param = V, Output = f64>,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
Source§fn init(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> BasicPopulationState<V>
fn init( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> BasicPopulationState<V>
Source§fn next_iter(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> (BasicPopulationState<V>, Option<TerminationReason>)
fn next_iter( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> (BasicPopulationState<V>, Option<TerminationReason>)
Source§fn terminate(
&self,
_state: &BasicPopulationState<V>,
) -> Option<TerminationReason>
fn terminate( &self, _state: &BasicPopulationState<V>, ) -> Option<TerminationReason>
Source§impl<P, I, V, M> Solver<P, BasicPopulationState<V>> for CmaInject<I, V, M>where
P: CostFunction<Param = V, Output = f64>,
I: MemeticInner<V> + Solver<P, <I as MemeticInner<V>>::State>,
I::State: State<Param = V, Float = f64>,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
impl<P, I, V, M> Solver<P, BasicPopulationState<V>> for CmaInject<I, V, M>where
P: CostFunction<Param = V, Output = f64>,
I: MemeticInner<V> + Solver<P, <I as MemeticInner<V>>::State>,
I::State: State<Param = V, Float = f64>,
V: VectorLen + Clone + ScaledAdd<f64> + ScaleInPlace + ComponentMulAssign + NormSquared + SampleStandardNormal + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
M: MatrixIdentity + MatVec<V> + MatTransposeVec<V> + ScaleInPlace + RankOneUpdate<V> + SymmetricEigen<V> + Clone,
Source§fn init(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> BasicPopulationState<V>
fn init( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> BasicPopulationState<V>
Source§fn next_iter(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> (BasicPopulationState<V>, Option<TerminationReason>)
fn next_iter( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> (BasicPopulationState<V>, Option<TerminationReason>)
Source§fn terminate(
&self,
state: &BasicPopulationState<V>,
) -> Option<TerminationReason>
fn terminate( &self, state: &BasicPopulationState<V>, ) -> Option<TerminationReason>
Source§impl<P, V> Solver<P, BasicPopulationState<V>> for RandomSearchwhere
P: CostFunction<Param = V, Output = f64> + BoxConstrained<Param = V>,
V: SampleUniformBox + Clone,
impl<P, V> Solver<P, BasicPopulationState<V>> for RandomSearchwhere
P: CostFunction<Param = V, Output = f64> + BoxConstrained<Param = V>,
V: SampleUniformBox + Clone,
Source§fn init(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> BasicPopulationState<V>
fn init( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> BasicPopulationState<V>
Source§fn next_iter(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> (BasicPopulationState<V>, Option<TerminationReason>)
fn next_iter( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> (BasicPopulationState<V>, Option<TerminationReason>)
Source§impl<P, V> Solver<P, BasicPopulationState<V>> for Ssgawhere
P: CostFunction<Param = V, Output = f64> + BoxConstrained<Param = V>,
V: VectorLen + Clone + SampleUniformBox + ScaledAdd<f64> + NormSquared + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
impl<P, V> Solver<P, BasicPopulationState<V>> for Ssgawhere
P: CostFunction<Param = V, Output = f64> + BoxConstrained<Param = V>,
V: VectorLen + Clone + SampleUniformBox + ScaledAdd<f64> + NormSquared + Index<usize, Output = f64> + IndexMut<usize, Output = f64>,
Source§fn init(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> BasicPopulationState<V>
fn init( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> BasicPopulationState<V>
Source§fn next_iter(
&mut self,
problem: &P,
state: BasicPopulationState<V>,
) -> (BasicPopulationState<V>, Option<TerminationReason>)
fn next_iter( &mut self, problem: &P, state: BasicPopulationState<V>, ) -> (BasicPopulationState<V>, Option<TerminationReason>)
Source§impl<V> State for BasicPopulationState<V>
impl<V> State for BasicPopulationState<V>
Source§type Param = V
type Param = V
Vec<f64>,
nalgebra::DVector<f64>).Source§type Float = f64
type Float = f64
f64 (see
the module docs).Source§fn iter(&self) -> u64
fn iter(&self) -> u64
Solver::next_iter
that bails mid-iteration with Some(reason) does not increment
this counter — see the
executor module for the exact ordering.Source§fn increment_iter(&mut self)
fn increment_iter(&mut self)
iter by one. Called by the executor
after a successful Solver::next_iter.Source§fn cost_evals(&self) -> u64
fn cost_evals(&self) -> u64
iter() whenever a single iteration evaluates the
cost more than once (line searches, Nelder-Mead shrinks, etc.) —
this is what users actually budget against.Source§fn increment_cost_evals(&mut self, by: u64)
fn increment_cost_evals(&mut self, by: u64)
by. Solvers call this whenever
they invoke the problem’s cost function.Source§fn param(&self) -> &V
fn param(&self) -> &V
Solver::next_iter
calls; safe to read at any iteration including iter 0.