diff --git a/docs/src/manual-flow-ocp.md b/docs/src/manual-flow-ocp.md index 7df91da0..10f5c224 100644 --- a/docs/src/manual-flow-ocp.md +++ b/docs/src/manual-flow-ocp.md @@ -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. diff --git a/joss/paper.md b/joss/paper.md index 11b12a45..e9c043d9 100644 --- a/joss/paper.md +++ b/joss/paper.md @@ -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. diff --git a/joss/paper.pdf b/joss/paper.pdf index 73882ea3..27f793e9 100644 Binary files a/joss/paper.pdf and b/joss/paper.pdf differ