27 DynamicVector<RealType> BFGS::getUpdatedDirection(
28 const Problem& P, RealType,
const DynamicVector<RealType>& oldGradient) {
29 if (inverseHessian_.getNRow() == 0) {
31 inverseHessian_ = DynamicRectMatrix<RealType>(
32 P.currentValue().size(), P.currentValue().size(), 0.);
33 for (
size_t i = 0; i < P.currentValue().size(); ++i)
34 inverseHessian_(i, i) = 1.;
37 DynamicVector<RealType> diffGradient;
38 DynamicVector<RealType> diffGradientWithHessianApplied(
39 P.currentValue().size(), 0.);
41 diffGradient =
lineSearch_->lastGradient() - oldGradient;
42 for (
size_t i = 0; i < P.currentValue().size(); ++i)
43 for (
size_t j = 0; j < P.currentValue().size(); ++j)
44 diffGradientWithHessianApplied[i] +=
45 inverseHessian_(i, j) * diffGradient[j];
50 fac = fae = sumdg = sumxi = 0.;
51 for (
size_t i = 0; i < P.currentValue().size(); ++i) {
52 fac += diffGradient[i] *
lineSearch_->searchDirection()[i];
53 fae += diffGradient[i] * diffGradientWithHessianApplied[i];
54 sumdg += std::pow(diffGradient[i], 2.);
55 sumxi += std::pow(
lineSearch_->searchDirection()[i], 2.);
58 if (fac > std::sqrt(1e-8 * sumdg *
64 for (
size_t i = 0; i < P.currentValue().size(); ++i)
65 diffGradient[i] = fac *
lineSearch_->searchDirection()[i] -
66 fad * diffGradientWithHessianApplied[i];
68 for (
size_t i = 0; i < P.currentValue().size(); ++i)
69 for (
size_t j = 0; j < P.currentValue().size(); ++j) {
70 inverseHessian_(i, j) += fac *
lineSearch_->searchDirection()[i] *
72 inverseHessian_(i, j) -= fad * diffGradientWithHessianApplied[i] *
73 diffGradientWithHessianApplied[j];
74 inverseHessian_(i, j) += fae * diffGradient[i] * diffGradient[j];
80 DynamicVector<RealType> direction(P.currentValue().size());
81 for (
size_t i = 0; i < P.currentValue().size(); ++i) {
83 for (
size_t j = 0; j < P.currentValue().size(); ++j)
84 direction[i] -= inverseHessian_(i, j) *
lineSearch_->lastGradient()[j];
Broyden-Fletcher-Goldfarb-Shanno optimization method.
Line search abstract class.
Abstract optimization problem class.
LineSearch * lineSearch_
line search
Constrained optimization problem.