16 template <
typename Scalar>
    37         const int m = m_param.
m;
    76     template <
typename Foo>
    77     inline int minimize(Foo& f, Vector& x, Scalar& fx)
    79         const int n = x.size();
    80         const int fpast = m_param.
past;
    85         Scalar xnorm = x.norm();
    86         Scalar gnorm = m_grad.norm();
    99         Scalar step = Scalar(1.0) / m_drt.norm();
   107             m_gradp.noalias() = 
m_grad;
   114             gnorm = m_grad.norm();
   124                 if(k >= fpast && 
std::abs((m_fx[k % fpast] - fx) / fx) < m_param.
delta)
   127                 m_fx[k % fpast] = fx;
   138             MapVec svec(&
m_s(0, end), n);
   139             MapVec yvec(&
m_y(0, end), n);
   140             svec.noalias() = x - 
m_xp;
   141             yvec.noalias() = m_grad - 
m_gradp;
   145             Scalar ys = yvec.dot(svec);
   146             Scalar yy = yvec.squaredNorm();
   150             m_drt.noalias() = -
m_grad;
   152             end = (end + 1) % m_param.
m;
   154             for(
int i = 0; i < bound; i++)
   156                 j = (j + m_param.
m - 1) % m_param.
m;
   157                 MapVec sj(&
m_s(0, j), n);
   158                 MapVec yj(&
m_y(0, j), n);
   159                 m_alpha[j] = sj.dot(m_drt) / m_ys[j];
   160                 m_drt.noalias() -= m_alpha[j] * yj;
   165             for(
int i = 0; i < bound; i++)
   167                 MapVec sj(&
m_s(0, j), n);
   168                 MapVec yj(&
m_y(0, j), n);
   169                 Scalar beta = yj.dot(m_drt) / m_ys[j];
   170                 m_drt.noalias() += (m_alpha[j] - beta) * sj;
   171                 j = (j + 1) % m_param.
m;
 
Eigen::Map< Vector > MapVec
Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > Vector
A matrix or vector expression mapping an existing array of data. 
int minimize(Foo &f, Vector &x, Scalar &fx)
const LBFGSParam< Scalar > & m_param
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > Matrix
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const AbsReturnType abs() const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
LBFGSSolver(const LBFGSParam< Scalar > ¶m)
static void Backtracking(Foo &f, Scalar &fx, Vector &x, Vector &grad, Scalar &step, const Vector &drt, const Vector &xp, const LBFGSParam< Scalar > ¶m)
int64_t max(int64_t a, const int b)