@@ -209,11 +209,11 @@ function setnonlincon!(mpc::NonLinMPC, model::NonLinModel)
209209 ΔŨ = mpc. optim[:ΔŨ ]
210210 con = mpc. con
211211 map (con -> delete (optim, con), all_nonlinear_constraints (optim))
212- for i in findall (con. i_Ŷmin )
212+ for i in findall (. ! isinf .( con. Ŷmin) )
213213 f_sym = Symbol (" C_Ŷmin_$(i) " )
214214 add_nonlinear_constraint (optim, :($ (f_sym)($ (ΔŨ... )) <= 0 ))
215215 end
216- for i in findall (con. i_Ŷmax )
216+ for i in findall (. ! isinf .( con. Ŷmax) )
217217 f_sym = Symbol (" C_Ŷmax_$(i) " )
218218 add_nonlinear_constraint (optim, :($ (f_sym)($ (ΔŨ... )) <= 0 ))
219219 end
@@ -279,17 +279,17 @@ function con_nonlinprog(mpc::NonLinMPC, model::SimModel, ΔŨ::NTuple{N, T}) wh
279279 ΔŨ = collect (ΔŨ) # convert NTuple to Vector
280280 U0 = mpc. S̃_Hp* ΔŨ + mpc. T_Hp* (mpc. estim. lastu0)
281281 Ŷ = evalŶ (mpc, model, mpc. x̂d, mpc. d0, mpc. D̂0, U0)
282- # replace -Inf with 0 to avoid INVALID_MODEL error
283- C_Ŷmin = zeros (T, length (Ŷ))
284- C_Ŷmax = zeros (T, length (Ŷ))
285282 if ! isinf (mpc. C) # constraint softening activated :
286283 ϵ = ΔŨ[end ]
287- C_Ŷmin[mpc . con . i_Ŷmin] = (mpc. con. Ŷmin - Ŷ - ϵ* mpc. con. c_Ŷmin)[mpc . con . i_Ŷmin]
288- C_Ŷmax[mpc . con . i_Ŷmax] = (Ŷ - mpc. con. Ŷmax - ϵ* mpc. con. c_Ŷmax)[mpc . con . i_Ŷmax]
284+ C_Ŷmin = (mpc. con. Ŷmin - Ŷ) - ϵ* mpc. con. c_Ŷmin
285+ C_Ŷmax = (Ŷ - mpc. con. Ŷmax) - ϵ* mpc. con. c_Ŷmax
289286 else # no constraint softening :
290- C_Ŷmin[mpc . con . i_Ŷmin] = (mpc. con. Ŷmin - Ŷ)[mpc . con . i_Ŷmin]
291- C_Ŷmax[mpc . con . i_Ŷmax] = (Ŷ - mpc. con. Ŷmax)[mpc . con . i_Ŷmax]
287+ C_Ŷmin = (mpc. con. Ŷmin - Ŷ)
288+ C_Ŷmax = (Ŷ - mpc. con. Ŷmax)
292289 end
290+ # replace -Inf with 0 to avoid INVALID_MODEL error :
291+ C_Ŷmin[isinf .(C_Ŷmin)] .= 0
292+ C_Ŷmax[isinf .(C_Ŷmax)] .= 0
293293 C = [C_Ŷmin; C_Ŷmax]
294294 return C
295295end
0 commit comments