Skip to content

Commit 37a3b10

Browse files
committed
remove i_Ymin and i_Ymax fields in ControllerConstraint
1 parent cf50ced commit 37a3b10

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

src/controller/nonlinmpc.jl

+9-9
Original file line numberDiff line numberDiff line change
@@ -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
295295
end

src/predictive_control.jl

+1-5
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ struct ControllerConstraint
3636
A ::Matrix{Float64}
3737
b ::Vector{Float64}
3838
i_b ::BitVector
39-
i_Ŷmin ::BitVector
40-
i_Ŷmax ::BitVector
4139
c_Ŷmin ::Vector{Float64}
4240
c_Ŷmax ::Vector{Float64}
4341
end
@@ -117,13 +115,11 @@ function setconstraint!(
117115
size(ŷmin) == (ny,) || error("ŷmin size must be $((ny,))")
118116
Ŷmin = repeat(ŷmin, Hp)
119117
con.Ŷmin[:] = Ŷmin
120-
con.i_Ŷmin[:] = .!isinf.(Ŷmin)
121118
end
122119
if !isnothing(ŷmax)
123120
size(ŷmax) == (ny,) || error("ŷmax size must be $((ny,))")
124121
Ŷmax = repeat(ŷmax, Hp)
125122
con.Ŷmax[:] = Ŷmax
126-
con.i_Ŷmax[:] = .!isinf.(Ŷmax)
127123
end
128124
if !isnothing(c_umin)
129125
!isinf(C) || error("Slack variable Cwt must be finite to set softness parameters")
@@ -665,7 +661,7 @@ function init_defaultcon(model, Hp, Hc, C, S_Hp, S_Hc, N_Hc, E)
665661
con = ControllerConstraint(
666662
Umin , Umax , ΔŨmin , ΔŨmax , Ŷmin , Ŷmax,
667663
A_Umin , A_Umax, A_ΔŨmin, A_ΔŨmax , A_Ŷmin, A_Ŷmax,
668-
A , b , i_b , i_Ŷmin, i_Ŷmax, c_Ŷmin, c_Ŷmax
664+
A , b , i_b , c_Ŷmin , c_Ŷmax
669665
)
670666
return con, S̃_Hp, Ñ_Hc, Ẽ
671667
end

0 commit comments

Comments
 (0)