Skip to content

added: NonLinModelDAE and OrthogonalCollocation support in MovingHorizonEstimator - #453

Merged
franckgaga merged 54 commits into
mainfrom
mhe_dae_oc
Sep 23, 2026
Merged

franckgaga merged 54 commits into
mainfrom
mhe_dae_oc

Conversation

@franckgaga

@franckgaga franckgaga commented Sep 22, 2026

Copy link
Copy Markdown
Member

This PR add the support of NonLinModelDAE in MovingHorizonEstimator using OrthogonalTranscription 🥳🍾🥳🍾

  • The default value of the transcription keyword argument in the MHE constructor is now model.transcription for DAEs. This is non-breaking since it is still SingleShooting for linear and nonlinear ODEs.
  • The optimal algebraic variables over the window and at the arrival is also now incorporated to returned dictionary of getinfo(estim::MovingHorizonEstimator).
  • The number of algebraic variables is now pretty-printed:
    MovingHorizonEstimator estimator with a sample time Ts = 1.0 s:
    ├ model: NonLinModelDAE
    ├ optimizer: Ipopt 
    ├ transcription: OrthogonalCollocation (4 collocation points)
    ├ gradient: AutoForwardDiff
    ├ jacobian: AutoSparse (AutoForwardDiff, TracerSparsityDetector, GreedyColoringAlgorithm)
    ├ hessian: AutoSparse (AutoForwardDiff, TracerSparsityDetector, GreedyColoringAlgorithm)
    ├ arrival covariance: SteadyKalmanFilter 
    ├ direct: false
    └ dimensions:
      │ ├ 10 estimation steps He
      │ ├  1 manipulated inputs u (0 integrating states)
      │ ├  2 estimated states x̂
      │ ├  1 algebraic variables a                     # <------------ new field here ------------
      │ ├  1 measured outputs ym (1 integrating states)
      │ ├  0 unmeasured outputs yu
      │ └  0 measured disturbances d
      └ optimization:
        ├ 133 decision variables Z̃ (0 slack variable, 0 bounds)
        ├   0 linear inequality constraints A
        ├  20 linear equality constraints Aeq
        ├   0 nonlinear inequality constraints g (0 custom)
        └  91 nonlinear equality constraints geq
    
  • The algebraic variable at the sampling instants, $\mathbf{a_0}$ and $\mathbf{A_0}$ vectors, are also renamed to $\mathbf{\hat{a}_0}$ and $\mathbf{\hat{A}_0}$, for consistency with the states at the sampling instants $\mathbf{\hat{x}_0}$ and $\mathbf{\hat{X}_0}$. All these vector are part of the decision variables in $\mathbf{Z}$:
    image
  • A MovingHorzionEstimator with a NonLinModelDAE and a OrthogonalCollocation transcription is added to the precompilation workflow.
  • The PR also include various bugfixes, including a very weird one with f_thread=true and a race condition on Julia v1.13.0 (was not able to reproduce on LTS). Honestly, I'm not sure why my solution work (different variable names after the loop than the variable names inside the loop body, likely something to weird Julia scoping rules). I ran it like 100 hundred times and no more race condition. A race condition was hit like one time out of five before this bugfix.

Related to #332.

New potential linear equality constraints (instead of nonlinear)

I also noticed also special case that could be optimized. For piecewise linear manipulated input (h==1) and :gaussradau, the algebraic variable at the sampling instants â0 and the algebraic variable at $\tau=1$ of the previous interval are strictly equal. This is in fact a linear equality constraint. So the number of nonlinear equality constraint could be reduced. It is currently handled as a nonlinear inequality constraint.

We can reuse the computation of the last iteration w/o multi-threading and with piecewise linear input `u`, but we need a special constraint to enforce that `a0` is equal to `a1` of the last iteration.
@franckgaga
franckgaga marked this pull request as ready for review September 22, 2026 22:03
@codecov-commenter

codecov-commenter commented Sep 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.97611% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 97.23%. Comparing base (3ad80dc) to head (9752fcd).
⚠️ Report is 55 commits behind head on main.

