@@ -35,8 +35,8 @@ See also [`LinMPC`](@ref), [`ExplicitMPC`](@ref), [`NonLinMPC`](@ref).
35
35
in the future by default or ``\m athbf{d̂}(k+j)=\m athbf{d}(k)`` for ``j=1`` to ``H_p``.
36
36
- `R̂y=repeat(ry, mpc.Hp)` or *`Rhaty`* : predicted output setpoints ``\m athbf{R̂_y}``, constant
37
37
in the future by default or ``\m athbf{r̂_y}(k+j)=\m athbf{r_y}(k)`` for ``j=1`` to ``H_p``.
38
- - `R̂u=mpc.Uop` or *`Rhatu`* : predicted manipulated input setpoints, constant in the future
39
- by default or ``\m athbf{r̂_u}(k+j)=\m athbf{u_{op}}`` for ``j=0`` to ``H_p-1``.
38
+ - `R̂u=mpc.Uop` or *`Rhatu`* : predicted manipulated input setpoints `` \m athbf{R̂_u}`` , constant
39
+ in the future by default or ``\m athbf{r̂_u}(k+j)=\m athbf{u_{op}}`` for ``j=0`` to ``H_p-1``.
40
40
41
41
# Examples
42
42
```jldoctest
@@ -127,9 +127,9 @@ function getinfo(mpc::PredictiveController{NT}) where NT<:Real
127
127
Ŷ = Ȳ
128
128
Ŷ .= @views Ŷe[model. ny+ 1 : end ]
129
129
oldF = copy (mpc. F)
130
- predictstoch! (mpc, mpc. estim)
131
- Ŷs .= mpc . F # predictstoch! init mpc.F with Ŷs value if estim is an InternalModel
132
- mpc . F .= oldF # restore old F value
130
+ F = predictstoch! (mpc, mpc. estim)
131
+ Ŷs .= F # predictstoch! init mpc.F with Ŷs value if estim is an InternalModel
132
+ F .= oldF # restore old F value
133
133
info[:ΔU ] = mpc. ΔŨ[1 : mpc. Hc* model. nu]
134
134
info[:ϵ ] = mpc. nϵ == 1 ? mpc. ΔŨ[end ] : zero (NT)
135
135
info[:J ] = J
@@ -479,12 +479,14 @@ solution. A failed optimization prints an `@error` log in the REPL and returns t
479
479
warm-start value.
480
480
"""
481
481
function optim_objective! (mpc:: PredictiveController{NT} ) where {NT<: Real }
482
- optim = mpc. optim
483
- model = mpc. estim . model
482
+ model, optim = mpc . estim . model, mpc. optim
483
+ nu, Hc = model . nu, mpc. Hc
484
484
ΔŨvar:: Vector{JuMP.VariableRef} = optim[:ΔŨvar ]
485
485
# initial ΔŨ (warm-start): [Δu_{k-1}(k); Δu_{k-1}(k+1); ... ; 0_{nu × 1}; ϵ_{k-1}]
486
- ϵ0 = (mpc. nϵ == 1 ) ? mpc. ΔŨ[end ] : empty (mpc. ΔŨ)
487
- ΔŨ0 = [mpc. ΔŨ[(model. nu+ 1 ): (mpc. Hc* model. nu)]; zeros (NT, model. nu); ϵ0]
486
+ ΔŨ0 = mpc. buffer. ΔŨ
487
+ ΔŨ0[1 : (Hc* nu- nu)] .= @views mpc. ΔŨ[nu+ 1 : Hc* nu]
488
+ ΔŨ0[(Hc* nu- nu+ 1 ): (Hc* nu)] .= 0
489
+ mpc. nϵ == 1 && (ΔŨ0[end ] = mpc. ΔŨ[end ])
488
490
JuMP. set_start_value .(ΔŨvar, ΔŨ0)
489
491
set_objective_linear_coef! (mpc, ΔŨvar)
490
492
try
0 commit comments