Skip to content

added: quadratic objective for NonLinMPC with LinModel and Ewt=0#365

Merged
franckgaga merged 1 commit into
mainfrom
nonlinmpc_quadobj_linmodel
Jun 3, 2026
Merged

added: quadratic objective for NonLinMPC with LinModel and Ewt=0#365
franckgaga merged 1 commit into
mainfrom
nonlinmpc_quadobj_linmodel

Conversation

@franckgaga
Copy link
Copy Markdown
Member

The JuMP model will be constructed with a quadratic objective (QuadExpr) if the economic weight is Ewt=0 and the model is a LinModel.

This is useful when the number of custom nonlinear constraint is nc > 0 and with a linear plant model. It is obviously not a quadratic program strictly speaking, since the constraints are nonlinear, but it will saves some computations at each control periods, especially if hessian=true. A quick local benchmark showed that it is about 7.5 times faster with hessian=true, so totally worth it.

Not sure if there is a test that cover this specific case in the benchmark suite but I will run it anyway to see the results.

The JuMP model will be built with a quadratic objective (`QuadExpr`) if `Ewt=0` the the model is a `LinModel`. It saves computations at each control periods, especially if `hessian=true`.
@franckgaga franckgaga changed the title added: quadratic objective for NonLinMPC and LinModel and Ewt=0 added: quadratic objective for NonLinMPC with LinModel and Ewt=0 Jun 2, 2026
@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Jun 2, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.56%. Comparing base (6da3bc5) to head (7d114e9).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #365   +/-   ##
=======================================
  Coverage   98.56%   98.56%           
=======================================
  Files          27       27           
  Lines        5431     5453   +22     
=======================================
+ Hits         5353     5375   +22     
  Misses         78       78           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Benchmark Results (Julia v1)

