|
Janus 2.0.0
High-performance C++20 dual-mode numerical framework
|
Janus provides four transcription methods for converting continuous-time optimal control problems into discrete NLPs: Direct Collocation, Multiple Shooting, Pseudospectral, and Birkhoff Pseudospectral. This guide compares all four, explains when to choose each, and documents the unified API they share. All transcription classes work in symbolic mode via the janus::Opti interface.
All transcription classes share a unified API for interchangeability:
| Unified Method | Description |
|---|---|
| setup(n_states, n_controls, t0, tf, opts) | Create decision variables and time grid |
| set_dynamics(ode) | Set the ODE function |
| add_dynamics_constraints() | Add transcription-specific dynamics constraints |
| set_initial_state(x0) | Set initial boundary condition |
| set_final_state(xf) | Set final boundary condition |
| n_nodes() | Number of collocation/discretization nodes |
| time_grid() | Normalized time grid [0, 1] |
Method-specific aliases:
| Unified Method | DirectCollocation | MultipleShooting | Pseudospectral | Birkhoff Pseudospectral |
|---|---|---|---|---|
| add_dynamics_constraints() | add_defect_constraints() | add_continuity_constraints() | add_defect_constraints() | add_defect_constraints() |
| n_nodes() | n_nodes() | – | n_nodes() | n_nodes() |
| n_intervals() | – | n_intervals() | – | – |
| Aspect | Direct Collocation | Multiple Shooting | Pseudospectral | Birkhoff Pseudospectral |
|---|---|---|---|---|
| Dynamics Enforcement | Local defect constraints | Numerical integration | Global differentiation matrix | Pointwise derivative collocation |
| State Coupling | Local between neighbors | Local across intervals | Dense nonlinear coupling via D*X | Linear coupling via integration matrix B |
| Accuracy Source | Fixed-order scheme (2nd/4th) | Adaptive-step integrator | Spectral convergence (smooth) | Spectral-like with better conditioning |
| Control Representation | Values at each node | Piecewise constant per interval | Values at each node | Values at each node |
| Computational Cost | Lower per iteration | Higher (integrator calls) | Moderate-high | Moderate |
Uses polynomial interpolation to approximate state trajectories and enforces dynamics via defect constraints.
How it works:
Strengths: Fast iterations, easy initialization, dense trajectory output, robust convergence. Weaknesses: Fixed accuracy (2nd or 4th order), may struggle with stiff systems, needs more nodes for accuracy.
Best for: Smooth trajectories, real-time MPC, poor initial guesses, teaching/prototyping.
Divides time into intervals and integrates dynamics numerically. Continuity constraints connect intervals.
How it works: For each interval, integrate the ODE from state x_k using control u_k, then constrain x_{k+1} = Integrate(x_k, u_k, dt).
Strengths: High accuracy via adaptive integrators (CVODES/IDAS), handles stiff systems, fewer intervals needed. Weaknesses: Expensive derivatives (integrator sensitivities), initialization sensitivity, coarser trajectory.
Best for: High-fidelity simulation, stiff ODEs, matching simulation results, fewer decision variables.
Uses global polynomial interpolation with Lobatto nodes and a spectral differentiation matrix: D * X = (dt / 2) * F(X, U, t).
Strengths: High accuracy per node for smooth dynamics, built-in high-order quadrature, good low-node performance. Weaknesses: Dense coupling across nodes, less robust for discontinuous/bang-bang controls.
Best for: Smooth OCPs with tight accuracy targets, low node budgets, accurate running-cost integration.
Uses an integration matrix formulation: X = x_a * 1 + B * V, V = (dt / 2) * F(X, U, t). Dense coupling stays mostly in linear constraints while dynamics are pointwise.
Strengths: Improved conditioning versus classical D*X at higher node counts, pointwise nonlinear dynamics, natural quadrature. Weaknesses: More decision variables (X and V both present), still sensitive on non-smooth controls.
Best for: Smooth OCPs with larger node counts, problems where classical PS becomes iteration-heavy, high-order pseudospectral experiments.
| Method | Nodes/Intervals | Optimal Time | Error vs Reference |
|---|---|---|---|
| Collocation (Hermite-Simpson) | 31 nodes | 1.8019 s | < 0.01% |
| Multiple Shooting (CVODES) | 20 intervals | 1.8019 s | < 0.01% |
| Pseudospectral (LGL) | 31 nodes | 1.8019 s | < 0.01% |
| Birkhoff Pseudospectral (LGL) | 31 nodes | 1.8019 s | < 0.01% |
Choose Direct Collocation when:
Choose Multiple Shooting when:
Choose Pseudospectral when:
Choose Birkhoff Pseudospectral when: