From d6b93af17c20328452aea9c47369a9d4753276e5 Mon Sep 17 00:00:00 2001 From: jbc Date: Thu, 17 Sep 2026 11:03:31 +0200 Subject: [PATCH 1/3] Fix wording and bibliography capitalization in JOSS paper Addresses reviewer comments from the JOSS review thread: fix "ODE's" to "ODEs" in the title, correct the GPOPS-II description (MATLAB-only, not MATLAB and C++), soften the shooting method convergence claim, reword the direct/indirect methods characterization as typical use cases, and protect "Julia" capitalization in four bibliography entries. Refs #957, openjournals/joss-reviews#10630 Co-Authored-By: Claude Sonnet 5 --- joss/paper.bib | 8 ++++---- joss/paper.md | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/joss/paper.bib b/joss/paper.bib index 7b3bad833..6abeb4774 100644 --- a/joss/paper.bib +++ b/joss/paper.bib @@ -1,7 +1,7 @@ @misc{caillau2023juliacon, author = {Caillau, Jean-Baptiste and Cots, Olivier and Gergaud, Joseph and Martinon, Pierre and Sed, Sophia}, - title = {On solving optimal control problems with Julia}, + title = {On solving optimal control problems with {Julia}}, year = {2023}, howpublished = {JuliaCon 2023, Cambridge, MA. Talk and abstract: \url{https://pretalx.com/juliacon2023/talk/HDC8F7/}. Video recording: \url{https://www.youtube.com/watch?v=RYUtVnzLj5k}} } @@ -17,7 +17,7 @@ @software{joss_oc_example } @article{rackauckas2017differentialequations, - title={Differentialequations.jl--a performant and feature-rich ecosystem for solving differential equations in julia}, + title={Differentialequations.jl--a performant and feature-rich ecosystem for solving differential equations in {Julia}}, author={Rackauckas, Christopher and Nie, Qing}, journal={Journal of Open Research Software}, volume={5}, @@ -454,14 +454,14 @@ @article{PlotsJL doi = {10.5334/jors.431}, url = {https://openresearchsoftware.metajnl.com/articles/10.5334/jors.431/}, author = {Christ, Simon and Schwabeneder, Daniel and Rackauckas, Christopher and Borregaard, Michael Krabbe and Breloff, Thomas}, - title = {Plots.jl -- a user extendable plotting API for the julia programming language}, + title = {Plots.jl -- a user extendable plotting API for the {Julia} programming language}, publisher = {Journal of Open Research Software}, year = {2023} } @article{pal2024nonlinearsolve, author = {Pal, Avik and Holtorf, Flemming and Larsson, Axel and Loman, Torkel and Utkarsh and Sch\"{a}fer, Frank and Qu, Qingyu and Edelman, Alan and Rackauckas, Chris}, - title = {NonlinearSolve.jl: High-Performance and Robust Solvers for Systems of Nonlinear Equations in Julia}, + title = {NonlinearSolve.jl: High-Performance and Robust Solvers for Systems of Nonlinear Equations in {Julia}}, year = {2025}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, diff --git a/joss/paper.md b/joss/paper.md index 1170dcfcf..ddbf52cc5 100644 --- a/joss/paper.md +++ b/joss/paper.md @@ -1,5 +1,5 @@ --- -title: "OptimalControl.jl: a Julia package to model and solve optimal control problems with ODE's" +title: "OptimalControl.jl: a Julia package to model and solve optimal control problems with ODEs" tags: - Julia - optimal control @@ -74,13 +74,13 @@ OptimalControl.jl requires Julia version 1.10 or later and is registered in the - **Legacy tools (COTCOT, HamPath, NutoPy)**: These Fortran packages excel at indirect methods and homotopy continuation but require multi-language setup (Fortran plus MATLAB / Python). OptimalControl.jl provides both direct and indirect methods in pure Julia with straightforward installation via package manager. -- **Direct-method tools (BOCOP, ACADO, GPOPS-II, acados, nosnoc)**: Strong direct-method implementations: [GPOPS-II](https://gpops2.com) delivers mature methods with MATLAB and C++ implementations but is proprietary; [acados](https://docs.acados.org) targets real-time MPC on embedded systems; [nosnoc](https://github.com/nosnoc/nosnoc) [@Nurkanovic2022] specializes in nonsmooth optimal control; [CasADi](https://web.casadi.org), used as symbolic backend by several of these tools, is a general NLP modeler rather than an optimal control solver. OptimalControl.jl offers an open-source alternative with expressive DSL, native Julia ecosystem integration, GPU support, and unified direct and indirect approaches. +- **Direct-method tools (BOCOP, ACADO, GPOPS-II, acados, nosnoc)**: Strong direct-method implementations: [GPOPS-II](https://gpops2.com) delivers mature methods with a MATLAB implementation but is proprietary; [acados](https://docs.acados.org) targets real-time MPC on embedded systems; [nosnoc](https://github.com/nosnoc/nosnoc) [@Nurkanovic2022] specializes in nonsmooth optimal control; [CasADi](https://web.casadi.org), used as symbolic backend by several of these tools, is a general NLP modeler rather than an optimal control solver. OptimalControl.jl offers an open-source alternative with expressive DSL, native Julia ecosystem integration, GPU support, and unified direct and indirect approaches. - **Julia packages**: [RobustAndOptimalControl.jl](https://juliacontrol.github.io/RobustAndOptimalControl.jl) targets linear systems; [QuantumControl.jl](https://juliaquantumcontrol.github.io/QuantumControl.jl), [Piccolo.jl](https://github.com/harmoniqs/Piccolo.jl) and [DirectTrajectoryOptimization.jl](https://github.com/thowell/DirectTrajectoryOptimization.jl) serve specific domains; [LinearMPC.jl](https://darnstrom.github.io/LinearMPC.jl/stable/) and [ModelPredictiveControl.jl](https://juliacontrol.github.io/ModelPredictiveControl.jl/stable/) focus on model predictive control. [InfiniteOpt.jl](https://infiniteopt.github.io/InfiniteOpt.jl) addresses a very rich range of problems, including optimization on PDEs or with chance constraints, focusing on direct transcription methods. OptimalControl.jl supports both CPU and GPU execution (currently NVIDIA-only, via [ExaModels.jl](https://github.com/exanauts/ExaModels.jl) + [MadNLP.jl](https://github.com/MadNLP/MadNLP.jl)), and adds tools to do shooting in a unified framework plus systematic benchmarking through [OptimalControlProblems.jl](https://control-toolbox.org/OptimalControlProblems.jl) and [CTBenchmarks.jl](https://control-toolbox.org/CTBenchmarks.jl). # Illustrative Example -A self-contained illustrative example is provided as a companion repository [@joss_oc_example], archived on Zenodo. It combines direct and indirect solution approaches for a constrained energy minimization problem: a direct method on a coarse grid identifies the three-arc structure (unconstrained–constrained–unconstrained) and initializes a shooting method based on Pontryagin's Maximum Principle, which then converges to arbitrary precision. +A self-contained illustrative example is provided as a companion repository [@joss_oc_example], archived on Zenodo. It combines direct and indirect solution approaches for a constrained energy minimization problem: a direct method on a coarse grid identifies the three-arc structure (unconstrained–constrained–unconstrained) and initializes a shooting method based on Pontryagin's Maximum Principle, which then converges to a prescribed numerical tolerance. # Software Design @@ -104,7 +104,7 @@ The package architecture balances expressiveness, performance, and extensibility 2. **GPU acceleration strategy**: The modeler-solver separation enables a straightforward CPU-to-GPU transition. Users select the [ExaModels](https://github.com/exanauts/ExaModels.jl) modeler with [MadNLP](https://github.com/MadNLP/MadNLP.jl) and the [CUDSS](https://github.com/exanauts/CUDSS.jl) linear solver for GPU execution, or simply append the `:gpu` token to the `solve` call. This modular approach minimizes maintenance burden while enabling GPU performance without reimplementing transcription logic. GPU support is currently limited to NVIDIA hardware and to the [ExaModels](https://github.com/exanauts/ExaModels.jl) + [MadNLP](https://github.com/MadNLP/MadNLP.jl) modeler-solver combination. -3. **Method coverage**: Supporting both direct and indirect approaches increases code complexity but serves distinct user needs: direct methods for constrained problems with many variables, indirect methods for theoretical analysis and smaller problems requiring high accuracy. Both approaches rely on iterative solvers and may or may not converge, *e.g.*, depending on the initial guess. In the case of optimization solvers, the full output status of the solver is returned allowing *a posteriori* analysis. +3. **Method coverage**: Supporting both direct and indirect approaches increases code complexity but serves distinct user needs: direct methods are typically preferred for constrained problems with many variables, while indirect methods are typically favored for theoretical analysis and smaller problems requiring high accuracy. Both approaches rely on iterative solvers and may or may not converge, *e.g.*, depending on the initial guess. In the case of optimization solvers, the full output status of the solver is returned allowing *a posteriori* analysis. # Research Impact Statement From bcca5381c660e2079314c27fbbc0fa613d9f3ba3 Mon Sep 17 00:00:00 2001 From: jbc Date: Thu, 17 Sep 2026 11:11:05 +0200 Subject: [PATCH 2/3] Tweak figure caption wording Co-Authored-By: Claude Sonnet 5 --- joss/paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/joss/paper.md b/joss/paper.md index ddbf52cc5..f0f4ff37e 100644 --- a/joss/paper.md +++ b/joss/paper.md @@ -44,7 +44,7 @@ archive_doi: 10.5281/zenodo.13336563 [OptimalControl.jl](https://control-toolbox.org/OptimalControl.jl) [@OptimalControl_jl] is a Julia [@Bezanson2017] package for modeling and solving optimal control problems governed by ordinary differential equations (ODEs). As the core of the [control-toolbox ecosystem](https://control-toolbox.org), it provides a unified framework that supports both direct and indirect solution methods with applications spanning aerospace, medical imaging, epidemiology, and quantum control. -![Logo of OptimalControl.jl.](figures/logo-oc.svg){#fig:logo width=25%} +![OptimalControl.jl logo.](figures/logo-oc.svg){#fig:logo width=25%} The package features an expressive domain-specific language (DSL) built around the `@def` macro, enabling users to define control problems using notation that closely resembles standard mathematical formulations. Problems are solved through direct transcription, converting the continuous problem into a nonlinear program (NLP) using discretization schemes including Euler, trapezoidal, midpoint, and high-order Gauss-Legendre collocation. Alternatively, indirect shooting methods based on Pontryagin's Maximum Principle can be employed. The architecture relies on a modeler-solver separation that provides a modular and extensible foundation, enabling GPU execution (currently limited to NVIDIA hardware) with minimal user intervention alongside standard CPU solvers. From 94e86b7235d6a927c168c054cbb2c6070d42a19e Mon Sep 17 00:00:00 2001 From: jbc Date: Thu, 17 Sep 2026 11:37:28 +0200 Subject: [PATCH 3/3] minor fix --- joss/paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/joss/paper.md b/joss/paper.md index f0f4ff37e..f42a7d627 100644 --- a/joss/paper.md +++ b/joss/paper.md @@ -74,7 +74,7 @@ OptimalControl.jl requires Julia version 1.10 or later and is registered in the - **Legacy tools (COTCOT, HamPath, NutoPy)**: These Fortran packages excel at indirect methods and homotopy continuation but require multi-language setup (Fortran plus MATLAB / Python). OptimalControl.jl provides both direct and indirect methods in pure Julia with straightforward installation via package manager. -- **Direct-method tools (BOCOP, ACADO, GPOPS-II, acados, nosnoc)**: Strong direct-method implementations: [GPOPS-II](https://gpops2.com) delivers mature methods with a MATLAB implementation but is proprietary; [acados](https://docs.acados.org) targets real-time MPC on embedded systems; [nosnoc](https://github.com/nosnoc/nosnoc) [@Nurkanovic2022] specializes in nonsmooth optimal control; [CasADi](https://web.casadi.org), used as symbolic backend by several of these tools, is a general NLP modeler rather than an optimal control solver. OptimalControl.jl offers an open-source alternative with expressive DSL, native Julia ecosystem integration, GPU support, and unified direct and indirect approaches. +- **Direct-method tools (BOCOP, ACADO, GPOPS-II, acados, nosnoc)**: Strong direct-method implementations: [GPOPS-II](https://gpops2.com) delivers mature methods with a MATLAB implementation but is proprietary (see also [CGPOPS](https://gpops2.com) for a C++ implementation); [acados](https://docs.acados.org) targets real-time MPC on embedded systems; [nosnoc](https://github.com/nosnoc/nosnoc) [@Nurkanovic2022] specializes in nonsmooth optimal control; [CasADi](https://web.casadi.org), used as symbolic backend by several of these tools, is a general NLP modeler rather than an optimal control solver. OptimalControl.jl offers an open-source alternative with expressive DSL, native Julia ecosystem integration, GPU support, and unified direct and indirect approaches. - **Julia packages**: [RobustAndOptimalControl.jl](https://juliacontrol.github.io/RobustAndOptimalControl.jl) targets linear systems; [QuantumControl.jl](https://juliaquantumcontrol.github.io/QuantumControl.jl), [Piccolo.jl](https://github.com/harmoniqs/Piccolo.jl) and [DirectTrajectoryOptimization.jl](https://github.com/thowell/DirectTrajectoryOptimization.jl) serve specific domains; [LinearMPC.jl](https://darnstrom.github.io/LinearMPC.jl/stable/) and [ModelPredictiveControl.jl](https://juliacontrol.github.io/ModelPredictiveControl.jl/stable/) focus on model predictive control. [InfiniteOpt.jl](https://infiniteopt.github.io/InfiniteOpt.jl) addresses a very rich range of problems, including optimization on PDEs or with chance constraints, focusing on direct transcription methods. OptimalControl.jl supports both CPU and GPU execution (currently NVIDIA-only, via [ExaModels.jl](https://github.com/exanauts/ExaModels.jl) + [MadNLP.jl](https://github.com/MadNLP/MadNLP.jl)), and adds tools to do shooting in a unified framework plus systematic benchmarking through [OptimalControlProblems.jl](https://control-toolbox.org/OptimalControlProblems.jl) and [CTBenchmarks.jl](https://control-toolbox.org/CTBenchmarks.jl).