@@ -301,61 +301,58 @@ function init_optimization!(mpc::NonLinMPC, optim::JuMP.GenericModel{JNT}) where
301
301
# inspired from https://jump.dev/JuMP.jl/stable/tutorials/nonlinear/tips_and_tricks/#User-defined-operators-with-vector-outputs
302
302
Jfunc, gfunc = let mpc= mpc, model= model, ng= ng, nΔŨ= nΔŨ, nŶ= Hp* ny, nx̂= nx̂, nu= nu, nU= Hp* nu
303
303
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 )
310
310
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 )
313
313
ΔŨ = collect (ΔŨtup)
314
314
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, ΔŨ)
318
317
g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
319
318
last_ΔŨtup_float = ΔŨtup
320
319
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, Ŷ, ΔŨ)
323
322
end
324
323
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 )
327
326
ΔŨ = collect (ΔŨtup)
328
327
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, ΔŨ)
332
331
g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
333
332
last_ΔŨtup_dual = ΔŨtup
334
333
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, Ŷ, ΔŨ)
337
336
end
338
337
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 )
341
340
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)
344
342
ΔŨ = collect (ΔŨtup)
345
- Ŷ, x̂end = predict! (Ŷ, x̂, u0 , mpc, model, ΔŨ)
343
+ Ŷ, x̂end = predict! (Ŷ, x̂, u , mpc, model, ΔŨ)
346
344
g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
347
345
last_ΔŨtup_float = ΔŨtup
348
346
end
349
347
return g[i]
350
348
end
351
349
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 )
354
352
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)
357
354
ΔŨ = collect (ΔŨtup)
358
- Ŷ, x̂end = predict! (Ŷ, x̂, u0 , mpc, model, ΔŨ)
355
+ Ŷ, x̂end = predict! (Ŷ, x̂, u , mpc, model, ΔŨ)
359
356
g = con_nonlinprog! (g, mpc, model, x̂end , Ŷ, ΔŨ)
360
357
last_ΔŨtup_dual = ΔŨtup
361
358
end
0 commit comments