|
474 | 474 | linmodel1 = LinModel(sys,Ts,i_d=[3]) |
475 | 475 | nmpc0 = NonLinMPC(linmodel1, Hp=15) |
476 | 476 | @test isa(nmpc0.estim, SteadyKalmanFilter) |
477 | | - f = (x,u,d) -> linmodel1.A*x + linmodel1.Bu*u + linmodel1.Bd*d |
478 | | - h = (x,d) -> linmodel1.C*x + linmodel1.Dd*d |
| 477 | + f = (x,u,d,_) -> linmodel1.A*x + linmodel1.Bu*u + linmodel1.Bd*d |
| 478 | + h = (x,d,_) -> linmodel1.C*x + linmodel1.Dd*d |
479 | 479 | nonlinmodel = NonLinModel(f, h, Ts, 2, 4, 2, 1, solver=nothing) |
480 | 480 | nmpc1 = NonLinMPC(nonlinmodel, Hp=15) |
481 | 481 | @test isa(nmpc1.estim, UnscentedKalmanFilter) |
|
545 | 545 | # ensure that the current estimated output is updated for correct JE values: |
546 | 546 | @test nmpc.ŷ ≈ evaloutput(nmpc.estim, Float64[]) |
547 | 547 | linmodel2 = LinModel([tf(5, [2000, 1]) tf(7, [8000,1])], 3000.0, i_d=[2]) |
548 | | - f = (x,u,d) -> linmodel2.A*x + linmodel2.Bu*u + linmodel2.Bd*d |
549 | | - h = (x,d) -> linmodel2.C*x + linmodel2.Dd*d |
| 548 | + f = (x,u,d,_) -> linmodel2.A*x + linmodel2.Bu*u + linmodel2.Bd*d |
| 549 | + h = (x,d,_) -> linmodel2.C*x + linmodel2.Dd*d |
550 | 550 | nonlinmodel = NonLinModel(f, h, 3000.0, 1, 2, 1, 1, solver=nothing) |
551 | 551 | nmpc2 = NonLinMPC(nonlinmodel, Nwt=[0], Hp=1000, Hc=1) |
552 | 552 | d = [0.1] |
|
628 | 628 |
|
629 | 629 | @testset "NonLinMPC other methods" begin |
630 | 630 | linmodel = setop!(LinModel(sys,Ts,i_u=[1,2]), uop=[10,50], yop=[50,30]) |
631 | | - f = (x,u,_) -> linmodel.A*x + linmodel.Bu*u |
632 | | - h = (x,_) -> linmodel.C*x |
| 631 | + f = (x,u,_,_) -> linmodel.A*x + linmodel.Bu*u |
| 632 | + h = (x,_,_) -> linmodel.C*x |
633 | 633 | nonlinmodel = setop!( |
634 | 634 | NonLinModel(f, h, Ts, 2, 2, 2, solver=nothing), uop=[10,50], yop=[50,30] |
635 | 635 | ) |
|
652 | 652 | setconstraint!(nmpc_lin, c_ymin=[1.0,1.1], c_ymax=[1.2,1.3]) |
653 | 653 | @test all((-nmpc_lin.con.A_Ymin[:, end], -nmpc_lin.con.A_Ymax[:, end]) .≈ ([1.0,1.1], [1.2,1.3])) |
654 | 654 |
|
655 | | - f = (x,u,d) -> linmodel1.A*x + linmodel1.Bu*u + linmodel1.Bd*d |
656 | | - h = (x,d) -> linmodel1.C*x + linmodel1.Dd*d |
| 655 | + f = (x,u,d,_) -> linmodel1.A*x + linmodel1.Bu*u + linmodel1.Bd*d |
| 656 | + h = (x,d,_) -> linmodel1.C*x + linmodel1.Dd*d |
657 | 657 | nonlinmodel = NonLinModel(f, h, Ts, 2, 4, 2, 1, solver=nothing) |
658 | 658 | nmpc = NonLinMPC(nonlinmodel, Hp=1, Hc=1) |
659 | 659 |
|
|
715 | 715 | info = getinfo(nmpc_lin) |
716 | 716 | @test info[:x̂end][1] ≈ 0 atol=1e-1 |
717 | 717 |
|
718 | | - f = (x,u,_) -> linmodel.A*x + linmodel.Bu*u |
719 | | - h = (x,_) -> linmodel.C*x |
| 718 | + f = (x,u,_,_) -> linmodel.A*x + linmodel.Bu*u |
| 719 | + h = (x,_,_) -> linmodel.C*x |
720 | 720 | nonlinmodel = NonLinModel(f, h, linmodel.Ts, 1, 1, 1, solver=nothing) |
721 | 721 | nmpc = NonLinMPC(nonlinmodel, Hp=50, Hc=5) |
722 | 722 |
|
|
791 | 791 | @test mpc.M_Hp ≈ diagm(1:1000) |
792 | 792 | @test mpc.Ñ_Hc ≈ diagm([0.1;1e6]) |
793 | 793 | @test mpc.L_Hp ≈ diagm(1.1:1000.1) |
794 | | - f = (x,u,d) -> estim.model.A*x + estim.model.Bu*u + estim.model.Bd*d |
795 | | - h = (x,d) -> estim.model.C*x + estim.model.Du*d |
| 794 | + f = (x,u,d,_) -> estim.model.A*x + estim.model.Bu*u + estim.model.Bd*d |
| 795 | + h = (x,d,_) -> estim.model.C*x + estim.model.Du*d |
796 | 796 | nonlinmodel = NonLinModel(f, h, 10.0, 1, 1, 1) |
797 | 797 | nmpc = NonLinMPC(nonlinmodel, Nwt=[0], Cwt=1e4, Hp=1000, Hc=10) |
798 | 798 | setmodel!(nmpc, Mwt=[100], Nwt=[200], Lwt=[300]) |
|
808 | 808 |
|
809 | 809 | @testset "LinMPC v.s. NonLinMPC" begin |
810 | 810 | linmodel = setop!(LinModel(sys,Ts,i_d=[3]), uop=[10,50], yop=[50,30], dop=[20]) |
811 | | - f = (x,u,d) -> linmodel.A*x + linmodel.Bu*u + linmodel.Bd*d |
812 | | - h = (x,d) -> linmodel.C*x + linmodel.Dd*d |
| 811 | + f = (x,u,d,_) -> linmodel.A*x + linmodel.Bu*u + linmodel.Bd*d |
| 812 | + h = (x,d,_) -> linmodel.C*x + linmodel.Dd*d |
813 | 813 | nonlinmodel = NonLinModel(f, h, Ts, 2, 4, 2, 1, solver=nothing) |
814 | 814 | nonlinmodel = setop!(nonlinmodel, uop=[10,50], yop=[50,30], dop=[20]) |
815 | 815 | optim = JuMP.Model(optimizer_with_attributes(Ipopt.Optimizer, "sb"=>"yes")) |
|
0 commit comments