Skip to content

removed: specialized obj_nonlinprog! for LinModel in NonLinMPC (slower)#325

Merged
franckgaga merged 4 commits intomainfrom
debug_objfct_nlp
Mar 4, 2026
Merged

removed: specialized obj_nonlinprog! for LinModel in NonLinMPC (slower)#325
franckgaga merged 4 commits intomainfrom
debug_objfct_nlp

Conversation

@franckgaga
Copy link
Member

@franckgaga franckgaga commented Mar 3, 2026

The two methods had different number of argument because of a refactor. It was always thus fallbacking to the general one for NonLinModel. It works but it is less efficient.

edit: see comment below, it's actually slower so the specialized method is removed.

The two methods had different number of argument because of a refactor. It was always thus fallbacking to the one for `NonLinModel`. It works but it is less efficient.
@codecov-commenter
Copy link

codecov-commenter commented Mar 3, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.56%. Comparing base (307a542) to head (3b0bd3e).
⚠️ Report is 12 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #325      +/-   ##
==========================================
+ Coverage   98.48%   98.56%   +0.07%     
==========================================
  Files          27       27              
  Lines        5165     5162       -3     
==========================================
+ Hits         5087     5088       +1     
+ Misses         78       74       -4     

☔ 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

github-actions bot commented Mar 4, 2026

Benchmark Results (Julia v1)

