pub struct DFP<L, F> { /* private fields */ }
Expand description
Davidon-Fletcher-Powell (DFP) method
The Davidon-Fletcher-Powell algorithm (DFP) is a method for solving unconstrained nonlinear optimization problems.
The algorithm requires a line search which is provided via the constructor. Additionally an
initial guess for the parameter vector and an initial inverse Hessian is required, which are to
be provided via the configure
method of the
Executor
(See IterState
, in particular IterState::param
and IterState::inv_hessian
).
In the same way the initial gradient and cost function corresponding to the initial parameter
vector can be provided. If these are not provided, they will be computed during initialization
of the algorithm.
A tolerance on the gradient can be configured with
with_tolerance_grad
: If the norm of the gradient is below
said tolerance, the algorithm stops. It defaults to sqrt(EPSILON)
.
Requirements on the optimization problem
The optimization problem is required to implement CostFunction
and Gradient
.
Reference
Jorge Nocedal and Stephen J. Wright (2006). Numerical Optimization. Springer. ISBN 0-387-30303-0.
Implementations
sourceimpl<L, F> DFP<L, F> where
F: ArgminFloat,
impl<L, F> DFP<L, F> where
F: ArgminFloat,
sourcepub fn with_tolerance_grad(self, tol_grad: F) -> Result<Self, Error>
pub fn with_tolerance_grad(self, tol_grad: F) -> Result<Self, Error>
The algorithm stops if the norm of the gradient is below tol_grad
.
The provided value must be non-negative. Defaults to sqrt(EPSILON)
.
Example
let dfp: DFP<_, f64> = DFP::new(linesearch).with_tolerance_grad(1e-6)?;
Trait Implementations
sourceimpl<'de, L, F> Deserialize<'de> for DFP<L, F> where
L: Deserialize<'de>,
F: Deserialize<'de>,
impl<'de, L, F> Deserialize<'de> for DFP<L, F> where
L: Deserialize<'de>,
F: Deserialize<'de>,
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl<O, L, P, G, H, F> Solver<O, IterState<P, G, (), H, F>> for DFP<L, F> where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<P, P> + ArgminDot<G, F> + ArgminDot<P, H> + ArgminMul<F, P>,
G: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<G, G> + ArgminNorm<F> + ArgminDot<P, F>,
H: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<H, H> + ArgminDot<G, P> + ArgminAdd<H, H> + ArgminMul<F, H>,
L: Clone + LineSearch<P, F> + Solver<O, IterState<P, G, (), (), F>>,
F: ArgminFloat,
impl<O, L, P, G, H, F> Solver<O, IterState<P, G, (), H, F>> for DFP<L, F> where
O: CostFunction<Param = P, Output = F> + Gradient<Param = P, Gradient = G>,
P: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<P, P> + ArgminDot<G, F> + ArgminDot<P, H> + ArgminMul<F, P>,
G: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<G, G> + ArgminNorm<F> + ArgminDot<P, F>,
H: Clone + SerializeAlias + DeserializeOwnedAlias + ArgminSub<H, H> + ArgminDot<G, P> + ArgminAdd<H, H> + ArgminMul<F, H>,
L: Clone + LineSearch<P, F> + Solver<O, IterState<P, G, (), (), F>>,
F: ArgminFloat,
sourcefn init(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), H, F>
) -> Result<(IterState<P, G, (), H, F>, Option<KV>), Error>
fn init(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), H, F>
) -> Result<(IterState<P, G, (), H, F>, Option<KV>), Error>
Initializes the algorithm. Read more
sourcefn next_iter(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), H, F>
) -> Result<(IterState<P, G, (), H, F>, Option<KV>), Error>
fn next_iter(
&mut self,
problem: &mut Problem<O>,
state: IterState<P, G, (), H, F>
) -> Result<(IterState<P, G, (), H, F>, Option<KV>), Error>
sourcefn terminate(&mut self, state: &IterState<P, G, (), H, F>) -> TerminationReason
fn terminate(&mut self, state: &IterState<P, G, (), H, F>) -> TerminationReason
Used to implement stopping criteria, in particular criteria which are not covered by
(terminate_internal
. Read more
sourcefn terminate_internal(&mut self, state: &I) -> TerminationReason
fn terminate_internal(&mut self, state: &I) -> TerminationReason
Checks whether basic termination reasons apply. Read more
Auto Trait Implementations
impl<L, F> RefUnwindSafe for DFP<L, F> where
F: RefUnwindSafe,
L: RefUnwindSafe,
impl<L, F> Send for DFP<L, F> where
F: Send,
L: Send,
impl<L, F> Sync for DFP<L, F> where
F: Sync,
L: Sync,
impl<L, F> Unpin for DFP<L, F> where
F: Unpin,
L: Unpin,
impl<L, F> UnwindSafe for DFP<L, F> where
F: UnwindSafe,
L: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more