@@ -380,8 +380,8 @@ function getinfo(mpc::PredictiveController)
380380 info[:J ] = obj_nonlinprog (mpc, mpc. estim. model, Ŷ, mpc. ΔŨ) + mpc. p[]
381381 info[:U ] = mpc. S̃* mpc. ΔŨ + mpc. T* (mpc. estim. lastu0 + mpc. estim. model. uop)
382382 info[:u ] = info[:U ][1 : mpc. estim. model. nu]
383- info[:d ] = mpc. d
384- info[:D̂ ] = mpc. D̂
383+ info[:d ] = mpc. d0 + mpc . estim . model . dop
384+ info[:D̂ ] = mpc. D̂0 + mpc . Dop
385385 info[:ŷ ] = mpc. ŷ
386386 info[:Ŷ ] = Ŷ
387387 info[:Ŷs ] = mpc. Ŷop - repeat (mpc. estim. model. yop, mpc. Hp) # Ŷop = Ŷs + Yop
@@ -448,8 +448,8 @@ function initpred!(mpc::PredictiveController, model::LinModel, d, ym, D̂, R̂y,
448448 predictstoch! (mpc, mpc. estim, d, ym) # init mpc.Ŷop for InternalModel
449449 mpc. F[:] = mpc. K* mpc. estim. x̂ + mpc. Q* mpc. estim. lastu0 + mpc. Ŷop
450450 if model. nd ≠ 0
451- mpc. d [:], mpc. D̂ [:] = d, D̂
452- mpc. F[:] = mpc. F + mpc. G* ( mpc. d - model . dop) + mpc. J* ( mpc. D̂ - mpc . Dop)
451+ mpc. d0 [:], mpc. D̂0 [:] = d - model . dop , D̂ - mpc . Dop
452+ mpc. F[:] = mpc. F + mpc. G* mpc. d0 + mpc. J* mpc. D̂0
453453 end
454454 mpc. R̂y[:], mpc. R̂u[:] = R̂y, R̂u
455455 Ẑ = mpc. F - R̂y
@@ -458,8 +458,8 @@ function initpred!(mpc::PredictiveController, model::LinModel, d, ym, D̂, R̂y,
458458 if ~ mpc. noR̂u
459459 lastu = mpc. estim. lastu0 + model. uop
460460 V̂ = mpc. T* lastu - mpc. R̂u
461- mpc. q̃[:] += 2 (mpc. L_Hp* mpc. S̃)' * V̂
462- mpc. p[] += V̂' * mpc. L_Hp* V̂
461+ mpc. q̃[:] = mpc . q̃ + 2 (mpc. L_Hp* mpc. S̃)' * V̂
462+ mpc. p[] = mpc . p[] + V̂' * mpc. L_Hp* V̂
463463 end
464464 return nothing
465465end
@@ -476,7 +476,7 @@ Init `Ŷop`, `d0` and `D̂0` matrices when model is not a [`LinModel`](@ref).
476476function initpred! (mpc:: PredictiveController , model:: SimModel , d, ym, D̂, R̂y, R̂u)
477477 predictstoch! (mpc, mpc. estim, d, ym) # init mpc.Ŷop for InternalModel
478478 if model. nd ≠ 0
479- mpc. d [:], mpc. D̂ [:] = d, D̂
479+ mpc. d0 [:], mpc. D̂0 [:] = d - model . dop , D̂ - mpc . Dop
480480 end
481481 mpc. R̂y[:], mpc. R̂u[:] = R̂y, R̂u
482482 return nothing
@@ -522,13 +522,13 @@ function predict!(Ŷ, mpc::PredictiveController, model::SimModel, ΔŨ::Vector
522522 nu, ny, nd, Hp, Hc = model. nu, model. ny, model. nd, mpc. Hp, mpc. Hc
523523 x̂ :: Vector{T} = copy (mpc. estim. x̂)
524524 u0:: Vector{T} = copy (mpc. estim. lastu0)
525- d0 = mpc. d - model . dop
525+ d0:: Vector{T} = copy ( mpc. d0)
526526 for j= 1 : Hp
527527 if j ≤ Hc
528- u0[:] = @views ΔŨ[(1 + nu* (j- 1 )): (nu* j)] + u0
528+ u0[:] = u0 + ΔŨ[(1 + nu* (j- 1 )): (nu* j)]
529529 end
530530 x̂[:] = f̂ (mpc. estim, x̂, u0, d0)
531- d0[:] = @views mpc. D̂ [(1 + nd* (j- 1 )): (nd* j)] - model . dop
531+ d0[:] = mpc. D̂0 [(1 + nd* (j- 1 )): (nd* j)]
532532 Ŷ[(1 + ny* (j- 1 )): (ny* j)] = ĥ (mpc. estim, x̂, d0)
533533 end
534534 Ŷ[:] = Ŷ + mpc. Ŷop # Ŷop = Ŷs + Yop, and Ŷs=0 if mpc.estim is not an InternalModel
@@ -789,7 +789,7 @@ function obj_nonlinprog(
789789 U = mpc. S̃* ΔŨ + mpc. T* (mpc. estim. lastu0 + model. uop)
790790 UE = [U; U[(end - model. nu + 1 ): end ]]
791791 ŶE = [mpc. ŷ; Ŷ]
792- D̂E = [mpc. d ; mpc. D̂ ]
792+ D̂E = [mpc. d0 + model . dop ; mpc. D̂0 + mpc . Dop ]
793793 J += mpc. E* mpc. JE (UE, ŶE, D̂E)
794794 end
795795 return J
@@ -823,7 +823,7 @@ function obj_nonlinprog(
823823 if ! iszero (mpc. E)
824824 UE = [U; U[(end - model. nu + 1 ): end ]]
825825 ŶE = [mpc. ŷ; Ŷ]
826- D̂E = [mpc. d ; mpc. D̂ ]
826+ D̂E = [mpc. d0 + model . dop ; mpc. D̂0 + mpc . Dop ]
827827 E_JE = mpc. E* mpc. JE (UE, ŶE, D̂E)
828828 else
829829 E_JE = 0.0
0 commit comments