Skip to content

Commit 93fb50c

Browse files
authored
Merge branch 'main' into kwu
2 parents cc7a26d + 8545158 commit 93fb50c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+67056
-119
lines changed

.github/workflows/documentation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- uses: actions/checkout@v4
1818
- uses: julia-actions/setup-julia@v2
1919
with:
20-
version: '1'
20+
version: '1.11'
2121
- uses: julia-actions/cache@v2
2222
- name: Install dependencies
2323
run: julia --project=docs/ -e 'using Pkg; Pkg.instantiate()'

README.md

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
## Overview
1212
This student-led course explores modern techniques for controlling — and learning to control — dynamical systems. Topics range from classical optimal control and numerical optimization to reinforcement learning, PDE-constrained optimization (finite-element methods, Neural DiffEq, PINNs, neural operators), and GPU-accelerated workflows.
1313

14+
## Objective
15+
Create an online book at the end using the materials from all lectures.
16+
1417
## Prerequisites
1518
* Solid linear-algebra background
1619
* Programming experience in Julia, Python, *or* MATLAB
@@ -19,9 +22,22 @@ This student-led course explores modern techniques for controlling — and learn
1922
## Grading
2023
| Component | Weight |
2124
|-----------|--------|
22-
| Participation & paper critiques | **25 %** |
23-
| In-class presentations | **50 %** |
24-
| Projects | **25 %** |
25+
| Participation | **25 %** |
26+
| In-class Presentations and Chapter | **50 %** |
27+
| Projects (Liaison work & Scribe & Admin & ...) | **25 %** |
28+
29+
**Class material is due one week before the lecture!** No exceptions apart from the first 2 lectures.
30+
31+
**Issues outlining references that will be used for lecture preparation are due at the end of the 3rd week (10/05/2025)!**
32+
20 minutes of research should give you an initial idea of what you need to read.
33+
34+
🎯🚲 **Guessing Game**
35+
36+
Here’s how the presentation grading works: we already know the lecture content we expect from you. Any deviations will be penalized **exponentially**. Your mission is twofold:
37+
1. **Check your understanding** — use [discussions](https://github.com/LearningToOptimize/LearningToControlClass/discussions) from previous lectures to ensure you’ve mastered earlier topics. We expect lectures to be extremely linked to each other.
38+
2. **Test your hypotheses** — validate your lecture content by raising and resolving issues, focusing primarily on your *main task issue* (see this example from [class 03](https://github.com/LearningToOptimize/LearningToControlClass/issues/18)).
39+
40+
All interactions will happen **only through GitHub** — no in-person hints will be given.
2541

2642
## Weekly Schedule (Fall 2025 – Fridays 2 p.m. ET)
2743

@@ -30,16 +46,16 @@ This student-led course explores modern techniques for controlling — and learn
3046
| # | Date (MM/DD) | Format / Presenter | Topic & Learning Goals | Prep / Key Resources |
3147
|----|--------------|--------------------|------------------------|----------------------|
3248
| 1 | 08/22/2025 | Lecture — Andrew Rosemberg | Course map; why PDE-constrained **optimization**; tooling overview; stability & state-space dynamics; Lyapunov; discretization issues | [📚](https://learningtooptimize.github.io/LearningToControlClass/dev/class01/class01/) |
33-
| 2 | 08/29/2025 | Lecture - Arnaud Deza | Numerical **optimization** for control (grad/SQP/QP); ALM vs. interior-point vs. penalty methods | |
49+
| 2 | 08/29/2025 | Lecture - Arnaud Deza | Numerical **optimization** for control (grad/SQP/QP); ALM vs. interior-point vs. penalty methods | [📚](https://learningtooptimize.github.io/LearningToControlClass/dev/class02/overview/) |
3450
| 3 | 09/05/2025 | Lecture - Zaowei Dai | Pontryagin’s Maximum Principle; shooting & multiple shooting; LQR, Riccati, QP viewpoint (finite / infinite horizon) | |
3551
| 4 | 09/12/2025 | **External seminar 1** - Joaquim Dias Garcia| Dynamic Programming & Model-Predictive Control | |
36-
| 5 | 09/19/2025 | Lecture - Guancheng "Ivan" Qiu | **Nonlinear** trajectory **optimization**; collocation; implicit integration | |
52+
| 5 | 09/19/2025 | Lecture - Guancheng "Ivan" Qiu | **Nonlinear** trajectory **optimization**; collocation; implicit integration | [📚](https://learningtooptimize.github.io/LearningToControlClass/dev/class05/class05/) |
3753
| 6 | 09/26/2025 | **External seminar 2** - Henrique Ferrolho | Trajectory **optimization** on robots in Julia Robotics | |
3854
| 7 | 10/03/2025 | Lecture - Jouke van Westrenen | Stochastic optimal control, Linear Quadratic Gaussian (LQG), Kalman filtering, robust control under uncertainty, unscented optimal control; | |
39-
| 8 | 10/10/2025 | **External seminar 3** TBD (speaker to be confirmed) | Topology **optimization** | |
55+
| 8 | 10/10/2025 | Lecture - Kevin Wu | Distributed optimal control & multi-agent coordination; Consensus, distributed MPC, and optimization over graphs (ADMM) ||
4056
| 9 | 10/17/2025 | **External seminar 4** — François Pacaud | GPU-accelerated optimal control | |
41-
|10 | 10/24/2025 | Lecture - Michael Klamkin | Physics-Informed Neural Networks (PINNs): formulation & pitfalls | |
42-
|11 | 10/31/2025 | **External seminar 5** - Chris Rackauckas | Neural Differential Equations: PINNs + classical solvers | |
57+
|10 | 10/24/2025 | **External seminar 5** - Chris Rackauckas | Neural Differential Equations: classical solvers + adjoint methods | |
58+
|11 | 10/31/2025 | Lecture - Michael Klamkin | Physics-Informed Neural Networks (PINNs): formulation & pitfalls | |
4359
|12 | 11/07/2025 | Lecture - Pedro Paulo | Neural operators (FNO, Galerkin Transformer); large-scale surrogates | |
4460
|13 | 11/14/2025 | **External seminar 6** - Charlelie Laurent | Scalable PINNs / neural operators; CFD & weather applications | |
4561
|14 | 11/21/2025 | Lecture - TBD | TBD from the pool | |
@@ -51,14 +67,12 @@ Students must provide materials equivalent to those used in an in-person session
5167

5268
| # | Format / Presenter | Topic & Learning Goals | Prep / Key Resources |
5369
|---|--------------------|------------------------|----------------------|
54-
| 15 | Lecture - TBD | Quaternions, Lie groups, and Lie algebras; attitude control; LQR with Attitude, Quadrotors; | |
55-
| 16 | Lecture - TBD | Stochastic optimal control, Linear Quadratic Gaussian (LQG), Kalman filtering, robust control under uncertainty, unscented optimal control; | |
56-
| 17 | Lecture - TBD | Trajectory Optimization with Obstacles; Convexification of Non-Convex Constraints; | |
57-
| 18 | Lecture - Joe Ye | Robust control & min-max DDP (incl. PDE cases); chance constraints; Data-driven control & Model-Based RL-in-the-loop | |
70+
| 15 | Lecture - Shuaicheng (Allen) Tong | Dynamic Optimal Control of Power Systems; Generators swing equations, Transmission lines electromagnetic transients, dynamic load models, and inverters. | |
71+
| 16 | Lecture - Joe Ye | Robust control & min-max DDP (incl. PDE cases); chance constraints; Data-driven control & Model-Based RL-in-the-loop | |
72+
| 17 | Lecture - TBD | Quaternions, Lie groups, and Lie algebras; attitude control; LQR with Attitude, Quadrotors; | |
73+
| 18 | Lecture - TBD | Trajectory Optimization with Obstacles; Convexification of Non-Convex Constraints; | |
5874
| 19 | Lecture - TBD | Contact Explict and Contact Implicit; Trajectory Optimization for Hybrid and Composed Systems; | |
5975
| 20 | Lecture - TBD | Probabilistic Programming; Bayesian numerical methods; Variational Inference; probabilistic solvers for ODEs/PDEs; Bayesian optimization in control; | |
60-
| 21 | Lecture - TBD | Distributed optimal control & multi-agent coordination; Consensus, distributed MPC, and optimization over graphs (ADMM). | |
61-
| 22 | Lecture - TBD | Dynamic Optimal Control of Power Systems; Generators swing equations, Transmission lines electromagnetic transients, dynamic load models, and inverters. | |
6276

6377
## Reference Material
6478

class01/background_materials/math_basics.html

Lines changed: 6 additions & 8 deletions
Large diffs are not rendered by default.

class01/background_materials/math_basics.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ md"
3939
| Lecturer | : | Rosemberg, Andrew |
4040
| Date | : | 28 of July, 2025 |
4141
42+
Special thanks to **Guancheng Qiu** for helping fix some of the code!
43+
4244
# Background Math (_Welcome to Pluto!_)
4345
4446
This background material will use Pluto!

class01/background_materials/optimization_basics.html

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

class01/background_materials/optimization_basics.jl

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ md"""
3737
| Lecturer | : | Rosemberg, Andrew |
3838
| Date | : | 28 of July, 2025 |
3939
40+
Special thanks to **Guancheng Qiu** for helping fix some of the code!
41+
4042
"""
4143

4244
# ╔═╡ eeceb82e-abfb-4502-bcfb-6c9f76a0879d
@@ -436,21 +438,32 @@ begin
436438
[7 1 3 9 2 4 8 5 6];
437439
[9 6 1 5 3 7 2 8 4];
438440
[2 8 7 4 1 9 6 3 5];
439-
[3 4 5 2 8 6 1 7 9]])
440-
441-
anss = missing
442-
try
443-
anss = (
444-
x_ss = haskey(sudoku, :x_s) ? JuMP.value.(sudoku[:x_s]) : missing,
445-
)
446-
catch
447-
anss = missing
441+
[3 4 5 2 8 6 1 7 9]],)
442+
443+
anss = (;
444+
x_ss = haskey(sudoku, :x_s) && JuMP.is_solved_and_feasible(sudoku) ? JuMP.value.(sudoku[:x_s]) : missing
445+
)
446+
447+
# Convert 3D binary matrix to 2D solution matrix
448+
function convert_3d_to_solution(x_3d)
449+
if ismissing(x_3d)
450+
return missing
451+
end
452+
solution = zeros(Int, 9, 9)
453+
for i in 1:9, j in 1:9, k in 1:9
454+
if x_3d[i, j, k] 1.0
455+
solution[i, j] = k
456+
end
457+
end
458+
return solution
448459
end
449460

450-
goods = !ismissing(anss) &&
451-
all(isapprox.(anss.x_ss, ground_truth_s.x_ss; atol=1e-3))
461+
solution_matrix = ismissing(anss) ? missing : convert_3d_to_solution(anss.x_ss)
462+
463+
goods = !ismissing(anss) && !ismissing(solution_matrix) &&
464+
all(isapprox.(solution_matrix, ground_truth_s.x_ss; atol=1e-3))
452465

453-
if ismissing(anss)
466+
if ismissing(anss.x_ss)
454467
still_missing()
455468
elseif goods
456469
correct()
@@ -578,8 +591,8 @@ begin
578591
model_nlp = Model(Ipopt.Optimizer)
579592

580593
# Required named variables
581-
@variable(model_nlp, x)
582-
@variable(model_nlp, y)
594+
@variable(model_nlp, x_nlp)
595+
@variable(model_nlp, y_nlp)
583596

584597
# --- YOUR CODE HERE ---
585598

@@ -707,7 +720,7 @@ begin
707720
# Decide which badge to show
708721
if ismissing(ansd) # nothing yet
709722
still_missing()
710-
elseif x == 25.0
723+
elseif ansd == 25.0
711724
correct()
712725
else
713726
keep_working()
@@ -721,8 +734,8 @@ begin
721734
ans3=missing
722735
try
723736
ans3 = (
724-
x = safeval(model_nlp, :x),
725-
y = safeval(model_nlp, :y),
737+
x = safeval(model_nlp, :x_nlp),
738+
y = safeval(model_nlp, :y_nlp),
726739
obj = objective_value(model_nlp),
727740
)
728741
catch
@@ -799,7 +812,7 @@ end
799812
# ╟─bca712e4-3f1c-467e-9209-e535aed5ab0a
800813
# ╟─3997d993-0a31-435e-86cd-50242746c305
801814
# ╠═3f56ec63-1fa6-403c-8d2a-1990382b97ae
802-
# ╟─0e8ed625-df85-4bd2-8b16-b475a72df566
815+
# ╠═0e8ed625-df85-4bd2-8b16-b475a72df566
803816
# ╟─fa5785a1-7274-4524-9e54-895d46e83861
804817
# ╟─5e3444d0-8333-4f51-9146-d3d9625fe2e9
805818
# ╠═0e190de3-da60-41e9-9da5-5a0c7fefd1d7

class01/class01_intro.html

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)