pub trait State {
type Param;
type Float: ArgminFloat;
Show 19 methods
fn new() -> Self;
fn update(&mut self);
fn get_param(&self) -> Option<&Self::Param>;
fn get_best_param(&self) -> Option<&Self::Param>;
fn get_max_iters(&self) -> u64;
fn increment_iter(&mut self);
fn get_iter(&self) -> u64;
fn get_cost(&self) -> Self::Float;
fn get_best_cost(&self) -> Self::Float;
fn get_target_cost(&self) -> Self::Float;
fn func_counts<O>(&mut self, problem: &Problem<O>);
fn get_func_counts(&self) -> &HashMap<String, u64>;
fn time(&mut self, time: Option<Duration>) -> &mut Self;
fn get_time(&self) -> Option<Duration>;
fn get_last_best_iter(&self) -> u64;
fn is_best(&self) -> bool;
fn terminate_with(self, termination_reason: TerminationReason) -> Self;
fn get_termination_reason(&self) -> TerminationReason;
fn terminated(&self) -> bool { ... }
}
Expand description
Minimal interface which struct used for managing state in solvers have to implement.
These methods expose basic information about the state which is needed in
Executor
and
OptimizationResult
but can also be useful in
observers
.
The struct implementing this trait should keep track of
- the current parameter vector
- the cost associated with the current parameter vector
- the current best parameter vector
- the cost associated with the current best parameter vector
- the iteration number where the last best parameter vector was found
- the target cost function value (If this value is reached, the optimization will be stopped).
Set this to
Self::Float::NEG_INFINITY
if not relevant. - the current number of iterations
- how often each function of the problem has been called
- the time required since the beginning of the optimization until the current point in time
- the reason why it terminated (
TerminationReason
)
Since the state in general changes for each iteration, “current” refers to the current iteration.
State::Param
indicates the type of the parameter vector while State::Float
indicates
the precision of floating point operations. Any type implementing ArgminFloat
can be used
for this (so far f32 and f64).
Required Associated Types
sourcetype Float: ArgminFloat
type Float: ArgminFloat
Floating point precision (f32 or f64)
Required Methods
This method is called after each iteration and checks if the new parameter vector is better than the previous one. If so, it will update the current best parameter vector and current best cost function value.
For methods where the cost function value is unknown, it is advised to assume that every new parameter vector is better than the previous one.
Returns a reference to the current parameter vector
sourcefn get_best_param(&self) -> Option<&Self::Param>
fn get_best_param(&self) -> Option<&Self::Param>
Returns a reference to the current best parameter vector
sourcefn get_max_iters(&self) -> u64
fn get_max_iters(&self) -> u64
Returns maximum number of iterations that are to be performed
sourcefn increment_iter(&mut self)
fn increment_iter(&mut self)
Increment the number of iterations by one
sourcefn get_best_cost(&self) -> Self::Float
fn get_best_cost(&self) -> Self::Float
Returns best cost function value
sourcefn get_target_cost(&self) -> Self::Float
fn get_target_cost(&self) -> Self::Float
Returns target cost
sourcefn func_counts<O>(&mut self, problem: &Problem<O>)
fn func_counts<O>(&mut self, problem: &Problem<O>)
Set all function evaluation counts to the evaluation counts of another operator
wrapped in Problem
.
sourcefn get_func_counts(&self) -> &HashMap<String, u64>
fn get_func_counts(&self) -> &HashMap<String, u64>
Returns currecnt cost function evaluation count
Set time required since the beginning of the optimization until the current iteration
Get time passed since the beginning of the optimization until the current iteration
sourcefn get_last_best_iter(&self) -> u64
fn get_last_best_iter(&self) -> u64
Returns iteration number where the last best parameter vector was found
Returns whether the current parameter vector is also the best parameter vector found so far.
sourcefn terminate_with(self, termination_reason: TerminationReason) -> Self
fn terminate_with(self, termination_reason: TerminationReason) -> Self
Set termination reason
sourcefn get_termination_reason(&self) -> TerminationReason
fn get_termination_reason(&self) -> TerminationReason
Returns termination reason. Returns TerminationReason::NotTerminated
if not terminated.
Provided Methods
sourcefn terminated(&self) -> bool
fn terminated(&self) -> bool
Return whether the algorithm has terminated or not