Skip to content

Commit d2b0782

Browse files
committed
default constraints in init_defaultcon
1 parent 599d582 commit d2b0782

File tree

4 files changed

+40
-51
lines changed

4 files changed

+40
-51
lines changed

example/juMPC.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ end
129129

130130
@time u_data, y_data, r_data, d_data = test_mpc(linModel4, mpc)
131131

132-
133132
@time u_data, y_data, r_data, d_data = test_mpc(linModel4, nmpc)
134133

135134
using PlotThemes, Plots

src/controller/linmpc.jl

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,33 +42,9 @@ struct LinMPC{S<:StateEstimator} <: PredictiveController
4242
C = Cwt
4343
# manipulated input setpoint predictions are constant over Hp :
4444
R̂u = ~iszero(Lwt) ? repeat(ru, Hp) : R̂u = Float64[]
45-
umin, umax = fill(-Inf, nu), fill(+Inf, nu)
46-
Δumin, Δumax = fill(-Inf, nu), fill(+Inf, nu)
47-
ŷmin, ŷmax = fill(-Inf, ny), fill(+Inf, ny)
48-
c_umin, c_umax = fill(0.0, nu), fill(0.0, nu)
49-
c_Δumin, c_Δumax = fill(0.0, nu), fill(0.0, nu)
50-
c_ŷmin, c_ŷmax = fill(1.0, ny), fill(1.0, ny)
51-
Umin, Umax, ΔUmin, ΔUmax, Ŷmin, Ŷmax =
52-
repeat_constraints(Hp, Hc, umin, umax, Δumin, Δumax, ŷmin, ŷmax)
53-
c_Umin, c_Umax, c_ΔUmin, c_ΔUmax, c_Ŷmin, c_Ŷmax =
54-
repeat_constraints(Hp, Hc, c_umin, c_umax, c_Δumin, c_Δumax, c_ŷmin, c_ŷmax)
5545
S_Hp, T_Hp, S_Hc, T_Hc = init_ΔUtoU(nu, Hp, Hc)
5646
E, F, G, J, Kd, Q = init_deterpred(model, Hp, Hc)
57-
A_Umin, A_Umax, S̃_Hp = relaxU(C, c_Umin, c_Umax, S_Hp, S_Hc)
58-
A_ΔŨmin, A_ΔŨmax, ΔŨmin, ΔŨmax, Ñ_Hc = relaxΔU(C,c_ΔUmin,c_ΔUmax,ΔUmin,ΔUmax,N_Hc)
59-
A_Ŷmin, A_Ŷmax, Ẽ = relaxŶ(model, C, c_Ŷmin, c_Ŷmax, E)
60-
i_Umin, i_Umax = .!isinf.(Umin), .!isinf.(Umax)
61-
i_ΔŨmin, i_ΔŨmax = .!isinf.(ΔŨmin), .!isinf.(ΔŨmax)
62-
i_Ŷmin, i_Ŷmax = .!isinf.(Ŷmin), .!isinf.(Ŷmax)
63-
A, i_b, b = init_linconstraint(model,
64-
A_Umin, A_Umax, A_ΔŨmin, A_ΔŨmax, A_Ŷmin, A_Ŷmax,
65-
i_Umin, i_Umax, i_ΔŨmin, i_ΔŨmax, i_Ŷmin, i_Ŷmax
66-
)
67-
con = ControllerConstraint(
68-
Umin , Umax , ΔŨmin , ΔŨmax , Ŷmin , Ŷmax,
69-
A_Umin , A_Umax, A_ΔŨmin, A_ΔŨmax , A_Ŷmin, A_Ŷmax,
70-
A , b , i_b , i_Ŷmin, i_Ŷmax, c_Ŷmin, c_Ŷmax
71-
)
47+
con, S̃_Hp, Ñ_Hc, Ẽ = init_defaultcon(model, Hp, Hc, C, S_Hp, S_Hc, N_Hc, E)
7248
nvar = size(Ẽ, 2)
7349
P̃, q̃ = init_quadprog(model, Ẽ, S̃_Hp, M_Hp, Ñ_Hc, L_Hp)
7450
Ks, Ps = init_stochpred(estim, Hp)

