Skip to content

v2.0.0

Choose a tag to compare

@ocots ocots released this 07 Apr 08:58
· 63 commits to main since this release
2ba73c6

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_transcriptiondiscretize, set_initial_guess@init macro, build_OCP_solutionocp_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 (:cpu or :gpu)
  • Explicit GPU support via :gpu parameter with ExaModels + MadNLP/MadNCL
  • 5 solvers available: Ipopt, MadNLP, Uno, MadNCL, Knitro

Advanced Option Routing System

  • describe(strategy): Display available options for any strategy
  • route_to(strategy=option=>value): Disambiguate shared options between strategies
  • bypass(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 @init macro for constructing initial guesses
  • Alias init for initial_guess keyword 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=true feature 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 @init macro
  • 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