Summation of individual cost models. More...
#include <cost-sum.hpp>
Public Types | |
typedef CostDataAbstractTpl< Scalar > | CostDataAbstract |
typedef std::map< std::string, boost::shared_ptr< CostDataAbstract > > | CostDataContainer |
typedef CostDataSumTpl< Scalar > | CostDataSum |
typedef CostItemTpl< Scalar > | CostItem |
typedef CostModelAbstractTpl< Scalar > | CostModelAbstract |
typedef std::map< std::string, boost::shared_ptr< CostItem > > | CostModelContainer |
typedef DataCollectorAbstractTpl< Scalar > | DataCollectorAbstract |
typedef MathBaseTpl< Scalar > | MathBase |
typedef MathBase::MatrixXs | MatrixXs |
typedef StateAbstractTpl< Scalar > | StateAbstract |
typedef MathBase::VectorXs | VectorXs |
Public Member Functions | |
CostModelSumTpl (boost::shared_ptr< StateAbstract > state) | |
Initialize the cost-sum model. More... | |
CostModelSumTpl (boost::shared_ptr< StateAbstract > state, const std::size_t nu) | |
Initialize the cost-sum model. More... | |
void | addCost (const std::string &name, boost::shared_ptr< CostModelAbstract > cost, const Scalar weight, const bool active=true) |
Add a cost item. More... | |
void | calc (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x) |
Compute the total cost value for nodes that depends only on the state. More... | |
void | calc (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
Compute the total cost value. More... | |
void | calcDiff (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x) |
Compute the Jacobian and Hessian of the total cost for nodes that depends on the state only. More... | |
void | calcDiff (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
Compute the Jacobian and Hessian of the total cost. More... | |
void | changeCostStatus (const std::string &name, const bool active) |
Change the cost status. More... | |
boost::shared_ptr< CostDataSum > | createData (DataCollectorAbstract *const data) |
Create the cost data. More... | |
DEPRECATED ("get_active() is deprecated and will be replaced with get_active_set()", const std::vector< std::string > &get_active() { active_.clear();active_.reserve(active_set_.size());for(const auto &contact :active_set_) { active_.push_back(contact);} return active_;};) DEPRECATED("get_inactive() is deprecated and will be replaced with " "get_inactive_set()" | |
const std::set< std::string > & | get_active_set () const |
Return the names of the set of active costs. | |
const CostModelContainer & | get_costs () const |
Return the stack of cost models. | |
const std::vector< std::string > & | get_inactive () |
const std::set< std::string > & | get_inactive_set () const |
Return the names of the set of inactive costs. | |
std::size_t | get_nr () const |
Return the dimension of the active residual vector. | |
std::size_t | get_nr_total () const |
Return the dimension of the total residual vector. | |
std::size_t | get_nu () const |
Return the dimension of the control input. | |
const boost::shared_ptr< StateAbstract > & | get_state () const |
Return the state. | |
bool | getCostStatus (const std::string &name) const |
Return the status of a given cost name. More... | |
void | removeCost (const std::string &name) |
Remove a cost item. More... | |
Public Attributes | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
Friends | |
template<class Scalar > | |
std::ostream & | operator<< (std::ostream &os, const CostModelSumTpl< Scalar > &model) |
Print information on the stack of costs. | |
Summation of individual cost models.
This class serves to manage a set of added cost models. The cost functions might active or inactive, with this approach we avoid dynamic allocation of memory. Each cost model is added through addCost
, where the weight and its status can be defined.
The main computations are carring out in calc()
and calcDiff()
routines. calc()
computes the costs (and its residuals) and calcDiff()
computes the derivatives of the cost functions (and its residuals). Concretely speaking, calcDiff()
builds a linear-quadratic approximation of the total cost function with the form: \(\mathbf{\ell_x}\in\mathbb{R}^{ndx}\), \(\mathbf{\ell_u}\in\mathbb{R}^{nu}\), \(\mathbf{\ell_{xx}}\in\mathbb{R}^{ndx\times ndx}\), \(\mathbf{\ell_{xu}}\in\mathbb{R}^{ndx\times nu}\), \(\mathbf{\ell_{uu}}\in\mathbb{R}^{nu\times nu}\) are the Jacobians and Hessians, respectively.
CostModelAbstractTpl
, calc()
, calcDiff()
, createData()
Definition at line 74 of file cost-sum.hpp.
CostModelSumTpl | ( | boost::shared_ptr< StateAbstract > | state, |
const std::size_t | nu | ||
) |
Initialize the cost-sum model.
[in] | state | State description |
[in] | nu | Dimension of control vector |
|
explicit |
Initialize the cost-sum model.
The default nu
value is obtained from StateAbstractTpl::get_nv()
.
[in] | state | State description |
void addCost | ( | const std::string & | name, |
boost::shared_ptr< CostModelAbstract > | cost, | ||
const Scalar | weight, | ||
const bool | active = true |
||
) |
Add a cost item.
[in] | name | Cost name |
[in] | cost | Cost model |
[in] | weight | Cost weight |
[in] | active | True if the cost is activated (default true) |
void removeCost | ( | const std::string & | name | ) |
Remove a cost item.
[in] | name | Cost name |
void changeCostStatus | ( | const std::string & | name, |
const bool | active | ||
) |
Change the cost status.
[in] | name | Cost name |
[in] | active | Cost status (true for active and false for inactive) |
void calc | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x, | ||
const Eigen::Ref< const VectorXs > & | u | ||
) |
Compute the total cost value.
[in] | data | Cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
void calc | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x | ||
) |
Compute the total cost value for nodes that depends only on the state.
It updates the total cost based on the state only. This function is used in the terminal nodes of an optimal control problem.
[in] | data | Cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
void calcDiff | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x, | ||
const Eigen::Ref< const VectorXs > & | u | ||
) |
Compute the Jacobian and Hessian of the total cost.
[in] | data | Cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
void calcDiff | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x | ||
) |
Compute the Jacobian and Hessian of the total cost for nodes that depends on the state only.
It updates the Jacobian and Hessian of the total cost based on the state only. This function is used in the terminal nodes of an optimal control problem.
[in] | data | Cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
boost::shared_ptr<CostDataSum> createData | ( | DataCollectorAbstract *const | data | ) |
Create the cost data.
The default data contains objects to store the values of the cost, residual vector and their derivatives (first and second order derivatives). However, it is possible to specialize this function is we need to create additional data, for instance, to avoid dynamic memory allocation.
data | Data collector |
bool getCostStatus | ( | const std::string & | name | ) | const |
Return the status of a given cost name.
[in] | name | Cost name |