Time benchmarks
main 7d114e9... main / 7d114e9...
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/DAQP/SingleShooting 5.13 ± 0.51 ms 5.1 ± 0.51 ms 1.01 ± 0.14
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/MultipleShooting 0.328 ± 0.0038 s 0.327 ± 0.0056 s 1 ± 0.021
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/SingleShooting 0.234 ± 0.014 s 0.234 ± 0.0095 s 1 ± 0.074
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/MultipleShooting 10.5 ± 0.55 ms 9.44 ± 0.49 ms 1.11 ± 0.081
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/SingleShooting 1.84 ± 0.07 ms 1.75 ± 0.069 ms 1.05 ± 0.058
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/DAQP/SingleShooting 5.13 ± 0.51 ms 5.13 ± 0.45 ms 0.999 ± 0.13
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/MultipleShooting 0.282 ± 0.0019 s 0.279 ± 0.0035 s 1.01 ± 0.014
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/SingleShooting 0.234 ± 0.0028 s 0.23 ± 0.0018 s 1.02 ± 0.015
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/MultipleShooting 7.21 ± 0.38 ms 6.65 ± 0.5 ms 1.08 ± 0.1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/SingleShooting 1.94 ± 0.059 ms 1.89 ± 0.067 ms 1.03 ± 0.048
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/DAQP/SingleShooting 10.1 ± 1.8 ms 10.3 ± 1.7 ms 0.981 ± 0.24
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/MultipleShooting 0.346 ± 0.099 s 0.352 ± 0.11 s 0.984 ± 0.41
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/SingleShooting 0.164 ± 0.00087 s 0.162 ± 0.0011 s 1.01 ± 0.0088
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/MultipleShooting 0.128 ± 0.029 s 0.125 ± 0.027 s 1.03 ± 0.32
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/SingleShooting 13.5 ± 2 ms 13.3 ± 2.1 ms 1.01 ± 0.22
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting 0.737 ± 0.0017 s 0.725 ± 0.002 s 1.02 ± 0.0037
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting (Hessian) 0.671 ± 0.0023 s 0.673 ± 0.0028 s 0.997 ± 0.0054
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/SingleShooting 1.89 ± 0.0057 s 1.86 ± 0.0038 s 1.02 ± 0.0037
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation 0.501 ± 0.0013 s 0.501 ± 0.0016 s 1 ± 0.0041
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 0.5 ± 0.0013 s 0.501 ± 0.0015 s 0.998 ± 0.004
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting 0.368 ± 0.0023 s 0.364 ± 0.00078 s 1.01 ± 0.0067
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting (Hessian) 0.437 ± 0.0018 s 0.439 ± 0.0024 s 0.997 ± 0.0068
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation 0.551 ± 0.0011 s 0.55 ± 0.0013 s 1 ± 0.0032
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation (Hessian) 0.556 ± 0.0038 s 0.556 ± 0.0019 s 1 ± 0.0076
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting 0.527 ± 0.0014 s 0.521 ± 0.0012 s 1.01 ± 0.0035
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting (Hessian) 0.183 ± 0.00083 s 0.184 ± 0.00073 s 0.994 ± 0.006
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation 0.347 ± 0.0011 s 0.342 ± 0.0008 s 1.01 ± 0.0041
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation (Hessian) 0.339 ± 0.00072 s 0.337 ± 0.0018 s 1.01 ± 0.0057
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting (Hessian) 0.0744 ± 0.00044 s 0.0722 ± 0.00037 s 1.03 ± 0.008
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Uno/MultipleShooting (Hessian) 0.201 ± 0.019 s 0.207 ± 0.011 s 0.975 ± 0.11
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting 0.348 ± 0.00078 s 0.351 ± 0.00078 s 0.993 ± 0.0031
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (Hessian) 0.373 ± 0.0015 s 0.374 ± 0.0011 s 0.995 ± 0.0049
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.372 ± 0.0015 s 0.377 ± 0.002 s 0.986 ± 0.0064
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation 0.613 ± 0.0017 s 0.621 ± 0.0018 s 0.987 ± 0.004
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation (Hessian) 1.79 ± 0.011 s 1.79 ± 0.014 s 0.999 ± 0.01
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting 0.524 ± 0.0014 s 0.522 ± 0.0012 s 1 ± 0.0036
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting (Hessian) 0.18 ± 0.00083 s 0.179 ± 0.00065 s 1.01 ± 0.0059
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation 0.34 ± 0.00073 s 0.341 ± 0.0011 s 0.998 ± 0.0038
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (Hessian) 0.292 ± 0.0016 s 0.296 ± 0.001 s 0.986 ± 0.0063
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.37 ± 0.0014 s 0.369 ± 0.0018 s 1 ± 0.0063
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/MultipleShooting (Hessian) 0.253 ± 0.00076 s 0.253 ± 0.0012 s 0.998 ± 0.0057
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting (Hessian) 0.0714 ± 0.00038 s 0.0695 ± 0.00034 s 1.03 ± 0.0075
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Uno/MultipleShooting (Hessian) 0.181 ± 0.0009 s 0.186 ± 0.00095 s 0.972 ± 0.0069
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Uno/OrthogonalCollocation (Hessian) 1.28 ± 0.0063 s 1.3 ± 0.0081 s 0.981 ± 0.0078
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 0.078 ± 0.0029 s 0.0785 ± 0.0031 s 0.993 ± 0.054
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Prediction form 0.0594 ± 0.005 s 0.0585 ± 0.0041 s 1.02 ± 0.11
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Current form 0.257 ± 0.019 s 0.257 ± 0.021 s 1 ± 0.11
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Prediction form 0.22 ± 0.047 s 0.218 ± 0.048 s 1.01 ± 0.31
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Current form 0.0753 ± 0.004 s 0.07 ± 0.0044 s 1.08 ± 0.089
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Prediction form 0.0565 ± 0.0057 s 0.0517 ± 0.0053 s 1.09 ± 0.16
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form 0.0976 ± 0.00038 s 0.0953 ± 0.00042 s 1.02 ± 0.006
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian) 0.0967 ± 0.00034 s 0.0946 ± 0.00049 s 1.02 ± 0.0064
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form 0.0711 ± 0.00047 s 0.069 ± 0.00035 s 1.03 ± 0.0086
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian) 0.0931 ± 0.00032 s 0.0916 ± 0.00021 s 1.02 ± 0.0042
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Current form (Hessian) 0.0507 ± 0.00043 s 0.0505 ± 0.0005 s 1 ± 0.013
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form (Hessian) 0.0471 ± 0.00043 s 0.0467 ± 0.0005 s 1.01 ± 0.014
UNIT TESTS/PredictiveController/ExplicitMPC/moveinput! 4.49 ± 0.051 μs 4.52 ± 0.05 μs 0.993 ± 0.016
UNIT TESTS/PredictiveController/LinMPC/getinfo! 0.0963 ± 0.002 ms 0.0959 ± 0.0022 ms 1 ± 0.031
UNIT TESTS/PredictiveController/LinMPC/moveinput!/MultipleShooting 0.11 ± 0.0012 ms 0.11 ± 0.0013 ms 1 ± 0.016
UNIT TESTS/PredictiveController/LinMPC/moveinput!/SingleShooting 15.9 ± 0.29 μs 15.9 ± 0.3 μs 0.999 ± 0.026
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/LinModel 0.205 ± 0.013 ms 0.2 ± 0.012 ms 1.03 ± 0.09
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.241 ± 0.017 ms 0.247 ± 0.017 ms 0.977 ± 0.095
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/MultipleShooting 1.93 ± 0.25 ms 1.59 ± 0.26 ms 1.21 ± 0.25
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/SingleShooting 1.3 ± 0.033 ms 1.04 ± 0.04 ms 1.25 ± 0.058
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShooting 2.52 ± 0.71 ms 2.54 ± 0.72 ms 0.993 ± 0.4
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShootingHessian 2.35 ± 0.091 ms 2.38 ± 0.081 ms 0.989 ± 0.051
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocation 2.15 ± 0.15 ms 2.15 ± 0.17 ms 0.999 ± 0.1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocationHessian 3.15 ± 0.15 ms 3.2 ± 0.15 ms 0.985 ± 0.064
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShooting 1.33 ± 0.031 ms 1.32 ± 0.033 ms 1 ± 0.034
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShootingHessian 1.33 ± 0.031 ms 1.32 ± 0.031 ms 1.01 ± 0.034
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/TrapezoidalCollocation 1.67 ± 0.13 ms 1.68 ± 0.15 ms 0.997 ± 0.12
UNIT TESTS/SimModel/LinModel/evaloutput 0.14 ± 0 μs 0.14 ± 0 μs 1 ± 0
UNIT TESTS/SimModel/LinModel/updatestate! 0.19 ± 0.001 μs 0.19 ± 0.001 μs 1 ± 0.0074
UNIT TESTS/SimModel/NonLinModel/evaloutput 0.32 ± 0.01 μs 0.32 ± 0.01 μs 1 ± 0.044
UNIT TESTS/SimModel/NonLinModel/linearize! 1.9 ± 0.049 μs 1.83 ± 0.05 μs 1.04 ± 0.039
UNIT TESTS/SimModel/NonLinModel/updatestate! 0.371 ± 0.011 μs 0.371 ± 0.001 μs 1 ± 0.03
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/LinModel 0.47 ± 0.01 μs 0.511 ± 0.02 μs 0.92 ± 0.041
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/NonLinModel 1.68 ± 0.02 μs 1.64 ± 0.02 μs 1.02 ± 0.017
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/LinModel 0.621 ± 0.01 μs 0.611 ± 0.02 μs 1.02 ± 0.037
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/NonLinModel 1.26 ± 0.01 μs 1.31 ± 0.02 μs 0.962 ± 0.017
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/LinModel 4.13 ± 0.061 μs 4.09 ± 0.069 μs 1.01 ± 0.023
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/NonLinModel 8.08 ± 0.07 μs 8.04 ± 0.071 μs 1 ± 0.012
UNIT TESTS/StateEstimator/InternalModel/evaloutput/LinModel 0.231 ± 0.01 μs 0.231 ± 0.01 μs 1 ± 0.061
UNIT TESTS/StateEstimator/InternalModel/evaloutput/NonLinModel 0.491 ± 0.02 μs 0.501 ± 0.01 μs 0.98 ± 0.044
UNIT TESTS/StateEstimator/InternalModel/preparestate!/LinModel 0.621 ± 0.02 μs 0.43 ± 0.019 μs 1.44 ± 0.079
UNIT TESTS/StateEstimator/InternalModel/preparestate!/NonLinModel 0.631 ± 0.01 μs 0.631 ± 0.01 μs 1 ± 0.022
UNIT TESTS/StateEstimator/InternalModel/updatestate!/LinModel 0.521 ± 0.02 μs 0.621 ± 0.01 μs 0.839 ± 0.035
UNIT TESTS/StateEstimator/InternalModel/updatestate!/NonLinModel 1.13 ± 0.019 μs 1.16 ± 0.021 μs 0.973 ± 0.024
UNIT TESTS/StateEstimator/KalmanFilter/evaloutput 0.48 ± 0.02 μs 0.49 ± 0.02 μs 0.98 ± 0.057
UNIT TESTS/StateEstimator/KalmanFilter/preparestate! 0.14 ± 0 μs 0.14 ± 0 μs 1 ± 0
UNIT TESTS/StateEstimator/KalmanFilter/updatestate! 2.48 ± 0.05 μs 2.96 ± 0.06 μs 0.838 ± 0.024
UNIT TESTS/StateEstimator/Luenberger/evaloutput 0.231 ± 0.01 μs 0.22 ± 0.01 μs 1.05 ± 0.066
UNIT TESTS/StateEstimator/Luenberger/preparestate! 0.26 ± 0.01 μs 0.26 ± 0.001 μs 1 ± 0.039
UNIT TESTS/StateEstimator/Luenberger/updatestate! 0.331 ± 0.011 μs 0.33 ± 0.02 μs 1 ± 0.069
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/LinModel 0.293 ± 0.018 ms 0.276 ± 0.031 ms 1.06 ± 0.14
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/NonLinModel 0.378 ± 0.02 ms 0.383 ± 0.02 ms 0.988 ± 0.074
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Current form 15.4 ± 25 ms 15.5 ± 21 ms 0.993 ± 2.1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Prediction form 0.431 ± 0.001 μs 0.421 ± 0.01 μs 1.02 ± 0.024
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Current form 0.317 ± 0.019 ms 0.32 ± 0.019 ms 0.991 ± 0.084
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Prediction form 1.33 ± 0.02 μs 1.31 ± 0.01 μs 1.02 ± 0.017
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Current form 0.0329 ± 0.0052 ms 0.0327 ± 0.0047 ms 1.01 ± 0.22
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Prediction form 0.0322 ± 0.0012 s 31.5 ± 1.3 ms 1.02 ± 0.058
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Current form 17.6 ± 0.54 μs 18.1 ± 0.52 μs 0.976 ± 0.041
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Prediction form 0.34 ± 0.019 ms 0.331 ± 0.019 ms 1.03 ± 0.083
UNIT TESTS/StateEstimator/SteadyKalmanFilter/evaloutput 0.241 ± 0.001 μs 0.491 ± 0.01 μs 0.491 ± 0.01
UNIT TESTS/StateEstimator/SteadyKalmanFilter/preparestate! 0.29 ± 0.01 μs 0.251 ± 0.011 μs 1.16 ± 0.064
UNIT TESTS/StateEstimator/SteadyKalmanFilter/updatestate! 0.701 ± 0.01 μs 0.571 ± 0.011 μs 1.23 ± 0.029
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/LinModel 0.291 ± 0.011 μs 0.281 ± 0.01 μs 1.04 ± 0.054
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/NonLinModel 0.852 ± 0.019 μs 0.872 ± 0.02 μs 0.977 ± 0.031
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/LinModel 3.68 ± 0.059 μs 3.65 ± 0.051 μs 1.01 ± 0.021
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/NonLinModel 5.36 ± 0.06 μs 5.08 ± 0.06 μs 1.06 ± 0.017
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/LinModel 3.75 ± 0.06 μs 3.7 ± 0.059 μs 1.01 ± 0.023
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/NonLinModel 6.39 ± 0.071 μs 6.61 ± 0.09 μs 0.967 ± 0.017
time_to_load 5.78 ± 0.02 s 5.79 ± 0.015 s 0.997 ± 0.0042
Memory benchmarks
main 7d114e9... main / 7d114e9...
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/DAQP/SingleShooting 0.0469 M allocs: 1.85 MB 0.0469 M allocs: 1.85 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/MultipleShooting 0.166 M allocs: 9.51 MB 0.166 M allocs: 9.51 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/SingleShooting 0.058 M allocs: 2.99 MB 0.058 M allocs: 2.99 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/MultipleShooting 0.0758 M allocs: 1.95 MB 0.0758 M allocs: 1.95 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/SingleShooting 7.84 k allocs: 0.249 MB 7.84 k allocs: 0.249 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/DAQP/SingleShooting 0.0468 M allocs: 1.84 MB 0.0468 M allocs: 1.84 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/MultipleShooting 0.131 M allocs: 7.68 MB 0.131 M allocs: 7.68 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/SingleShooting 0.0601 M allocs: 3.08 MB 0.0601 M allocs: 3.08 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/MultipleShooting 0.0531 M allocs: 1.39 MB 0.0531 M allocs: 1.39 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/SingleShooting 7.69 k allocs: 0.243 MB 7.69 k allocs: 0.243 MB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/DAQP/SingleShooting 0.119 M allocs: 6.37 MB 0.119 M allocs: 6.37 MB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/MultipleShooting 4.65 M allocs: 0.251 GB 4.65 M allocs: 0.251 GB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/SingleShooting 0.117 M allocs: 7 MB 0.117 M allocs: 7 MB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/MultipleShooting 4.69 M allocs: 0.255 GB 4.69 M allocs: 0.255 GB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/SingleShooting 0.126 M allocs: 7.8 MB 0.126 M allocs: 7.8 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting 0.436 M allocs: 23.8 MB 0.436 M allocs: 23.8 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting (Hessian) 1.04 M allocs: 0.0873 GB 1.04 M allocs: 0.0873 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/SingleShooting 0.365 M allocs: 18.3 MB 0.365 M allocs: 18.3 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation 1.01 M allocs: 0.0717 GB 1.01 M allocs: 0.0717 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 1.01 M allocs: 0.0717 GB 1.01 M allocs: 0.0717 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting 0.317 M allocs: 17 MB 0.317 M allocs: 17 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting (Hessian) 0.739 M allocs: 0.0644 GB 0.739 M allocs: 0.0644 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation 1.33 M allocs: 0.116 GB 1.33 M allocs: 0.116 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation (Hessian) 1.33 M allocs: 0.116 GB 1.33 M allocs: 0.116 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting 0.0991 M allocs: 4.45 MB 0.0991 M allocs: 4.45 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting (Hessian) 0.0797 M allocs: 5.2 MB 0.0797 M allocs: 5.2 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation 0.315 M allocs: 16.9 MB 0.315 M allocs: 16.9 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation (Hessian) 0.755 M allocs: 0.056 GB 0.755 M allocs: 0.056 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting (Hessian) 0.0912 M allocs: 8.75 MB 0.0912 M allocs: 8.75 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Uno/MultipleShooting (Hessian) 0.308 M allocs: 25.7 MB 0.308 M allocs: 25.7 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting 0.278 M allocs: 14.8 MB 0.278 M allocs: 14.8 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (Hessian) 0.707 M allocs: 0.0545 GB 0.707 M allocs: 0.0545 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.296 M allocs: 23.7 MB 0.296 M allocs: 23.7 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation 1.43 M allocs: 0.124 GB 1.43 M allocs: 0.124 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation (Hessian) 5.12 M allocs: 0.555 GB 5.12 M allocs: 0.555 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting 0.0773 M allocs: 3.45 MB 0.0773 M allocs: 3.45 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting (Hessian) 0.0793 M allocs: 5.15 MB 0.0793 M allocs: 5.15 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation 0.277 M allocs: 14.8 MB 0.277 M allocs: 14.8 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (Hessian) 0.718 M allocs: 0.0458 GB 0.718 M allocs: 0.0458 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.296 M allocs: 23.8 MB 0.296 M allocs: 23.8 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/MultipleShooting (Hessian) 0.586 M allocs: 0.0573 GB 0.586 M allocs: 0.0573 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting (Hessian) 0.0913 M allocs: 8.73 MB 0.0913 M allocs: 8.73 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Uno/MultipleShooting (Hessian) 0.304 M allocs: 22.6 MB 0.304 M allocs: 22.6 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Uno/OrthogonalCollocation (Hessian) 2.12 M allocs: 0.225 GB 2.12 M allocs: 0.225 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 1.25 M allocs: 0.213 GB 1.25 M allocs: 0.213 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Prediction form 1.16 M allocs: 0.136 GB 1.16 M allocs: 0.136 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Current form 1.13 M allocs: 0.211 GB 1.13 M allocs: 0.211 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Prediction form 1.08 M allocs: 0.134 GB 1.08 M allocs: 0.134 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Current form 1.12 M allocs: 0.209 GB 1.12 M allocs: 0.209 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Prediction form 1.06 M allocs: 0.133 GB 1.06 M allocs: 0.133 GB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form 0.071 M allocs: 12.2 MB 0.071 M allocs: 12.2 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian) 0.07 M allocs: 12.1 MB 0.07 M allocs: 12.1 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form 0.0522 M allocs: 8.54 MB 0.0522 M allocs: 8.54 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian) 0.0702 M allocs: 12.1 MB 0.0702 M allocs: 12.1 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Current form (Hessian) 0.0919 M allocs: 16.1 MB 0.0919 M allocs: 16.1 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form (Hessian) 0.0867 M allocs: 14.7 MB 0.0867 M allocs: 14.7 MB 1
UNIT TESTS/PredictiveController/ExplicitMPC/moveinput! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/PredictiveController/LinMPC/getinfo! 0.327 k allocs: 15.8 kB 0.327 k allocs: 15.8 kB 1
UNIT TESTS/PredictiveController/LinMPC/moveinput!/MultipleShooting 0.994 k allocs: 25.5 kB 0.994 k allocs: 25.5 kB 1
UNIT TESTS/PredictiveController/LinMPC/moveinput!/SingleShooting 0.088 k allocs: 2.23 kB 0.088 k allocs: 2.23 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/LinModel 0.574 k allocs: 0.0632 MB 0.482 k allocs: 0.0604 MB 1.05
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.614 k allocs: 0.0785 MB 0.614 k allocs: 0.0785 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/MultipleShooting 1.97 k allocs: 0.0831 MB 1.89 k allocs: 0.11 MB 0.758
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/SingleShooting 0.314 k allocs: 12.4 kB 0.431 k allocs: 18.1 kB 0.683
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShooting 2.3 k allocs: 0.104 MB 2.3 k allocs: 0.104 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShootingHessian 2.89 k allocs: 0.14 MB 2.89 k allocs: 0.14 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocation 3.79 k allocs: 0.194 MB 3.79 k allocs: 0.194 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocationHessian 7.61 k allocs: 0.534 MB 7.61 k allocs: 0.534 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShooting 0.337 k allocs: 13.5 kB 0.337 k allocs: 13.5 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShootingHessian 0.337 k allocs: 13.5 kB 0.337 k allocs: 13.5 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/TrapezoidalCollocation 1.45 k allocs: 0.0616 MB 1.45 k allocs: 0.0616 MB 1
UNIT TESTS/SimModel/LinModel/evaloutput 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/SimModel/LinModel/updatestate! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/SimModel/NonLinModel/evaloutput 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/SimModel/NonLinModel/linearize! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/SimModel/NonLinModel/updatestate! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/LinModel 4 allocs: 0.0938 kB 4 allocs: 0.0938 kB 1
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/NonLinModel 4 allocs: 0.0938 kB 4 allocs: 0.0938 kB 1
UNIT TESTS/StateEstimator/InternalModel/evaloutput/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/InternalModel/evaloutput/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/InternalModel/preparestate!/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/InternalModel/preparestate!/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/InternalModel/updatestate!/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/InternalModel/updatestate!/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/KalmanFilter/evaloutput 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/KalmanFilter/preparestate! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/KalmanFilter/updatestate! 4 allocs: 0.0938 kB 4 allocs: 0.0938 kB 1
UNIT TESTS/StateEstimator/Luenberger/evaloutput 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/Luenberger/preparestate! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/Luenberger/updatestate! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/LinModel 1.02 k allocs: 0.0425 MB 1.02 k allocs: 0.0425 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/NonLinModel 1.29 k allocs: 0.175 MB 1.29 k allocs: 0.175 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Current form 0.158 M allocs: 0.115 GB 0.158 M allocs: 0.115 GB 0.995
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Prediction form 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Current form 0.995 k allocs: 26.1 kB 0.995 k allocs: 26.1 kB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Prediction form 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Current form 2 allocs: 0.0469 kB 2 allocs: 0.0469 kB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Prediction form 7.08 k allocs: 0.451 MB 7.08 k allocs: 0.451 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Current form 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Prediction form 0.995 k allocs: 26.1 kB 0.995 k allocs: 26.1 kB 1
UNIT TESTS/StateEstimator/SteadyKalmanFilter/evaloutput 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/SteadyKalmanFilter/preparestate! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/SteadyKalmanFilter/updatestate! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/LinModel 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/NonLinModel 0 allocs: 0 B 0 allocs: 0 B
time_to_load 0.149 k allocs: 11.2 kB 0.149 k allocs: 11.2 kB 1

@franckgaga
Copy link
Copy Markdown
Member Author

Yes, the tests with NonLinMPC and LinModel are generally slightly faster in the benchmark suite! Good news, will merge!

@franckgaga franckgaga merged commit 83cd882 into main Jun 3, 2026
6 checks passed
@franckgaga franckgaga deleted the nonlinmpc_quadobj_linmodel branch June 3, 2026 00:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants