proxsuite-nlp  0.11.0
A primal-dual augmented Lagrangian-type solver for nonlinear programming on manifolds.
 
Loading...
Searching...
No Matches
quadratic-residual.hxx
1#pragma once
2
4
5namespace proxsuite {
6namespace nlp {
7
8template <typename Scalar>
9QuadraticResidualCostTpl<Scalar>::QuadraticResidualCostTpl(
10 FunctionPtr residual, const ConstMatrixRef &weights,
11 const ConstVectorRef &slope, const Scalar constant)
12 : Base(residual->nx(), residual->ndx()), residual_(residual),
13 weights_(weights), slope_(slope), constant_(constant),
14 gauss_newton_(true), err(residual_->nr()),
15 Jres(residual_->nr(), this->ndx()), JtW(this->ndx(), residual_->nr()),
16 H(this->ndx(), this->ndx()) {
17 Jres.setZero();
18 err.setZero();
19 tmp_w_err = err;
20 H.setZero();
21}
22
23template <typename Scalar>
24Scalar QuadraticResidualCostTpl<Scalar>::call(const ConstVectorRef &x) const {
25 err = (*residual_)(x);
26
28
29 tmp_w_err.noalias() = weights_ * err;
30 Scalar res = Scalar(0.5) * err.dot(tmp_w_err) + err.dot(slope_) + constant_;
31
33
34 return res;
35}
36
37template <typename Scalar>
38void QuadraticResidualCostTpl<Scalar>::computeGradient(const ConstVectorRef &x,
39 VectorRef out) const {
40 residual_->computeJacobian(x, Jres);
41
42 JtW.noalias() = Jres.transpose() * weights_;
43 out.noalias() = JtW * err;
44 out.noalias() += Jres.transpose() * slope_;
45}
46
47template <typename Scalar>
48void QuadraticResidualCostTpl<Scalar>::computeHessian(const ConstVectorRef &x,
49 MatrixRef out) const {
50 tmp_w_err.noalias() = weights_ * err;
51 tmp_w_err += slope_;
52
53 if (!gauss_newton_) {
54 residual_->vectorHessianProduct(x, tmp_w_err, H);
55 out = H;
56 } else {
57 out.setZero();
58 }
59
60 Jres.setZero();
61 residual_->computeJacobian(x, Jres);
62 JtW.noalias() = Jres.transpose() * weights_;
63 out.noalias() += JtW * Jres;
64}
65
66} // namespace nlp
67} // namespace proxsuite
#define PROXSUITE_NLP_NOMALLOC_END
Exiting performance-critical code.
Definition macros.hpp:23
#define PROXSUITE_NLP_NOMALLOC_BEGIN
Entering performance-critical code.
Definition macros.hpp:20
Main package namespace.
Definition bcl-params.hpp:5
Scalar call(const ConstVectorRef &x) const
Evaluate the cost function.