API
4.5.1
For C++ developers
|
The primary intent of this class is for use by MocoSolvers, but users can also use this class to apply parameter values to the model and evaluate cost terms. More...
Public Member Functions | |
MocoProblemRep ()=default | |
MocoProblemRep (const MocoProblemRep &)=delete | |
MocoProblemRep & | operator= (const MocoProblemRep &)=delete |
MocoProblemRep (MocoProblemRep &&source) | |
MocoProblemRep & | operator= (MocoProblemRep &&source) |
const std::string & | getName () const |
const Model & | getModelBase () const |
Get a reference to the copy of the model being used by this MocoProblemRep. More... | |
SimTK::State & | updStateBase () const |
This is a state object that solvers can use along with ModelBase. More... | |
const ControlDistributor & | getControlDistributorBase () const |
This is a component inside ModelBase that you can use to set the value of control signals. More... | |
const Model & | getModelDisabledConstraints () const |
Get a reference to a copy of the model being used by this MocoProblemRep, but with all constraints disabled and an additional DiscreteForces component. More... | |
SimTK::State & | updStateDisabledConstraints (int index=0) const |
This is a state object that solvers can use with ModelDisabledConstraints. More... | |
const ControlDistributor & | getControlDistributorDisabledConstraints () const |
This is a component inside ModelDisabledConstraints that you can use to set the value of control signals. More... | |
const DiscreteForces & | getConstraintForces () const |
This is a component inside ModelDisabledConstraints that you can use to set the value of discrete forces, intended to hold the constraint forces obtained from ModelBase. More... | |
const AccelerationMotion & | getAccelerationMotion () const |
This is a component inside ModelDisabledConstraints that you can use to set the value of generalized accelerations UDot, for use in implicit dynamics formulations. More... | |
int | getNumStates () const |
int | getNumControls () const |
int | getNumParameters () const |
int | getNumCosts () const |
Get the number of goals in cost mode. More... | |
int | getNumEndpointConstraints () const |
Get the number of goals in endpoint constraint mode. More... | |
int | getNumKinematicConstraints () const |
bool | isPrescribedKinematics () const |
Does the model contain a PositionMotion to prescribe all generalized coordinates, speeds, and accelerations? More... | |
bool | getComputeControlsFromModel () const |
Do we need to compute controls from the model (e.g., because the model contains user-defined controllers)? If the model does not contain user-defined controls, then we prefer to use the controls directly from the optimal control problem, for efficiency. More... | |
int | getNumImplicitAuxiliaryResiduals () const |
std::vector< std::string > | createStateVariableNamesInSystemOrder (std::unordered_map< int, int > &yIndexMap) const |
This excludes generalized coordinate and speed states if isPrescribedKinematics() is true. More... | |
std::vector< std::string > | createStateInfoNames () const |
Get the state names of all the state infos. More... | |
std::vector< std::string > | createControlInfoNames () const |
Get the control names of all the control infos. More... | |
std::vector< std::string > | createInputControlInfoNames () const |
Get the control names of all the Input control infos. More... | |
std::vector< std::string > | createParameterNames () const |
Get the names of all the parameters. More... | |
std::vector< std::string > | createCostNames () const |
Get the names of all the goals in cost mode. More... | |
std::vector< std::string > | createEndpointConstraintNames () const |
Get the names of all the goals in endpoint constraint mode. More... | |
std::vector< std::string > | createPathConstraintNames () const |
Get the names of all the MocoPathConstraints. More... | |
std::vector< std::string > | createMultiplierInfoNames () const |
Get the names of all the Lagrange multiplier infos. More... | |
std::vector< std::string > | createKinematicConstraintNames () const |
Get the constraint names of all the kinematic constraints. More... | |
std::vector< std::string > | getKinematicConstraintEquationNames (bool includeDerivatives) const |
Get a vector of names for all kinematic constraint equations. More... | |
MocoInitialBounds | getTimeInitialBounds () const |
MocoFinalBounds | getTimeFinalBounds () const |
const MocoVariableInfo & | getStateInfo (const std::string &name) const |
Get information for state variables. See MocoPhase::setStateInfo(). More... | |
const MocoVariableInfo & | getControlInfo (const std::string &name) const |
Get information for actuator controls. More... | |
const MocoVariableInfo & | getInputControlInfo (const std::string &name) const |
Get information for Input control variables. More... | |
bool | hasInputControlInfo (const std::string &name) const |
Get whether an info object exists for an Input control. More... | |
const MocoVariableInfo & | getSolverControlInfo (const std::string &name) const |
Get information for a control or Input control variable. More... | |
const MocoParameter & | getParameter (const std::string &name) const |
Get information for a parameter. See MocoPhase::addParameter(). More... | |
const MocoGoal & | getCost (const std::string &name) const |
Get a cost by name. This returns a MocoGoal in cost mode. More... | |
const MocoGoal & | getCostByIndex (int index) const |
Get a cost by index. More... | |
const MocoGoal & | getEndpointConstraint (const std::string &name) const |
Get an endpoint constraint by name. More... | |
const MocoGoal & | getEndpointConstraintByIndex (int index) const |
Get an endpoint constraint by index. More... | |
const MocoPathConstraint & | getPathConstraint (const std::string &name) const |
Get a MocoPathConstraint. More... | |
const MocoPathConstraint & | getPathConstraintByIndex (int index) const |
Get a path constraint by index. More... | |
int | getNumPathConstraintEquations () const |
Get the number of scalar path constraints in the MocoProblem. More... | |
const std::vector< MocoVariableInfo > & | getMultiplierInfos (const std::string &kinematicConstraintInfoName) const |
Given a kinematic constraint name, get a vector of MocoVariableInfos corresponding to the Lagrange multipliers for that kinematic constraint. More... | |
const MocoKinematicConstraint & | getKinematicConstraint (const std::string &name) const |
Get a MocoKinematicConstraint from this MocoPhase. More... | |
int | getNumKinematicConstraintEquations () const |
Get the number of scalar kinematic constraints in the MocoProblem. More... | |
void | printDescription () const |
Print a description of this problem, including costs and variable bounds. More... | |
Interface for solvers | |
These functions are for use by MocoSolvers, but can also be called by users for debugging. Calculate the errors in all the scalar path constraint equations in this phase. | |
void | calcPathConstraintErrors (const SimTK::State &state, SimTK::Vector &errors) const |
SimTK::Vector | calcKinematicConstraintErrors (const SimTK::State &state) const |
Calculate the errors in all the scalar kinematic constraint equations in this phase. More... | |
void | applyParametersToModelProperties (const SimTK::Vector ¶meterValues, bool initSystemAndDisableConstraints=false) const |
Apply paramater values to the models created from the model passed to initialize() within the current MocoProblem. More... | |
const std::vector< SimTK::ReferencePtr< const Output< double > > > & | getImplicitResidualReferencePtrs () const |
Get a vector of reference pointers to model outputs that return residual values for any components with dynamics in implicit forms. More... | |
const std::vector< std::pair< std::string, SimTK::ReferencePtr< const Component > > > & | getImplicitComponentReferencePtrs () const |
Get reference pointers to components that enforce dynamics in implicit form. More... | |
const SimTK::Vector & | getInputControls (const SimTK::State &stateDisabledConstraints) const |
Get the vector of all InputController controls. More... | |
const SimTK::Vector & | getControls (const SimTK::State &stateDisabledConstraints) const |
Get the vector of model controls. More... | |
std::vector< int > | getInputControlIndexes () const |
Get a vector of integers representing the indexes of Input controls in the ControlDistributor's 'controls' Output. More... | |
The primary intent of this class is for use by MocoSolvers, but users can also use this class to apply parameter values to the model and evaluate cost terms.
This class also checks the MocoProblem for various errors. To get an instance of this class, use MocoProblem::createRep(). This interface currently supports only single-phase problems. This class stores a reference (not a copy) to the original MocoProblem from which it was created.
|
default |
|
delete |
|
inline |
void OpenSim::MocoProblemRep::applyParametersToModelProperties | ( | const SimTK::Vector & | parameterValues, |
bool | initSystemAndDisableConstraints = false |
||
) | const |
Apply paramater values to the models created from the model passed to initialize() within the current MocoProblem.
Values must be consistent with the order of parameters returned from createParameterNames().
Note: initSystem() must be called on each model after calls to this method in order for provided parameter values to be applied to the model. You can pass true
to have initSystem() called for you, and to also re-disable any constraints re-enabled by the initSystem() call (see getModelDisabledConstraints()).
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::applyParametersToModelProperties().
|
inline |
Calculate the errors in all the scalar kinematic constraint equations in this phase.
This may not be the most efficient solution for solvers, but is rather intended as a convenience method for a quick implementation or for debugging model constraints causing issues in an optimal control problem.
|
inline |
std::vector<std::string> OpenSim::MocoProblemRep::createControlInfoNames | ( | ) | const |
Get the control names of all the control infos.
std::vector<std::string> OpenSim::MocoProblemRep::createCostNames | ( | ) | const |
Get the names of all the goals in cost mode.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addCosts().
std::vector<std::string> OpenSim::MocoProblemRep::createEndpointConstraintNames | ( | ) | const |
Get the names of all the goals in endpoint constraint mode.
std::vector<std::string> OpenSim::MocoProblemRep::createInputControlInfoNames | ( | ) | const |
Get the control names of all the Input control infos.
std::vector<std::string> OpenSim::MocoProblemRep::createKinematicConstraintNames | ( | ) | const |
Get the constraint names of all the kinematic constraints.
Note: this should only be called after initialize().
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addKinematicConstraints().
std::vector<std::string> OpenSim::MocoProblemRep::createMultiplierInfoNames | ( | ) | const |
Get the names of all the Lagrange multiplier infos.
std::vector<std::string> OpenSim::MocoProblemRep::createParameterNames | ( | ) | const |
Get the names of all the parameters.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addParameters().
std::vector<std::string> OpenSim::MocoProblemRep::createPathConstraintNames | ( | ) | const |
Get the names of all the MocoPathConstraints.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addGenericPathConstraints().
std::vector<std::string> OpenSim::MocoProblemRep::createStateInfoNames | ( | ) | const |
Get the state names of all the state infos.
std::vector<std::string> OpenSim::MocoProblemRep::createStateVariableNamesInSystemOrder | ( | std::unordered_map< int, int > & | yIndexMap | ) | const |
This excludes generalized coordinate and speed states if isPrescribedKinematics() is true.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::TropterProblemBase().
|
inline |
This is a component inside ModelDisabledConstraints that you can use to set the value of generalized accelerations UDot, for use in implicit dynamics formulations.
The motion is not necessarily enabled.
Referenced by OpenSim::MocoTropterSolver::ImplicitTropterProblem< T >::ImplicitTropterProblem(), and OpenSim::MocoTropterSolver::TropterProblemBase< T >::setSimTKState().
|
inline |
Do we need to compute controls from the model (e.g., because the model contains user-defined controllers)? If the model does not contain user-defined controls, then we prefer to use the controls directly from the optimal control problem, for efficiency.
|
inline |
This is a component inside ModelDisabledConstraints that you can use to set the value of discrete forces, intended to hold the constraint forces obtained from ModelBase.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::calcAndApplyKinematicConstraintForces().
|
inline |
This is a component inside ModelBase that you can use to set the value of control signals.
|
inline |
This is a component inside ModelDisabledConstraints that you can use to set the value of control signals.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addControlVariables(), and OpenSim::MocoTropterSolver::TropterProblemBase< T >::setSimTKState().
const MocoVariableInfo& OpenSim::MocoProblemRep::getControlInfo | ( | const std::string & | name | ) | const |
Get information for actuator controls.
If the control is associated with a non-scalar actuator (i.e. uses multiple control variables), then the control name will be the actuator path appended by the control index (e.g. "/actuator_0"); See MocoPhase::setControlInfo().
|
inline |
Get the vector of model controls.
If the model contains user-defined controllers, this function will compute the controls from the model. Otherwise, it will return the controls directly from the ControlDistributor. This function is intended for use by solvers to compute controls needed by MocoGoals and MocoPathConstraints. The SimTK::State argument should be obtain from updStateDisabledConstraints()
.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::calc_cost(), and OpenSim::MocoTropterSolver::TropterProblemBase< T >::calc_cost_integrand().
const MocoGoal& OpenSim::MocoProblemRep::getCost | ( | const std::string & | name | ) | const |
Get a cost by name. This returns a MocoGoal in cost mode.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addCosts().
const MocoGoal& OpenSim::MocoProblemRep::getCostByIndex | ( | int | index | ) | const |
Get a cost by index.
The order is the same as in getCostNames(). Note: this does not perform a bounds check.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::calc_cost(), and OpenSim::MocoTropterSolver::TropterProblemBase< T >::calc_cost_integrand().
const MocoGoal& OpenSim::MocoProblemRep::getEndpointConstraint | ( | const std::string & | name | ) | const |
Get an endpoint constraint by name.
This returns a MocoGoal in endpoint constraint mode.
const MocoGoal& OpenSim::MocoProblemRep::getEndpointConstraintByIndex | ( | int | index | ) | const |
Get an endpoint constraint by index.
The order is the same as in getEndpointConstraintNames(). Note: this does not perform a bounds check.
|
inline |
Get reference pointers to components that enforce dynamics in implicit form.
This returns a vector of pairs including the name of the discrete derivative variable and the component reference pointer.
|
inline |
Get a vector of reference pointers to model outputs that return residual values for any components with dynamics in implicit forms.
The references returned are from the model returned by getModelDisabledConstraints().
|
inline |
Get a vector of integers representing the indexes of Input controls in the ControlDistributor's 'controls' Output.
This function is intended for use by solvers to account for Input controls when converting between a MocoTrajectory and solver-specific trajectory types.
const MocoVariableInfo& OpenSim::MocoProblemRep::getInputControlInfo | ( | const std::string & | name | ) | const |
Get information for Input control variables.
|
inline |
Get the vector of all InputController controls.
This includes both controls from InputControllers added by the user and controls from the ActuatorInputController added by MocoProblemRep. The SimTK::State argument should be obtained from updStateDisabledConstraints()
.
const MocoKinematicConstraint& OpenSim::MocoProblemRep::getKinematicConstraint | ( | const std::string & | name | ) | const |
Get a MocoKinematicConstraint from this MocoPhase.
Note: this does not include MocoPathConstraints, use getPathConstraint() instead.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addKinematicConstraints().
std::vector<std::string> OpenSim::MocoProblemRep::getKinematicConstraintEquationNames | ( | bool | includeDerivatives | ) | const |
Get a vector of names for all kinematic constraint equations.
Kinematic constraint equations are ordered as so:
|
inline |
Get a reference to the copy of the model being used by this MocoProblemRep.
This model is obtained by processing the ModelProcessor the user gives to MocoProblem. This model is not the model given to MocoGoal or MocoPathConstraint, but can be used within solvers to compute constraint forces and constraint errors (see getModelDisabledConstraints() for more details). Any parameter updates via a MocoParameter added to the problem will be applied to this model.
|
inline |
Get a reference to a copy of the model being used by this MocoProblemRep, but with all constraints disabled and an additional DiscreteForces component.
This new component can be used to apply constraint forces computed from the base model to this model, which updates the discrete variables in the state associated with these forces. You should use this model to compute accelerations via getModelDisabledConstraints().realizeAccleration(state), making sure to add any constraint forces to the model preceding the realization. This model is the same instance as that given to MocoGoal and MocoPathConstraint, ensuring that realizing to Stage::Acceleration in these classes produces the same accelerations computed by the solver. Any parameter updates via a MocoParameter added to the problem will be applied to this model.
const std::vector<MocoVariableInfo>& OpenSim::MocoProblemRep::getMultiplierInfos | ( | const std::string & | kinematicConstraintInfoName | ) | const |
Given a kinematic constraint name, get a vector of MocoVariableInfos corresponding to the Lagrange multipliers for that kinematic constraint.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addKinematicConstraints().
const std::string& OpenSim::MocoProblemRep::getName | ( | ) | const |
|
inline |
|
inline |
Get the number of goals in cost mode.
|
inline |
Get the number of goals in endpoint constraint mode.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addCosts().
|
inline |
|
inline |
Get the number of scalar kinematic constraints in the MocoProblem.
This does not include path constraints equations.
|
inline |
|
inline |
|
inline |
Get the number of scalar path constraints in the MocoProblem.
This does not include kinematic constraints equations.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addGenericPathConstraints().
|
inline |
const MocoParameter& OpenSim::MocoProblemRep::getParameter | ( | const std::string & | name | ) | const |
Get information for a parameter. See MocoPhase::addParameter().
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addParameters().
const MocoPathConstraint& OpenSim::MocoProblemRep::getPathConstraint | ( | const std::string & | name | ) | const |
Get a MocoPathConstraint.
Note: this does not include MocoKinematicConstraints, use getKinematicConstraint() instead.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addGenericPathConstraints().
const MocoPathConstraint& OpenSim::MocoProblemRep::getPathConstraintByIndex | ( | int | index | ) | const |
Get a path constraint by index.
The order is the same as in getPathConstraintNames(). Note: this does not perform a bounds check.
const MocoVariableInfo& OpenSim::MocoProblemRep::getSolverControlInfo | ( | const std::string & | name | ) | const |
Get information for a control or Input control variable.
This internally resolves whether the variable is a control or Input control based on the variable name. This is intend for use by solvers, where both controls and Input controls are treated as algebraic variables.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addControlVariables().
const MocoVariableInfo& OpenSim::MocoProblemRep::getStateInfo | ( | const std::string & | name | ) | const |
Get information for state variables. See MocoPhase::setStateInfo().
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addStateVariables().
MocoFinalBounds OpenSim::MocoProblemRep::getTimeFinalBounds | ( | ) | const |
Note: the return value is constructed fresh on every call from the internal property. Avoid repeated calls to this function.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addStateVariables().
MocoInitialBounds OpenSim::MocoProblemRep::getTimeInitialBounds | ( | ) | const |
Note: the return value is constructed fresh on every call from the internal property. Avoid repeated calls to this function.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::addStateVariables().
bool OpenSim::MocoProblemRep::hasInputControlInfo | ( | const std::string & | name | ) | const |
Get whether an info object exists for an Input control.
|
inline |
Does the model contain a PositionMotion to prescribe all generalized coordinates, speeds, and accelerations?
Referenced by OpenSim::MocoTropterSolver::ImplicitTropterProblem< T >::ImplicitTropterProblem(), and OpenSim::MocoTropterSolver::TropterProblemBase< T >::setSimTKState().
|
delete |
|
inline |
void OpenSim::MocoProblemRep::printDescription | ( | ) | const |
Print a description of this problem, including costs and variable bounds.
Printing is done using OpenSim::log_cout().
|
inline |
This is a state object that solvers can use along with ModelBase.
|
inline |
This is a state object that solvers can use with ModelDisabledConstraints.
Some solvers may need to use 2 state objects at once; you can supply an index of 1 to get a second state object.
Referenced by OpenSim::MocoTropterSolver::TropterProblemBase< T >::calc_cost(), and OpenSim::MocoTropterSolver::TropterProblemBase< T >::setSimTKState().