Skip to content

Commit 7d220f4

Browse files
committed
jlesc
1 parent d1cefe9 commit 7d220f4

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

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/jlesc17.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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](XXXX)) 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](XXXX))
52+
- Simple example, generated code
53+
```julia
54+
```
55+
- **Remark.** Automated scalarisation of (linear) range constraints
56+
```julia
57+
```
58+
- Solving (MadNLP + CUDSS)
59+
```julia
60+
```
61+
- [Goddard problem](https://control-toolbox.org/Tutorials.jl/stable/tutorial-goddard/)
62+
```julia
63+
```
64+
65+
## Wrap up
66+
67+
- High level modelling of optimal control problems
68+
- Solving on CPU and GPU
69+
70+
## Future
71+
72+
- New [applications](XXXX) (space mechanics, biology, quantum mechanics and more)
73+
- Additional solvers: benchmarking on CPU / GPU for optimisation, Hamiltonian shooting and pathfollowing
74+
- Improved AD: collab between Argonne and Inria, [JLESC Shared Infra AD](https://jlesc.github.io/projects/shared_infra_ad) project (XXXX team)...
75+
- ... and open to contributions! If you like the package, please give us a star ⭐️
76+
77+
```@raw html
78+
<a href="https://github.com/control-toolbox/OptimalControl.jl"><img width="800" alt="OptimalControl.jl" src="./assets/star.jpg"></a>
79+
```
80+
81+
## control-toolbox.org
82+
83+
- Open toolbox
84+
- Collection of Julia Packages rooted at [OptimalControl.jl](https://control-toolbox.org/OptimalControl.jl)
85+
86+
```@raw html
87+
<a href="https://control-toolbox.org"><img width="800" alt="control-toolbox.org" src="./assets/control-toolbox.jpg"></a>
88+
```
89+
90+
## Credits (not exhaustive!)
91+
92+
- [ADNLPModels.jl](https://jso.dev/ADNLPModels.jl)
93+
- [DifferentiationInterface.jl](https://juliadiff.org/DifferentiationInterface.jl/DifferentiationInterface)
94+
- [DifferentialEquations.jl](https://docs.sciml.ai/DiffEqDocs)
95+
- [ExaModels.jl](https://exanauts.github.io/ExaModels.jl/dev/guide)
96+
- [Ipopt.jl](https://github.com/jump-dev/Ipopt.jl)
97+
- [MadNLP.jl](https://madnlp.github.io/MadNLP.jl)
98+
- [MLStyle.jl](https://thautwarm.github.io/MLStyle.jl)
99+
100+
## Acknowledgements
101+
102+
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).
103+
104+
```@raw html
105+
<img width="150" alt="affiliations" src="./assets/france-2030.png">
106+
```
107+

0 commit comments

Comments
 (0)