7template <
typename Scalar>
struct CostStackDataTpl;
36 const std::vector<CostPtr> &comps = {},
37 const std::vector<Scalar> &weights = {});
46 void evaluate(
const ConstVectorRef &x,
const ConstVectorRef &u,
60using CostPtr = shared_ptr<CostAbstractTpl<T>>;
65shared_ptr<CostStackTpl<T>>
operator+(
const CostPtr<T> &c1,
66 const CostPtr<T> &c2) {
67 return std::make_shared<CostStackTpl<T>>({c1, c2}, {1., 1.});
71shared_ptr<CostStackTpl<T>>
operator+(shared_ptr<CostStackTpl<T>> &&c1,
72 const CostPtr<T> &c2) {
78shared_ptr<CostStackTpl<T>>
operator+(shared_ptr<CostStackTpl<T>> &&c1,
80 c1->addCost(std::move(c2), 1.);
85shared_ptr<CostStackTpl<T>>
operator+(
const shared_ptr<CostStackTpl<T>> &c1,
87 c1->addCost(std::move(c2), 1.);
92shared_ptr<CostStackTpl<T>>
operator*(T u,
const CostPtr<T> &c1) {
93 return std::make_shared<CostStackTpl<T>>({c1}, {u});
97shared_ptr<CostStackTpl<T>>
operator*(T u, shared_ptr<CostStackTpl<T>> &&c1) {
98 for (std::size_t i = 0; i < c1->size(); i++) {
104template <
typename _Scalar>
113#include "aligator/modelling/costs/sum-of-costs.hxx"
115#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
116#include "aligator/modelling/costs/sum-of-costs.txx"
shared_ptr< CostStackTpl< T > > operator*(T u, const CostPtr< T > &c1)
shared_ptr< CostStackTpl< T > > operator+(const CostPtr< T > &c1, const CostPtr< T > &c2)
Stage costs for control problems.
shared_ptr< Manifold > space
State dimension.
std::vector< shared_ptr< CostData > > sub_cost_data
CostStackDataTpl(const CostStackTpl< Scalar > &obj)
Weighted sum of multiple cost components.
void computeGradients(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Compute the cost gradients .
ManifoldAbstractTpl< Scalar > Manifold
CostStackTpl(shared_ptr< Manifold > space, const int nu, const std::vector< CostPtr > &comps={}, const std::vector< Scalar > &weights={})
Constructor with a specified dimension, and optional vector of components and weights.
void addCost(const CostPtr &cost, const Scalar weight=1.)
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
CostStackTpl(const CostPtr &cost)
Constructor from a single CostBase instance.
std::vector< Scalar > weights_
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Evaluate the cost function.
void computeHessians(const ConstVectorRef &x, const ConstVectorRef &u, CostData &data) const
Compute the cost Hessians .
shared_ptr< CostBase > CostPtr
shared_ptr< CostData > createData() const
bool checkDimension(const CostBase *comp) const
Check the dimension of a component.
std::vector< CostPtr > components_
CostStackDataTpl< Scalar > SumCostData