Skip to content

Commit 24a9a90

Browse files
committed
test: adding ExplicitMPC to move blocking comparison
1 parent c156223 commit 24a9a90

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

test/3_test_predictive_control.jl

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,7 +1473,7 @@ end
14731473
@test U_nonlinmpc1 U_nonlinmpc2 rtol=1e-3 atol=1e-3
14741474
end
14751475

1476-
@testitem "LinMPC v.s. NonLinMPC with move blocking" setup=[SetupMPCtests] begin
1476+
@testitem "All MPCs with move blocking" setup=[SetupMPCtests] begin
14771477
using .SetupMPCtests, ControlSystemsBase, LinearAlgebra
14781478
G = tf( 10, [400, 1])
14791479
linmodel = LinModel(G, 100.0)
@@ -1482,30 +1482,37 @@ end
14821482
nonlinmodel = NonLinModel(f, h, 100.0, 1, 1, 1, p=linmodel, solver=nothing)
14831483
Mwt, Nwt, Hp, Hc = [1], [0], 30, [2, 3, 4, 21]
14841484
N = 25
1485+
mpc0 = ExplicitMPC(linmodel; Mwt, Nwt, Hp, Hc)
14851486
mpc1 = LinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=SingleShooting())
14861487
mpc2 = LinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=MultipleShooting())
14871488
mpc3 = NonLinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=SingleShooting())
14881489
mpc4 = NonLinMPC(linmodel; Mwt, Nwt, Hp, Hc, transcription=MultipleShooting())
14891490
mpc5 = NonLinMPC(nonlinmodel; Mwt, Nwt, Hp, Hc, transcription=SingleShooting())
14901491
mpc6 = NonLinMPC(nonlinmodel; Mwt, Nwt, Hp, Hc, transcription=MultipleShooting())
1492+
U0 = zeros(1, N)
14911493
U1, U2, U3 = zeros(1, N), zeros(1, N), zeros(1, N)
14921494
U4, U5, U6 = zeros(1, N), zeros(1, N), zeros(1, N)
14931495
for i=1:N
14941496
r = [5.0]
14951497
y = linmodel()
1498+
preparestate!(mpc0, y);
14961499
preparestate!(mpc1, y); preparestate!(mpc2, y); preparestate!(mpc3, y);
14971500
preparestate!(mpc4, y); preparestate!(mpc5, y); preparestate!(mpc6, y);
1501+
u0 = moveinput!(mpc0, r);
14981502
u1 = moveinput!(mpc1, r); u2 = moveinput!(mpc2, r); u3 = moveinput!(mpc3, r);
14991503
u4 = moveinput!(mpc4, r); u5 = moveinput!(mpc5, r); u6 = moveinput!(mpc6, r);
1504+
U0[:, i] = u0;
15001505
U1[:, i] = u1; U2[:, i] = u2; U3[:, i] = u3;
15011506
U4[:, i] = u4; U5[:, i] = u5; U6[:, i] = u6;
1507+
updatestate!(mpc0, u0, y);
15021508
updatestate!(mpc1, u1, y); updatestate!(mpc2, u2, y); updatestate!(mpc3, u3, y);
15031509
updatestate!(mpc4, u4, y); updatestate!(mpc5, u5, y); updatestate!(mpc6, u6, y);
15041510
updatestate!(linmodel, u1);
15051511
end
1506-
@test U1 U2 rtol=1e-3 atol=1e-3
1507-
@test U1 U3 rtol=1e-3 atol=1e-3
1508-
@test U1 U4 rtol=1e-3 atol=1e-3
1509-
@test U1 U5 rtol=1e-3 atol=1e-3
1510-
@test U1 U6 rtol=1e-3 atol=1e-3
1512+
@test U0 U1 rtol=1e-3 atol=1e-3
1513+
@test U0 U2 rtol=1e-3 atol=1e-3
1514+
@test U0 U3 rtol=1e-3 atol=1e-3
1515+
@test U0 U4 rtol=1e-3 atol=1e-3
1516+
@test U0 U5 rtol=1e-3 atol=1e-3
1517+
@test U0 U6 rtol=1e-3 atol=1e-3
15111518
end

0 commit comments

Comments
 (0)