activation-quad-ref.hpp
Go to the documentation of this file.
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2021, LAAS-CNRS
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
8 
9 #ifndef SOBEC_ACTIVATION_QUAD_REF_HPP_
10 #define SOBEC_ACTIVATION_QUAD_REF_HPP_
11 
12 #include <crocoddyl/core/activation-base.hpp>
13 #include <crocoddyl/core/fwd.hpp>
14 #include <crocoddyl/core/utils/exception.hpp>
15 #include <stdexcept>
16 
17 #include "sobec/fwd.hpp"
18 
19 namespace sobec {
20 using namespace crocoddyl;
21 
22 template <typename _Scalar>
23 class ActivationModelQuadRefTpl : public ActivationModelAbstractTpl<_Scalar> {
24  public:
25  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
26 
27  typedef _Scalar Scalar;
28  typedef MathBaseTpl<Scalar> MathBase;
29  typedef ActivationModelAbstractTpl<Scalar> Base;
30  typedef ActivationDataAbstractTpl<Scalar> ActivationDataAbstract;
31  typedef typename MathBase::VectorXs VectorXs;
32  typedef typename MathBase::MatrixXs MatrixXs;
33 
34  explicit ActivationModelQuadRefTpl(const VectorXs& reference)
35  : Base(static_cast<std::size_t>(reference.size())), ref(reference){};
37 
38  virtual void calc(const boost::shared_ptr<ActivationDataAbstract>& data,
39  const Eigen::Ref<const VectorXs>& r) {
40  if (static_cast<std::size_t>(r.size()) != nr_) {
41  throw_pretty("Invalid argument: "
42  << "r has wrong dimension (it should be " +
43  std::to_string(nr_) + ")");
44  }
45  data->a_value = (Scalar(0.5) * (r - ref).transpose() * (r - ref))[0];
46  };
47 
48  virtual void calcDiff(const boost::shared_ptr<ActivationDataAbstract>& data,
49  const Eigen::Ref<const VectorXs>& r) {
50  if (static_cast<std::size_t>(r.size()) != nr_) {
51  throw_pretty("Invalid argument: "
52  << "r has wrong dimension (it should be " +
53  std::to_string(nr_) + ")");
54  }
55 
56  data->Ar = r - ref;
57  // The Hessian has constant values which were set in createData.
58  assert_pretty(
59  MatrixXs(data->Arr.diagonal().asDiagonal())
60  .isApprox(MatrixXs::Identity(static_cast<Eigen::Index>(nr_),
61  static_cast<Eigen::Index>(nr_))),
62  "Arr has wrong value");
63  };
64 
65  virtual boost::shared_ptr<ActivationDataAbstract> createData() {
66  boost::shared_ptr<ActivationDataAbstract> data =
67  boost::allocate_shared<ActivationDataAbstract>(
68  Eigen::aligned_allocator<ActivationDataAbstract>(), this);
69  data->Arr.diagonal().fill((Scalar)1.);
70  return data;
71  };
72 
73  const VectorXs& get_reference() const { return ref; };
74  void set_reference(const VectorXs& reference) {
75  if (ref.size() != reference.size()) {
76  throw_pretty("Invalid argument: "
77  << "weight vector has wrong dimension (it should be " +
78  std::to_string(ref.size()) + ")");
79  }
80 
81  ref = reference;
82  };
83 
84  protected:
85  using Base::nr_;
86 
87  private:
88  VectorXs ref;
89 };
90 
91 } // namespace sobec
92 
93 #endif // SOBEC_ACTIVATION_QUAD_REF_HPP_
sobec::ActivationModelQuadRefTpl
Definition: activation-quad-ref.hpp:23
sobec::ActivationModelQuadRefTpl::calc
virtual void calc(const boost::shared_ptr< ActivationDataAbstract > &data, const Eigen::Ref< const VectorXs > &r)
Definition: activation-quad-ref.hpp:38
fwd.hpp
sobec::ActivationModelQuadRefTpl::ActivationModelQuadRefTpl
ActivationModelQuadRefTpl(const VectorXs &reference)
Definition: activation-quad-ref.hpp:34
sobec::ActivationModelQuadRefTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: activation-quad-ref.hpp:28
sobec::ActivationModelQuadRefTpl::get_reference
const VectorXs & get_reference() const
Definition: activation-quad-ref.hpp:73
sobec::ActivationModelQuadRefTpl::set_reference
void set_reference(const VectorXs &reference)
Definition: activation-quad-ref.hpp:74
sobec::ActivationModelQuadRefTpl::calcDiff
virtual void calcDiff(const boost::shared_ptr< ActivationDataAbstract > &data, const Eigen::Ref< const VectorXs > &r)
Definition: activation-quad-ref.hpp:48
sobec::ActivationModelQuadRefTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: activation-quad-ref.hpp:27
sobec
Definition: activation-quad-ref.hpp:19
sobec::ActivationModelQuadRefTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: activation-quad-ref.hpp:31
sobec::ActivationModelQuadRefTpl::~ActivationModelQuadRefTpl
virtual ~ActivationModelQuadRefTpl()
Definition: activation-quad-ref.hpp:36
sobec::ActivationModelQuadRefTpl::Base
ActivationModelAbstractTpl< Scalar > Base
Definition: activation-quad-ref.hpp:29
sobec::ActivationModelQuadRefTpl::MatrixXs
MathBase::MatrixXs MatrixXs
Definition: activation-quad-ref.hpp:32
sobec::ActivationModelQuadRefTpl::ActivationDataAbstract
ActivationDataAbstractTpl< Scalar > ActivationDataAbstract
Definition: activation-quad-ref.hpp:30
sobec::ActivationModelQuadRefTpl::createData
virtual boost::shared_ptr< ActivationDataAbstract > createData()
Definition: activation-quad-ref.hpp:65