@@ -305,38 +305,42 @@ function init_optimization!(mpc::NonLinMPC, optim::JuMP.GenericModel{JNT}) where
305305 g_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, ng), nΔŨ + 3 )
306306 x̂_cache :: DiffCache{Vector{JNT}, Vector{JNT}} = DiffCache (zeros (JNT, nx̂), nΔŨ + 3 )
307307 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 )
308310 function Jfunc (ΔŨtup:: JNT... )
309- Ŷ = get_tmp (Ŷ_cache, ΔŨtup[1 ])
311+ ΔŨtud1 = ΔŨtup[begin ]
312+ Ŷ = get_tmp (Ŷ_cache, ΔŨtud1)
310313 ΔŨ = collect (ΔŨtup)
311314 if ΔŨtup != = last_ΔŨtup_float
312- x̂ = get_tmp (x̂_cache, ΔŨtup[1 ])
313- u0 = get_tmp (u0_cache, ΔŨtup[1 ])
315+ x̂, u0 = get_tmp (x̂_cache, ΔŨtud1), get_tmp (u0_cache, ΔŨtud1)
314316 g = get_tmp (g_cache, ΔŨtup[1 ])
315317 Ŷ, x̂end = predict! (Ŷ, x̂, u0, mpc, model, ΔŨ)
316318 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
317319 last_ΔŨtup_float = ΔŨtup
318320 end
319- return obj_nonlinprog (mpc, model, Ŷ, ΔŨ)
321+ Ȳ, Ū = get_tmp (Ȳ_cache, ΔŨtud1), get_tmp (Ū_cache, ΔŨtud1)
322+ return obj_nonlinprog! (Ȳ, Ū, mpc, model, Ŷ, ΔŨ)
320323 end
321324 function Jfunc (ΔŨtup:: ForwardDiff.Dual... )
322- Ŷ = get_tmp (Ŷ_cache, ΔŨtup[1 ])
325+ ΔŨtud1 = ΔŨtup[begin ]
326+ Ŷ = get_tmp (Ŷ_cache, ΔŨtud1)
323327 ΔŨ = collect (ΔŨtup)
324328 if ΔŨtup != = last_ΔŨtup_dual
325- x̂ = get_tmp (x̂_cache, ΔŨtup[1 ])
326- u0 = get_tmp (u0_cache, ΔŨtup[1 ])
327- g = get_tmp (g_cache, ΔŨtup[1 ])
329+ x̂, u0 = get_tmp (x̂_cache, ΔŨtud1), get_tmp (u0_cache, ΔŨtud1)
330+ g = get_tmp (g_cache, ΔŨtud1)
328331 Ŷ, x̂end = predict! (Ŷ, x̂, u0, mpc, model, ΔŨ)
329332 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
330333 last_ΔŨtup_dual = ΔŨtup
331334 end
332- return obj_nonlinprog (mpc, model, Ŷ, ΔŨ)
335+ Ȳ, Ū = get_tmp (Ȳ_cache, ΔŨtud1), get_tmp (Ū_cache, ΔŨtud1)
336+ return obj_nonlinprog! (Ȳ, Ū, mpc, model, Ŷ, ΔŨ)
333337 end
334338 function gfunc_i (i, ΔŨtup:: NTuple{N, JNT} ) where N
335- g = get_tmp (g_cache, ΔŨtup[1 ])
339+ ΔŨtud1 = ΔŨtup[begin ]
340+ g = get_tmp (g_cache, ΔŨtud1)
336341 if ΔŨtup != = last_ΔŨtup_float
337- x̂ = get_tmp (x̂_cache, ΔŨtup[1 ])
338- u0 = get_tmp (u0_cache, ΔŨtup[1 ])
339- Ŷ = get_tmp (Ŷ_cache, ΔŨtup[1 ])
342+ x̂, u0 = get_tmp (x̂_cache, ΔŨtud1), get_tmp (u0_cache, ΔŨtud1)
343+ Ŷ = get_tmp (Ŷ_cache, ΔŨtud1)
340344 ΔŨ = collect (ΔŨtup)
341345 Ŷ, x̂end = predict! (Ŷ, x̂, u0, mpc, model, ΔŨ)
342346 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
@@ -345,11 +349,11 @@ function init_optimization!(mpc::NonLinMPC, optim::JuMP.GenericModel{JNT}) where
345349 return g[i]
346350 end
347351 function gfunc_i (i, ΔŨtup:: NTuple{N, ForwardDiff.Dual} ) where N
348- g = get_tmp (g_cache, ΔŨtup[1 ])
352+ ΔŨtud1 = ΔŨtup[begin ]
353+ g = get_tmp (g_cache, ΔŨtud1)
349354 if ΔŨtup != = last_ΔŨtup_dual
350- x̂ = get_tmp (x̂_cache, ΔŨtup[1 ])
351- u0 = get_tmp (u0_cache, ΔŨtup[1 ])
352- Ŷ = get_tmp (Ŷ_cache, ΔŨtup[1 ])
355+ x̂, u0 = get_tmp (x̂_cache, ΔŨtud1), get_tmp (u0_cache, ΔŨtud1)
356+ Ŷ = get_tmp (Ŷ_cache, ΔŨtud1)
353357 ΔŨ = collect (ΔŨtup)
354358 Ŷ, x̂end = predict! (Ŷ, x̂, u0, mpc, model, ΔŨ)
355359 g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
0 commit comments