Releases: harmoniqs/DirectTrajOpt.jl
Releases · harmoniqs/DirectTrajOpt.jl
Release list
v0.9.7
DirectTrajOpt v0.9.7
Changes
- Ipopt solver backend now supports
AbstractIntermediateCallbackvia a newIpoptOptions.intermediate_callbackfield, matching existing MadNLP support. - Added
GlobalLinearConstraintfor linear relations/bounds on a global block, with infeasible-row detection and sparsity preservation. - Added a
KnotHVPtrait/field to the objectives API, threaded through constructors.
Merged pull requests:
- chore(deps): bump julia-actions/cache from 2 to 3 (#105) (@dependabot[bot])
- chore(deps): bump actions/upload-artifact from 4 to 7 (#106) (@dependabot[bot])
- chore(deps): bump codecov/codecov-action from 6 to 7 (#107) (@dependabot[bot])
- chore(deps): bump julia-actions/setup-julia from 2 to 3 (#108) (@dependabot[bot])
- feat: GlobalLinearConstraint — linear relations/bounds on a global block (#111) (@krish-suresh)
- Wire AbstractIntermediateCallback into the Ipopt backend (0.2a) (#114) (@Rchari1)
- KnotHVP trait, field, added to DTO API; threaded through constructors (#115) (@gennadiryan)
- Revert "KnotHVP trait, field, added to DTO API; threaded through constructors" (#116) (@gennadiryan)
- Merge remote-tracking branch 'origin/main' into feat/matrix-free-obj-constr (fixing clobbered workflow updates) (#117) (@gennadiryan)
- chore: bump version to 0.9.7 (#118) (@jack-champagne)
Closed issues:
- Add a
KnotHVPcapability interface: objectives can declare a matrix-free per-knot HVP (#113)
v0.9.6
DirectTrajOpt v0.9.6
Changes
- No functional or API changes to the solver — maintenance release covering benchmarking and documentation infrastructure.
Added
- CI benchmark suites (Ipopt vs MadNLP): full-solve timing, evaluator micro-benchmarks, memory scaling, an allocation profile, and a convergence suite — each publishing a live gh-pages dashboard on tagged releases.
- A documented Benchmarks page in the docs.
Merged pull requests:
- benchmarks: Initial DirectTrajOpt benchmark suite (Ipopt vs MadNLP) (#75) (@jack-champagne)
- benchmarks: convergence suite v1 (Ipopt + MadNLP on X gate) (#93) (@jack-champagne)
- benchmark: alloc profile suite (Ipopt + MadNLP) (#101) (@jack-champagne)
- ci(benchmarks): publish dashboards on v* tags (fix never-publishing gate) (#102) (@jack-champagne)
- ci+docs(benchmarks): run suites on Julia 1.12 + refresh page data (#103) (@jack-champagne)
- ci(alloc): bump alloc-profile timeout to 120 min (1.12 is slower) (#104) (@jack-champagne)
- benchmark(convergence): capture MadNLP iteration count (+bump 0.9.6) (#109) (@jack-champagne)
- chore: autoformat convergence.jl (#110) (@jack-champagne)
v0.9.5
DirectTrajOpt v0.9.5
Changes
- Added solver-agnostic
AbstractIntermediateCallbackabstract type for per-iteration hooks during a solve. MadNLPOptionsnow acceptsintermediate_callback(subtype ofAbstractIntermediateCallbackorMadNLP.AbstractUserCallback) andfixed_variable_treatmentfields.- Reduced per-iteration allocations during NLP objective/jacobian/hessian assembly via trajectory datavec caching.
Merged pull requests:
- ci: gate force_latest_compatible_version to Julia 1.12 (#91) (@jack-champagne)
- ci: gate JET correctness analysis to Julia 1.12.x only (#94) (@jack-champagne)
- ci: allow nightly Julia job to fail without blocking (#96) (@jack-champagne)
- Trajectory datavec now cached during NLP obj/jac/hess assembly callbacks, leaving only constant allocation overhead (#97) (@gennadiryan)
- feat(madnlp): expose intermediate_callback + fixed_variable_treatment (#98) (@jack-champagne)
- bump: v0.9.5 (#99) (@jack-champagne)
v0.9.4
DirectTrajOpt v0.9.4
Changes
- Solver: bumped Ipopt
diverging_iterates_toldefault from1e8to1e20, matching Ipopt's native default. Avoids false-positive "Iterates diverging" exits on smooth-pulse NLPs whose unscaled second derivatives legitimately reach O(1e8). - Compat: NamedTrajectories
0.9is now supported alongside0.8.
Merged pull requests:
- fix(docs): use POSIX [[:space:]] in get_docs_utils.sh for BSD sed (#84) (@jack-champagne)
- chore(ci): retire CompatHelper, switch to Dependabot for Julia + Actions (#85) (@jack-champagne)
- solver(ipopt): bump diverging_iterates_tol default 1e8 → 1e20 (#86) (@jack-champagne)
- ci: add Aqua.jl and JET.jl to test suite (#87) (@jack-champagne)
- fix: address Aqua and JET findings (#88) (@jack-champagne)
- Update NamedTrajectories requirement from 0.8 to 0.8, 0.9 (#90) (@dependabot[bot])
v0.9.3
DirectTrajOpt v0.9.3
Added
fix_global_variable!(constraints, name, value)— companion tofix_trajectory_variable!for pinning time-invariant global variables. Removes any existingBoundsConstraint/EqualityConstrainton the same global to avoid MOI conflicts (anEqualToset cannot coexist withGreaterThan/LessThanon the same variable). AcceptsAbstractVector{<:Real}.
Merged pull requests:
- Chore/coverage improvements (#73) (@gennadiryan)
- feat: add fix_global_variable! for time-invariant globals (#82) (@nguyenston)
- chore: bump version to 0.9.3 (#83) (@nguyenston)
v0.9.2
DirectTrajOpt v0.9.2
Merged pull requests:
- Version bump to v0.9.2; add back in previously removed support for SciMLBase v2 (#81) (@gennadiryan)
v0.9.1
DirectTrajOpt v0.9.1
Merged pull requests:
- Bump codecov/codecov-action from 5 to 6 (#65) (@dependabot[bot])
- benchmarks: Initial DirectTrajOpt benchmark suite (Ipopt vs MadNLP) (#67) (@jack-champagne)
- Bump julia-actions/setup-julia from 2 to 3 (#72) (@dependabot[bot])
- Add MadNLP pass-through fields (linear_solver, array_type, etc.) (#74) (@jack-champagne)
- CompatHelper: bump compat for OrdinaryDiffEqTsit5 to 2, (keep existing compat) (#77) (@github-actions[bot])
- feat: add fix_global_variable! helper for integrator-agnostic global pinning (#78) (@aarontrowbridge)
- Version bump v0.9.1 (#80) (@gennadiryan)
v0.9.0
DirectTrajOpt v0.9.0
Changes
solve!now dispatches onAbstractSolverOptionsrather than concreteIpoptOptions, allowing multiple solver backends behind a single interface.- Solver module restructured:
evaluator.jland constraint utilities moved from the Ipopt-specific extension into the coreSolverssubmodule and shared between solvers. - Default solver options type (
_DefaultSolverOptions) is now settable at load time; defaults toIpoptOptionswith Ipopt reexported as before.
Added
- MadNLP support via package extension (
MadNLPSolverExt), loaded automatically whenMadNLPis present. MadNLP is now a[weakdeps], not a hard dependency. MadNLPOptionsstruct, accessible from the top-levelDirectTrajOptmodule without loading the extension.- Passthrough for MadNLP-specific solver kwargs (
kkt_system,linear_solver, etc.), enabling GPU solves. - New public exports:
AbstractOptimizer,DefaultSolverOptions,_solve,_solve_with_kwargs. solve!(prob; options=MadNLPOptions(), kwargs...)public API for solving with MadNLP.- Cross-solver comparison tests (
test/compare_solvers.jl).
Breaking changes
- Ipopt is no longer the only supported solver. DirectTrajOpt has departed from its Ipopt-only design — solver choice is now pluggable via
AbstractSolverOptions, with MadNLP shipping as the first additional backend and a candidate to eventually replace Ipopt as the default. solve!now dispatches onAbstractSolverOptionsrather than concreteIpoptOptions. Custom solver integrations that relied on the old concrete-type signature need adjustment to the new_solve!(prob, options::YourOptions; kwargs...)dispatch pattern.
Merged pull requests:
- MadNLP Integration (#63) (@gennadiryan)
v0.8.11
DirectTrajOpt v0.8.11
Changes
- Extended
EqualityConstraintto support pinning individual trajectory variables at specific timesteps - Added
fix_trajectory_variable!helper for fixing trajectory variables during optimization
Merged pull requests:
- feat: per-timestep EqualityConstraint and fix_trajectory_variable! (#69) (@aarontrowbridge)
- Bump version to 0.8.11 (#70) (@jack-champagne)
v0.8.10
DirectTrajOpt v0.8.10
Changes
- Fix argument order for time-dependent bilinear integrator constructor and docstring
Merged pull requests:
- Bump actions/upload-artifact from 6 to 7 (#61) (@dependabot[bot])
- Time dependent bilinear integrator argument order (#64) (@andgoldschmidt)