|
865 | 865 | Hp=50 |
866 | 866 |
|
867 | 867 | linmodel = LinModel(tf([2], [10000, 1]), 3000.0) |
868 | | - nmpc_lin = NonLinMPC(linmodel; Hp, Hc=5, gc=gc, nc=2Hp, p=[0; 0]) |
869 | | - |
| 868 | + nmpc_lin = NonLinMPC(linmodel; Hp, Hc=5, gc, nc=2Hp, p=[0; 0]) |
| 869 | + |
870 | 870 | setconstraint!(nmpc_lin, x̂min=[-1e6,-Inf], x̂max=[1e6,+Inf]) |
871 | 871 | setconstraint!(nmpc_lin, umin=[-10], umax=[10]) |
872 | 872 | setconstraint!(nmpc_lin, Δumin=[-1e6], Δumax=[1e6]) |
|
935 | 935 | f = (x,u,_,p) -> p.A*x + p.Bu*u |
936 | 936 | h = (x,_,p) -> p.C*x |
937 | 937 | nonlinmodel = NonLinModel(f, h, linmodel.Ts, 1, 1, 1, solver=nothing, p=linmodel) |
938 | | - nmpc = NonLinMPC(nonlinmodel; Hp, Hc=5, gc=gc, nc=2Hp, p=[0; 0]) |
| 938 | + nmpc = NonLinMPC(nonlinmodel; Hp, Hc=5, gc, nc=2Hp, p=[0; 0]) |
939 | 939 |
|
940 | 940 | setconstraint!(nmpc, x̂min=[-1e6,-Inf], x̂max=[+1e6,+Inf]) |
941 | 941 | setconstraint!(nmpc, umin=[-1e6], umax=[+1e6]) |
@@ -1001,18 +1001,44 @@ end |
1001 | 1001 | info = getinfo(nmpc) |
1002 | 1002 | @test all(isapprox.(info[:Ŷ], 3.14; atol=1e-1)) |
1003 | 1003 | @test all(isapprox.(info[:gc][Hp+1:end], 0.0; atol=1e-1)) |
1004 | | - |
1005 | | - nmpc_ms = NonLinMPC(nonlinmodel; Hp, Hc=5, transcription=MultipleShooting()) |
1006 | 1004 |
|
| 1005 | + nmpc_ms = NonLinMPC( |
| 1006 | + nonlinmodel; Hp, Hc=5, transcription=MultipleShooting(), gc, nc=2Hp, p=[0; 0] |
| 1007 | + ) |
| 1008 | + |
| 1009 | + setconstraint!(nmpc_ms, x̂min=[-1e6,-Inf], x̂max=[+1e6,+Inf]) |
| 1010 | + setconstraint!(nmpc_ms, ymin=[-100], ymax=[100]) |
1007 | 1011 | preparestate!(nmpc_ms, [0]) |
1008 | 1012 |
|
| 1013 | + setconstraint!(nmpc_ms, ymin=[-0.5], ymax=[0.9]) |
| 1014 | + moveinput!(nmpc_ms, [-100]) |
| 1015 | + info = getinfo(nmpc_ms) |
| 1016 | + @test all(isapprox.(info[:Ŷ], -0.5; atol=1e-1)) |
| 1017 | + moveinput!(nmpc_ms, [100]) |
| 1018 | + info = getinfo(nmpc_ms) |
| 1019 | + @test all(isapprox.(info[:Ŷ], 0.9; atol=1e-1)) |
| 1020 | + setconstraint!(nmpc_ms, ymin=[-100], ymax=[100]) |
| 1021 | + |
1009 | 1022 | setconstraint!(nmpc_ms, x̂min=[-1e-6,-Inf], x̂max=[+1e-6,+Inf]) |
1010 | 1023 | moveinput!(nmpc_ms, [-10]) |
1011 | 1024 | info = getinfo(nmpc_ms) |
1012 | 1025 | @test info[:x̂end][1] ≈ 0 atol=1e-1 |
1013 | 1026 | moveinput!(nmpc_ms, [10]) |
1014 | 1027 | info = getinfo(nmpc_ms) |
1015 | 1028 | @test info[:x̂end][1] ≈ 0 atol=1e-1 |
| 1029 | + setconstraint!(nmpc_ms, x̂min=[-1e6,-Inf], x̂max=[1e6,+Inf]) |
| 1030 | + |
| 1031 | + nmpc_ms.p .= [1; 0] |
| 1032 | + moveinput!(nmpc_ms, [100]) |
| 1033 | + info = getinfo(nmpc_ms) |
| 1034 | + @test all(isapprox.(info[:U], 4.2; atol=1e-1)) |
| 1035 | + @test all(isapprox.(info[:gc][1:Hp], 0.0; atol=1e-1)) |
| 1036 | + |
| 1037 | + nmpc_ms.p .= [0; 1] |
| 1038 | + moveinput!(nmpc_ms, [100]) |
| 1039 | + info = getinfo(nmpc_ms) |
| 1040 | + @test all(isapprox.(info[:Ŷ], 3.14; atol=1e-1)) |
| 1041 | + @test all(isapprox.(info[:gc][Hp+1:end], 0.0; atol=1e-1)) |
1016 | 1042 |
|
1017 | 1043 | end |
1018 | 1044 |
|
|
0 commit comments