Skip to content

[General] JOSS paper review #803

Closed
Closed

Description

@tmigot

Thank you for the paper. I found it strong and well written overall, and the package looks like a very valuable contribution to the Julia optimal-control ecosystem. I have a few minor comments/suggestions that could help improve clarity and consistency.

  • Make the styling/linking of .jl packages uniform.
    Some packages appear with links/citations while others do not, e.g., DifferentiationInterface.jl and ForwardDiff.jl. It would be nice to make the formatting consistent and, when possible, hyperlink or cite all mentioned .jl packages.

  • Add a citation for MINPACK.
    MINPACK.jl/MINPACK is mentioned in the indirect-methods paragraph, but I did not see a corresponding citation.

  • Check the companion example citation/version.
    The illustrative example seems to refer to the companion repository:
    https://github.com/control-toolbox/joss-oc-example
    Please check that the citation in the paper points to the correct archived version. I believe it may need to be updated from v1.0.0 to v1.0.1.

  • Add or repeat the Ipopt citation in the “Modelers and solvers” paragraph.
    In the paragraph listing NLP solvers, it may be useful to cite Ipopt directly there as well, not only NLPModelsIpopt.jl.

  • Clarify the exact class of optimal control problems currently supported.
    The title says “optimal control problems with ODEs,” which is clear, but the paper would benefit from a compact summary of the mathematical problem class supported by the package. For example, could the authors clarify whether the current implementation supports:

    • fixed and free final time;
    • endpoint constraints;
    • path constraints;
    • box constraints on states and controls;
    • Mayer, Lagrange, and/or Bolza costs;
    • autonomous and non-autonomous dynamics;
    • multiphase problems;
    • DAEs or only explicit ODEs;
    • hybrid/nonsmooth systems.

    Some of these points may be obvious to optimal-control specialists, but for a broader JOSS readership it would be helpful to make the supported scope explicit.

Activity

  1. jbcaillau commented on Jul 27, 2026

    @jbcaillau
    Member

    Thank you @tmigot for these constructive remarks, and for the kind words on the paper. All five points are addressed in #813 (draft PR into the joss branch), which now collects our answers to all of your review issues. Point by point below.


    1. Make the styling/linking of .jl packages uniform ✅

    You were right that this was inconsistent. We have now settled on an explicit convention and applied it throughout the paper:

    every package or tool is hyperlinked at each of its occurrences, and carries its bibliography tag [@key] only at the first occurrence.

    Concretely:

    • Hyperlinks added where they were missing: ForwardDiff.jl and DifferentiationInterface.jl (the two you pointed at), plus NonlinearSolve.jl, NLPModelsIpopt.jl, Knitro, InfiniteOpt.jl, JuMP, ADNLPModels, ExaModels, MadNLP, CUDSS, and every package named in the Julia packages bullet of State of the Field (RobustAndOptimalControl.jl, QuantumControl.jl, Piccolo.jl, DirectTrajectoryOptimization.jl, OptimalControlProblems.jl, CTBenchmarks.jl, …), which were previously bare.
    • Duplicated citation tags removed, keeping each at its first occurrence only: @Patterson2014, @Verschueren2021, @Andersson2019, @arnstrom2022daqp, @Gagnon_*, @pulsipher2022unifying, @QuantumControl_jl, @shin2023accelerating, @SHIN2024110651, @SHIN2021693, @ADNLPModels_jl, @OptimalControlProblems_jl, @Wachter2006, @rackauckas2017differentialequations.
    • QuantumControl.jl is now cited. Checking the bibliography for this point turned up that the QuantumControl_jl entry was present in paper.bib but never used — thanks for prompting the audit.

    The only names deliberately left unlinked are those inside the bold bullet labels of State of the Field (**Legacy tools (COTCOT, HamPath, NutoPy)**, **Direct-method tools (BOCOP, ACADO, GPOPS-II, acados, nosnoc)**); these are enumerations announcing the topic of the bullet, and each tool is hyperlinked in the bullet body.

    2. Add a citation for MINPACK ✅

    Added, and cited at the MINPACK.jl mention in the Indirect methods paragraph:

    Moré, J. J., Garbow, B. S. and Hillstrom, K. E., User Guide for MINPACK-1, Report ANL-80-74, Argonne National Laboratory, 1980. doi:10.2172/6997568

    3. Companion example citation / version ✅

    Good catch — the entry did point at v1.0.0, while v1.0.1 was released on 2026-06-11. Rather than bumping to the v1.0.1 version DOI, we switched the reference to the Zenodo all-versions (concept) DOI:

    10.5281/zenodo.19663649

    which always resolves to the latest release of joss-oc-example and therefore cannot go stale again. The now-misleading version field was dropped from the BibTeX entry.

    4. Add or repeat the Ipopt citation in the "Modelers and solvers" paragraph ✅ (adapted)

    IPOPT is now hyperlinked in that paragraph, so a reader landing there reaches the solver directly.

    We did not repeat the [@Wachter2006] tag there, though: IPOPT is already cited in the Summary, and repeating the tag would contradict the convention adopted in point 1 above — which we apply to every other tool in the paper, including CasADi, GPOPS-II and acados, whose duplicated tags we removed. We hope the hyperlink meets the intent of your comment; happy to reinstate the repeated tag if you would rather have it.

    5. Clarify the exact class of optimal control problems currently supported ✅

    We agree this was missing for a general readership. The paper now has a compact Problem Class section, right after the Summary, giving the Bolza formulation

    $$g(t_0, x(t_0), t_f, x(t_f), v) + \int_{t_0}^{t_f} f^0(t, x(t), u(t), v), \mathrm{d}t \longrightarrow \min$$

    subject to $\dot{x}(t) = f(t, x(t), u(t), v)$, followed by an explicit statement of scope. Answering your checklist directly (each item verified against docs/src/manual-abstract.md):

    Feature Supported?
    Fixed and free final time ✅ — the time bounds may be fixed or be components of the optimisation variable v, which also covers free initial time and minimum time problems
    Endpoint constraints ✅ — boundary constraints
    Path constraints ✅ — state, control, and mixed (control and state), imposed at all times
    Box constraints on states and controls ✅ — and on the variable; linear range constraints are passed as dedicated bounds to the NLP solver
    Mayer, Lagrange and/or Bolza costs ✅ — Bolza is the general form, Mayer (f⁰ = 0) and Lagrange (g = 0) the special cases; maximisation is handled by minimising the opposite cost
    Autonomous and non-autonomous dynamics ✅ — the dependences are detected by the parser
    Multiphase problems ❌ — single phase only
    DAEs or only explicit ODEs ❌ — explicit ODEs only
    Hybrid / nonsmooth systems ❌

    Constraints may be equalities or one- or two-sided inequalities, linear or nonlinear, and the variable may appear in any of them. The section also makes the optimisation variable v explicit — a finite-dimensional parameter optimised together with the trajectory — which is part of the supported class but had no counterpart in your list.


    The regenerated PDF is committed on the PR branch by our Compile JOSS paper workflow. Your remaining issue #805 will be addressed in the same PR.

  2. ocots commented on Aug 1, 2026

    @ocots
    Member

    @tmigot Merged in #762.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions