A Julia implementation of the **PR**ojection-**O**perator-Based **N**ewton’s Method for **T**rajectory **O**ptimization (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)