|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to **OptimalControl.jl** are documented here. |
| 4 | + |
| 5 | +The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). |
| 6 | +Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## [Unreleased] — branch `action-options` |
| 11 | + |
| 12 | +### Added |
| 13 | + |
| 14 | +- **Action options routing**: `initial_guess` and `display` are now routed through |
| 15 | + `CTSolvers.route_all_options`, enabling alias support and a cleaner separation of |
| 16 | + concerns between action-level and strategy-level options. |
| 17 | +- **Alias `init`** for `initial_guess` in all solve modes: |
| 18 | + ```julia |
| 19 | + solve(ocp, :collocation; init=x0) |
| 20 | + ``` |
| 21 | +- **`_extract_action_kwarg`** helper in `src/helpers/kwarg_extraction.jl`: alias-aware |
| 22 | + extraction with conflict detection (raises `CTBase.IncorrectArgument` when two aliases |
| 23 | + are provided simultaneously). |
| 24 | +- **DRY constants** in `src/helpers/descriptive_routing.jl`: |
| 25 | + - `_DEFAULT_DISPLAY = true` |
| 26 | + - `_DEFAULT_INITIAL_GUESS = nothing` |
| 27 | + - `_INITIAL_GUESS_ALIASES_ONLY = (:init,)` — used in `OptionDefinition` |
| 28 | + - `_INITIAL_GUESS_ALIASES = (:initial_guess, :init)` — used in `_extract_action_kwarg` |
| 29 | +- **Docstring** for the Layer 3 `CommonSolve.solve` method in `src/solve/canonical.jl`. |
| 30 | + |
| 31 | +### Changed |
| 32 | + |
| 33 | +- `CommonSolve.solve` top-level signature simplified: `initial_guess` and `display` are |
| 34 | + no longer explicit named arguments — they are extracted from `kwargs...` by the routing |
| 35 | + layer. |
| 36 | +- `solve_descriptive` no longer accepts `initial_guess` and `display` as explicit named |
| 37 | + arguments; they are extracted from `kwargs...` via `_build_components_from_routed`. |
| 38 | +- `solve_explicit` extracts `initial_guess` (with alias `init`) and `display` from |
| 39 | + `kwargs...` using `_extract_action_kwarg`. |
| 40 | +- `_build_components_from_routed` now receives `ocp` as first argument to call |
| 41 | + `CTModels.build_initial_guess`. |
| 42 | + |
| 43 | +### Removed |
| 44 | + |
| 45 | +- Alias `:i` for `initial_guess` (too short, risk of collision with user variables). |
| 46 | + |
| 47 | +--- |
| 48 | + |
| 49 | +## [1.1.8-beta] — 2026-01-17 |
| 50 | + |
| 51 | +### Changed |
| 52 | + |
| 53 | +- Widened compat for **CTParser** to accept `0.7` and `0.8` (preparation for CTParser |
| 54 | + v0.8.x migration, tracked in control-toolbox/CTParser.jl#207). |
| 55 | +- Widened compat for **CTBase** to accept `0.16` and `0.17`. |
| 56 | + |
| 57 | +--- |
| 58 | + |
| 59 | +## [1.1.7-beta] — 2026-01-17 |
| 60 | + |
| 61 | +### Changed |
| 62 | + |
| 63 | +- Added compat for **CTBase v0.17**. |
| 64 | +- Merged test dependencies into the main `Project.toml` (previously in a separate |
| 65 | + `test/Project.toml`). |
| 66 | + |
| 67 | +--- |
| 68 | + |
| 69 | +## [1.1.6] — 2025-10-31 |
| 70 | + |
| 71 | +### Added |
| 72 | + |
| 73 | +- **`RecipesBase`** added as a direct dependency, enabling plot recipes for solutions |
| 74 | + without requiring `Plots.jl` to be loaded. |
| 75 | + |
| 76 | +### Fixed |
| 77 | + |
| 78 | +- Improved error handling for the `Plots.jl` extension: a clear `CTBase.IncorrectArgument` |
| 79 | + is now raised when plotting is attempted without `Plots.jl` loaded (#653). |
| 80 | +- Fixed maximisation objective sign for ExaModels backend (#663). |
| 81 | +- Replaced `Minpack` by `NonlinearSolve` in the shooting extension. |
| 82 | + |
| 83 | +### Changed |
| 84 | + |
| 85 | +- Bumped compat for **NLPModelsIpopt** to `0.11`. |
| 86 | + |
| 87 | +--- |
| 88 | + |
| 89 | +## [1.1.5] — 2025-10-23 |
| 90 | + |
| 91 | +### Added |
| 92 | + |
| 93 | +- AI assistant buttons in the documentation to try examples interactively. |
| 94 | +- Spell-check CI workflow (`SpellCheck.yml`). |
| 95 | + |
| 96 | +--- |
| 97 | + |
| 98 | +## [1.1.4] — 2025-10-05 |
| 99 | + |
| 100 | +### Fixed |
| 101 | + |
| 102 | +- Improved error handling for the `Plots.jl` extension (#653): raises a descriptive |
| 103 | + error instead of a cryptic `MethodError` when `Plots` is not loaded. |
| 104 | + |
| 105 | +### Added |
| 106 | + |
| 107 | +- JuliaCon Paris 2025 documentation page. |
| 108 | +- Responsive CSS columns (math vs code) in documentation. |
| 109 | + |
| 110 | +--- |
| 111 | + |
| 112 | +## [1.1.3] — 2025-09-25 |
| 113 | + |
| 114 | +### Added |
| 115 | + |
| 116 | +- Documentation for AI-assisted problem description generation (`manual-ai-ded.md`). |
| 117 | +- Documentation for GPU solving (`manual-solve-gpu.md` update). |
| 118 | +- Usage of `MadNLPMumps` in documentation examples. |
| 119 | + |
| 120 | +--- |
| 121 | + |
| 122 | +## [1.1.2] — 2025-09-25 |
| 123 | + |
| 124 | +### Added |
| 125 | + |
| 126 | +- **Trapeze scheme** support via CTDirect v0.17 (`scheme=:trapeze`). |
| 127 | +- **ExaModels v0.9** compat. |
| 128 | +- Indirect method examples in documentation. |
| 129 | +- Detailed solver options documentation. |
| 130 | + |
| 131 | +### Changed |
| 132 | + |
| 133 | +- Bumped compat for **CTDirect** to `0.17`. |
| 134 | +- Bumped compat for **CTParser** to `0.7`. |
| 135 | +- Default scheme documented explicitly. |
| 136 | + |
| 137 | +--- |
| 138 | + |
| 139 | +## [1.1.1] — 2025-08-06 |
| 140 | + |
| 141 | +### Changed |
| 142 | + |
| 143 | +- Bumped compat for **ExaModels** to `0.9`. |
| 144 | +- Updated GPU solve documentation. |
| 145 | + |
| 146 | +--- |
| 147 | + |
| 148 | +## [1.1.0] — 2025-08-05 |
| 149 | + |
| 150 | +### Added |
| 151 | + |
| 152 | +- **`ADNLPModels`** and **`ExaModels`** added as direct dependencies, enabling GPU |
| 153 | + solving via ExaModels backend out of the box. |
| 154 | +- GPU solving documentation (`manual-solve-gpu.md`). |
| 155 | +- Export of `dual` function. |
| 156 | +- Flow with state constraints support (CTFlows update). |
| 157 | +- Non-autonomous flow tutorial. |
| 158 | +- `display` option for `solve`: shows a compact configuration table before solving. |
| 159 | +- MadNLP solver added to the registry and available methods. |
| 160 | +- Documentation for the `solve` function arguments (tutorial-solve.md). |
| 161 | +- Manual pages for OCP model interaction and solution inspection. |
| 162 | +- JLESC17 and JuliaCon 2025 conference documentation. |
| 163 | + |
| 164 | +### Changed |
| 165 | + |
| 166 | +- Bumped compat for **CTBase** to `0.16`. |
| 167 | +- Bumped compat for **CTDirect** to `0.16`. |
| 168 | +- Bumped compat for **CTModels** to `0.6`. |
| 169 | +- Bumped compat for **CTParser** to `0.6`. |
| 170 | +- Bumped compat for **ADNLPModels** to `0.8`. |
| 171 | +- Bumped compat for **ExaModels** to `0.8`. |
| 172 | + |
| 173 | +--- |
| 174 | + |
| 175 | +## [1.0.3] — 2025-05-08 |
| 176 | + |
| 177 | +### Changed |
| 178 | + |
| 179 | +- Bumped compat for **CTModels** to `0.3`. |
| 180 | +- Bumped compat for **CTBase** to `0.16`. |
| 181 | +- Removed tutorials from the documentation (moved to separate repositories). |
| 182 | +- Pretty URLs in documentation. |
| 183 | + |
| 184 | +--- |
| 185 | + |
| 186 | +## [1.0.2] — 2025-05-05 |
| 187 | + |
| 188 | +### Changed |
| 189 | + |
| 190 | +- Renamed `export`/`import` keyword (internal change following CTBase update). |
| 191 | +- Bumped compat for **CTBase**. |
| 192 | +- Added `Breakage.yml` CI workflow. |
| 193 | + |
| 194 | +--- |
| 195 | + |
| 196 | +## [1.0.1] — 2025-05-04 |
| 197 | + |
| 198 | +### Added |
| 199 | + |
| 200 | +- Scalar vs dimension-one variable handling improvement (#478). |
| 201 | +- Documentation updates: dependency graph, tutorials, README. |
| 202 | + |
| 203 | +### Fixed |
| 204 | + |
| 205 | +- Typo in tutorial (#475, @oameye). |
| 206 | + |
| 207 | +--- |
| 208 | + |
| 209 | +## [1.0.0] — 2025-04-18 |
| 210 | + |
| 211 | +Initial stable release. |
| 212 | + |
| 213 | +### Dependencies |
| 214 | + |
| 215 | +| Package | Compat | |
| 216 | +|---|---| |
| 217 | +| CTBase | 0.15 | |
| 218 | +| CTDirect | 0.14 | |
| 219 | +| CTFlows | 0.8 | |
| 220 | +| CTModels | 0.2 | |
| 221 | +| CTParser | 0.2 | |
| 222 | +| CommonSolve | 0.2 | |
| 223 | +| Julia | ≥ 1.10 | |
| 224 | + |
| 225 | +--- |
| 226 | + |
| 227 | +## Breaking Changes Summary |
| 228 | + |
| 229 | +This section summarises all breaking changes since v1.0.0 for users upgrading across |
| 230 | +multiple versions. |
| 231 | + |
| 232 | +### v1.2.0-beta (current `action-options` branch) |
| 233 | + |
| 234 | +- **`solve` signature change**: `initial_guess` and `display` are no longer positional |
| 235 | + or explicitly named keyword arguments in the top-level `CommonSolve.solve`, |
| 236 | + `solve_descriptive`, and `solve_explicit`. They are now extracted from `kwargs...`. |
| 237 | + Existing call sites using `solve(ocp; initial_guess=x0, display=false)` continue to |
| 238 | + work unchanged — only internal dispatch signatures changed. |
| 239 | +- **Alias `:i` removed**: `solve(ocp; i=x0)` now raises `CTBase.IncorrectArgument`. |
| 240 | + Use `init=x0` or `initial_guess=x0` instead. |
| 241 | + |
| 242 | +### v1.1.0 |
| 243 | + |
| 244 | +- **CTBase v0.16 required** (from v0.15): users of CTBase directly may need to update. |
| 245 | +- **CTModels v0.6 required** (from v0.2–v0.3): significant internal API changes in |
| 246 | + CTModels; users relying on internal CTModels types should review the CTModels changelog. |
| 247 | +- **CTParser v0.6 required** (from v0.2): parser API updated. |
| 248 | +- **CTDirect v0.16 required** (from v0.14): discretization API updated. |
| 249 | +- **`ADNLPModels` and `ExaModels` are now direct dependencies**: they will be installed |
| 250 | + automatically. This should not break existing code but increases installation size. |
| 251 | + |
| 252 | +### v1.0.2 |
| 253 | + |
| 254 | +- **`export`/`import` keyword renamed**: if you used `export=...` or `import=...` as |
| 255 | + keyword arguments to any OptimalControl function, rename to the new keyword (see |
| 256 | + CTBase changelog for details). |
| 257 | + |
| 258 | +[Unreleased]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.8-beta...HEAD |
| 259 | +[1.1.8-beta]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.7-beta...v1.1.8-beta |
| 260 | +[1.1.7-beta]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.6...v1.1.7-beta |
| 261 | +[1.1.6]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.5...v1.1.6 |
| 262 | +[1.1.5]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.4...v1.1.5 |
| 263 | +[1.1.4]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.3...v1.1.4 |
| 264 | +[1.1.3]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.2...v1.1.3 |
| 265 | +[1.1.2]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.1...v1.1.2 |
| 266 | +[1.1.1]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.1.0...v1.1.1 |
| 267 | +[1.1.0]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.3...v1.1.0 |
| 268 | +[1.0.3]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.2...v1.0.3 |
| 269 | +[1.0.2]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.1...v1.0.2 |
| 270 | +[1.0.1]: https://github.com/control-toolbox/OptimalControl.jl/compare/v1.0.0...v1.0.1 |
| 271 | +[1.0.0]: https://github.com/control-toolbox/OptimalControl.jl/releases/tag/v1.0.0 |
0 commit comments