Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/src/manual-flow-ocp.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

In this tutorial, we explain the `Flow` function, in particular to compute flows from an optimal control problem.

!!! note "Current limitation"
Currently, from an optimal control problem, only **Hamiltonian flows** can be constructed, i.e. the control law must be provided in **feedback form depending on both state and costate**: `u(x, p)`. An active refactoring is under way to extend support to non-Hamiltonian flows, in particular open-loop control laws `u(t)` and state feedback control laws `u(x)`.

## Basic usage

Les us define a basic optimal control problem.
Expand Down
2 changes: 1 addition & 1 deletion joss/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ The package architecture balances expressiveness, performance, and extensibility

- **Modelers and solvers**: We chose a clear modeler-solver separation: discretization produces ADNLPModels (able to deal with arbitrary user defined functions) or ExaModels [@shin2023accelerating] instances compatible with multiple NLP solvers (IPOPT via NLPModelsIpopt.jl [@Orban_NLPModelsIpopt_jl], Knitro [@Byrd2006], MadNLP, and [Uno](https://github.com/cvanaret/Uno) [@VanaretLeyffer2026]). These NLP solvers rely on linear solvers such as [MUMPS.jl](https://github.com/JuliaSmoothOptimizers/MUMPS.jl) [@Montoison_MUMPS_jl; @MUMPS:1; @MUMPS:2] for CPU computations or [CUDSS.jl](https://github.com/exanauts/CUDSS.jl) [@CUDSS_nvidia] for GPU acceleration with MadNLP. Automatic differentiation via ForwardDiff.jl [@RevelsLubinPapamarkou2016] and DifferentiationInterface.jl [@dalle2026commoninterfaceautomaticdifferentiation] avoids manual derivative coding.

- **Indirect methods**: Hamiltonian flows integrate with DifferentialEquations.jl to access adaptive stepping, event handling, and multiple ODE solvers without reimplementation. Shooting methods rely on NonlinearSolve.jl [@pal2024nonlinearsolve] or [MINPACK.jl](https://github.com/sglyon/MINPACK.jl) for root-finding. Future extensions will incorporate homotopy continuation methods leveraging bifurcation analysis tools like [BifurcationKit.jl](https://github.com/bifurcationkit/BifurcationKit.jl) [@veltz:hal-02902346].
- **Indirect methods**: Hamiltonian flows integrate with DifferentialEquations.jl to access adaptive stepping, event handling, and multiple ODE solvers without reimplementation. Shooting methods rely on NonlinearSolve.jl [@pal2024nonlinearsolve] or [MINPACK.jl](https://github.com/sglyon/MINPACK.jl) for root-finding. Future extensions will incorporate homotopy continuation methods leveraging bifurcation analysis tools like [BifurcationKit.jl](https://github.com/bifurcationkit/BifurcationKit.jl) [@veltz:hal-02902346]. Currently, indirect methods are limited to Hamiltonian flows, where the feedback control law depends on both state and costate; support for non-Hamiltonian flows (open-loop or state-feedback control laws) is under active development.

- **Testing and quality assurance**: The multi-repository structure is matched by a layered testing strategy. Each sub-package is tested independently, combining unit tests, integration tests, and code-quality checks, while OptimalControl.jl adds strong end-to-end integration tests that solve complete optimal control problems by both direct and indirect methods. Continuous integration runs across Linux, macOS, and Windows, on both CPU and GPU (through a self-hosted CUDA runner), using reusable GitHub Actions workflows centralized in [CTActions](https://github.com/control-toolbox/CTActions) and shared across the ecosystem. Code coverage is tracked on Codecov, downstream packages and applications are guarded against regressions through dedicated breakage tests triggered on pull requests, and beta versions are distributed during development via a local registry, [ct-registry](https://github.com/control-toolbox/ct-registry). Non-regression on complex problems is increasingly driven by [OptimalControlProblems.jl](https://control-toolbox.org/OptimalControlProblems.jl), used as a curated problem bank.

Expand Down
Binary file modified joss/paper.pdf
Binary file not shown.
Loading