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 3b0bd3e... main / 3b0bd3e...
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/DAQP/SingleShooting 5.4 ± 0.45 ms 5.43 ± 0.4 ms 0.996 ± 0.11
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/MultipleShooting 0.318 ± 0.0093 s 0.319 ± 0.012 s 0.995 ± 0.046
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/Ipopt/SingleShooting 0.226 ± 0.015 s 0.229 ± 0.015 s 0.986 ± 0.09
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/MultipleShooting 9.49 ± 0.54 ms 9.4 ± 0.54 ms 1.01 ± 0.082
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/SingleShooting 1.79 ± 0.037 ms 1.82 ± 0.034 ms 0.984 ± 0.027
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/DAQP/SingleShooting 5.35 ± 0.4 ms 5.43 ± 0.45 ms 0.986 ± 0.11
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/MultipleShooting 0.272 ± 0.0099 s 0.275 ± 0.009 s 0.99 ± 0.048
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/Ipopt/SingleShooting 0.229 ± 0.014 s 0.231 ± 0.013 s 0.993 ± 0.081
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/MultipleShooting 6.49 ± 0.38 ms 6.47 ± 0.41 ms 1 ± 0.087
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/SingleShooting 1.87 ± 0.079 ms 1.91 ± 0.069 ms 0.981 ± 0.055
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/DAQP/SingleShooting 10.4 ± 1.7 ms 10.4 ± 1.8 ms 0.998 ± 0.24
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/MultipleShooting 0.343 ± 0.13 s 0.333 ± 0.15 s 1.03 ± 0.59
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/Ipopt/SingleShooting 0.159 ± 0.0036 s 0.158 ± 0.0041 s 1 ± 0.034
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/MultipleShooting 0.111 ± 0.025 s 0.109 ± 0.024 s 1.02 ± 0.32
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/SingleShooting 13.6 ± 1.9 ms 13.7 ± 1.7 ms 0.996 ± 0.18
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting 0.713 ± 0.042 s 0.709 ± 0.047 s 1.01 ± 0.089
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting (Hessian) 0.702 ± 0.058 s 0.7 ± 0.058 s 1 ± 0.12
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/SingleShooting 1.76 ± 0.12 s 1.77 ± 0.13 s 0.996 ± 0.1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation 0.529 ± 0.066 s 0.542 ± 0.071 s 0.977 ± 0.18
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 0.529 ± 0.069 s 0.538 ± 0.073 s 0.984 ± 0.19
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting 0.357 ± 0.0056 s 0.358 ± 0.0066 s 0.995 ± 0.024
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting (Hessian) 0.443 ± 0.046 s 0.452 ± 0.049 s 0.98 ± 0.15
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting 0.487 ± 0.0038 s 0.488 ± 0.0051 s 0.998 ± 0.013
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting (Hessian) 0.165 ± 0.002 s 0.167 ± 0.0025 s 0.991 ± 0.019
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation 0.344 ± 0.011 s 0.339 ± 0.0099 s 1.01 ± 0.043
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation (Hessian) 0.43 ± 0.054 s 0.425 ± 0.052 s 1.01 ± 0.18
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting 10.4 ± 0.18 s 10.1 ± 0.064 s 1.03 ± 0.018
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting 0.344 ± 0.011 s 0.342 ± 0.0067 s 1.01 ± 0.038
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (Hessian) 0.413 ± 0.042 s 0.408 ± 0.043 s 1.01 ± 0.15
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.394 ± 0.018 s 0.391 ± 0.015 s 1.01 ± 0.061
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting 0.503 ± 0.014 s 0.502 ± 0.014 s 1 ± 0.04
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting (Hessian) 0.166 ± 0.0037 s 0.165 ± 0.0033 s 1 ± 0.03
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation 0.331 ± 0.0044 s 0.33 ± 0.0049 s 1 ± 0.02
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (Hessian) 0.324 ± 0.025 s 0.318 ± 0.025 s 1.02 ± 0.11
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.384 ± 0.025 s 0.377 ± 0.022 s 1.02 ± 0.088
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting 14.3 ± 0.31 s 14 ± 0.37 s 1.02 ± 0.035
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 0.0439 ± 0.0028 s 0.0431 ± 0.0032 s 1.02 ± 0.099
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Prediction form 0.0347 ± 0.011 s 0.0351 ± 0.012 s 0.986 ± 0.46
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Current form 0.179 ± 0.045 s 0.181 ± 0.046 s 0.992 ± 0.35
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/Ipopt/Prediction form 0.168 ± 0.032 s 0.169 ± 0.032 s 0.994 ± 0.26
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Current form 0.0364 ± 0.0054 s 0.0359 ± 0.0054 s 1.01 ± 0.21
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Prediction form 29.2 ± 2.9 ms 29.1 ± 4.1 ms 1.01 ± 0.17
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form 0.0819 ± 0.0018 s 0.0892 ± 0.0025 s 0.918 ± 0.033
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian) 0.081 ± 0.0021 s 0.0889 ± 0.0021 s 0.911 ± 0.032
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form 0.0623 ± 0.0035 s 0.0667 ± 0.0021 s 0.934 ± 0.06
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian) 0.0838 ± 0.0064 s 0.0881 ± 0.0026 s 0.951 ± 0.078
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Current form 3.33 ± 0.016 s 3.26 ± 0.017 s 1.02 ± 0.0073
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form 2.54 ± 0.017 s 2.49 ± 0.014 s 1.02 ± 0.0088
UNIT TESTS/PredictiveController/ExplicitMPC/moveinput! 3.83 ± 0.049 μs 4.26 ± 0.06 μs 0.899 ± 0.017
UNIT TESTS/PredictiveController/LinMPC/getinfo! 0.11 ± 0.003 ms 0.112 ± 0.0027 ms 0.98 ± 0.036
UNIT TESTS/PredictiveController/LinMPC/moveinput!/MultipleShooting 0.108 ± 0.004 ms 0.112 ± 0.0038 ms 0.963 ± 0.048
UNIT TESTS/PredictiveController/LinMPC/moveinput!/SingleShooting 16.4 ± 0.35 μs 17 ± 0.41 μs 0.965 ± 0.031
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/LinModel 0.208 ± 0.016 ms 0.205 ± 0.013 ms 1.02 ± 0.1
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.249 ± 0.02 ms 0.242 ± 0.02 ms 1.03 ± 0.12
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/MultipleShooting 2.65 ± 0.24 ms 2.6 ± 0.28 ms 1.02 ± 0.14
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/SingleShooting 1.78 ± 0.078 ms 1.73 ± 0.073 ms 1.02 ± 0.062
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShooting 3.18 ± 0.15 ms 3.13 ± 0.16 ms 1.02 ± 0.071
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShootingHessian 3.29 ± 0.27 ms 3.14 ± 0.17 ms 1.05 ± 0.1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShooting 1.79 ± 0.066 ms 1.76 ± 0.058 ms 1.02 ± 0.05
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShootingHessian 1.79 ± 0.064 ms 1.76 ± 0.061 ms 1.02 ± 0.051
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/TrapezoidalCollocation 2.26 ± 0.14 ms 2.21 ± 0.061 ms 1.02 ± 0.07
UNIT TESTS/SimModel/LinModel/evaloutput 0.16 ± 0.011 μs 0.14 ± 0.01 μs 1.14 ± 0.11
UNIT TESTS/SimModel/LinModel/updatestate! 0.201 ± 0.01 μs 0.21 ± 0.01 μs 0.957 ± 0.066
UNIT TESTS/SimModel/NonLinModel/evaloutput 0.421 ± 0.01 μs 0.451 ± 0.001 μs 0.933 ± 0.022
UNIT TESTS/SimModel/NonLinModel/linearize! 2.03 ± 0.03 μs 2.09 ± 0.021 μs 0.971 ± 0.017
UNIT TESTS/SimModel/NonLinModel/updatestate! 0.491 ± 0.01 μs 0.501 ± 0.01 μs 0.98 ± 0.028
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/LinModel 0.541 ± 0.01 μs 0.552 ± 0.01 μs 0.98 ± 0.025
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/NonLinModel 1.8 ± 0.011 μs 1.88 ± 0.011 μs 0.958 ± 0.0081
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/LinModel 0.27 ± 0.01 μs 0.271 ± 0.01 μs 0.996 ± 0.052
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/NonLinModel 1.41 ± 0.01 μs 1.42 ± 0.01 μs 0.993 ± 0.0099
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/LinModel 3.88 ± 0.06 μs 3.99 ± 0.06 μs 0.972 ± 0.021
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/NonLinModel 9.06 ± 0.07 μs 9.05 ± 0.081 μs 1 ± 0.012
UNIT TESTS/StateEstimator/InternalModel/evaloutput/LinModel 0.24 ± 0.01 μs 0.24 ± 0.001 μs 1 ± 0.042
UNIT TESTS/StateEstimator/InternalModel/evaloutput/NonLinModel 0.571 ± 0.01 μs 0.571 ± 0 μs 1 ± 0.018
UNIT TESTS/StateEstimator/InternalModel/preparestate!/LinModel 0.311 ± 0.01 μs 0.32 ± 0.01 μs 0.972 ± 0.044
UNIT TESTS/StateEstimator/InternalModel/preparestate!/NonLinModel 0.741 ± 0.011 μs 0.751 ± 0.001 μs 0.987 ± 0.015
UNIT TESTS/StateEstimator/InternalModel/updatestate!/LinModel 0.441 ± 0.01 μs 0.471 ± 0.002 μs 0.936 ± 0.022
UNIT TESTS/StateEstimator/InternalModel/updatestate!/NonLinModel 1.21 ± 0.011 μs 1.21 ± 0.01 μs 0.999 ± 0.012
UNIT TESTS/StateEstimator/KalmanFilter/evaloutput 0.27 ± 0.01 μs 0.261 ± 0.011 μs 1.03 ± 0.058
UNIT TESTS/StateEstimator/KalmanFilter/preparestate! 0.14 ± 0.01 μs 0.14 ± 0.009 μs 1 ± 0.096
UNIT TESTS/StateEstimator/KalmanFilter/updatestate! 2.52 ± 0.04 μs 2.54 ± 0.04 μs 0.988 ± 0.022
UNIT TESTS/StateEstimator/Luenberger/evaloutput 0.24 ± 0.01 μs 0.24 ± 0.01 μs 1 ± 0.059
UNIT TESTS/StateEstimator/Luenberger/preparestate! 0.26 ± 0.01 μs 0.251 ± 0.01 μs 1.04 ± 0.057
UNIT TESTS/StateEstimator/Luenberger/updatestate! 0.35 ± 0.01 μs 0.351 ± 0.01 μs 0.997 ± 0.04
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/LinModel 0.207 ± 0.034 ms 0.195 ± 0.024 ms 1.06 ± 0.22
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/NonLinModel 0.355 ± 0.019 ms 0.355 ± 0.019 ms 0.997 ± 0.077
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Current form 3.84 ± 0.3 ms 3.83 ± 0.28 ms 1 ± 0.11
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Prediction form 0.481 ± 0.01 μs 0.491 ± 0.01 μs 0.98 ± 0.029
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Current form 0.332 ± 0.019 ms 0.338 ± 0.019 ms 0.984 ± 0.08
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Prediction form 1.32 ± 0.011 μs 1.32 ± 0.01 μs 1 ± 0.011
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Current form 8.28 ± 4 μs 7.78 ± 3.3 μs 1.06 ± 0.69
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Prediction form 3.36 ± 0.27 ms 3.36 ± 0.26 ms 0.999 ± 0.11
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Current form 17 ± 0.71 μs 17.1 ± 0.62 μs 0.993 ± 0.055
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Prediction form 0.35 ± 0.02 ms 0.356 ± 0.019 ms 0.982 ± 0.077
UNIT TESTS/StateEstimator/SteadyKalmanFilter/evaloutput 0.261 ± 0.01 μs 0.261 ± 0.01 μs 1 ± 0.054
UNIT TESTS/StateEstimator/SteadyKalmanFilter/preparestate! 0.281 ± 0.01 μs 0.28 ± 0.01 μs 1 ± 0.051
UNIT TESTS/StateEstimator/SteadyKalmanFilter/updatestate! 0.381 ± 0.01 μs 0.371 ± 0.01 μs 1.03 ± 0.039
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/LinModel 0.3 ± 0.001 μs 0.301 ± 0.001 μs 0.997 ± 0.0047
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/NonLinModel 0.912 ± 0.02 μs 0.902 ± 0.01 μs 1.01 ± 0.025
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/LinModel 3.61 ± 0.03 μs 3.61 ± 0.02 μs 1 ± 0.01
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/NonLinModel 4.94 ± 0.039 μs 4.96 ± 0.031 μs 0.996 ± 0.01
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/LinModel 3.6 ± 0.05 μs 3.51 ± 0.07 μs 1.03 ± 0.025
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/NonLinModel 6.26 ± 0.051 μs 6.42 ± 0.06 μs 0.975 ± 0.012
time_to_load 5.85 ± 0.043 s 5.92 ± 0.019 s 0.989 ± 0.0079
Memory benchmarks
main 3b0bd3e... main / 3b0bd3e...
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.0793 GB 0.862 M allocs: 0.0791 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.0714 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 1.01 M allocs: 0.0715 GB 1.01 M allocs: 0.0714 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.0603 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.11 MB 0.0772 M allocs: 4.85 MB 1.05
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.0725 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting 5.92 M allocs: 0.549 GB 5.92 M allocs: 0.549 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.0544 GB 0.647 M allocs: 0.0542 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.244 M allocs: 21 MB 0.244 M allocs: 21 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.07 MB 0.0768 M allocs: 4.81 MB 1.05
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.0494 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.289 M allocs: 23.2 MB 0.289 M allocs: 23.2 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting 8.29 M allocs: 0.813 GB 8.29 M allocs: 0.813 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 0.763 M allocs: 0.082 GB 0.762 M allocs: 0.0802 GB 1.02
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 3.68 M allocs: 0.598 GB 3.68 M allocs: 0.598 GB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form 2.92 M allocs: 0.474 GB 2.92 M allocs: 0.474 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.0589 MB 0.563 k allocs: 0.0587 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.606 k allocs: 0.0779 MB 0.606 k allocs: 0.076 MB 1.02
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.7 MB 0.0754 M allocs: 14.6 MB 1.01
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

Surprise! 😲

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
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