crocoddyl 1.9.0
Contact RObot COntrol by Differential DYnamic programming Library (Crocoddyl)
 
Loading...
Searching...
No Matches
activation-base.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2019-2021, LAAS-CNRS, University of Edinburgh
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_CORE_ACTIVATION_BASE_HPP_
10#define CROCODDYL_CORE_ACTIVATION_BASE_HPP_
11
12#include <stdexcept>
13#include <boost/shared_ptr.hpp>
14#include <boost/make_shared.hpp>
15#include <boost/core/demangle.hpp>
16
17#include "crocoddyl/core/fwd.hpp"
18#include "crocoddyl/core/mathbase.hpp"
19
20namespace crocoddyl {
21
22template <typename _Scalar>
24 public:
25 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
26
27 typedef _Scalar Scalar;
30 typedef typename MathBase::VectorXs VectorXs;
31 typedef typename MathBase::MatrixXs MatrixXs;
32
33 explicit ActivationModelAbstractTpl(const std::size_t nr) : nr_(nr){};
35
36 virtual void calc(const boost::shared_ptr<ActivationDataAbstract>& data, const Eigen::Ref<const VectorXs>& r) = 0;
37 virtual void calcDiff(const boost::shared_ptr<ActivationDataAbstract>& data,
38 const Eigen::Ref<const VectorXs>& r) = 0;
39 virtual boost::shared_ptr<ActivationDataAbstract> createData() {
40 return boost::allocate_shared<ActivationDataAbstract>(Eigen::aligned_allocator<ActivationDataAbstract>(), this);
41 };
42
43 std::size_t get_nr() const { return nr_; };
44
48 friend std::ostream& operator<<(std::ostream& os, const ActivationModelAbstractTpl<Scalar>& model) {
49 model.print(os);
50 return os;
51 }
52
58 virtual void print(std::ostream& os) const { os << boost::core::demangle(typeid(*this).name()); }
59
60 protected:
61 std::size_t nr_;
62};
63
64template <typename _Scalar>
66 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
67
68 typedef _Scalar Scalar;
70 typedef typename MathBase::VectorXs VectorXs;
71 typedef typename MathBase::MatrixXs MatrixXs;
72 typedef typename MathBase::DiagonalMatrixXs DiagonalMatrixXs;
73
74 template <template <typename Scalar> class Activation>
75 explicit ActivationDataAbstractTpl(Activation<Scalar>* const activation)
76 : a_value(0.), Ar(VectorXs::Zero(activation->get_nr())), Arr(DiagonalMatrixXs(activation->get_nr())) {
77 Arr.setZero();
78 }
80
81 Scalar a_value;
82 VectorXs Ar;
83 DiagonalMatrixXs Arr;
84
85 static MatrixXs getHessianMatrix(const ActivationDataAbstractTpl<Scalar>& data) {
86 return data.Arr.diagonal().asDiagonal();
87 }
88 static void setHessianMatrix(ActivationDataAbstractTpl<Scalar>& data, const MatrixXs& Arr) {
89 data.Arr.diagonal() = Arr.diagonal();
90 }
91};
92
93} // namespace crocoddyl
94
95#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.