Crocoddyl
 
Loading...
Searching...
No Matches
activation-base.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2019-2025, LAAS-CNRS, University of Edinburgh,
5// Heriot-Watt University
6// Copyright note valid unless otherwise stated in individual files.
7// All rights reserved.
9
10#ifndef CROCODDYL_CORE_ACTIVATION_BASE_HPP_
11#define CROCODDYL_CORE_ACTIVATION_BASE_HPP_
12
13#include "crocoddyl/core/fwd.hpp"
14
15namespace crocoddyl {
16
18 public:
19 virtual ~ActivationModelBase() = default;
20
22};
23
24template <typename _Scalar>
26 public:
27 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
28
29 typedef _Scalar Scalar;
32 typedef typename MathBase::VectorXs VectorXs;
33 typedef typename MathBase::MatrixXs MatrixXs;
34
35 explicit ActivationModelAbstractTpl(const std::size_t nr) : nr_(nr) {};
36 virtual ~ActivationModelAbstractTpl() = default;
37
38 virtual void calc(const std::shared_ptr<ActivationDataAbstract>& data,
39 const Eigen::Ref<const VectorXs>& r) = 0;
40 virtual void calcDiff(const std::shared_ptr<ActivationDataAbstract>& data,
41 const Eigen::Ref<const VectorXs>& r) = 0;
42 virtual std::shared_ptr<ActivationDataAbstract> createData() {
43 return std::allocate_shared<ActivationDataAbstract>(
44 Eigen::aligned_allocator<ActivationDataAbstract>(), this);
45 };
46
47 std::size_t get_nr() const { return nr_; };
48
52 friend std::ostream& operator<<(
53 std::ostream& os, const ActivationModelAbstractTpl<Scalar>& model) {
54 model.print(os);
55 return os;
56 }
57
63 virtual void print(std::ostream& os) const {
64 os << boost::core::demangle(typeid(*this).name());
65 }
66
67 protected:
68 std::size_t nr_;
69 ActivationModelAbstractTpl() : nr_(0) {};
70};
71
72template <typename _Scalar>
74 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
75
76 typedef _Scalar Scalar;
78 typedef typename MathBase::VectorXs VectorXs;
79 typedef typename MathBase::MatrixXs MatrixXs;
80 typedef typename MathBase::DiagonalMatrixXs DiagonalMatrixXs;
81
82 template <template <typename Scalar> class Activation>
83 explicit ActivationDataAbstractTpl(Activation<Scalar>* const activation)
84 : a_value(Scalar(0.)),
85 Ar(VectorXs::Zero(activation->get_nr())),
86 Arr(DiagonalMatrixXs(activation->get_nr())) {
87 Arr.setZero();
88 }
89 virtual ~ActivationDataAbstractTpl() = default;
90
91 Scalar a_value;
92 VectorXs Ar;
93 DiagonalMatrixXs Arr;
94
95 static MatrixXs getHessianMatrix(
97 return data.Arr.diagonal().asDiagonal();
98 }
99 static void setHessianMatrix(ActivationDataAbstractTpl<Scalar>& data,
100 const MatrixXs& Arr) {
101 data.Arr.diagonal() = Arr.diagonal();
102 }
103};
104
105} // namespace crocoddyl
106
107CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::ActivationModelAbstractTpl)
108CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::ActivationDataAbstractTpl)
109
110#endif // CROCODDYL_CORE_ACTIVATION_BASE_HPP_
virtual void print(std::ostream &os) const
Print relevant information of the activation model.
friend std::ostream & operator<<(std::ostream &os, const ActivationModelAbstractTpl< Scalar > &model)
Print information on the activation model.