52 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
67 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
80 casadi::Function integrator_;
83 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
90 throw InvalidArgument(
"MultipleShooting: n_states must be >= 1");
93 throw InvalidArgument(
"MultipleShooting: n_controls must be >= 0");
111 for (
int k = 0; k <
n_nodes_; ++k) {
118 for (
int k = 0; k < n_intervals_; ++k) {
128 integrator_ = casadi::Function();
133 void ensure_integrator() {
134 if (!integrator_.is_null()) {
146 u_sym = casadi::MX(0, 1);
155 casadi::MXDict dae = {{
"x", x_sym}, {
"p", p_sym}, {
"ode",
to_mx(ode_scaled)}};
157 casadi::Dict intg_opts;
158 if (opts_.integrator ==
"cvodes") {
159 intg_opts[
"abstol"] = opts_.tol;
160 intg_opts[
"reltol"] = opts_.tol;
163 integrator_ = casadi::integrator(
"shooting_intg", opts_.integrator, dae, intg_opts);
166 void add_dynamics_constraints_impl() {
169 "MultipleShooting: call set_dynamics() before add_dynamics_constraints()");
175 for (
int k = 0; k < n_intervals_; ++k) {
181 casadi::MXDict args = {{
"x0",
to_mx(x_k)}, {
"p", p}};
182 casadi::MXDict res = integrator_(args);
185 opti_.subject_to(
to_mx(x_kp1) == x_integrated);
Point distribution generators (linspace, cosine, sine, log, geometric).
Shared CRTP base for trajectory transcription methods.
Input validation failed (e.g., mismatched sizes, invalid parameters).
Definition JanusError.hpp:31
MultipleShooting(Opti &opti)
Construct with a reference to the optimization environment.
Definition MultiShooting.hpp:41
int n_intervals() const
Get the number of shooting intervals.
Definition MultiShooting.hpp:76
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, const SymbolicScalar &tf, const MultiShootingOptions &opts={})
Set up the shooting problem with variable final time.
Definition MultiShooting.hpp:68
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, double tf, const MultiShootingOptions &opts={})
Set up the shooting problem with fixed final time.
Definition MultiShooting.hpp:53
Main optimization environment class.
Definition Opti.hpp:167
bool tf_is_variable_
Definition TranscriptionBase.hpp:161
SymbolicMatrix controls_
Definition TranscriptionBase.hpp:169
int n_controls_
Definition TranscriptionBase.hpp:155
int n_controls() const
Definition TranscriptionBase.hpp:136
int n_states_
Definition TranscriptionBase.hpp:154
double t0_
Definition TranscriptionBase.hpp:158
int n_states() const
Definition TranscriptionBase.hpp:133
NumericVector tau_
Definition TranscriptionBase.hpp:167
TranscriptionBase(Opti &opti)
Definition TranscriptionBase.hpp:34
double tf_fixed_
Definition TranscriptionBase.hpp:159
std::function< SymbolicVector(const SymbolicVector &, const SymbolicVector &, const SymbolicScalar &)> dynamics_
Definition TranscriptionBase.hpp:173
SymbolicScalar tf_symbolic_
Definition TranscriptionBase.hpp:160
SymbolicMatrix states_
Definition TranscriptionBase.hpp:168
bool setup_complete_
Definition TranscriptionBase.hpp:163
int n_nodes_
Definition TranscriptionBase.hpp:156
SymbolicVector get_state_at_node(int k) const
Definition TranscriptionBase.hpp:189
SymbolicScalar get_duration() const
Definition TranscriptionBase.hpp:175
SymbolicVector get_control_at_node(int k) const
Definition TranscriptionBase.hpp:200
bool dynamics_constraints_added_
Definition TranscriptionBase.hpp:165
bool dynamics_set_
Definition TranscriptionBase.hpp:164
Opti & opti_
Definition TranscriptionBase.hpp:153
Definition Diagnostics.hpp:19
JanusVector< SymbolicScalar > SymbolicVector
Eigen vector of MX elements.
Definition JanusTypes.hpp:72
SymbolicVector as_vector(const casadi::MX &m)
Convert CasADi MX vector to SymbolicVector (Eigen container of MX).
Definition JanusTypes.hpp:228
casadi::MX to_mx(const Eigen::MatrixBase< Derived > &e)
Convert Eigen matrix of MX (or numeric) to CasADi MX.
Definition JanusTypes.hpp:189
JanusMatrix< SymbolicScalar > SymbolicMatrix
Eigen matrix of MX elements.
Definition JanusTypes.hpp:71
SymbolicScalar sym(const std::string &name)
Create a named symbolic scalar variable.
Definition JanusTypes.hpp:90
JanusVector< T > linspace(const T &start, const T &end, int n)
Generates linearly spaced vector.
Definition Spacing.hpp:26
casadi::MX SymbolicScalar
CasADi MX symbolic scalar.
Definition JanusTypes.hpp:70
Options for MultipleShooting.
Definition MultiShooting.hpp:20
bool normalize_time
If true, integrates on normalized time and scales ODE by dt.
Definition MultiShooting.hpp:24
std::string integrator
Integrator plugin ("cvodes", "rk", "idas").
Definition MultiShooting.hpp:22
double tol
Integrator required tolerance.
Definition MultiShooting.hpp:23
int n_intervals
Number of shooting intervals.
Definition MultiShooting.hpp:21