@@ -269,8 +269,8 @@ function init_optimization!(mpc::NonLinMPC)
269269 ΔŨ = collect (ΔŨtup)
270270 if ΔŨtup != last_ΔŨtup_float
271271 C = get_tmp (C_cache, ΔŨtup[1 ])
272- Ŷ[:] = predict ( mpc, model, ΔŨ)
273- C[:] = con_nonlinprog ( mpc, model, Ŷ, ΔŨ)
272+ predict! (Ŷ, mpc, model, ΔŨ)
273+ con_nonlinprog! (C, mpc, model, Ŷ, ΔŨ)
274274 last_ΔŨtup_float = ΔŨtup
275275 end
276276 return obj_nonlinprog (mpc, model, Ŷ, ΔŨ)
@@ -280,8 +280,8 @@ function init_optimization!(mpc::NonLinMPC)
280280 ΔŨ = collect (ΔŨtup)
281281 if ΔŨtup != last_ΔŨtup_dual
282282 C = get_tmp (C_cache, ΔŨtup[1 ])
283- Ŷ[:] = predict ( mpc, model, ΔŨ)
284- C[:] = con_nonlinprog ( mpc, model, Ŷ, ΔŨ)
283+ predict! (Ŷ, mpc, model, ΔŨ)
284+ con_nonlinprog! (C, mpc, model, Ŷ, ΔŨ)
285285 last_ΔŨtup_dual = ΔŨtup
286286 end
287287 return obj_nonlinprog (mpc, model, Ŷ, ΔŨ)
@@ -291,8 +291,8 @@ function init_optimization!(mpc::NonLinMPC)
291291 if ΔŨtup != last_ΔŨtup_float
292292 Ŷ = get_tmp (Ŷ_cache, ΔŨtup[1 ])
293293 ΔŨ = collect (ΔŨtup)
294- Ŷ[:] = predict ( mpc, model, ΔŨ)
295- C[:] = con_nonlinprog ( mpc, model, Ŷ, ΔŨ)
294+ predict! (Ŷ, mpc, model, ΔŨ)
295+ con_nonlinprog! (C, mpc, model, Ŷ, ΔŨ)
296296 last_ΔŨtup_float = ΔŨtup
297297 end
298298 return C[i]
@@ -302,8 +302,8 @@ function init_optimization!(mpc::NonLinMPC)
302302 if ΔŨtup != last_ΔŨtup_dual
303303 Ŷ = get_tmp (Ŷ_cache, ΔŨtup[1 ])
304304 ΔŨ = collect (ΔŨtup)
305- Ŷ[:] = predict ( mpc, model, ΔŨ)
306- C[:] = con_nonlinprog ( mpc, model, Ŷ, ΔŨ)
305+ predict! (Ŷ, mpc, model, ΔŨ)
306+ con_nonlinprog! (C, mpc, model, Ŷ, ΔŨ)
307307 last_ΔŨtup_dual = ΔŨtup
308308 end
309309 return C[i]
@@ -351,30 +351,28 @@ end
351351
352352
353353"""
354- con_nonlinprog( mpc::NonLinMPC, ::LinModel, ΔŨ::Vector{Real})
354+ con_nonlinprog!(C, mpc::NonLinMPC, model ::LinModel, ΔŨ::Vector{Real})
355355
356356Nonlinear constraints for [`NonLinMPC`](@ref) when `model` is a [`LinModel`](@ref).
357357"""
358- function con_nonlinprog (mpc :: NonLinMPC , model :: LinModel , _, ΔŨ :: Vector{T} ) where {T<: Real }
359- return zeros (T, 0 )
358+ function con_nonlinprog! (C, :: NonLinMPC , :: LinModel , _ , :: Vector{T} ) where {T<: Real }
359+ return C
360360end
361361"""
362- con_nonlinprog( mpc::NonLinMPC, model::NonLinModel, ΔŨ::Vector{Real})
362+ con_nonlinprog!(C, mpc::NonLinMPC, model::NonLinModel, ΔŨ::Vector{Real})
363363
364364Nonlinear constrains for [`NonLinMPC`](@ref) when `model` is not a [`LinModel`](@ref).
365365"""
366- function con_nonlinprog (mpc:: NonLinMPC , :: SimModel , Ŷ, ΔŨ:: Vector{T} ) where {T<: Real }
366+ function con_nonlinprog! (C, mpc:: NonLinMPC , model:: SimModel , Ŷ, ΔŨ:: Vector{T} ) where {T<: Real }
367+ ny, Hp = model. ny, mpc. Hp
367368 if ! isinf (mpc. C) # constraint softening activated :
368369 ϵ = ΔŨ[end ]
369- C_Ymin = (mpc. con. Ymin - Ŷ) - ϵ* mpc. con. c_Ymin
370- C_Ymax = (Ŷ - mpc. con. Ymax) - ϵ* mpc. con. c_Ymax
370+ C[ begin : (Hp * ny)] = (mpc. con. Ymin - Ŷ) - ϵ* mpc. con. c_Ymin
371+ C[(Hp * ny + 1 ) : end ] = (Ŷ - mpc. con. Ymax) - ϵ* mpc. con. c_Ymax
371372 else # no constraint softening :
372- C_Ymin = (mpc. con. Ymin - Ŷ)
373- C_Ymax = (Ŷ - mpc. con. Ymax)
373+ C[ begin : (Hp * ny)] = (mpc. con. Ymin - Ŷ)
374+ C[(Hp * ny + 1 ) : end ] = (Ŷ - mpc. con. Ymax)
374375 end
375- # replace -Inf with 0 to avoid INVALID_MODEL error :
376- C_Ymin[isinf .(C_Ymin)] .= 0
377- C_Ymax[isinf .(C_Ymax)] .= 0
378- C = [C_Ymin; C_Ymax]
376+ C[isinf .(C)] .= 0 # replace ±Inf with 0 to avoid INVALID_MODEL error
379377 return C
380378end
0 commit comments