|
| | OCP (int num_states, int num_inputs, std::chrono::duration< Scalar > dt, int num_steps, function_ref< VariableMatrix< Scalar >(const VariableMatrix< Scalar > &x, const VariableMatrix< Scalar > &u)> dynamics, DynamicsType dynamics_type=DynamicsType::EXPLICIT_ODE, TimestepMethod timestep_method=TimestepMethod::FIXED, TranscriptionMethod transcription_method=TranscriptionMethod::DIRECT_TRANSCRIPTION) |
| |
| | OCP (int num_states, int num_inputs, std::chrono::duration< Scalar > dt, int num_steps, function_ref< VariableMatrix< Scalar >(const Variable< Scalar > &t, const VariableMatrix< Scalar > &x, const VariableMatrix< Scalar > &u, const Variable< Scalar > &dt)> dynamics, DynamicsType dynamics_type=DynamicsType::EXPLICIT_ODE, TimestepMethod timestep_method=TimestepMethod::FIXED, TranscriptionMethod transcription_method=TranscriptionMethod::DIRECT_TRANSCRIPTION) |
| |
template<typename T >
requires ScalarLike<T> || MatrixLike<T> |
| void | constrain_initial_state (const T &initial_state) |
| |
template<typename T >
requires ScalarLike<T> || MatrixLike<T> |
| void | constrain_final_state (const T &final_state) |
| |
| void | for_each_step (const function_ref< void(const VariableMatrix< Scalar > &x, const VariableMatrix< Scalar > &u)> callback) |
| |
| void | for_each_step (const function_ref< void(const Variable< Scalar > &t, const VariableMatrix< Scalar > &x, const VariableMatrix< Scalar > &u, const Variable< Scalar > &dt)> callback) |
| |
template<typename T >
requires ScalarLike<T> || MatrixLike<T> |
| void | set_lower_input_bound (const T &lower_bound) |
| |
template<typename T >
requires ScalarLike<T> || MatrixLike<T> |
| void | set_upper_input_bound (const T &upper_bound) |
| |
| void | set_min_timestep (std::chrono::duration< Scalar > min_timestep) |
| |
| void | set_max_timestep (std::chrono::duration< Scalar > max_timestep) |
| |
| VariableMatrix< Scalar > & | X () |
| |
| VariableMatrix< Scalar > & | U () |
| |
| VariableMatrix< Scalar > & | dt () |
| |
| VariableMatrix< Scalar > | initial_state () |
| |
| VariableMatrix< Scalar > | final_state () |
| |
| | Problem () noexcept=default |
| |
| Variable< Scalar > | decision_variable () |
| |
| VariableMatrix< Scalar > | decision_variable (int rows, int cols=1) |
| |
| VariableMatrix< Scalar > | symmetric_decision_variable (int rows) |
| |
| void | minimize (const Variable< Scalar > &cost) |
| |
| void | minimize (Variable< Scalar > &&cost) |
| |
| void | maximize (const Variable< Scalar > &objective) |
| |
| void | maximize (Variable< Scalar > &&objective) |
| |
| void | subject_to (const EqualityConstraints< Scalar > &constraint) |
| |
| void | subject_to (EqualityConstraints< Scalar > &&constraint) |
| |
| void | subject_to (const InequalityConstraints< Scalar > &constraint) |
| |
| void | subject_to (InequalityConstraints< Scalar > &&constraint) |
| |
| ExpressionType | cost_function_type () const |
| |
| ExpressionType | equality_constraint_type () const |
| |
| ExpressionType | inequality_constraint_type () const |
| |
| ExitStatus | solve (const Options &options=Options{}, bool spy=false) |
| |
template<typename F >
requires requires(F callback, const IterationInfo<Scalar>& info) { { callback(info) } -> std::same_as<void>; } |
| void | add_callback (F &&callback) |
| |
template<typename F >
requires requires(F callback, const IterationInfo<Scalar>& info) { { callback(info) } -> std::same_as<bool>; } |
| void | add_callback (F &&callback) |
| |
| void | clear_callbacks () |
| |
template<typename F >
requires requires(F callback, const IterationInfo<Scalar>& info) { { callback(info) } -> std::same_as<bool>; } |
| void | add_persistent_callback (F &&callback) |
| |
template<
typename Scalar>
class slp::OCP< Scalar >
This class allows the user to pose and solve a constrained optimal control problem (OCP) in a variety of ways.
The system is transcripted by one of three methods (direct transcription, direct collocation, or single-shooting) and additional constraints can be added.
In direct transcription, each state is a decision variable constrained to the integrated dynamics of the previous state. In direct collocation, the trajectory is modeled as a series of cubic polynomials where the centerpoint slope is constrained. In single-shooting, states depend explicitly as a function of all previous states and all previous inputs.
Explicit ODEs are integrated using RK4.
For explicit ODEs, the function must be in the form dx/dt = f(t, x, u). For discrete state transition functions, the function must be in the form xₖ₊₁ = f(t, xₖ, uₖ).
Direct collocation requires an explicit ODE. Direct transcription and single-shooting can use either an ODE or state transition function.
https://underactuated.mit.edu/trajopt.html goes into more detail on each transcription method.
- Template Parameters
-