Skip to content

Commit b38eec4

Browse files
committed
test: comparing move blocking results in all the cases
1 parent 6256694 commit b38eec4

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ModelPredictiveControl"
22
uuid = "61f9bdb8-6ae4-484a-811f-bbf86720c31c"
3-
version = "1.14.3"
3+
version = "1.14.4"
44
authors = ["Francis Gagnon"]
55

66
[deps]

test/3_test_predictive_control.jl

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,3 +1472,42 @@ end
14721472
@test U_linmpc U_nonlinmpc2 rtol=1e-3 atol=1e-3
14731473
@test U_nonlinmpc1 U_nonlinmpc2 rtol=1e-3 atol=1e-3
14741474
end
1475+
1476+
@testitem "LinMPC v.s. NonLinMPC with move blocking" setup=[SetupMPCtests] begin
1477+
using .SetupMPCtests, ControlSystemsBase, LinearAlgebra
1478+
linmodel = setop!(LinModel(sys,Ts,i_d=[3]), uop=[10,50], yop=[50,30], dop=[20])
1479+
G = tf( 10, [400, 1])
1480+
Ts = 100.0
1481+
linmodel = LinModel(G, Ts)
1482+
f = (x, u, _, p) -> p.A * x + p.Bu * u
1483+
h = (x, _, p) -> p.C * x
1484+
nonlinmodel = NonLinModel(f, h, Ts, 1, 1, 1, p=linmodel, solver=nothing)
1485+
Mwt, Nwt, Hp, Hc = [1], [0], 30, [1, 2, 3, 24]
1486+
N = 25
1487+
mpc1 = LinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=SingleShooting())
1488+
mpc2 = LinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=MultipleShooting())
1489+
mpc3 = NonLinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=SingleShooting())
1490+
mpc4 = NonLinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=MultipleShooting())
1491+
mpc5 = NonLinMPC(nonlinmodel; Mwt, Nwt, Hp, Hc, transcription=SingleShooting())
1492+
mpc6 = NonLinMPC(nonlinmodel; Mwt, Nwt, Hp, Hc, transcription=MultipleShooting())
1493+
U1, U2, U3 = zeros(1, N), zeros(1, N), zeros(1, N)
1494+
U4, U5, U6 = zeros(1, N), zeros(1, N), zeros(1, N)
1495+
for i=1:N
1496+
r = [5.0]
1497+
y = linmodel()
1498+
preparestate!(mpc1, y); preparestate!(mpc2, y); preparestate!(mpc3, y);
1499+
preparestate!(mpc4, y); preparestate!(mpc5, y); preparestate!(mpc6, y);
1500+
u1 = moveinput!(mpc1, r); u2 = moveinput!(mpc2, r); u3 = moveinput!(mpc3, r);
1501+
u4 = moveinput!(mpc4, r); u5 = moveinput!(mpc5, r); u6 = moveinput!(mpc6, r);
1502+
U1[:, i] = u1; U2[:, i] = u2; U3[:, i] = u3;
1503+
U4[:, i] = u4; U5[:, i] = u5; U6[:, i] = u6;
1504+
updatestate!(mpc1, u1, y); updatestate!(mpc2, u2, y); updatestate!(mpc3, u3, y);
1505+
updatestate!(mpc4, u4, y); updatestate!(mpc5, u5, y); updatestate!(mpc6, u6, y);
1506+
updatestate!(linmodel, u1);
1507+
end
1508+
@test U1 U2 rtol=1e-3 atol=1e-3
1509+
@test U1 U3 rtol=1e-3 atol=1e-3
1510+
@test U1 U4 rtol=1e-3 atol=1e-3
1511+
@test U1 U5 rtol=1e-3 atol=1e-3
1512+
@test U1 U6 rtol=1e-3 atol=1e-3
1513+
end

0 commit comments

Comments
 (0)