Skip to content

Commit bb3975f

Browse files
authored
Merge pull request #520 from control-toolbox/518-doc-jlesc17
jlesc17
2 parents d1cefe9 + 1531341 commit bb3975f

4 files changed

Lines changed: 112 additions & 0 deletions

File tree

docs/make.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ makedocs(;
5858
],
5959
],
6060
"Zhejiang 2025" => "zhejiang-2025.md",
61+
"JLESC17" => "jlesc17.md",
6162
],
6263
)
6364

docs/src/assets/jlesc17.jpg

2.78 MB
Loading

docs/src/assets/juliacon2025.jpg

1.67 MB
Loading

docs/src/jlesc17.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
```@raw html
2+
<img width="800" alt="jlesc17" src="./assets/jlesc17.jpg">
3+
```
4+
5+
# Solving optimal control problems on GPU with Julia
6+
7+
### [Jean-Baptiste Caillau](http://caillau.perso.math.cnrs.fr), [Olivier Cots](https://ocots.github.io), [Joseph Gergaud](https://github.com/joseph-gergaud), [Pierre Martinon](https://github.com/PierreMartinon), [Sophia Sed](https://sed-sam-blog.gitlabpages.inria.fr)
8+
9+
```@raw html
10+
<img width="800" alt="affiliations" src="./assets/affil.jpg">
11+
```
12+
13+
## What it's about
14+
15+
- Nonlinear optimal control of ODEs:
16+
17+
$$ g(x(t_0),x(t_f)) + \int_{t_0}^{t_f} f^0(x(t), u(t))\, \mathrm{d}t \to \min $$
18+
19+
subject to
20+
21+
$$ \dot{x}(t) = f(x(t), u(t)),\quad t \in [t_0, t_f] $$
22+
23+
plus boundary, control and state constraints
24+
25+
- Our core interests: numerical & geometrical methods in control, applications
26+
- Why Julia: fast (+ JIT), strongly typed, high-level (AD, macros), available fast optimisation and ODE solvers, rapidly growing community
27+
28+
```@raw html
29+
<img width="800" alt="juliacon2025" src="./assets/juliacon2025.jpg">
30+
```
31+
32+
## Discretise then solve strategy (*aka* direct methods)
33+
34+
- Discretising an OCP into an NLP: $h_i := t_{i+1}-t_i$,
35+
36+
$$ g(X_0,X_N) + \sum_{i=0}^{N} h_i f^0(X_i,U_i) \to \min $$
37+
38+
subject to
39+
40+
$$ X_{i+1} - X_i - h_i f(X_i, U_i) = 0,\quad i = 0,\dots,N-1 $$
41+
42+
plus other constraints on $X := (X_i)_{i=0,N}$ and $U := (U_i)_{i=0,N}$ such as boundary and path (state and / or control) constraints :
43+
44+
$$ b(t_0, X_0, t_N, X_N) = 0 $$
45+
46+
$$ g(t_i, X_i, U_i) = 0,\quad i = 0,\dots,N $$
47+
48+
- SIMD parallelism ($f0$, $f$, $g$) + sparsity: Kernels for GPU ([KernelAbstraction.jl](https://juliagpu.github.io/KernelAbstractions.jl/stable/)) and sparse linear algebra ([CUDSS.jl](https://github.com/exanauts/CUDSS.jl))
49+
- Modelling and optimising for GPU: [ExaModels.jl](https://exanauts.github.io/ExaModels.jl/dev/guide) + [MadNLP.jl](https://madnlp.github.io/MadNLP.jl), with **built-in AD**
50+
- [Simple example, DSL](@ref tutorial-double-integrator-energy)
51+
- Compile into an ExaModel (one pass compiler, [syntax + semantics](https://github.com/control-toolbox/CTParser.jl/blob/20c6be5c953587fef10b054a95f9dc8c66b90577/src/onepass.jl#L145))
52+
- Simple example, generated code
53+
```julia
54+
XXXX
55+
```
56+
- **Remark.** Automated scalarisation of (linear) range constraints
57+
```julia
58+
XXXX
59+
```
60+
- Solving (MadNLP + CUDSS)
61+
```julia
62+
XXXX
63+
```
64+
- [Goddard problem](https://control-toolbox.org/Tutorials.jl/stable/tutorial-goddard/)
65+
```julia
66+
XXXX
67+
```
68+
69+
## Wrap up
70+
71+
- High level modelling of optimal control problems
72+
- Solving on CPU and GPU
73+
74+
## Future
75+
76+
- New applications (space mechanics, biology, quantum mechanics and more)
77+
- Additional solvers: benchmarking on CPU / GPU for optimisation, Hamiltonian shooting and pathfollowing
78+
- Improved AD: collab between Argonne and Inria, [JLESC Shared Infra AD](https://jlesc.github.io/projects/shared_infra_ad) project...
79+
- ... and open to contributions! If you like the package, please give us a star ⭐️
80+
81+
```@raw html
82+
<a href="https://github.com/control-toolbox/OptimalControl.jl"><img width="800" alt="OptimalControl.jl" src="./assets/star.jpg"></a>
83+
```
84+
85+
## control-toolbox.org
86+
87+
- Open toolbox
88+
- Collection of Julia Packages rooted at [OptimalControl.jl](https://control-toolbox.org/OptimalControl.jl)
89+
90+
```@raw html
91+
<a href="https://control-toolbox.org"><img width="800" alt="control-toolbox.org" src="./assets/control-toolbox.jpg"></a>
92+
```
93+
94+
## Credits (not exhaustive!)
95+
96+
- [ADNLPModels.jl](https://jso.dev/ADNLPModels.jl)
97+
- [DifferentiationInterface.jl](https://juliadiff.org/DifferentiationInterface.jl/DifferentiationInterface)
98+
- [DifferentialEquations.jl](https://docs.sciml.ai/DiffEqDocs)
99+
- [ExaModels.jl](https://exanauts.github.io/ExaModels.jl/dev/guide)
100+
- [Ipopt.jl](https://github.com/jump-dev/Ipopt.jl)
101+
- [MadNLP.jl](https://madnlp.github.io/MadNLP.jl)
102+
- [MLStyle.jl](https://thautwarm.github.io/MLStyle.jl)
103+
104+
## Acknowledgements
105+
106+
Jean-Baptiste Caillau is partially funded by a **France 2030** support managed by the *Agence Nationale de la Recherche*, under the reference ANR-23-PEIA-0004 ([PDE-AI](https://pde-ai.math.cnrs.fr) project).
107+
108+
```@raw html
109+
<img width="150" alt="affiliations" src="./assets/france-2030.png">
110+
```
111+

0 commit comments

Comments
 (0)