A Julia implementation of the PRojection-Operator-Based Newton’s Method for Trajectory Optimization (PRONTO). PRONTO is a numerical method for trajectory optimization which leverages variational calculus to solve the optimal control problem directly in infinite-dimensional function space. Consider the optimal control problem:
To explore beyond this trajectory manifold, we consider an arbitrary curve
Given the current trajectory iterate
where
This optimization problem is first converted into a linear-quadratic optimal control problem, and then solved in one of two ways. First, we try to solve a Newton descent direction, which does not have a guaranteed solution, but provides quadratic convergence. If this fails, we switch to a quasi-Newton descent direction, which has a guaranteed solution and provides super-linear convergence.
Because
After calculating a descent direction
For the mathematical details of the PRONTO algorithm, please refer to: (Hauser 2002), (Hauser 2003), and (Shao et al. 2022)
Please see the examples folder for usage examples. This API is still very likely to change – especially regarding the symbolic generation of jacobians/hessians and passing them to the solver. Note that upcoming changes in Julia 1.9 should substantially improve the compile time of large generated functions (#45276, #45404).
To see the generated definition of any model function, run, eg. methods(PRONTO.f)
and open the temporary file where the definition is stored.
- Fine grained control of verbosity/runtime-feedback.
- Support for SVector parameters (eg. regulator Q/R matrix diagonals).
- Support for constraints (Dearing et al. 2022), (Hauser & Saccon 2006)
- Easy access to differential equation solver options (algorithm, tolerance, etc.).
- More options for guess trajectories (eg. smooth atan)