4747 @test mpc14. transcription == MultipleShooting ()
4848 @test length (mpc14. Z̃) == model2. nu* mpc14. Hc + mpc14. estim. nx̂* mpc14. Hp + mpc14. nϵ
4949 @test size (mpc14. con. Aeq, 1 ) == mpc14. estim. nx̂* mpc14. Hp
50+ mpc15 = LinMPC (model, Hc= [1 ,2 ,3 ], Hp= 10 , Cwt= Inf )
51+ @test mpc15. Hc == 4 # the constructor will push an element to nb
52+ @test size (mpc15. P̃u) == (10 * mpc1. estim. model. nu, 4 * mpc1. estim. model. nu)
53+ mpc16 = LinMPC (model, Hc= [1 ,2 ,3 ,6 ,6 ,6 ], Hp= 10 , Cwt= Inf )
54+ @test mpc16. Hc == 4 # the last 2 elements of Hc are ignored
55+ @test size (mpc16. P̃u) == (10 * mpc1. estim. model. nu, 4 * mpc1. estim. model. nu)
5056
5157 @test_logs (
5258 (:warn ,
108114 d = [0.1 ]
109115 u = moveinput! (mpc6, 7 d, d)
110116 @test u ≈ [0 ] atol= 1e-2
117+ mpc7 = LinMPC (linmodel, Hp= 10 , Hc= [1 , 2 , 3 , 4 ], Nwt= [10 ])
118+ preparestate! (mpc7, [10 ])
119+ r = [15 ]
120+ moveinput! (mpc7, r)
121+ ΔU_diff = diff (getinfo (mpc7)[:U ])
122+ @test ΔU_diff[[2 , 4 , 5 , 7 , 8 , 9 ]] ≈ zeros (6 )
123+
111124 @test_throws DimensionMismatch moveinput! (mpc1, [0 ,0 ,0 ])
112125 @test_throws DimensionMismatch moveinput! (mpc1, [0 ], [0 ,0 ])
113126 @test_throws DimensionMismatch moveinput! (mpc1; D̂ = fill (0 , mpc1. Hp+ 1 ))
447460
448461@testitem " ExplicitMPC moves and getinfo" setup= [SetupMPCtests] begin
449462 using . SetupMPCtests, ControlSystemsBase, LinearAlgebra
450- mpc1 = ExplicitMPC (LinModel (tf (5 , [2 , 1 ]), 3 ), Nwt= [0 ], Hp= 1000 , Hc= 1 )
463+ model = LinModel (tf (5 , [2 , 1 ]), 3 )
464+ mpc1 = ExplicitMPC (model, Nwt= [0 ], Hp= 1000 , Hc= 1 )
451465 r, y = [5 ], [0 ]
452466 preparestate! (mpc1, y)
453467 u = moveinput! (mpc1, r)
@@ -458,18 +472,24 @@ end
458472 info = getinfo (mpc1)
459473 @test info[:u ] ≈ u
460474 @test info[:Ŷ ][end ] ≈ r[1 ] atol= 1e-2
461- mpc2 = ExplicitMPC (LinModel ( tf ( 5 , [ 2 , 1 ]), 3 ) , Nwt= [0 ], Hp= 1000 , Hc= 1 )
462- preparestate! (mpc2, [ 0 ] )
475+ mpc2 = ExplicitMPC (model , Nwt= [0 ], Hp= 1000 , Hc= 1 )
476+ preparestate! (mpc2, y )
463477 u = moveinput! (mpc2, [5 ])
464478 @test u ≈ [1 ] atol= 1e-2
465- mpc3 = ExplicitMPC (LinModel ( tf ( 5 , [ 2 , 1 ]), 3 ) , Mwt= [0 ], Nwt= [0 ], Lwt= [1 ])
466- preparestate! (mpc3, [ 0 ] )
479+ mpc3 = ExplicitMPC (model , Mwt= [0 ], Nwt= [0 ], Lwt= [1 ])
480+ preparestate! (mpc3, y )
467481 u = moveinput! (mpc3, [0 ], R̂u= fill (12 , mpc3. Hp))
468482 @test u ≈ [12 ] atol= 1e-2
469483 model2 = LinModel {Float32} (0.5 * ones (1 ,1 ), ones (1 ,1 ), ones (1 ,1 ), zeros (1 ,0 ), zeros (1 ,0 ), 1.0 )
470484 mpc4 = ExplicitMPC (model2)
471- preparestate! (mpc4, [ 0 ] )
485+ preparestate! (mpc4, y )
472486 moveinput! (mpc4, [0 ]) ≈ [0.0 ]
487+ mpc5 = ExplicitMPC (model, Hp= 10 , Hc= [1 , 2 , 3 , 4 ], Nwt= [10 ])
488+ preparestate! (mpc5, y)
489+ moveinput! (mpc5, r)
490+ ΔU_diff = diff (getinfo (mpc5)[:U ])
491+ @test ΔU_diff[[2 , 4 , 5 , 7 , 8 , 9 ]] ≈ zeros (6 )
492+
473493 @test_nowarn ModelPredictiveControl. info2debugstr (info)
474494end
475495
770790 info = getinfo (nmpc10)
771791 @test info[:u ] ≈ u
772792 @test info[:Ŷ ][end ] ≈ 10 atol= 5e-2
793+ nmpc11 = NonLinMPC (nonlinmodel, Hp= 10 , Hc= [1 , 2 , 3 , 4 ], Nwt= [10 ])
794+ preparestate! (nmpc11, y, [0 ])
795+ moveinput! (nmpc11, [10 ], [0 ])
796+ ΔU_diff = diff (getinfo (nmpc11)[:U ])
797+ println (ΔU_diff)
798+ @test ΔU_diff[[2 , 4 , 5 , 7 , 8 , 9 ]] ≈ zeros (6 )
773799
774800 @test_nowarn ModelPredictiveControl. info2debugstr (info)
775801end
0 commit comments