57 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
59 if (opts.n_nodes < 2) {
63 throw InvalidArgument(
"DirectCollocation: n_states must be >= 1");
66 throw InvalidArgument(
"DirectCollocation: n_controls must be >= 0");
72 scheme_ = opts.scheme;
108 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
129 throw RuntimeError(
"DirectCollocation: call setup() before quadrature()");
135 throw RuntimeError(
"DirectCollocation: need at least 2 nodes for quadrature");
142 sum = integrand(0) + integrand(
n_nodes_ - 1);
143 for (
int k = 1; k <
n_nodes_ - 1; ++k) {
144 sum = sum + ((k % 2 == 0) ? 2.0 : 4.0) * integrand(k);
146 return h / 3.0 * sum;
149 sum = 0.5 * (integrand(0) + integrand(
n_nodes_ - 1));
150 for (
int k = 1; k <
n_nodes_ - 1; ++k) {
151 sum = sum + integrand(k);
163 void add_dynamics_constraints_impl() {
166 "DirectCollocation: call set_dynamics() before add_dynamics_constraints()");
171 for (
int k = 0; k <
n_nodes_ - 1; ++k) {
185 add_trapezoidal_constraints(x_k, x_kp1, f_k, f_kp1, dt);
188 add_hermite_simpson_constraints(x_k, x_kp1, u_k, u_kp1, f_k, f_kp1, t_k, t_kp1, dt);
191 throw RuntimeError(
"DirectCollocation: unsupported CollocationScheme value");
200 SymbolicScalar defect = x_kp1(i) - x_k(i) - 0.5 * dt * (f_k(i) + f_kp1(i));
201 opti_.subject_to(defect == 0.0);
212 x_mid(i) = 0.5 * (x_k(i) + x_kp1(i)) + dt / 8.0 * (f_k(i) - f_kp1(i));
217 u_mid(i) = 0.5 * (u_k(i) + u_kp1(i));
225 x_kp1(i) - x_k(i) - dt / 6.0 * (f_k(i) + 4.0 * f_mid(i) + f_kp1(i));
226 opti_.subject_to(defect == 0.0);
Point distribution generators (linspace, cosine, sine, log, geometric).
Shared CRTP base for trajectory transcription methods.
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, const SymbolicScalar &tf, const CollocationOptions &opts={})
Set up the collocation problem with variable final time.
Definition Collocation.hpp:109
int n_intervals() const
Get the number of collocation intervals.
Definition Collocation.hpp:158
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, double tf, const CollocationOptions &opts={})
Set up the collocation problem with fixed final time.
Definition Collocation.hpp:58
SymbolicScalar quadrature(const SymbolicVector &integrand) const
Composite quadrature for an integrand sampled at collocation nodes.
Definition Collocation.hpp:127
DirectCollocation(Opti &opti)
Construct with a reference to the optimization environment.
Definition Collocation.hpp:46
Input validation failed (e.g., mismatched sizes, invalid parameters).
Definition JanusError.hpp:31
Main optimization environment class.
Definition Opti.hpp:167
Operation failed at runtime (e.g., CasADi eval with free variables).
Definition JanusError.hpp:41
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
SymbolicScalar get_time_at_node(int k) const
Definition TranscriptionBase.hpp:182
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
JanusMatrix< SymbolicScalar > SymbolicMatrix
Eigen matrix of MX elements.
Definition JanusTypes.hpp:71
@ Trapezoidal
Second-order trapezoidal: x[i+1] - x[i] = 0.5 * (xdot[i] + xdot[i+1]) * dt.
Definition FiniteDifference.hpp:27
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
CollocationScheme
Collocation scheme for dynamics discretization.
Definition Collocation.hpp:17
@ HermiteSimpson
4th order, uses midpoint interpolation
Definition Collocation.hpp:19
@ Trapezoidal
2nd order, implicit midpoint rule
Definition Collocation.hpp:18
Options for DirectCollocation setup.
Definition Collocation.hpp:27
CollocationScheme scheme
Definition Collocation.hpp:28
int n_nodes
Number of discretization nodes (including endpoints).
Definition Collocation.hpp:29
JanusVector< SymbolicScalar > SymbolicVector
Eigen vector of MX elements.
Definition JanusTypes.hpp:72
casadi::MX SymbolicScalar
CasADi MX symbolic scalar.
Definition JanusTypes.hpp:70