Go to the documentation of this file.
9 #ifndef CROCODDYL_CORE_ACTIVATIONS_WEIGHTED_LOG_HPP_
10 #define CROCODDYL_CORE_ACTIVATIONS_WEIGHTED_LOG_HPP_
12 #include <crocoddyl/core/activation-base.hpp>
13 #include <crocoddyl/core/fwd.hpp>
14 #include <crocoddyl/core/utils/exception.hpp>
20 using namespace crocoddyl;
22 template <
typename _Scalar>
24 :
public ActivationModelAbstractTpl<_Scalar> {
26 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
30 typedef ActivationModelAbstractTpl<Scalar>
Base;
37 const Scalar &alpha = Scalar(1.))
38 :
Base(weights.size()), weights_(weights), alpha_(alpha) {
39 if (alpha < Scalar(0.)) {
40 throw_pretty(
"Invalid argument: "
41 <<
"alpha should be a positive value");
46 virtual void calc(
const boost::shared_ptr<ActivationDataAbstract> &data,
47 const Eigen::Ref<const VectorXs> &r) {
48 if (
static_cast<std::size_t
>(r.size()) != nr_) {
49 throw_pretty(
"Invalid argument: "
50 <<
"r has wrong dimension (it should be " +
51 std::to_string(nr_) +
")");
53 boost::shared_ptr<Data> d = boost::static_pointer_cast<Data>(data);
54 d->Wr = weights_.cwiseProduct(r);
55 d->a0 = r.dot(d->Wr) / alpha_;
56 data->a_value = log(Scalar(1.0) + d->a0);
59 virtual void calcDiff(
const boost::shared_ptr<ActivationDataAbstract> &data,
60 const Eigen::Ref<const VectorXs> &r) {
61 if (
static_cast<std::size_t
>(r.size()) != nr_) {
62 throw_pretty(
"Invalid argument: "
63 <<
"r has wrong dimension (it should be " +
64 std::to_string(nr_) +
")");
66 boost::shared_ptr<Data> d = boost::static_pointer_cast<Data>(data);
68 d->a1 = Scalar(2.0) / (alpha_ + alpha_ * d->a0);
69 data->Ar = d->a1 * d->Wr;
70 data->Arr.diagonal() = -d->a1 * d->a1 * d->Wr.array().square();
71 data->Arr.diagonal() += d->a1 * weights_;
74 virtual boost::shared_ptr<ActivationDataAbstract>
createData() {
75 boost::shared_ptr<Data> data =
76 boost::allocate_shared<Data>(Eigen::aligned_allocator<Data>(),
this);
81 void set_alpha(
const Scalar alpha) { alpha_ = alpha; };
84 if (weights.size() != weights_.size()) {
85 throw_pretty(
"Invalid argument: "
86 <<
"weight vector has wrong dimension (it should be " +
87 std::to_string(weights_.size()) +
")");
93 virtual void print(std::ostream &os)
const {
94 os <<
"ActivationModelWeightedLog {nr=" << nr_ <<
", a=" << alpha_ <<
"}";
105 template <
typename _Scalar>
107 :
public ActivationDataAbstractTpl<_Scalar> {
108 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
113 typedef ActivationDataAbstractTpl<Scalar>
Base;
115 template <
typename Activation>
120 Wr(
VectorXs::Zero(activation->get_nr())) {}
129 #endif // CROCODDYL_CORE_ACTIVATIONS_WEIGHTED_LOG_HPP_
MathBase::VectorXs VectorXs
Definition: activation-weighted-log.hpp:33
ActivationDataAbstractTpl< Scalar > Base
Definition: activation-weighted-log.hpp:113
const VectorXs & get_weights() const
Definition: activation-weighted-log.hpp:82
Definition: activation-weighted-log.hpp:106
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: activation-weighted-log.hpp:110
ActivationDataWeightedLogTpl< Scalar > Data
Definition: activation-weighted-log.hpp:32
virtual boost::shared_ptr< ActivationDataAbstract > createData()
Definition: activation-weighted-log.hpp:74
void set_weights(const VectorXs &weights)
Definition: activation-weighted-log.hpp:83
VectorXs Wr
Definition: activation-weighted-log.hpp:124
virtual void print(std::ostream &os) const
Definition: activation-weighted-log.hpp:93
MathBase::VectorXs VectorXs
Definition: activation-weighted-log.hpp:112
void set_alpha(const Scalar alpha)
Definition: activation-weighted-log.hpp:81
Scalar get_alpha() const
Definition: activation-weighted-log.hpp:80
Scalar a1
Definition: activation-weighted-log.hpp:123
ActivationDataWeightedLogTpl(Activation *const activation)
Definition: activation-weighted-log.hpp:116
Definition: activation-quad-ref.hpp:19
virtual void calc(const boost::shared_ptr< ActivationDataAbstract > &data, const Eigen::Ref< const VectorXs > &r)
Definition: activation-weighted-log.hpp:46
Definition: activation-weighted-log.hpp:23
virtual ~ActivationModelWeightedLogTpl()
Definition: activation-weighted-log.hpp:44
MathBase::MatrixXs MatrixXs
Definition: activation-weighted-log.hpp:34
MathBaseTpl< Scalar > MathBase
Definition: activation-weighted-log.hpp:111
virtual void calcDiff(const boost::shared_ptr< ActivationDataAbstract > &data, const Eigen::Ref< const VectorXs > &r)
Definition: activation-weighted-log.hpp:59
ActivationModelAbstractTpl< Scalar > Base
Definition: activation-weighted-log.hpp:30
MathBaseTpl< Scalar > MathBase
Definition: activation-weighted-log.hpp:29
ActivationModelWeightedLogTpl(const VectorXs &weights, const Scalar &alpha=Scalar(1.))
Definition: activation-weighted-log.hpp:36
ActivationDataAbstractTpl< Scalar > ActivationDataAbstract
Definition: activation-weighted-log.hpp:31
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: activation-weighted-log.hpp:28
Scalar a0
Definition: activation-weighted-log.hpp:122