Time benchmarks
main 9984e43... main / 9984e43...
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/DAQP/SingleShooting 5.4 ± 0.48 ms 5.37 ± 0.17 ms 1.01 ± 0.094
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/MultipleShooting 0.315 ± 0.01 s 0.317 ± 0.006 s 0.994 ± 0.037
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/SingleShooting 0.226 ± 0.016 s 0.225 ± 0.016 s 1.01 ± 0.1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/MultipleShooting 9.76 ± 0.58 ms 9.32 ± 0.52 ms 1.05 ± 0.085
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/SingleShooting 1.83 ± 0.024 ms 1.78 ± 0.026 ms 1.03 ± 0.02
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/DAQP/SingleShooting 5.34 ± 0.48 ms 5.34 ± 0.17 ms 1 ± 0.095
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/MultipleShooting 0.272 ± 0.0046 s 0.273 ± 0.0034 s 0.995 ± 0.021
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/SingleShooting 0.229 ± 0.0088 s 0.232 ± 0.0047 s 0.984 ± 0.043
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/MultipleShooting 6.78 ± 0.41 ms 6.8 ± 0.69 ms 0.998 ± 0.12
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/SingleShooting 2 ± 0.051 ms 1.87 ± 0.032 ms 1.07 ± 0.033
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/DAQP/SingleShooting 10.2 ± 1.7 ms 10.2 ± 1.8 ms 0.994 ± 0.24
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/MultipleShooting 0.328 ± 0.058 s 0.324 ± 0.067 s 1.01 ± 0.27
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/SingleShooting 0.157 ± 0.0023 s 0.159 ± 0.0022 s 0.99 ± 0.02
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/MultipleShooting 0.0968 ± 0.018 s 0.106 ± 0.035 s 0.914 ± 0.35
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/SingleShooting 13.3 ± 1.8 ms 16 ± 2.1 ms 0.836 ± 0.16
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting 0.711 ± 0.039 s 0.715 ± 0.046 s 0.995 ± 0.084
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting (Hessian) 0.68 ± 0.052 s 0.709 ± 0.06 s 0.959 ± 0.11
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/SingleShooting 1.76 ± 0.1 s 1.77 ± 0.12 s 0.995 ± 0.09
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation 0.515 ± 0.06 s 0.518 ± 0.058 s 0.994 ± 0.16
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 0.519 ± 0.061 s 0.516 ± 0.06 s 1.01 ± 0.17
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting 0.359 ± 0.01 s 0.352 ± 0.0032 s 1.02 ± 0.03
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting (Hessian) 0.443 ± 0.044 s 0.445 ± 0.046 s 0.996 ± 0.14
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting 0.489 ± 0.011 s 0.489 ± 0.013 s 1 ± 0.036
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting (Hessian) 0.168 ± 0.0026 s 0.166 ± 0.0024 s 1.01 ± 0.021
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation 0.343 ± 0.0091 s 0.338 ± 0.01 s 1.01 ± 0.041
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation (Hessian) 0.436 ± 0.049 s 0.437 ± 0.051 s 0.998 ± 0.16
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting 9.92 ± 0.14 s 10.3 ± 0.24 s 0.962 ± 0.027
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting 0.337 ± 0.012 s 0.339 ± 0.011 s 0.995 ± 0.047
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (Hessian) 0.398 ± 0.039 s 0.407 ± 0.035 s 0.978 ± 0.13
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.369 ± 0.014 s 0.371 ± 0.014 s 0.996 ± 0.054
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting 0.496 ± 0.014 s 0.496 ± 0.013 s 1 ± 0.039
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting (Hessian) 0.165 ± 0.0032 s 0.168 ± 0.0047 s 0.981 ± 0.033
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation 0.326 ± 0.0044 s 0.329 ± 0.0043 s 0.992 ± 0.018
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (Hessian) 0.307 ± 0.022 s 0.312 ± 0.025 s 0.985 ± 0.1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.364 ± 0.023 s 0.369 ± 0.024 s 0.987 ± 0.089
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting 13.5 ± 0.33 s 13.8 ± 0.46 s 0.981 ± 0.041
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 0.0382 ± 0.00088 s 0.041 ± 0.002 s 0.931 ± 0.05
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Prediction form 0.0322 ± 0.008 s 0.0331 ± 0.0089 s 0.972 ± 0.36
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Current form 0.18 ± 0.039 s 0.19 ± 0.047 s 0.945 ± 0.31
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Prediction form 0.167 ± 0.031 s 0.159 ± 0.032 s 1.06 ± 0.29
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Current form 0.0324 ± 0.0045 s 0.0332 ± 0.0045 s 0.978 ± 0.19
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Prediction form 26.8 ± 3.7 ms 26.6 ± 6.1 ms 1.01 ± 0.27
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form 0.0763 ± 0.0009 s 0.0843 ± 0.0013 s 0.905 ± 0.018
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian) 0.0748 ± 0.00082 s 0.0793 ± 0.0028 s 0.943 ± 0.034
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form 0.0594 ± 0.00066 s 0.0646 ± 0.0014 s 0.921 ± 0.023
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian) 0.0766 ± 0.00092 s 0.0828 ± 0.0012 s 0.925 ± 0.018
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Current form 3.52 ± 0.047 s 3.77 ± 0.25 s 0.935 ± 0.062
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form 2.86 ± 0.075 s 3.11 ± 0.13 s 0.92 ± 0.047
UNIT TESTS/PredictiveController/ExplicitMPC/moveinput! 4.19 ± 0.031 μs 3.9 ± 0.041 μs 1.07 ± 0.014
UNIT TESTS/PredictiveController/LinMPC/getinfo! 0.111 ± 0.0047 ms 0.112 ± 0.003 ms 0.995 ± 0.05
UNIT TESTS/PredictiveController/LinMPC/moveinput!/MultipleShooting 0.106 ± 0.0014 ms 0.108 ± 0.0023 ms 0.986 ± 0.024
UNIT TESTS/PredictiveController/LinMPC/moveinput!/SingleShooting 16.7 ± 0.38 μs 16.3 ± 0.38 μs 1.02 ± 0.033
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/LinModel 0.202 ± 0.011 ms 0.204 ± 0.016 ms 0.99 ± 0.096
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.236 ± 0.018 ms 0.243 ± 0.019 ms 0.972 ± 0.11
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/MultipleShooting 2.56 ± 0.25 ms 5.17 ± 0.24 ms 0.496 ± 0.054
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/SingleShooting 1.74 ± 0.089 ms 1.76 ± 0.081 ms 0.987 ± 0.068
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShooting 3.14 ± 0.13 ms 3.13 ± 0.17 ms 1 ± 0.069
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShootingHessian 3.17 ± 0.17 ms 3.14 ± 0.14 ms 1.01 ± 0.071
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShooting 1.76 ± 0.068 ms 1.79 ± 0.075 ms 0.984 ± 0.056
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShootingHessian 1.78 ± 0.062 ms 1.75 ± 0.055 ms 1.02 ± 0.048
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/TrapezoidalCollocation 2.21 ± 0.055 ms 2.26 ± 0.19 ms 0.975 ± 0.087
UNIT TESTS/SimModel/LinModel/evaloutput 0.15 ± 0.01 μs 0.15 ± 0.009 μs 1 ± 0.09
UNIT TESTS/SimModel/LinModel/updatestate! 0.201 ± 0.01 μs 0.21 ± 0.001 μs 0.957 ± 0.048
UNIT TESTS/SimModel/NonLinModel/evaloutput 0.421 ± 0.01 μs 0.431 ± 0.01 μs 0.977 ± 0.032
UNIT TESTS/SimModel/NonLinModel/linearize! 2.04 ± 0.02 μs 2.09 ± 0.021 μs 0.976 ± 0.014
UNIT TESTS/SimModel/NonLinModel/updatestate! 0.481 ± 0.01 μs 0.501 ± 0.01 μs 0.96 ± 0.028
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/LinModel 0.561 ± 0 μs 0.551 ± 0.01 μs 1.02 ± 0.018
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/NonLinModel 1.81 ± 0.011 μs 1.83 ± 0.02 μs 0.989 ± 0.012
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/LinModel 0.27 ± 0.001 μs 0.271 ± 0.01 μs 0.996 ± 0.037
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/NonLinModel 1.41 ± 0.001 μs 1.43 ± 0.01 μs 0.987 ± 0.0069
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/LinModel 4.06 ± 0.08 μs 4.29 ± 0.13 μs 0.946 ± 0.034
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/NonLinModel 8.86 ± 0.09 μs 8.85 ± 0.1 μs 1 ± 0.015
UNIT TESTS/StateEstimator/InternalModel/evaloutput/LinModel 0.24 ± 0.001 μs 0.241 ± 0.001 μs 0.996 ± 0.0059
UNIT TESTS/StateEstimator/InternalModel/evaloutput/NonLinModel 0.572 ± 0.01 μs 0.572 ± 0.01 μs 1 ± 0.025
UNIT TESTS/StateEstimator/InternalModel/preparestate!/LinModel 0.281 ± 0.01 μs 0.29 ± 0.01 μs 0.969 ± 0.048
UNIT TESTS/StateEstimator/InternalModel/preparestate!/NonLinModel 0.741 ± 0.011 μs 0.732 ± 0.01 μs 1.01 ± 0.02
UNIT TESTS/StateEstimator/InternalModel/updatestate!/LinModel 0.421 ± 0.01 μs 0.421 ± 0.01 μs 1 ± 0.034
UNIT TESTS/StateEstimator/InternalModel/updatestate!/NonLinModel 0.922 ± 0.01 μs 0.932 ± 0.019 μs 0.989 ± 0.023
UNIT TESTS/StateEstimator/KalmanFilter/evaloutput 0.27 ± 0.01 μs 0.261 ± 0.01 μs 1.03 ± 0.055
UNIT TESTS/StateEstimator/KalmanFilter/preparestate! 0.131 ± 0.01 μs 0.13 ± 0.01 μs 1.01 ± 0.11
UNIT TESTS/StateEstimator/KalmanFilter/updatestate! 2.52 ± 0.03 μs 2.54 ± 0.031 μs 0.992 ± 0.017
UNIT TESTS/StateEstimator/Luenberger/evaloutput 0.24 ± 0.01 μs 0.241 ± 0.01 μs 0.996 ± 0.059
UNIT TESTS/StateEstimator/Luenberger/preparestate! 0.251 ± 0.011 μs 0.27 ± 0.011 μs 0.93 ± 0.056
UNIT TESTS/StateEstimator/Luenberger/updatestate! 0.341 ± 0.001 μs 0.371 ± 0.01 μs 0.919 ± 0.025
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/LinModel 0.18 ± 0.012 ms 0.189 ± 0.016 ms 0.952 ± 0.1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/NonLinModel 0.36 ± 0.02 ms 0.349 ± 0.018 ms 1.03 ± 0.078
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Current form 3.68 ± 0.23 ms 3.58 ± 0.25 ms 1.03 ± 0.096
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Prediction form 0.481 ± 0 μs 0.481 ± 0 μs 1 ± 0
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Current form 0.329 ± 0.019 ms 0.337 ± 0.019 ms 0.976 ± 0.079
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Prediction form 1.32 ± 0.011 μs 1.32 ± 0.011 μs 1 ± 0.012
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Current form 7.33 ± 3.2 μs 9.64 ± 4.5 μs 0.761 ± 0.48
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Prediction form 3.13 ± 0.25 ms 3.13 ± 0.22 ms 1 ± 0.11
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Current form 17 ± 0.81 μs 17.1 ± 0.73 μs 0.998 ± 0.064
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Prediction form 0.358 ± 0.019 ms 0.346 ± 0.019 ms 1.03 ± 0.079
UNIT TESTS/StateEstimator/SteadyKalmanFilter/evaloutput 0.27 ± 0.011 μs 0.27 ± 0.01 μs 1 ± 0.055
UNIT TESTS/StateEstimator/SteadyKalmanFilter/preparestate! 0.29 ± 0.01 μs 0.281 ± 0.01 μs 1.03 ± 0.051
UNIT TESTS/StateEstimator/SteadyKalmanFilter/updatestate! 0.371 ± 0.01 μs 0.381 ± 0.01 μs 0.974 ± 0.037
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/LinModel 0.301 ± 0.001 μs 0.301 ± 0.01 μs 1 ± 0.033
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/NonLinModel 0.921 ± 0.01 μs 0.912 ± 0.019 μs 1.01 ± 0.024
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/LinModel 3.68 ± 0.03 μs 3.63 ± 0.03 μs 1.01 ± 0.012
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/NonLinModel 4.93 ± 0.071 μs 4.93 ± 0.079 μs 1 ± 0.022
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/LinModel 3.51 ± 0.03 μs 3.55 ± 0.04 μs 0.988 ± 0.014
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/NonLinModel 6.3 ± 0.079 μs 6.26 ± 0.07 μs 1.01 ± 0.017
time_to_load 5.4 ± 0.056 s 5.89 ± 0.032 s 0.918 ± 0.011
Memory benchmarks
main 9984e43... main / 9984e43...
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/DAQP/SingleShooting 0.0424 M allocs: 1.71 MB 0.0424 M allocs: 1.71 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/MultipleShooting 0.162 M allocs: 8.9 MB 0.162 M allocs: 8.9 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/SingleShooting 0.0536 M allocs: 2.38 MB 0.0536 M allocs: 2.38 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.85 k allocs: 0.249 MB 7.85 k allocs: 0.249 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/DAQP/SingleShooting 0.0423 M allocs: 1.7 MB 0.0423 M allocs: 1.7 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/MultipleShooting 0.127 M allocs: 7.07 MB 0.127 M allocs: 7.07 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/SingleShooting 0.0553 M allocs: 2.42 MB 0.0553 M allocs: 2.42 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/MultipleShooting 0.0532 M allocs: 1.39 MB 0.0532 M allocs: 1.39 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/SingleShooting 7.7 k allocs: 0.243 MB 7.7 k allocs: 0.243 MB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/DAQP/SingleShooting 0.115 M allocs: 6.26 MB 0.115 M allocs: 6.26 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.115 M allocs: 6.67 MB 0.115 M allocs: 6.67 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.351 M allocs: 19.7 MB 0.351 M allocs: 19.7 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting (Hessian) 0.862 M allocs: 0.0792 GB 0.862 M allocs: 0.0792 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/SingleShooting 0.353 M allocs: 16.7 MB 0.353 M allocs: 16.7 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation 1.01 M allocs: 0.0715 GB 1.01 M allocs: 0.0715 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 1.01 M allocs: 0.0715 GB 1.01 M allocs: 0.0715 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting 0.267 M allocs: 14.7 MB 0.267 M allocs: 14.7 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting (Hessian) 0.633 M allocs: 0.0604 GB 0.633 M allocs: 0.0604 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting 0.0951 M allocs: 3.9 MB 0.0951 M allocs: 3.9 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting (Hessian) 0.0772 M allocs: 5.08 MB 0.0772 M allocs: 5.08 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation 0.321 M allocs: 17.1 MB 0.321 M allocs: 17.1 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation (Hessian) 0.913 M allocs: 0.0727 GB 0.913 M allocs: 0.0727 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting 5.82 M allocs: 1.13 GB 5.82 M allocs: 1.13 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting 0.226 M allocs: 12.2 MB 0.226 M allocs: 12.2 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (Hessian) 0.647 M allocs: 0.0543 GB 0.647 M allocs: 0.0543 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.244 M allocs: 20.7 MB 0.244 M allocs: 20.7 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting 0.0741 M allocs: 3 MB 0.0741 M allocs: 3 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting (Hessian) 0.0768 M allocs: 5.04 MB 0.0768 M allocs: 5.04 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation 0.271 M allocs: 14.3 MB 0.271 M allocs: 14.3 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (Hessian) 0.761 M allocs: 0.0496 GB 0.761 M allocs: 0.0496 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.289 M allocs: 22.9 MB 0.289 M allocs: 22.9 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting 8.15 M allocs: 1.58 GB 8.15 M allocs: 1.58 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 0.762 M allocs: 0.0802 GB 0.763 M allocs: 0.0814 GB 0.986
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Prediction form 0.682 M allocs: 0.0585 GB 0.682 M allocs: 0.0585 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Current form 0.646 M allocs: 0.0785 GB 0.646 M allocs: 0.0785 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Prediction form 0.601 M allocs: 0.0562 GB 0.601 M allocs: 0.0562 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Current form 0.63 M allocs: 0.0764 GB 0.63 M allocs: 0.0764 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Prediction form 0.585 M allocs: 0.0553 GB 0.585 M allocs: 0.0553 GB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form 0.0649 M allocs: 11.5 MB 0.0649 M allocs: 11.5 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian) 0.0639 M allocs: 11.3 MB 0.0639 M allocs: 11.3 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form 0.0485 M allocs: 8.05 MB 0.0485 M allocs: 8.05 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian) 0.0642 M allocs: 11.3 MB 0.0642 M allocs: 11.3 MB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Current form 13.8 M allocs: 2.46 GB 13.8 M allocs: 2.46 GB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form 11.2 M allocs: 2 GB 11.2 M allocs: 2 GB 1
UNIT TESTS/PredictiveController/ExplicitMPC/moveinput! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/PredictiveController/LinMPC/getinfo! 0.323 k allocs: 15.6 kB 0.323 k allocs: 15.6 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.563 k allocs: 0.0588 MB 0.563 k allocs: 0.0588 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.606 k allocs: 0.0776 MB 0.606 k allocs: 0.0776 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/MultipleShooting 2.4 k allocs: 0.107 MB 2.4 k allocs: 0.107 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/SingleShooting 0.37 k allocs: 13.1 kB 0.37 k allocs: 13.1 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShooting 2.64 k allocs: 0.126 MB 2.64 k allocs: 0.126 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShootingHessian 3.15 k allocs: 0.158 MB 3.15 k allocs: 0.158 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShooting 0.404 k allocs: 14.7 kB 0.404 k allocs: 14.7 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShootingHessian 0.404 k allocs: 14.7 kB 0.404 k allocs: 14.7 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/TrapezoidalCollocation 1.92 k allocs: 0.0816 MB 1.92 k allocs: 0.0816 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.03 k allocs: 0.0393 MB 1.03 k allocs: 0.0393 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/NonLinModel 1.24 k allocs: 0.203 MB 1.24 k allocs: 0.203 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Current form 0.0754 M allocs: 14.6 MB 0.0754 M allocs: 14.6 MB 1
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.972 k allocs: 25.4 kB 0.972 k allocs: 25.4 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.05 k allocs: 0.443 MB 7.05 k allocs: 0.443 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.972 k allocs: 25.4 kB 0.972 k allocs: 25.4 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
Member Author

