5454 linmodel = setop! (LinModel (tf (5 , [2 , 1 ]), 3 ), yop= [10 ])
5555 mpc1 = LinMPC (linmodel, Nwt= [0 ], Hp= 1000 , Hc= 1 )
5656 r = [15 ]
57+ preparestate! (mpc1, [10 ])
5758 u = moveinput! (mpc1, r)
5859 @test u ≈ [1 ] atol= 1e-2
5960 u = mpc1 (r)
6263 @test info[:u ] ≈ u
6364 @test info[:Ŷ ][end ] ≈ r[1 ] atol= 1e-2
6465 mpc2 = LinMPC (linmodel, Nwt= [0 ], Cwt= Inf , Hp= 1000 , Hc= 1 )
66+ preparestate! (mpc2, [10 ])
6567 u = moveinput! (mpc2, r)
6668 @test u ≈ [1 ] atol= 1e-2
6769 mpc3 = LinMPC (linmodel, Mwt= [0 ], Nwt= [0 ], Lwt= [1 ])
70+ preparestate! (mpc3, [10 ])
6871 u = moveinput! (mpc3, [0 ], R̂u= fill (12 , mpc3. Hp))
6972 @test u ≈ [12 ] atol= 1e-2
7073 model2 = LinModel {Float32} (0.5 * ones (1 ,1 ), ones (1 ,1 ), ones (1 ,1 ), zeros (1 ,0 ), zeros (1 ,0 ), 1.0 )
7174 mpc4 = LinMPC (model2)
75+ preparestate! (mpc4, [0 ])
7276 moveinput! (mpc4, [0 ]) ≈ [0.0 ]
7377
7478 @test_throws DimensionMismatch moveinput! (mpc1, [0 ,0 ,0 ])
@@ -127,10 +131,10 @@ end
127131 setstate! (mpc1, [1 ,2 ,3 ,4 ])
128132 @test mpc1. estim. x̂0 ≈ [1 ,2 ,3 ,4 ]
129133 setstate! (mpc1, [0 ,0 ,0 ,0 ])
130- preparestate! (mpc1, mpc1 . estim () )
131- updatestate! (mpc1, mpc1. estim. model. uop, mpc1 . estim () )
134+ preparestate! (mpc1, [ 50 , 30 ] )
135+ updatestate! (mpc1, mpc1. estim. model. uop, [ 50 , 30 ] )
132136 @test mpc1. estim. x̂0 ≈ [0 ,0 ,0 ,0 ]
133- preparestate! (mpc1, mpc1 . estim () )
137+ preparestate! (mpc1, [ 50 , 30 ] )
134138 @test_throws ArgumentError updatestate! (mpc1, [0 ,0 ])
135139end
136140
187191 @test_throws ArgumentError setconstraint! (mpc, c_ymin= [0 ,0 ,0 ])
188192 @test_throws ArgumentError setconstraint! (mpc, c_ymax= [0 ,0 ,0 ])
189193
194+ preparestate! (mpc, mpc. estim. model. yop, mpc. estim. model. dop)
190195 moveinput! (mpc, [0 , 0 ], [0 ])
191196 @test_throws ErrorException setconstraint! (mpc, c_umin= [1 , 1 ], c_umax= [1 , 1 ])
192197 @test_throws ErrorException setconstraint! (mpc, umin= [- Inf ,- Inf ], umax= [+ Inf ,+ Inf ])
208213 setconstraint! (mpc, umin= [- 3 ], umax= [3 ])
209214 setconstraint! (mpc, Δumin= [- 1.5 ], Δumax= [1.5 ])
210215 setconstraint! (mpc, ymin= [- 100 ], ymax= [100 ])
216+ preparestate! (mpc, [0 ])
211217 moveinput! (mpc, [- 10 ])
212218 info = getinfo (mpc)
213219 @test info[:ΔU ][begin ] ≈ - 1.5 atol= 1e-1
276282 @test mpc. con. Y0min ≈ fill (- 54.0 - 10 , 1000 )
277283 @test mpc. con. Y0max ≈ fill (56.0 - 10 , 1000 )
278284 r = [15 ]
285+ preparestate! (mpc, [10 ])
279286 u = moveinput! (mpc, r)
280287 @test u ≈ [2 ] atol= 1e-2
281288 setmodel! (mpc, setop! (LinModel (tf (5 , [2 , 1 ]), 3 ), yop= [20 ], uop= [11 ]))
346353@testset " ExplicitMPC moves and getinfo" begin
347354 mpc1 = ExplicitMPC (LinModel (tf (5 , [2 , 1 ]), 3 ), Nwt= [0 ], Hp= 1000 , Hc= 1 )
348355 r = [5 ]
356+ preparestate! (mpc1, [0 ])
349357 u = moveinput! (mpc1, r)
350358 @test u ≈ [1 ] atol= 1e-2
351359 u = mpc1 (r)
@@ -354,13 +362,16 @@ end
354362 @test info[:u ] ≈ u
355363 @test info[:Ŷ ][end ] ≈ r[1 ] atol= 1e-2
356364 mpc2 = ExplicitMPC (LinModel (tf (5 , [2 , 1 ]), 3 ), Nwt= [0 ], Hp= 1000 , Hc= 1 )
365+ preparestate! (mpc2, [0 ])
357366 u = moveinput! (mpc2, [5 ])
358367 @test u ≈ [1 ] atol= 1e-2
359368 mpc3 = ExplicitMPC (LinModel (tf (5 , [2 , 1 ]), 3 ), Mwt= [0 ], Nwt= [0 ], Lwt= [1 ])
369+ preparestate! (mpc3, [0 ])
360370 u = moveinput! (mpc3, [0 ], R̂u= fill (12 , mpc3. Hp))
361371 @test u ≈ [12 ] atol= 1e-2
362372 model2 = LinModel {Float32} (0.5 * ones (1 ,1 ), ones (1 ,1 ), ones (1 ,1 ), zeros (1 ,0 ), zeros (1 ,0 ), 1.0 )
363373 mpc4 = ExplicitMPC (model2)
374+ preparestate! (mpc4, [0 ])
364375 moveinput! (mpc4, [0 ]) ≈ [0.0 ]
365376end
366377
@@ -414,10 +425,10 @@ end
414425 setstate! (mpc1, [1 ,2 ,3 ,4 ])
415426 @test mpc1. estim. x̂0 ≈ [1 ,2 ,3 ,4 ]
416427 setstate! (mpc1, [0 ,0 ,0 ,0 ])
417- preparestate! (mpc1, mpc1 . estim () )
418- updatestate! (mpc1, mpc1. estim. model. uop, mpc1 . estim () )
428+ preparestate! (mpc1, [ 50 , 30 ] )
429+ updatestate! (mpc1, mpc1. estim. model. uop, [ 50 , 30 ] )
419430 @test mpc1. estim. x̂0 ≈ [0 ,0 ,0 ,0 ]
420- preparestate! (mpc1, mpc1 . estim () )
431+ preparestate! (mpc1, [ 50 , 30 ] )
421432 @test_throws ArgumentError updatestate! (mpc1, [0 ,0 ])
422433end
423434
433444 @test mpc. Yop ≈ fill (10.0 , 1000 )
434445 @test mpc. Uop ≈ fill (1.0 , 1000 )
435446 r = [15 ]
447+ preparestate! (mpc, [10 ])
436448 u = moveinput! (mpc, r)
437449 @test u ≈ [2 ] atol= 1e-2
438450 setmodel! (mpc, setop! (LinModel (tf (5 , [2 , 1 ]), 3 ), yop= [20 ], uop= [11 ]))
512524 linmodel = setop! (LinModel (tf (5 , [2000 , 1 ]), 3000.0 ), yop= [10 ])
513525 nmpc_lin = NonLinMPC (linmodel, Nwt= [0 ], Hp= 1000 , Hc= 1 )
514526 r = [15 ]
527+ preparestate! (nmpc_lin, [10 ])
515528 u = moveinput! (nmpc_lin, r)
516529 @test u ≈ [1 ] atol= 5e-2
517530 u = nmpc_lin (r)
@@ -523,16 +536,18 @@ end
523536 R̂y = fill (r[1 ], Hp)
524537 JE = (_ , ŶE, _ ) -> sum ((ŶE[2 : end ] - R̂y). ^ 2 )
525538 nmpc = NonLinMPC (linmodel, Mwt= [0 ], Nwt= [0 ], Cwt= Inf , Ewt= 1 , JE= JE, Hp= Hp, Hc= 1 )
539+ preparestate! (nmpc, [10 ])
526540 u = moveinput! (nmpc)
527541 @test u ≈ [1 ] atol= 5e-2
528542 # ensure that the current estimated output is updated for correct JE values:
529- @test nmpc. ŷ ≈ ModelPredictiveControl . evalŷ (nmpc. estim, Float64[])
543+ @test nmpc. ŷ ≈ evaloutput (nmpc. estim, Float64[])
530544 linmodel2 = LinModel ([tf (5 , [2000 , 1 ]) tf (7 , [8000 ,1 ])], 3000.0 , i_d= [2 ])
531545 f = (x,u,d) -> linmodel2. A* x + linmodel2. Bu* u + linmodel2. Bd* d
532546 h = (x,d) -> linmodel2. C* x + linmodel2. Dd* d
533547 nonlinmodel = NonLinModel (f, h, 3000.0 , 1 , 2 , 1 , 1 , solver= nothing )
534548 nmpc2 = NonLinMPC (nonlinmodel, Nwt= [0 ], Hp= 1000 , Hc= 1 )
535549 d = [0.1 ]
550+ preparestate! (nmpc2, [0 ], [0 ])
536551 u = moveinput! (nmpc2, 7 d, d)
537552 @test u ≈ [0 ] atol= 5e-2
538553 u = nmpc2 (7 d, d)
541556 @test info[:u ] ≈ u
542557 @test info[:Ŷ ][end ] ≈ 7 d[1 ] atol= 5e-2
543558 nmpc3 = NonLinMPC (nonlinmodel, Nwt= [0 ], Cwt= Inf , Hp= 1000 , Hc= 1 )
559+ preparestate! (nmpc3, [0 ], [0 ])
544560 u = moveinput! (nmpc3, 7 d, d)
545561 @test u ≈ [0 ] atol= 5e-2
546562 nmpc4 = NonLinMPC (nonlinmodel, Hp= 15 , Mwt= [0 ], Nwt= [0 ], Lwt= [1 ])
563+ preparestate! (nmpc4, [0 ], [0 ])
547564 u = moveinput! (nmpc4, [0 ], d, R̂u= fill (12 , nmpc4. Hp))
548565 @test u ≈ [12 ] atol= 5e-2
549566 nmpc5 = setconstraint! (NonLinMPC (nonlinmodel, Hp= 15 , Cwt= Inf ), ymin= [1 ])
@@ -554,11 +571,13 @@ end
554571 @test ForwardDiff. gradient (vec-> g_Y0min_end (vec... ), [20.0 , 10.0 ]) ≈ [- 5 , - 5 ] atol= 1e-3
555572 linmodel3 = LinModel {Float32} (0.5 * ones (1 ,1 ), ones (1 ,1 ), ones (1 ,1 ), zeros (1 ,0 ), zeros (1 ,0 ), 1.0 )
556573 nmpc6 = NonLinMPC (linmodel3, Hp= 10 )
574+ preparestate! (nmpc6, [0 ])
557575 @test moveinput! (nmpc6, [0 ]) ≈ [0.0 ]
558576 nonlinmodel2 = NonLinModel {Float32} (f, h, 3000.0 , 1 , 2 , 1 , 1 , solver= nothing )
559577 nmpc7 = NonLinMPC (nonlinmodel2, Hp= 10 )
560578 y = similar (nonlinmodel2. yop)
561579 nonlinmodel2. h! (y, Float32[0 ,0 ], Float32[0 ])
580+ preparestate! (nmpc7, [0 ], [0 ])
562581 @test moveinput! (nmpc7, [0 ], [0 ]) ≈ [0.0 ]
563582end
564583
@@ -608,14 +627,16 @@ end
608627 linmodel = setop! (LinModel (sys,Ts,i_u= [1 ,2 ]), uop= [10 ,50 ], yop= [50 ,30 ])
609628 f = (x,u,_) -> linmodel. A* x + linmodel. Bu* u
610629 h = (x,_) -> linmodel. C* x
611- nonlinmodel = NonLinModel (f, h, Ts, 2 , 2 , 2 , solver= nothing )
630+ nonlinmodel = setop! (
631+ NonLinModel (f, h, Ts, 2 , 2 , 2 , solver= nothing ), uop= [10 ,50 ], yop= [50 ,30 ]
632+ )
612633 nmpc1 = NonLinMPC (nonlinmodel, Hp= 15 )
613634 @test initstate! (nmpc1, [10 , 50 ], [20 , 25 ]) ≈ zeros (4 )
614635 setstate! (nmpc1, [1 ,2 ,3 ,4 ])
615636 @test nmpc1. estim. x̂0 ≈ [1 ,2 ,3 ,4 ]
616637 setstate! (nmpc1, [0 ,0 ,0 ,0 ])
617- preparestate! (nmpc1, nmpc1 . estim () )
618- updatestate! (nmpc1, nmpc1. estim. model. uop, nmpc1 . estim () )
638+ preparestate! (nmpc1, [ 50 , 30 ] )
639+ updatestate! (nmpc1, nmpc1. estim. model. uop, [ 50 , 30 ] )
619640 @test nmpc1. estim. x̂0 ≈ [0 ,0 ,0 ,0 ] atol= 1e-6
620641end
621642
662683 setconstraint! (nmpc_lin, umin= [- 3 ], umax= [3 ])
663684 setconstraint! (nmpc_lin, Δumin= [- 1.5 ], Δumax= [1.5 ])
664685 setconstraint! (nmpc_lin, ymin= [- 100 ], ymax= [100 ])
686+ preparestate! (nmpc_lin, [0 ])
665687 moveinput! (nmpc_lin, [- 20 ])
666688 info = getinfo (nmpc_lin)
667689 @test info[:ΔU ][begin ] ≈ - 1.5 atol= 1e-2
699721 setconstraint! (nmpc, umin= [- 3 ], umax= [3 ])
700722 setconstraint! (nmpc, Δumin= [- 1.5 ], Δumax= [1.5 ])
701723 setconstraint! (nmpc, ymin= [- 100 ], ymax= [100 ])
724+ preparestate! (nmpc, [0 ])
702725 moveinput! (nmpc, [- 20 ])
703726 info = getinfo (nmpc)
704727 @test info[:ΔU ][begin ] ≈ - 1.5 atol= 1e-2
740763 @test mpc. con. Y0min ≈ fill (- 54.0 - 10 , 1000 )
741764 @test mpc. con. Y0max ≈ fill (56.0 - 10 , 1000 )
742765 r = [15 ]
766+ preparestate! (mpc, [10 ])
743767 u = moveinput! (mpc, r)
744768 @test u ≈ [2 ] atol= 1e-2
745769 setmodel! (mpc, setop! (LinModel (tf (5 , [2 , 1 ]), 3 ), yop= [20 ], uop= [11 ]))
0 commit comments