|
865 | 865 | Hp=50
|
866 | 866 |
|
867 | 867 | linmodel = LinModel(tf([2], [10000, 1]), 3000.0)
|
868 |
| - nmpc_lin = NonLinMPC(linmodel, Hp=Hp, Hc=5, gc=gc, nc=2Hp, p=[0; 0]) |
869 |
| - |
| 868 | + nmpc_lin = NonLinMPC(linmodel; Hp, Hc=5, gc=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=50, Hc=5, gc=gc, nc=2Hp, p=[0; 0]) |
| 938 | + nmpc = NonLinMPC(nonlinmodel; Hp, Hc=5, gc=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,6 +1001,18 @@ 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 | + |
| 1007 | + preparestate!(nmpc_ms, [0]) |
| 1008 | + |
| 1009 | + setconstraint!(nmpc_ms, x̂min=[-1e-6,-Inf], x̂max=[+1e-6,+Inf]) |
| 1010 | + moveinput!(nmpc_ms, [-10]) |
| 1011 | + info = getinfo(nmpc_ms) |
| 1012 | + @test info[:x̂end][1] ≈ 0 atol=1e-1 |
| 1013 | + moveinput!(nmpc_ms, [10]) |
| 1014 | + info = getinfo(nmpc_ms) |
| 1015 | + @test info[:x̂end][1] ≈ 0 atol=1e-1 |
1004 | 1016 |
|
1005 | 1017 | end
|
1006 | 1018 |
|
|
0 commit comments