src/controller/nonlinmpc.jl

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,33 +46,9 @@ struct NonLinMPC{S<:StateEstimator, JEFunc<:Function} <: PredictiveController
4646
C = Cwt
4747
# manipulated input setpoint predictions are constant over Hp :
4848
R̂u = ~iszero(Lwt) ? repeat(ru, Hp) : R̂u = Float64[]
49-
umin, umax = fill(-Inf, nu), fill(+Inf, nu)
50-
Δumin, Δumax = fill(-Inf, nu), fill(+Inf, nu)
51-
ŷmin, ŷmax = fill(-Inf, ny), fill(+Inf, ny)
52-
c_umin, c_umax = fill(0.0, nu), fill(0.0, nu)
53-
c_Δumin, c_Δumax = fill(0.0, nu), fill(0.0, nu)
54-
c_ŷmin, c_ŷmax = fill(1.0, ny), fill(1.0, ny)
55-
Umin, Umax, ΔUmin, ΔUmax, Ŷmin, Ŷmax =
56-
repeat_constraints(Hp, Hc, umin, umax, Δumin, Δumax, ŷmin, ŷmax)
57-
c_Umin, c_Umax, c_ΔUmin, c_ΔUmax, c_Ŷmin, c_Ŷmax =
58-
repeat_constraints(Hp, Hc, c_umin, c_umax, c_Δumin, c_Δumax, c_ŷmin, c_ŷmax)
5949
S_Hp, T_Hp, S_Hc, T_Hc = init_ΔUtoU(nu, Hp, Hc)
6050
E, F, G, J, Kd, Q = init_deterpred(model, Hp, Hc)
61-
A_Umin, A_Umax, S̃_Hp = relaxU(C, c_Umin, c_Umax, S_Hp, S_Hc)
62-
A_ΔŨmin, A_ΔŨmax, ΔŨmin, ΔŨmax, Ñ_Hc = relaxΔU(C,c_ΔUmin,c_ΔUmax,ΔUmin,ΔUmax,N_Hc)
63-
A_Ŷmin, A_Ŷmax, Ẽ = relaxŶ(model, C, c_Ŷmin, c_Ŷmax, E)
64-
i_Umin, i_Umax = .!isinf.(Umin), .!isinf.(Umax)
65-
i_ΔŨmin, i_ΔŨmax = .!isinf.(ΔŨmin), .!isinf.(ΔŨmax)
66-
i_Ŷmin, i_Ŷmax = .!isinf.(Ŷmin), .!isinf.(Ŷmax)
67-
A, i_b, b = init_linconstraint(model,
68-
A_Umin, A_Umax, A_ΔŨmin, A_ΔŨmax, A_Ŷmin, A_Ŷmax,
69-
i_Umin, i_Umax, i_ΔŨmin, i_ΔŨmax, i_Ŷmin, i_Ŷmax
70-
)
71-
con = ControllerConstraint(
72-
Umin , Umax , ΔŨmin , ΔŨmax , Ŷmin , Ŷmax,
73-
A_Umin , A_Umax, A_ΔŨmin, A_ΔŨmax , A_Ŷmin, A_Ŷmax,
74-
A , b , i_b , i_Ŷmin, i_Ŷmax, c_Ŷmin, c_Ŷmax
75-
)
51+
con, S̃_Hp, Ñ_Hc, Ẽ = init_defaultcon(model, Hp, Hc, C, S_Hp, S_Hc, N_Hc, E)
7652
nvar = size(Ẽ, 2)
7753
P̃, q̃ = init_quadprog(model, Ẽ, S̃_Hp, M_Hp, Ñ_Hc, L_Hp)
7854
Ks, Ps = init_stochpred(estim, Hp)

src/predictive_control.jl

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,44 @@ struct ControllerConstraint
4242
c_Ŷmax ::Vector{Float64}
4343
end
4444

45+
"""
46+
initdefaultcon(model, C, S_Hp, S_Hc, N_Hc, E)
47+
48+
Init `ContollerConstraint` struct with default paramaters.
49+
50+
Also return `S̃_Hp`, `Ñ_Hc` and `Ẽ` matrices for the the augmented decision vector `ΔŨ`.
51+
"""
52+
function init_defaultcon(model, Hp, Hc, C, S_Hp, S_Hc, N_Hc, E)
53+
nu, ny = model.nu, model.ny
54+
umin, umax = fill(-Inf, nu), fill(+Inf, nu)
55+
Δumin, Δumax = fill(-Inf, nu), fill(+Inf, nu)
56+
ŷmin, ŷmax = fill(-Inf, ny), fill(+Inf, ny)
57+
c_umin, c_umax = fill(0.0, nu), fill(0.0, nu)
58+
c_Δumin, c_Δumax = fill(0.0, nu), fill(0.0, nu)
59+
c_ŷmin, c_ŷmax = fill(1.0, ny), fill(1.0, ny)
60+
Umin, Umax, ΔUmin, ΔUmax, Ŷmin, Ŷmax =
61+
repeat_constraints(Hp, Hc, umin, umax, Δumin, Δumax, ŷmin, ŷmax)
62+
c_Umin, c_Umax, c_ΔUmin, c_ΔUmax, c_Ŷmin, c_Ŷmax =
63+
repeat_constraints(Hp, Hc, c_umin, c_umax, c_Δumin, c_Δumax, c_ŷmin, c_ŷmax)
64+
A_Umin, A_Umax, S̃_Hp = relaxU(C, c_Umin, c_Umax, S_Hp, S_Hc)
65+
A_ΔŨmin, A_ΔŨmax, ΔŨmin, ΔŨmax, Ñ_Hc = relaxΔU(C,c_ΔUmin,c_ΔUmax,ΔUmin,ΔUmax,N_Hc)
66+
A_Ŷmin, A_Ŷmax, Ẽ = relaxŶ(model, C, c_Ŷmin, c_Ŷmax, E)
67+
i_Umin, i_Umax = .!isinf.(Umin), .!isinf.(Umax)
68+
i_ΔŨmin, i_ΔŨmax = .!isinf.(ΔŨmin), .!isinf.(ΔŨmax)
69+
i_Ŷmin, i_Ŷmax = .!isinf.(Ŷmin), .!isinf.(Ŷmax)
70+
A, i_b, b = init_linconstraint(
71+
model,
72+
A_Umin, A_Umax, A_ΔŨmin, A_ΔŨmax, A_Ŷmin, A_Ŷmax,
73+
i_Umin, i_Umax, i_ΔŨmin, i_ΔŨmax, i_Ŷmin, i_Ŷmax
74+
)
75+
con = ControllerConstraint(
76+
Umin , Umax , ΔŨmin , ΔŨmax , Ŷmin , Ŷmax,
77+
A_Umin , A_Umax, A_ΔŨmin, A_ΔŨmax , A_Ŷmin, A_Ŷmax,
78+
A , b , i_b , i_Ŷmin, i_Ŷmax, c_Ŷmin, c_Ŷmax
79+
)
80+
return con, S̃_Hp, Ñ_Hc, Ẽ
81+
end
82+
4583
@doc raw"""
4684
setconstraint!(mpc::PredictiveController; <keyword arguments>)
4785

0 commit comments

Comments
 (0)