@@ -209,11 +209,11 @@ function setnonlincon!(mpc::NonLinMPC, model::NonLinModel)
209
209
ΔŨ = mpc. optim[:ΔŨ ]
210
210
con = mpc. con
211
211
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) )
213
213
f_sym = Symbol (" C_Ŷmin_$(i) " )
214
214
add_nonlinear_constraint (optim, :($ (f_sym)($ (ΔŨ... )) <= 0 ))
215
215
end
216
- for i in findall (con. i_Ŷmax )
216
+ for i in findall (. ! isinf .( con. Ŷmax) )
217
217
f_sym = Symbol (" C_Ŷmax_$(i) " )
218
218
add_nonlinear_constraint (optim, :($ (f_sym)($ (ΔŨ... )) <= 0 ))
219
219
end
@@ -279,17 +279,17 @@ function con_nonlinprog(mpc::NonLinMPC, model::SimModel, ΔŨ::NTuple{N, T}) wh
279
279
ΔŨ = collect (ΔŨ) # convert NTuple to Vector
280
280
U0 = mpc. S̃_Hp* ΔŨ + mpc. T_Hp* (mpc. estim. lastu0)
281
281
Ŷ = 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 (Ŷ))
285
282
if ! isinf (mpc. C) # constraint softening activated :
286
283
ϵ = ΔŨ[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
289
286
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)
292
289
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
293
293
C = [C_Ŷmin; C_Ŷmax]
294
294
return C
295
295
end
0 commit comments