From 626531c459d1fd07369f3d6ec57d3cc910b9c614 Mon Sep 17 00:00:00 2001 From: Ivan Date: Thu, 30 Apr 2026 11:56:10 -0400 Subject: [PATCH 1/5] Improve cart-pole example initial guess --- class05/class05.jl | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/class05/class05.jl b/class05/class05.jl index 5fcc987..ed2bb81 100644 --- a/class05/class05.jl +++ b/class05/class05.jl @@ -1,5 +1,5 @@ ### A Pluto.jl notebook ### -# v0.20.18 +# v0.20.24 using Markdown using InteractiveUtils @@ -493,16 +493,16 @@ begin # initial guess: uniform motion, no control @variable(cp_model, -d_max .<= q_1[i=1:N] .<= d_max, start=i/N * d) @variable(cp_model, q_2[i=1:N], start=i/N * pi) - @variable(cp_model, d_q_1[i=1:N], start=0) - @variable(cp_model, d_q_2[i=1:N], start=0) + @variable(cp_model, d_q_1[1:N], start=d/T) + @variable(cp_model, d_q_2[1:N], start=pi/T) @variable(cp_model, -u_max .<= u[1:N] .<= u_max, start=0) # collocation points - @variable(cp_model, -d_max .<= q_1_c[1:N-1] .<= d_max) - @variable(cp_model, q_2_c[1:N-1]) - @variable(cp_model, d_q_1_c[1:N-1]) - @variable(cp_model, d_q_2_c[1:N-1]) - @variable(cp_model, -u_max .<= u_c[1:N-1] .<= u_max) + @variable(cp_model, -d_max .<= q_1_c[i=1:N-1] .<= d_max, start=(2*i + 1)/(2 * N) * d) + @variable(cp_model, q_2_c[i=1:N-1], start=(2*i + 1)/(2 * N) * pi) + @variable(cp_model, d_q_1_c[1:N-1], start=d/T) + @variable(cp_model, d_q_2_c[1:N-1], start=pi/T) + @variable(cp_model, -u_max .<= u_c[1:N-1] .<= u_max, start=0) @expression(cp_model, x[i=1:N], [q_1[i], q_2[i], d_q_1[i], d_q_2[i]]) @expression(cp_model, x_c[i=1:N-1], [q_1_c[i], q_2_c[i], d_q_1_c[i], d_q_2_c[i]]) From 7ca4d36e9b11c7b3972100e0e71a7b600521562b Mon Sep 17 00:00:00 2001 From: Ivan Date: Thu, 30 Apr 2026 13:31:25 -0400 Subject: [PATCH 2/5] Fix error in cart-pole dynamics --- class05/class05.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/class05/class05.jl b/class05/class05.jl index ed2bb81..6ee09ce 100644 --- a/class05/class05.jl +++ b/class05/class05.jl @@ -476,7 +476,7 @@ begin q_2 = x[2] q_1_d = x[3] q_2_d = x[4] - q_1_dd_numer = l * m_2 * sin(q_2) * q_2_d + u + m_2 * g * cos(q_2) * sin(q_2) + q_1_dd_numer = l * m_2 * sin(q_2) * q_2_d^2 + u + m_2 * g * cos(q_2) * sin(q_2) q_1_dd_denom = m_1 + m_2 * (1 - cos(q_2) ^ 2) q_1_dd = q_1_dd_numer / q_1_dd_denom q_2_dd_numer = l * m_2 * cos(q_2) * sin(q_2) * q_2_d^2 + u * cos(q_2) + (m_1 + m_2) * g * sin(q_2) From 620055b175f9d4e2c06d38784e96ce98d82d27f8 Mon Sep 17 00:00:00 2001 From: Ivan Date: Sun, 17 May 2026 12:59:42 -0400 Subject: [PATCH 3/5] Regenerate lecture 5 html --- class05/class05.html | 59 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/class05/class05.html b/class05/class05.html index 012f089..4eee696 100644 --- a/class05/class05.html +++ b/class05/class05.html @@ -1,19 +1,64 @@ - + + + + + - + + + + + + + + + + - + + + + + + + + -
\ No newline at end of file + + + + +
+ + + +
+ + + + \ No newline at end of file From a926924f34e76d7ee5514a2e1b3250cbdeb7fa6d Mon Sep 17 00:00:00 2001 From: ivanightingale Date: Sun, 17 May 2026 13:09:19 -0400 Subject: [PATCH 4/5] Fix indexing of collocation initial guesses Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- class05/class05.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class05/class05.jl b/class05/class05.jl index 6ee09ce..6bd4b58 100644 --- a/class05/class05.jl +++ b/class05/class05.jl @@ -498,8 +498,8 @@ begin @variable(cp_model, -u_max .<= u[1:N] .<= u_max, start=0) # collocation points - @variable(cp_model, -d_max .<= q_1_c[i=1:N-1] .<= d_max, start=(2*i + 1)/(2 * N) * d) - @variable(cp_model, q_2_c[i=1:N-1], start=(2*i + 1)/(2 * N) * pi) + @variable(cp_model, -d_max .<= q_1_c[i=1:N-1] .<= d_max, start=(2*i - 1)/(2 * (N - 1)) * d) + @variable(cp_model, q_2_c[i=1:N-1], start=(2*i - 1)/(2 * (N - 1)) * pi) @variable(cp_model, d_q_1_c[1:N-1], start=d/T) @variable(cp_model, d_q_2_c[1:N-1], start=pi/T) @variable(cp_model, -u_max .<= u_c[1:N-1] .<= u_max, start=0) From 377c20e65a6fccd3f8e01522fe3ba24121331d73 Mon Sep 17 00:00:00 2001 From: Ivan Date: Sun, 17 May 2026 13:18:13 -0400 Subject: [PATCH 5/5] Modify initial guesses of states --- class05/class05.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/class05/class05.jl b/class05/class05.jl index 6bd4b58..c7eaef9 100644 --- a/class05/class05.jl +++ b/class05/class05.jl @@ -491,8 +491,8 @@ begin cp_model = Model(Ipopt.Optimizer) # initial guess: uniform motion, no control - @variable(cp_model, -d_max .<= q_1[i=1:N] .<= d_max, start=i/N * d) - @variable(cp_model, q_2[i=1:N], start=i/N * pi) + @variable(cp_model, -d_max .<= q_1[i=1:N] .<= d_max, start=(i-1)/(N-1) * d) + @variable(cp_model, q_2[i=1:N], start=(i-1)/(N-1) * pi) @variable(cp_model, d_q_1[1:N], start=d/T) @variable(cp_model, d_q_2[1:N], start=pi/T) @variable(cp_model, -u_max .<= u[1:N] .<= u_max, start=0)