franckgaga commented Mar 4, 2026

Surpise! 😲

The specialized obj_nonlinprog! methods for LinModel is not faster at all, and actually twice slower for MultipleShooting:

NonLinMPC/moveinput!/LinModel/MultipleShooting 	2.56 ± 0.25 ms    5.17 ± 0.24 ms    0.496 ± 0.054
NonLinMPC/moveinput!/LinModel/SingleShooting 	1.74 ± 0.089 ms   1.76 ± 0.081 ms   0.987 ± 0.068

Thanks to my benchmark suite! It does make sense a posteriori, since the Hessian matrix mpc.H̃ is stored as a dense Hermitian matrix (to allow setmodel!), and it contains many zeros in the MultipleShooting case. The general obj_nonlinprog! skip the multiplications with zeros since the predictions and the increments are already extracted from the decision vector and current estimate.

Conclusion: it make sense to specialize the output prediction equations but not the objective function. I will remove this method.

@franckgaga franckgaga changed the title debug: specialized obj_nonlinprog! for LinModel in NonLinMPC removed: specialized obj_nonlinprog! for LinModel in NonLinMPC Mar 4, 2026
@franckgaga franckgaga changed the title removed: specialized obj_nonlinprog! for LinModel in NonLinMPC removed: specialized obj_nonlinprog! for LinModel in NonLinMPC (slower) Mar 4, 2026
@franckgaga franckgaga merged commit 40b72ba into main Mar 4, 2026
4 of 5 checks passed
@franckgaga franckgaga deleted the debug_objfct_nlp branch March 4, 2026 15:35
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