@@ -179,8 +179,8 @@ They are computed with these equations using in-place operations:
179179\b egin{aligned}
180180 \m athbf{F} &= \m athbf{G d_0}(k) + \m athbf{J D̂_0} + \m athbf{K x̂_0}(k)
181181 + \m athbf{V u_0}(k-1) + \m athbf{B} + \m athbf{Ŷ_s} \\
182- \m athbf{C_y} &= \m athbf{F} - ( \m athbf{R̂_y - Y_{op}}) \\
183- \m athbf{C_u} &= \m athbf{T} \m athbf{u_0 }(k-1) - ( \m athbf{R̂_u - U_{op}}) \\
182+ \m athbf{C_y} &= \m athbf{F} + \m athbf{Y_{op}} - \m athbf{R̂_y} \\
183+ \m athbf{C_u} &= \m athbf{T}\m athbf{u }(k-1) - \m athbf{R̂_u} \\
184184 \m athbf{q̃} &= 2[(\m athbf{M}_{H_p} \m athbf{Ẽ})' \m athbf{C_y}
185185 + (\m athbf{L}_{H_p} \m athbf{S̃})' \m athbf{C_u}] \\
186186 r &= \m athbf{C_y}' \m athbf{M}_{H_p} \m athbf{C_y}
@@ -189,7 +189,9 @@ They are computed with these equations using in-place operations:
189189```
190190"""
191191function initpred! (mpc:: PredictiveController , model:: LinModel , d, D̂, R̂y, R̂u)
192- mul! (mpc. T_lastu0, mpc. T, mpc. estim. lastu0)
192+ lastu = mpc. buffer. u
193+ lastu .= mpc. estim. lastu0 .+ model. uop
194+ mul! (mpc. T_lastu, mpc. T, lastu)
193195 ŷ, F, q̃, r = mpc. ŷ, mpc. F, mpc. q̃, mpc. r
194196 Cy, Cu, M_Hp_Ẽ, L_Hp_S̃ = mpc. buffer. Ŷ, mpc. buffer. U, mpc. buffer. Ẽ, mpc. buffer. S̃
195197 ŷ .= evaloutput (mpc. estim, d)
@@ -210,15 +212,15 @@ function initpred!(mpc::PredictiveController, model::LinModel, d, D̂, R̂y, R̂
210212 # --- output setpoint tracking term ---
211213 mpc. R̂y .= R̂y
212214 if ! mpc. weights. iszero_M_Hp[]
213- Cy .= F .- (R̂y .- mpc . Yop)
215+ Cy .= F .+ mpc . Yop .- R̂y
214216 mul! (M_Hp_Ẽ, mpc. weights. M_Hp, mpc. Ẽ)
215217 mul! (q̃, M_Hp_Ẽ' , Cy, 1 , 1 ) # q̃ = q̃ + M_Hp*Ẽ'*Cy
216218 r .+ = dot (Cy, mpc. weights. M_Hp, Cy) # r = r + Cy'*M_Hp*Cy
217219 end
218220 # --- input setpoint tracking term ---
219221 mpc. R̂u .= R̂u
220222 if ! mpc. weights. iszero_L_Hp[]
221- Cu .= mpc. T_lastu0 .- ( R̂u .- mpc . Uop)
223+ Cu .= mpc. T_lastu .- R̂u
222224 mul! (L_Hp_S̃, mpc. weights. L_Hp, mpc. S̃)
223225 mul! (q̃, L_Hp_S̃' , Cu, 1 , 1 ) # q̃ = q̃ + L_Hp*S̃'*Cu
224226 r .+ = dot (Cu, mpc. weights. L_Hp, Cu) # r = r + Cu'*L_Hp*Cu
234236Init `ŷ, F, d0, D̂0, D̂e, R̂y, R̂u` vectors when model is not a [`LinModel`](@ref).
235237"""
236238function initpred! (mpc:: PredictiveController , model:: SimModel , d, D̂, R̂y, R̂u)
237- mul! (mpc. T_lastu0, mpc. T, mpc. estim. lastu0)
239+ lastu = mpc. buffer. u
240+ lastu .= mpc. estim. lastu0 .+ model. uop
241+ mul! (mpc. T_lastu, mpc. T, lastu)
238242 mpc. ŷ .= evaloutput (mpc. estim, d)
239243 predictstoch! (mpc, mpc. estim) # init F with Ŷs for InternalModel
240244 if model. nd ≠ 0
@@ -281,9 +285,9 @@ function linconstraint!(mpc::PredictiveController, model::LinModel)
281285 mul! (fx̂, mpc. con. jx̂, mpc. D̂0, 1 , 1 )
282286 end
283287 n = 0
284- mpc. con. b[(n+ 1 ): (n+ nU)] .= @. - mpc. con. U0min + mpc. T_lastu0
288+ mpc. con. b[(n+ 1 ): (n+ nU)] .= @. - mpc. con. U0min - mpc . Uop + mpc. T_lastu
285289 n += nU
286- mpc. con. b[(n+ 1 ): (n+ nU)] .= @. + mpc. con. U0max - mpc. T_lastu0
290+ mpc. con. b[(n+ 1 ): (n+ nU)] .= @. + mpc. con. U0max + mpc . Uop - mpc. T_lastu
287291 n += nU
288292 mpc. con. b[(n+ 1 ): (n+ nΔŨ)] .= @. - mpc. con. ΔŨmin
289293 n += nΔŨ
307311function linconstraint! (mpc:: PredictiveController , :: SimModel )
308312 nU, nΔŨ = length (mpc. con. U0min), length (mpc. con. ΔŨmin)
309313 n = 0
310- mpc. con. b[(n+ 1 ): (n+ nU)] .= @. - mpc. con. U0min + mpc. T_lastu0
314+ mpc. con. b[(n+ 1 ): (n+ nU)] .= @. - mpc. con. U0min - mpc . Uop + mpc. T_lastu
311315 n += nU
312- mpc. con. b[(n+ 1 ): (n+ nU)] .= @. + mpc. con. U0max - mpc. T_lastu0
316+ mpc. con. b[(n+ 1 ): (n+ nU)] .= @. + mpc. con. U0max + mpc . Uop - mpc. T_lastu
313317 n += nU
314318 mpc. con. b[(n+ 1 ): (n+ nΔŨ)] .= @. - mpc. con. ΔŨmin
315319 n += nΔŨ
@@ -378,7 +382,7 @@ function extended_predictions!(Ue, Ŷe, Ū, mpc, model, Ŷ0, ΔŨ)
378382 ny, nu = model. ny, model. nu
379383 # --- extended manipulated inputs Ue = [U; u(k+Hp-1)] ---
380384 U = Ū
381- U .= mul! (U, mpc. S̃, ΔŨ) .+ mpc. T_lastu0 .+ mpc . Uop
385+ U .= mul! (U, mpc. S̃, ΔŨ) .+ mpc. T_lastu
382386 Ue[1 : end - nu] .= U
383387 # u(k + Hp) = u(k + Hp - 1) since Δu(k+Hp) = 0 (because Hc ≤ Hp):
384388 Ue[end - nu+ 1 : end ] .= @views U[end - nu+ 1 : end ]
0 commit comments