| OpenSim Moco
    0.3.0
    | 
Minimize the sum of the absolute value of the controls raised to a given exponent, integrated over the phase.
The default weight for each control is 1.0; this can be changed by calling setWeight() or editing the control_weights property in XML. The exponent must be an integer greater than or equal to 2, and is 2 by default. If conducting a predictive simulation, you likely want to set divide_by_displacement to true; otherwise, this cost is minimized by not moving. Dividing by displacement leads to a quantity similar to cost of transport.
This goal is computed as follows:
\[ \frac{1}{d} \int_{t_i}^{t_f} \sum_{c \in C} w_c |x_c(t)|^p ~dt \]
We use the following notation:
divide_by_displacement is true; 1 otherwise.exponent.If p > 2, we first the absolute value of the control; this is to properly handle odd exponents. 
 
  
 #include <Moco/Moco/MocoGoal/MocoControlGoal.h>
| Public Member Functions | |
| MocoControlGoal (std::string name) | |
| MocoControlGoal (std::string name, double weight) | |
| void | setWeightForControl (const std::string &controlName, const double &weight) | 
| Set the weight to use for the term in the cost associated with controlName(the name or path of the corresponding actuator).  More... | |
| void | setWeightForControlPattern (const std::string &pattern, const double &weight) | 
| Set weights for all controls whose entire path matches the provided regular expression pattern.  More... | |
| void | setExponent (int exponent) | 
| Set the exponent on the control signals. | |
| double | getExponent () const | 
| void | setDivideByDisplacement (bool tf) | 
| Set if the goal should be divided by the displacement of the system's center of mass over the phase.  More... | |
| bool | getDivideByDisplacement () const | 
|  Public Member Functions inherited from OpenSim::MocoGoal | |
| MocoGoal (std::string name) | |
| MocoGoal (std::string name, double weight) | |
| void | setEnabled (bool enabled) | 
| Set whether this goal is used in the problem. | |
| bool | getEnabled () const | 
| void | setWeight (double weight) | 
| In cost mode, the goal is multiplied by this weight.  More... | |
| double | getWeight () const | 
| void | setMode (std::string mode) | 
| Set the mode property to either 'cost' or 'endpoint_constraint'.  More... | |
| std::string | getModeAsString () const | 
| This returns the default mode of the goal, unless the user overrode the default using setMode().  More... | |
| Mode | getMode () const | 
| bool | getModeIsCost () const | 
| bool | getModeIsEndpointConstraint () const | 
| Mode | getDefaultMode () const | 
| Types of goals have a class-level default for whether they are enforced as a cost or endpoint constraint.  More... | |
| bool | getSupportsEndpointConstraint () const | 
| Can this constraint be used in endpoint constraint mode? | |
| const MocoConstraintInfo & | getConstraintInfo () const | 
| Get bounds for the constraints when using this goal in endpoint constraint mode.  More... | |
| MocoConstraintInfo & | updConstraintInfo () | 
| int | getNumOutputs () const | 
| Get the length of the return value of calcGoal(). | |
| int | getNumIntegrals () const | 
| Get the number of integrals required by this cost.  More... | |
| SimTK::Real | calcIntegrand (const SimTK::State &state) const | 
| Calculate the integrand that should be integrated and passed to calcCost().  More... | |
| void | calcGoal (const GoalInput &input, SimTK::Vector &goal) const | 
| In cost mode, the returned cost includes the weight, and the elements of the returned vector should be summed by the caller to obtain the total cost.  More... | |
| void | initializeOnModel (const Model &model) const | 
| For use by solvers. This also performs error checks on the Problem. | |
| void | printDescription (std::ostream &stream=std::cout) const | 
| Print the name type and mode of this goal.  More... | |
| Protected Member Functions | |
| void | initializeOnModelImpl (const Model &) const override | 
| Perform any caching before the problem is solved.  More... | |
| void | calcIntegrandImpl (const SimTK::State &state, double &integrand) const override | 
| void | calcGoalImpl (const GoalInput &input, SimTK::Vector &cost) const override | 
| The Lagrange multipliers for kinematic constraints are not available. | |
| void | printDescriptionImpl (std::ostream &stream=std::cout) const override | 
| Print a more detailed description unique to each goal. | |
|  Protected Member Functions inherited from OpenSim::MocoGoal | |
| void | setNumIntegralsAndOutputs (int numIntegrals, int numOutputs) const | 
| Set the number of integral terms required by this goal and the length of the vector passed into calcGoalImpl().  More... | |
| virtual Mode | getDefaultModeImpl () const | 
| virtual bool | getSupportsEndpointConstraintImpl () const | 
| const Model & | getModel () const | 
| For use within virtual function implementations. | |
| double | calcSystemDisplacement (const SimTK::State &initial, const SimTK::State &final) const | 
| Additional Inherited Members | |
|  Public Types inherited from OpenSim::MocoGoal | |
| enum | Mode { Cost, EndpointConstraint } | 
| 
 | overrideprotectedvirtual | 
Reimplemented from OpenSim::MocoGoal.
| 
 | overrideprotectedvirtual | 
Perform any caching before the problem is solved.
You must override this function and invoke setNumIntegralsAndOutputs().
Implements OpenSim::MocoGoal.
| 
 | inline | 
Set if the goal should be divided by the displacement of the system's center of mass over the phase.
| void OpenSim::MocoControlGoal::setWeightForControl | ( | const std::string & | controlName, | 
| const double & | weight | ||
| ) | 
Set the weight to use for the term in the cost associated with controlName (the name or path of the corresponding actuator). 
To remove a control from the cost function, set its weight to 0. If a weight is already set for the requested state, then the provided weight replaces the previous weight. Only controls with non-zero weights that are associated with actuators for which appliesForce is True are included in the cost function. Weights set here take precedence over weights specified with a regular expression.
| void OpenSim::MocoControlGoal::setWeightForControlPattern | ( | const std::string & | pattern, | 
| const double & | weight | ||
| ) | 
Set weights for all controls whose entire path matches the provided regular expression pattern.
Multiple pairs of patterns and weights can be provided by calling this function multiple times. If a control matches multiple patterns, the weight associated with the last pattern is used.