@@ -301,61 +301,58 @@ function init_optimization!(mpc::NonLinMPC, optim::JuMP.GenericModel{JNT}) where
301301 # inspired from https://jump.dev/JuMP.jl/stable/tutorials/nonlinear/tips_and_tricks/#User-defined-operators-with-vector-outputs
302302 Jfunc, gfunc = let mpc= mpc, model= model, ng= ng, nΔŨ= nΔŨ, nŶ= Hp* ny, nx̂= nx̂, nu= nu, nU= Hp* nu
303303 last_ΔŨtup_float, last_ΔŨtup_dual = nothing , nothing
304- Ŷ_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nŶ), nΔŨ + 3 )
305- g_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, ng), nΔŨ + 3 )
306- x̂_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nx̂), nΔŨ + 3 )
307- u0_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nu), nΔŨ + 3 )
308- Ȳ_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nŶ), nΔŨ + 3 )
309- Ū_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nU), nΔŨ + 3 )
304+ Ŷ_cache:: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nŶ), nΔŨ + 3 )
305+ g_cache:: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, ng), nΔŨ + 3 )
306+ x̂_cache:: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nx̂), nΔŨ + 3 )
307+ u_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nu), nΔŨ + 3 )
308+ Ȳ_cache:: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nŶ), nΔŨ + 3 )
309+ Ū_cache:: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nU), nΔŨ + 3 )
310310 function Jfunc (ΔŨtup:: JNT... )
311- ΔŨtud1 = ΔŨtup[begin ]
312- Ŷ = get_tmp (Ŷ_cache, ΔŨtud1 )
311+ ΔŨ1 = ΔŨtup[begin ]
312+ Ŷ, u = get_tmp (Ŷ_cache, ΔŨ1), get_tmp (u_cache, ΔŨ1 )
313313 ΔŨ = collect (ΔŨtup)
314314 if ΔŨtup != = last_ΔŨtup_float
315- x̂, u0 = get_tmp (x̂_cache, ΔŨtud1), get_tmp (u0_cache, ΔŨtud1)
316- g = get_tmp (g_cache, ΔŨtup[1 ])
317- Ŷ, x̂end = predict! (Ŷ, x̂, u0, mpc, model, ΔŨ)
315+ x̂, g = get_tmp (x̂_cache, ΔŨ1), get_tmp (g_cache, ΔŨ1)
316+ Ŷ, x̂end = predict! (Ŷ, x̂, u, mpc, model, ΔŨ)
318317 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
319318 last_ΔŨtup_float = ΔŨtup
320319 end
321- Ȳ, Ū = get_tmp (Ȳ_cache, ΔŨtud1 ), get_tmp (Ū_cache, ΔŨtud1 )
322- return obj_nonlinprog! (Ȳ, Ū, mpc, model, Ŷ, ΔŨ)
320+ Ȳ, Ū = get_tmp (Ȳ_cache, ΔŨ1 ), get_tmp (Ū_cache, ΔŨ1 )
321+ return obj_nonlinprog! (Ȳ, Ū, u, mpc, model, Ŷ, ΔŨ)
323322 end
324323 function Jfunc (ΔŨtup:: ForwardDiff.Dual... )
325- ΔŨtud1 = ΔŨtup[begin ]
326- Ŷ = get_tmp (Ŷ_cache, ΔŨtud1 )
324+ ΔŨ1 = ΔŨtup[begin ]
325+ Ŷ, u = get_tmp (Ŷ_cache, ΔŨ1), get_tmp (u_cache, ΔŨ1 )
327326 ΔŨ = collect (ΔŨtup)
328327 if ΔŨtup != = last_ΔŨtup_dual
329- x̂, u0 = get_tmp (x̂_cache, ΔŨtud1 ), get_tmp (u0_cache, ΔŨtud1 )
330- g = get_tmp (g_cache, ΔŨtud1 )
331- Ŷ, x̂end = predict! (Ŷ, x̂, u0 , mpc, model, ΔŨ)
328+ x̂, g = get_tmp (x̂_cache, ΔŨ1 ), get_tmp (g_cache, ΔŨ1 )
329+ g = get_tmp (g_cache, ΔŨ1 )
330+ Ŷ, x̂end = predict! (Ŷ, x̂, u , mpc, model, ΔŨ)
332331 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
333332 last_ΔŨtup_dual = ΔŨtup
334333 end
335- Ȳ, Ū = get_tmp (Ȳ_cache, ΔŨtud1 ), get_tmp (Ū_cache, ΔŨtud1 )
336- return obj_nonlinprog! (Ȳ, Ū, mpc, model, Ŷ, ΔŨ)
334+ Ȳ, Ū = get_tmp (Ȳ_cache, ΔŨ1 ), get_tmp (Ū_cache, ΔŨ1 )
335+ return obj_nonlinprog! (Ȳ, Ū, u, mpc, model, Ŷ, ΔŨ)
337336 end
338337 function gfunc_i (i, ΔŨtup:: NTuple{N, JNT} ) where N
339- ΔŨtud1 = ΔŨtup[begin ]
340- g = get_tmp (g_cache, ΔŨtud1 )
338+ ΔŨ1 = ΔŨtup[begin ]
339+ g = get_tmp (g_cache, ΔŨ1 )
341340 if ΔŨtup != = last_ΔŨtup_float
342- x̂, u0 = get_tmp (x̂_cache, ΔŨtud1), get_tmp (u0_cache, ΔŨtud1)
343- Ŷ = get_tmp (Ŷ_cache, ΔŨtud1)
341+ Ŷ, u, x̂ = get_tmp (Ŷ_cache, ΔŨ1), get_tmp (u_cache, ΔŨ1), get_tmp (x̂_cache, ΔŨ1)
344342 ΔŨ = collect (ΔŨtup)
345- Ŷ, x̂end = predict! (Ŷ, x̂, u0 , mpc, model, ΔŨ)
343+ Ŷ, x̂end = predict! (Ŷ, x̂, u , mpc, model, ΔŨ)
346344 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
347345 last_ΔŨtup_float = ΔŨtup
348346 end
349347 return g[i]
350348 end
351349 function gfunc_i (i, ΔŨtup:: NTuple{N, ForwardDiff.Dual} ) where N
352- ΔŨtud1 = ΔŨtup[begin ]
353- g = get_tmp (g_cache, ΔŨtud1 )
350+ ΔŨ1 = ΔŨtup[begin ]
351+ g = get_tmp (g_cache, ΔŨ1 )
354352 if ΔŨtup != = last_ΔŨtup_dual
355- x̂, u0 = get_tmp (x̂_cache, ΔŨtud1), get_tmp (u0_cache, ΔŨtud1)
356- Ŷ = get_tmp (Ŷ_cache, ΔŨtud1)
353+ Ŷ, u, x̂ = get_tmp (Ŷ_cache, ΔŨ1), get_tmp (u_cache, ΔŨ1), get_tmp (x̂_cache, ΔŨ1)
357354 ΔŨ = collect (ΔŨtup)
358- Ŷ, x̂end = predict! (Ŷ, x̂, u0 , mpc, model, ΔŨ)
355+ Ŷ, x̂end = predict! (Ŷ, x̂, u , mpc, model, ΔŨ)
359356 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
360357 last_ΔŨtup_dual = ΔŨtup
361358 end
0 commit comments