PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
LineSearch.h
Go to the documentation of this file.
1
8
9#ifndef PBAT_MATH_OPTIMIZATION_LINESEARCH_H
10#define PBAT_MATH_OPTIMIZATION_LINESEARCH_H
11
12#include "pbat/Aliases.h"
13
14#include <Eigen/Core>
15
17
18template <class TScalar = Scalar>
20{
21 int nMaxIters{20};
22 TScalar tau{0.5};
23 TScalar c{1e-4};
24 TScalar alpha{1};
34 int nMaxIters = 20,
35 TScalar tau = TScalar(0.5),
36 TScalar c = TScalar(1e-4),
37 TScalar alpha = TScalar(1));
51 template <class FObjective, class TDerivedG, class TDerivedDX, class TDerivedX>
52 TScalar Solve(
53 FObjective f,
54 Eigen::MatrixBase<TDerivedG> const& g,
55 Eigen::MatrixBase<TDerivedDX> const& dx,
56 Eigen::MatrixBase<TDerivedX>& xk) const;
57};
58
59template <class TScalar>
61 int nMaxItersIn,
62 TScalar tauIn,
63 TScalar cIn,
64 TScalar alphaIn)
65 : nMaxIters(nMaxItersIn), tau(tauIn), c(cIn), alpha(alphaIn)
66{
67}
68
69template <class TScalar>
70template <class FObjective, class TDerivedG, class TDerivedDX, class TDerivedX>
72 FObjective f,
73 Eigen::MatrixBase<TDerivedG> const& g,
74 Eigen::MatrixBase<TDerivedDX> const& dx,
75 Eigen::MatrixBase<TDerivedX>& xk) const
76{
77 TScalar alphaj = alpha;
78 TScalar const Dfk = g.dot(dx);
79 TScalar fk = f(xk);
80 for (auto j = 0; j < nMaxIters; ++j)
81 {
82 TScalar flinear = fk + (c * alphaj) * Dfk;
83 xk = xk + alphaj * dx;
84 fk = f(xk);
85 if (fk <= flinear)
86 break;
87 alphaj *= tau;
88 }
89 return alphaj;
90}
91
92} // namespace pbat::math::optimization
93
94#endif // PBAT_MATH_OPTIMIZATION_LINESEARCH_H
Namespace for optimization algorithms.
Definition BranchAndBound.h:7
TScalar tau
Step size decrease factor.
Definition LineSearch.h:22
BackTrackingLineSearch(int nMaxIters=20, TScalar tau=TScalar(0.5), TScalar c=TScalar(1e-4), TScalar alpha=TScalar(1))
Construct a new Back Tracking Line Search object.
Definition LineSearch.h:60
TScalar Solve(FObjective f, Eigen::MatrixBase< TDerivedG > const &g, Eigen::MatrixBase< TDerivedDX > const &dx, Eigen::MatrixBase< TDerivedX > &xk) const
Perform a backtracking line search.
Definition LineSearch.h:71
TScalar c
Armijo slope scale.
Definition LineSearch.h:23
TScalar alpha
Initial step size.
Definition LineSearch.h:24
int nMaxIters
Maximum number of iterations for the line search.
Definition LineSearch.h:21