OptimalControl.jl
The OptimalControl.jl package is the root package of the control-toolbox ecosystem. The control-toolbox ecosystem gathers Julia packages for mathematical control and applications. It aims to provide tools to model and solve optimal control problems with ordinary differential equations by direct and indirect methods, both on CPU and GPU.
Installation
To install OptimalControl.jl, please open Julia's interactive session (known as REPL) and use the Julia package manager:
using Pkg
Pkg.add("OptimalControl")
If you are new to Julia, please follow this guidelines.
Basic usage
Let us model, solve and plot a simple optimal control problem.
using OptimalControl
using NLPModelsIpopt
using Plots
ocp = @def begin
t ∈ [0, 1], time
x ∈ R², state
u ∈ R, control
x(0) == [-1, 0]
x(1) == [0, 0]
ẋ(t) == [x₂(t), u(t)]
∫( 0.5u(t)^2 ) → min
end
sol = solve(ocp)
plot(sol)
- For more details, see the basic example tutorial.
- The
@def
macro defines the problem. See the abstract syntax tutorial. - The
solve
function has many options. See the solve tutorial. - The
plot
function is flexible. See the plot tutorial.
Citing us
If you use OptimalControl.jl in your work, please cite us:
Caillau, J.-B., Cots, O., Gergaud, J., Martinon, P., & Sed, S. OptimalControl.jl: a Julia package to model and solve optimal control problems with ODE's. doi.org/10.5281/zenodo.13336563
or in bibtex format:
@software{Caillau_OptimalControl_jl_a_Julia,
author = {Caillau, Jean-Baptiste and Cots, Olivier and Gergaud, Joseph and Martinon, Pierre and Sed, Sophia},
doi = {10.5281/zenodo.13336563},
license = {["MIT"]},
title = {{OptimalControl.jl: a Julia package to model and solve optimal control problems with ODE's}},
url = {https://control-toolbox.org/OptimalControl.jl}
}
Contributing
If you think you found a bug or if you have a feature request / suggestion, feel free to open an issue. Before opening a pull request, please start an issue or a discussion on the topic.
Contributions are welcomed, check out how to contribute to a Github project. If it is your first contribution, you can also check this first contribution tutorial. You can find first good issues (if any 🙂) here. You may find other packages to contribute to at the control-toolbox organization.
If you want to ask a question, feel free to start a discussion here. This forum is for general discussion about this repository and the control-toolbox organization.
If you want to add an application or a package to the control-toolbox ecosystem, please follow this set up tutorial.
Reproducibility
The documentation of this package was built using these direct dependencies,
using Pkg # hide
Pkg.status() # hide
<< @example-block not executed in draft mode >>
and using this machine and Julia version.
using InteractiveUtils # hide
versioninfo() # hide
<< @example-block not executed in draft mode >>
A more complete overview of all dependencies and their versions is also provided.
using Pkg # hide
Pkg.status(; mode = PKGMODE_MANIFEST) # hide
<< @example-block not executed in draft mode >>
using TOML
using Markdown
version = TOML.parse(read("../../Project.toml", String))["version"]
name = TOML.parse(read("../../Project.toml", String))["name"]
link_manifest = "https://github.com/control-toolbox/" *
name *
".jl/tree/gh-pages/v" *
version *
"/assets/Manifest.toml"
link_project = "https://github.com/control-toolbox/" *
name *
".jl/tree/gh-pages/v" *
version *
"/assets/Project.toml"
Markdown.parse("""You can also download the
[manifest]($link_manifest)
file and the
[project]($link_project)
file.
""")
<< @eval-block not executed in draft mode >>