Files with missing lines Patch % Lines
src/model/nonlinmodeldae.jl 83.33% 2 Missing ⚠️
src/estimator/mhe/transcription.jl 99.54% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #453   +/-   ##
=======================================
  Coverage   97.22%   97.23%           
=======================================
  Files          28       28           
  Lines        6812     6860   +48     
=======================================
+ Hits         6623     6670   +47     
- Misses        189      190    +1     
Flag Coverage Δ
unittests 97.23% <98.97%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 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.

@franckgaga
franckgaga merged commit a5f42f0 into main Sep 23, 2026
23 of 33 checks passed
@github-actions

Copy link
Copy Markdown

Benchmark Results (Julia v1)

Time benchmarks
main 9752fcd... main / 9752fcd...
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/DAQP/SingleShooting 5.75 ± 0.77 ms 5.82 ± 0.85 ms 0.988 ± 0.2
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/MultipleShooting 11.5 ± 0.73 ms 11.4 ± 0.76 ms 1.01 ± 0.093
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/SingleShooting 1.91 ± 0.051 ms 1.88 ± 0.056 ms 1.02 ± 0.041
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/DAQP/SingleShooting 5.63 ± 0.75 ms 5.61 ± 0.79 ms 1 ± 0.2
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/MultipleShooting 7.9 ± 0.9 ms 7.75 ± 0.96 ms 1.02 ± 0.17
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/SingleShooting 2 ± 0.071 ms 1.96 ± 0.042 ms 1.02 ± 0.042
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/DAQP/SingleShooting 10.2 ± 1.9 ms 10.2 ± 1.9 ms 1.01 ± 0.26
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/MultipleShooting 0.131 ± 0.043 s 0.126 ± 0.037 s 1.04 ± 0.46
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/SingleShooting 14.8 ± 2.2 ms 14.8 ± 2 ms 1 ± 0.2
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting 0.56 ± 0.0035 s 0.557 ± 0.0032 s 1.01 ± 0.0086
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting (Hessian) 1.09 ± 0.0064 s 1.08 ± 0.0051 s 1.01 ± 0.0076
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/SingleShooting 1.66 ± 0.0063 s 1.66 ± 0.0048 s 1 ± 0.0048
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation 0.899 ± 0.0085 s 0.898 ± 0.0051 s 1 ± 0.011
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 0.899 ± 0.0063 s 0.9 ± 0.0056 s 0.999 ± 0.0093
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting 0.371 ± 0.002 s 0.374 ± 0.0034 s 0.993 ± 0.01
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting (Hessian) 0.336 ± 0.0023 s 0.336 ± 0.003 s 1 ± 0.011
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation 0.533 ± 0.004 s 0.538 ± 0.0035 s 0.99 ± 0.0098
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation (Hessian) 0.539 ± 0.0029 s 0.534 ± 0.0035 s 1.01 ± 0.0086
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting 0.563 ± 0.0041 s 0.553 ± 0.0038 s 1.02 ± 0.01
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting (Hessian) 0.196 ± 0.0021 s 0.193 ± 0.002 s 1.01 ± 0.015
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation 0.351 ± 0.0033 s 0.347 ± 0.0031 s 1.01 ± 0.013
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation (Hessian) 0.293 ± 0.0021 s 0.292 ± 0.0028 s 1 ± 0.012
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting (Hessian) 0.086 ± 0.0011 s 0.0858 ± 0.0012 s 1 ± 0.019
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Uno/MultipleShooting (Hessian) 0.122 ± 0.00096 s 0.123 ± 0.00095 s 0.99 ± 0.011
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting 0.352 ± 0.0026 s 0.358 ± 0.0027 s 0.983 ± 0.01
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (Hessian) 0.325 ± 0.0024 s 0.329 ± 0.003 s 0.989 ± 0.012
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.382 ± 0.0053 s 0.382 ± 0.0038 s 1 ± 0.017
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation 0.596 ± 0.0031 s 0.61 ± 0.0036 s 0.977 ± 0.0076
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation (Hessian) 1.81 ± 0.022 s 1.82 ± 0.026 s 0.996 ± 0.018
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting 0.556 ± 0.003 s 0.554 ± 0.003 s 1 ± 0.0076
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting (Hessian) 0.191 ± 0.0018 s 0.191 ± 0.002 s 1 ± 0.014
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation 0.346 ± 0.002 s 0.352 ± 0.0034 s 0.983 ± 0.011
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (Hessian) 0.271 ± 0.0032 s 0.273 ± 0.002 s 0.994 ± 0.014
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.371 ± 0.0044 s 0.374 ± 0.0041 s 0.991 ± 0.016
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/MultipleShooting (Hessian) 0.204 ± 0.0016 s 0.205 ± 0.0017 s 0.994 ± 0.011
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting (Hessian) 0.0821 ± 0.0011 s 0.0826 ± 0.0011 s 0.993 ± 0.019
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Uno/MultipleShooting (Hessian) 0.106 ± 0.0012 s 0.106 ± 0.00087 s 0.993 ± 0.014
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 0.0865 ± 0.017 s 0.0878 ± 0.014 s 0.984 ± 0.24
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Prediction form 0.0616 ± 0.0092 s 0.0613 ± 0.0082 s 1.01 ± 0.2
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Current form 0.0836 ± 0.014 s 0.0841 ± 0.011 s 0.994 ± 0.22
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/MultipleShooting 0.0768 ± 0.016 s 0.0723 ± 0.024 s 1.06 ± 0.42
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Prediction form 0.0566 ± 0.0058 s 0.0572 ± 0.009 s 0.989 ± 0.18
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian) 0.0953 ± 0.00087 s 0.0927 ± 0.0015 s 1.03 ± 0.019
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian, MultipleShooting) 0.111 ± 0.00084 s 0.112 ± 0.00086 s 0.994 ± 0.011
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian) 0.093 ± 0.0011 s 0.0916 ± 0.001 s 1.02 ± 0.017
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian, MultipleShooting) 0.108 ± 0.0019 s 0.108 ± 0.0018 s 0.996 ± 0.024
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Current form (Hessian) 0.052 ± 0.00064 s 0.0506 ± 0.0012 s 1.03 ± 0.028
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form (Hessian) 0.0486 ± 0.00084 s 0.0485 ± 0.00093 s 1 ± 0.026
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Uno/Current form (Hessian) 17.9 ± 0.39 ms 17.8 ± 0.61 ms 1.01 ± 0.041
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Uno/Current form (Hessian, MultipleShooting) 22.8 ± 0.94 ms 23.3 ± 0.46 ms 0.98 ± 0.045
UNIT TESTS/PredictiveController/ExplicitMPC/moveinput! 3.73 ± 0.03 μs 3.36 ± 0.051 μs 1.11 ± 0.019
UNIT TESTS/PredictiveController/LinMPC/getinfo! 0.162 ± 0.0084 ms 0.163 ± 0.0073 ms 0.997 ± 0.068
UNIT TESTS/PredictiveController/LinMPC/moveinput!/MultipleShooting 0.134 ± 0.0094 ms 0.134 ± 0.01 ms 0.995 ± 0.1
UNIT TESTS/PredictiveController/LinMPC/moveinput!/SingleShooting 15.5 ± 0.36 μs 15.5 ± 0.32 μs 1 ± 0.031
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/LinModel 0.204 ± 0.023 ms 0.204 ± 0.025 ms 0.996 ± 0.17
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.264 ± 0.043 ms 0.262 ± 0.036 ms 1.01 ± 0.22
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/MultipleShooting 0.909 ± 0.21 ms 0.91 ± 0.21 ms 1 ± 0.33
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/SingleShooting 0.467 ± 0.026 ms 0.469 ± 0.026 ms 0.996 ± 0.077
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShooting 10.7 ± 0.32 ms 10.5 ± 0.31 ms 1.01 ± 0.042
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShootingHessian 10.8 ± 0.37 ms 10.7 ± 0.31 ms 1.01 ± 0.045
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocation 9.9 ± 0.27 ms 9.65 ± 0.21 ms 1.03 ± 0.036
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocationHessian 9.28 ± 0.23 ms 9.41 ± 0.26 ms 0.986 ± 0.037
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShooting 6.29 ± 0.26 ms 5.71 ± 0.14 ms 1.1 ± 0.053
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShootingHessian 6.52 ± 0.19 ms 5.87 ± 0.12 ms 1.11 ± 0.04
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/TrapezoidalCollocation 7.53 ± 0.32 ms 7.53 ± 0.33 ms 1 ± 0.061
UNIT TESTS/SimModel/LinModel/evaloutput 0.131 ± 0.01 μs 0.131 ± 0.01 μs 1 ± 0.11
UNIT TESTS/SimModel/LinModel/updatestate! 0.2 ± 0.001 μs 0.21 ± 0.01 μs 0.952 ± 0.046
UNIT TESTS/SimModel/NonLinModel/evaloutput 0.201 ± 0.01 μs 0.2 ± 0.001 μs 1 ± 0.05
UNIT TESTS/SimModel/NonLinModel/linearize! 1.25 ± 0.031 μs 1.28 ± 0.03 μs 0.977 ± 0.033
UNIT TESTS/SimModel/NonLinModel/updatestate! 0.26 ± 0.001 μs 0.28 ± 0.01 μs 0.929 ± 0.033
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/LinModel 0.221 ± 0.029 μs 0.23 ± 0.01 μs 0.961 ± 0.13
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/evaloutput/NonLinModel 0.681 ± 0.011 μs 0.682 ± 0.011 μs 0.999 ± 0.023
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/LinModel 0.14 ± 0 μs 0.141 ± 0.01 μs 0.993 ± 0.07
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/preparestate!/NonLinModel 0.451 ± 0.01 μs 0.451 ± 0.001 μs 1 ± 0.022
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/LinModel 3.38 ± 0.04 μs 3.66 ± 0.06 μs 0.923 ± 0.019
UNIT TESTS/StateEstimator/ExtendedKalmanFilter/updatestate!/NonLinModel 5.58 ± 0.069 μs 6.02 ± 0.13 μs 0.927 ± 0.023
UNIT TESTS/StateEstimator/InternalModel/evaloutput/LinModel 0.16 ± 0.001 μs 0.17 ± 0.001 μs 0.941 ± 0.0081
UNIT TESTS/StateEstimator/InternalModel/evaloutput/NonLinModel 0.27 ± 0.01 μs 0.271 ± 0.011 μs 0.996 ± 0.055
UNIT TESTS/StateEstimator/InternalModel/preparestate!/LinModel 0.25 ± 0.001 μs 0.251 ± 0.01 μs 0.996 ± 0.04
UNIT TESTS/StateEstimator/InternalModel/preparestate!/NonLinModel 0.481 ± 0.011 μs 0.49 ± 0.01 μs 0.981 ± 0.03
UNIT TESTS/StateEstimator/InternalModel/updatestate!/LinModel 0.441 ± 0.001 μs 0.451 ± 0.001 μs 0.978 ± 0.0031
UNIT TESTS/StateEstimator/InternalModel/updatestate!/NonLinModel 0.941 ± 0.01 μs 0.992 ± 0.02 μs 0.949 ± 0.022
UNIT TESTS/StateEstimator/KalmanFilter/evaloutput 0.18 ± 0.01 μs 0.18 ± 0.001 μs 1 ± 0.056
UNIT TESTS/StateEstimator/KalmanFilter/preparestate! 0.09 ± 0.01 μs 0.08 ± 0 μs 1.12 ± 0.12
UNIT TESTS/StateEstimator/KalmanFilter/updatestate! 2.48 ± 0.03 μs 2.54 ± 0.039 μs 0.98 ± 0.019
UNIT TESTS/StateEstimator/Luenberger/evaloutput 0.19 ± 0.01 μs 0.191 ± 0.01 μs 0.995 ± 0.074
UNIT TESTS/StateEstimator/Luenberger/preparestate! 0.221 ± 0.001 μs 0.22 ± 0.01 μs 1 ± 0.046
UNIT TESTS/StateEstimator/Luenberger/updatestate! 0.351 ± 0.011 μs 0.38 ± 0.01 μs 0.924 ± 0.038
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/LinModel 0.41 ± 0.027 ms 0.419 ± 0.027 ms 0.979 ± 0.09
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/NonLinModel 0.424 ± 0.024 ms 0.426 ± 0.028 ms 0.995 ± 0.086
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Constant arr. cov. 25.8 ± 3.1 ms 25.5 ± 3 ms 1.01 ± 0.17
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Current form 26 ± 3.2 ms 25.2 ± 3 ms 1.03 ± 0.17
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/MultipleShooting 9.45 ± 9.6 ms 9.36 ± 10 ms 1.01 ± 1.5
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Current form 0.313 ± 0.024 ms 0.316 ± 0.024 ms 0.99 ± 0.11
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/MultipleShooting 0.732 ± 0.028 ms 0.734 ± 0.026 ms 0.997 ± 0.051
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Prediction form 22.9 ± 2 ms 22.6 ± 1.8 ms 1.01 ± 0.12
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Prediction form 0.341 ± 0.026 ms 0.339 ± 0.025 ms 1.01 ± 0.11
UNIT TESTS/StateEstimator/SteadyKalmanFilter/evaloutput 0.19 ± 0.01 μs 0.19 ± 0.001 μs 1 ± 0.053
UNIT TESTS/StateEstimator/SteadyKalmanFilter/preparestate! 0.24 ± 0.019 μs 0.23 ± 0.001 μs 1.04 ± 0.083
UNIT TESTS/StateEstimator/SteadyKalmanFilter/updatestate! 0.381 ± 0.01 μs 0.391 ± 0.019 μs 0.974 ± 0.054
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/LinModel 0.23 ± 0.011 μs 0.221 ± 0.01 μs 1.04 ± 0.069
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/evaloutput/NonLinModel 0.441 ± 0.009 μs 0.431 ± 0.001 μs 1.02 ± 0.021
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/LinModel 3.59 ± 0.02 μs 3.62 ± 0.02 μs 0.992 ± 0.0078
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/preparestate!/NonLinModel 4.67 ± 0.03 μs 4.73 ± 0.03 μs 0.987 ± 0.0089
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/LinModel 3.87 ± 0.021 μs 3.89 ± 0.02 μs 0.995 ± 0.0074
UNIT TESTS/StateEstimator/UnscentedKalmanFilter/updatestate!/NonLinModel 5.97 ± 0.04 μs 5.86 ± 0.04 μs 1.02 ± 0.0097
time_to_load 3.66 ± 0.037 s 3.78 ± 0.0093 s 0.967 ± 0.01
Memory benchmarks
main 9752fcd... main / 9752fcd...
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/DAQP/SingleShooting 0.0486 M allocs: 1.86 MB 0.0486 M allocs: 1.86 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/MultipleShooting 0.116 M allocs: 2.86 MB 0.116 M allocs: 2.86 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/With feedforward/OSQP/SingleShooting 11.9 k allocs: 0.333 MB 11.9 k allocs: 0.333 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/DAQP/SingleShooting 0.0485 M allocs: 1.85 MB 0.0485 M allocs: 1.85 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/MultipleShooting 0.0812 M allocs: 2.02 MB 0.0812 M allocs: 2.02 MB 1
CASE STUDIES/PredictiveController/CSTR/LinMPC/Without feedforward/OSQP/SingleShooting 11.7 k allocs: 0.327 MB 11.7 k allocs: 0.327 MB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/DAQP/SingleShooting 0.128 M allocs: 6.8 MB 0.128 M allocs: 6.8 MB 0.999
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/MultipleShooting 5.56 M allocs: 0.292 GB 5.56 M allocs: 0.292 GB 1
CASE STUDIES/PredictiveController/Pendulum/LinMPC/Successive linearization/OSQP/SingleShooting 0.159 M allocs: 8.64 MB 0.159 M allocs: 8.64 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting 0.367 M allocs: 29.6 MB 0.367 M allocs: 29.7 MB 0.996
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/MultipleShooting (Hessian) 2.18 M allocs: 0.296 GB 2.18 M allocs: 0.297 GB 0.998
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/SingleShooting 0.306 M allocs: 0.0697 GB 0.306 M allocs: 0.0704 GB 0.99
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation 2.17 M allocs: 0.268 GB 2.17 M allocs: 0.268 GB 0.999
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Custom constraints/Ipopt/TrapezoidalCollocation (Hessian) 2.17 M allocs: 0.268 GB 2.17 M allocs: 0.268 GB 0.999
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting 0.314 M allocs: 25.7 MB 0.314 M allocs: 25.8 MB 0.996
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/MultipleShooting (Hessian) 0.655 M allocs: 0.0919 GB 0.655 M allocs: 0.0921 GB 0.998
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation 1.3 M allocs: 0.121 GB 1.3 M allocs: 0.121 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/OrthogonalCollocation (Hessian) 1.3 M allocs: 0.121 GB 1.3 M allocs: 0.121 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting 0.0964 M allocs: 30.4 MB 0.0964 M allocs: 30.4 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/SingleShooting (Hessian) 0.0811 M allocs: 28.5 MB 0.0811 M allocs: 28.6 MB 0.997
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation 0.312 M allocs: 25.6 MB 0.312 M allocs: 25.6 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Ipopt/TrapezoidalCollocation (Hessian) 0.714 M allocs: 0.0913 GB 0.714 M allocs: 0.0913 GB 0.999
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/MadNLP/SingleShooting (Hessian) 0.0924 M allocs: 31 MB 0.0924 M allocs: 31 MB 0.997
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Economic/Uno/MultipleShooting (Hessian) 0.337 M allocs: 0.0443 GB 0.337 M allocs: 0.0443 GB 0.998
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting 0.275 M allocs: 22.2 MB 0.275 M allocs: 22.3 MB 0.996
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (Hessian) 0.715 M allocs: 0.0936 GB 0.715 M allocs: 0.0938 GB 0.998
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/MultipleShooting (threaded) 0.294 M allocs: 31.5 MB 0.294 M allocs: 31.6 MB 0.997
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation 1.4 M allocs: 0.13 GB 1.4 M allocs: 0.13 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/OrthogonalCollocation (Hessian) 6.56 M allocs: 0.877 GB 6.56 M allocs: 0.877 GB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting 0.0753 M allocs: 22.9 MB 0.0753 M allocs: 22.9 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/SingleShooting (Hessian) 0.0807 M allocs: 28.4 MB 0.0807 M allocs: 28.5 MB 0.997
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation 0.274 M allocs: 22.2 MB 0.274 M allocs: 22.2 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (Hessian) 0.718 M allocs: 0.0852 GB 0.718 M allocs: 0.0853 GB 0.999
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Ipopt/TrapezoidalCollocation (threaded) 0.293 M allocs: 31.5 MB 0.293 M allocs: 31.5 MB 1
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/MultipleShooting (Hessian) 0.576 M allocs: 0.0867 GB 0.576 M allocs: 0.0868 GB 0.999
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/MadNLP/SingleShooting (Hessian) 0.0925 M allocs: 31 MB 0.0925 M allocs: 31.1 MB 0.997
CASE STUDIES/PredictiveController/Pendulum/NonLinMPC/Noneconomic/Uno/MultipleShooting (Hessian) 0.332 M allocs: 0.0405 GB 0.332 M allocs: 0.0406 GB 0.998
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Current form 1.45 M allocs: 0.225 GB 1.45 M allocs: 0.225 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/DAQP/Prediction form 1.33 M allocs: 0.146 GB 1.33 M allocs: 0.146 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Current form 1.32 M allocs: 0.222 GB 1.32 M allocs: 0.222 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/MultipleShooting 3.55 M allocs: 0.198 GB 3.55 M allocs: 0.198 GB 1
CASE STUDIES/StateEstimator/CSTR/MovingHorizonEstimator/OSQP/Prediction form 1.24 M allocs: 0.143 GB 1.24 M allocs: 0.143 GB 1
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian) 0.0849 M allocs: 22.1 MB 0.0848 M allocs: 22.2 MB 0.995
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Current form (Hessian, MultipleShooting) 0.173 M allocs: 0.0323 GB 0.173 M allocs: 0.0325 GB 0.995
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian) 0.0851 M allocs: 22.1 MB 0.085 M allocs: 22.2 MB 0.995
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Ipopt/Prediction form (Hessian, MultipleShooting) 0.168 M allocs: 0.0313 GB 0.168 M allocs: 0.0315 GB 0.995
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Current form (Hessian) 0.104 M allocs: 25.6 MB 0.104 M allocs: 25.7 MB 0.996
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/MadNLP/Prediction form (Hessian) 0.103 M allocs: 24.9 MB 0.103 M allocs: 25 MB 0.996
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Uno/Current form (Hessian) 0.0366 M allocs: 8.56 MB 0.0364 M allocs: 8.6 MB 0.995
CASE STUDIES/StateEstimator/Pendulum/MovingHorizonEstimator/Uno/Current form (Hessian, MultipleShooting) 0.0713 M allocs: 11.1 MB 0.0711 M allocs: 11.1 MB 0.996
UNIT TESTS/PredictiveController/ExplicitMPC/moveinput! 0 allocs: 0 B 0 allocs: 0 B
UNIT TESTS/PredictiveController/LinMPC/getinfo! 0.316 k allocs: 16.6 kB 0.316 k allocs: 16.6 kB 1
UNIT TESTS/PredictiveController/LinMPC/moveinput!/MultipleShooting 1.49 k allocs: 0.0363 MB 1.49 k allocs: 0.0363 MB 1
UNIT TESTS/PredictiveController/LinMPC/moveinput!/SingleShooting 0.104 k allocs: 2.67 kB 0.104 k allocs: 2.67 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/LinModel 0.406 k allocs: 0.059 MB 0.406 k allocs: 0.059 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/getinfo!/NonLinModel 0.498 k allocs: 0.0758 MB 0.498 k allocs: 0.0758 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/MultipleShooting 1.72 k allocs: 0.103 MB 1.72 k allocs: 0.103 MB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/LinModel/SingleShooting 0.251 k allocs: 10 kB 0.251 k allocs: 10 kB 1
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShooting 5.28 k allocs: 0.541 MB 5.28 k allocs: 0.542 MB 0.997
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/MultipleShootingHessian 5.08 k allocs: 0.498 MB 5.08 k allocs: 0.5 MB 0.997
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocation 8.71 k allocs: 0.645 MB 8.71 k allocs: 0.647 MB 0.998
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/OrthogonalCollocationHessian 0.0433 M allocs: 5.27 MB 0.0433 M allocs: 5.28 MB 0.999
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShooting 0.952 k allocs: 0.418 MB 0.952 k allocs: 0.421 MB 0.994
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/SingleShootingHessian 0.952 k allocs: 0.418 MB 0.952 k allocs: 0.421 MB 0.994
UNIT TESTS/PredictiveController/NonLinMPC/moveinput!/NonLinModel/TrapezoidalCollocation 3.54 k allocs: 0.305 MB 3.54 k allocs: 0.305 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.38 k allocs: 0.0529 MB 1.38 k allocs: 0.0527 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/getinfo!/NonLinModel 2.36 k allocs: 0.293 MB 2.36 k allocs: 0.293 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Constant arr. cov. 9.03 k allocs: 0.674 MB 9.03 k allocs: 0.674 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/Current form 9.03 k allocs: 0.674 MB 9.03 k allocs: 0.674 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/LinModel/MultipleShooting 19.5 k allocs: 1 MB 19.5 k allocs: 1 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/Current form 0.955 k allocs: 24.8 kB 0.951 k allocs: 24.3 kB 1.02
UNIT TESTS/StateEstimator/MovingHorizonEstimator/preparestate!/NonLinModel/MultipleShooting 1.85 k allocs: 0.0467 MB 1.84 k allocs: 0.0462 MB 1.01
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/LinModel/Prediction form 8.33 k allocs: 0.513 MB 8.33 k allocs: 0.512 MB 1
UNIT TESTS/StateEstimator/MovingHorizonEstimator/updatestate!/NonLinModel/Prediction form 0.955 k allocs: 24.8 kB 0.951 k allocs: 24.3 kB 1.02
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.201 k allocs: 11.8 kB 0.201 k allocs: 11.8 kB 1

@franckgaga
franckgaga deleted the mhe_dae_oc branch September 23, 2026 11:33
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