Releases: control-toolbox/OptimalControl.jl
v2.0.0
Release Notes - OptimalControl.jl v2.0.0
Major version release with complete solve architecture redesign. This release introduces breaking changes from v1.1.6 (last stable release).
Breaking Changes
- Removed functions:
direct_transcription→discretize,set_initial_guess→@initmacro,build_OCP_solution→ocp_solution - New solve architecture:
methods()now returns 4-tuples(discretizer, modeler, solver, parameter)with required GPU/CPU parameter - Changed exports: CTBase exceptions and CTFlows types reorganized (see BREAKING.md)
Major Features
Complete Solve Architecture Redesign
Two complementary solving modes:
- Descriptive mode:
solve(ocp, :collocation, :adnlp, :ipopt, :cpu)with symbolic strategy specification - Explicit mode:
solve(ocp; discretizer=Collocation(), modeler=ADNLP(), solver=Ipopt())with typed components - Partial specification: Auto-completion of missing strategies using first matching method
- Method introspection:
methods()lists all 12 available solving methods (10 CPU + 2 GPU)
GPU/CPU Parameter System
- 4th parameter in method tuples for execution backend (
:cpuor:gpu) - Explicit GPU support via
:gpuparameter with ExaModels + MadNLP/MadNCL - 5 solvers available: Ipopt, MadNLP, Uno, MadNCL, Knitro
Advanced Option Routing System
describe(strategy): Display available options for any strategyroute_to(strategy=option=>value): Disambiguate shared options between strategiesbypass(strategy=option=>value): Pass undeclared options to strategies- Automatic option routing to appropriate components
- Option introspection:
options(),option_names(),option_type(),option_description(),option_default()
Initial Guess with @init Macro
- New
@initmacro for constructing initial guesses - Alias
initforinitial_guesskeyword argument in solve - Replaces functional initial guess construction from v1.1.6
Control-Free Problems Support
- Optimal control problems without control variables
- Optimization of constant parameters in dynamical systems
- Augmented Hamiltonian approach:
augment=truefeature in CTFlows for automatic costate computation - Simplified flow creation:
Flow(ocp)directly creates Hamiltonian flow from control-free problems - Complete transversality conditions for variable parameters
Additional Discretization Schemes
- Basic schemes:
:trapeze,:midpoint,:euler,:euler_implicit - ADNLP-specific schemes:
:gauss_legendre_2,:gauss_legendre_3(high-order collocation)
Documentation
- Complete rewrite with new solve manual (descriptive/explicit modes)
- Advanced options guide with routing and disambiguation
- GPU solving guide
- Initial guess guide with
@initmacro - Differential geometry tools manual
- Control-free problems examples
Dependencies
- CTBase: 0.18.x (was 0.16-0.17)
- CTModels: 0.9.x (was 0.6.x)
- CTDirect: 1.x (was 0.x)
- CTSolvers: 0.4.x (new dependency)
- CTParser: 0.8.x
- CTFlows: 0.8.x
New dependency: CTSolvers.jl handles NLP modeling, solving, and strategy orchestration.
Migration Guide
For users migrating from v1.1.6, please consult BREAKING.md for detailed migration instructions and examples.
Notes
This release consolidates all beta versions (1.2.0-beta through 1.3.1-beta) into a stable 2.0.0 release. The comparison is made against v1.1.6, the last stable release before the architectural redesign.
PRs
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #674
- Adapt to CTModels v0.7.x and integrate CTSolvers by @ocots in #693
- Release/v1.1.9 beta by @ocots in #698
- added reexport ExaLinAlg by @jbcaillau in #703
- Release v1.2.2-beta by @jbcaillau in #708
- Gpu cpu parameter by @ocots in #714
- added explicit import of LinearAlgebra by @jbcaillau in #716
- Documentation by @ocots in #719
- Develop by @jbcaillau in #707
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #724
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #725
- Documentation by @ocots in #726
- feat: add Level 3 signature freezing tests for reexport API by @ocots in #728
- Develop by @ocots in #727
- Integrate Uno solver and add solver requirements documentation by @ocots in #730
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #731
- Modify timing to use CUDA and track GPU memory by @ocots in #732
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #733
- Add indirect method tests by @ocots in #736
- Add comprehensive CTFlows signature freezing tests by @ocots in #735
- Refactor canonical tests with separated modelers/solvers by @ocots in #737
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #738
- Review of the documentation by @ocots in #739
- Update documentation and test files for control-free example by @ocots in #740
- ci: disable CT registry for release v2 by @ocots in #741
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #742
- Update documentation for control-free problems by @ocots in #743
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #744
Full Changelog: v1.1.6...v2.0.0
v1.3.3-beta
What's Changed
- Develop by @ocots in #727
- Integrate Uno solver and add solver requirements documentation by @ocots in #730
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #731
- Modify timing to use CUDA and track GPU memory by @ocots in #732
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #733
Full Changelog: v1.3.2-beta...v1.3.3-beta
v1.3.2-beta
Full Changelog: v1.3.1-beta...v1.3.2-beta
v1.3.1-beta
Full Changelog: v1.3.0-beta...v1.3.1-beta
v1.3.0-beta
What's Changed
- added explicit import of LinearAlgebra by @jbcaillau in #716
- Documentation by @ocots in #719
- Develop by @jbcaillau in #707
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #724
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #725
- Documentation by @ocots in #726
- feat: add Level 3 signature freezing tests for reexport API by @ocots in #728
Full Changelog: v1.2.3-beta...v1.3.0-beta
v1.2.3-beta
v1.2.2-beta
What's Changed
- [AUTO] JuliaFormatter.jl run by @github-actions[bot] in #674
- Adapt to CTModels v0.7.x and integrate CTSolvers by @ocots in #693
- Release/v1.1.9 beta by @ocots in #698
- added reexport ExaLinAlg by @jbcaillau in #703
- Release v1.2.2-beta by @jbcaillau in #708
Full Changelog: v1.1.6...v1.2.2-beta
v1.1.6
OptimalControl v1.1.6
Merged pull requests:
- CompatHelper: bump compat for NLPModelsIpopt to 0.11 for package docs, (drop existing compat) (#662) (@github-actions[bot])
- [Bug] Max objective for exa (#665) (@ocots)
- Update CI.yml (#668) (@ocots)
- 670 doc rdnopa talk (#671) (@jbcaillau)
- Minor doc updates (#673) (@jbcaillau)
Closed issues:
v1.1.5
v1.1.4
OptimalControl v1.1.4
Merged pull requests:
- Update README (2025-09-28) with latest ABOUT.md, INSTALL.md, CONTRIBUTING.md and badges (#650) (@github-actions[bot])
- doc-juliacon-paris-2025 (#652) (@jbcaillau)
- Add columns math vs code (#657) (@ocots)
- feat: improve error handling for Plots.jl integration (#659) (@ocots)
Closed issues: