ModelPredictiveControl.jl vs JuliaSimControl

What would be the advantages / disadvantages of using ModelPredictiveControl.jl over JuliaSimControl? I am trying to decide which one to use, and these were the first two packages I found.

1 Like

For JuliaSimControl you need to be a registered user of JuliaHub (if I am not mistaken), ModePredictiveControl.jl is freely available.

1 Like

And the functionality is similar?

JuliaSimControl might be better integrated with ModelingToolkit.

2 Likes

I’m the author of JuliaSimControl and a co-contributor (more of a cheerful by stander, @franckgaga deserves 99.9% of the cred) for ModelPredictiveControl.jl

Here are some differences to help you choose

ModelPredictiveControl.jl

  • Is based on JuMP.jl and is thus blazingly fast for linear and simple nonlinear MPC
  • Has good compilation performance
  • Supports moving horizon estimation (in addition to lots of other observers)
  • Has well worked-through support for disturbance feedforward
  • Is slightly easier to use
  • Has MIT license

JuliaSimControl

  • Is based on Optimization.jl with custom autodiff, this allows it to handle arbitrary vector-valued dynamics that may cause JuMP to perform poorly, but JuMP (and thus MPC.jl) is often significantly faster for simpler dynamics.
  • Generally takes a long time to compile
  • Supports DAE systems
  • Supports discretization using collocation on finite elements and multiple shooting, which handles stiff dynamics and may make the optimization problem easier to solve
  • Supports a number of robust MPC formulations
  • Requires a license for professional users (not for academics)

Pros and cons, which is most suitable for you depends on your requirements

4 Likes

That’s a excellent summary @baggepinnen. I would add these three pros and cons on ModelPredictiveControl.jl, compared to JuliaSimControl:

  • Easy implementation of successive linearization MPC or moving horizon estimation, for super fast approximate solutions (see an example here).
  • Supports a control horizon H_c different than the prediction horizon H_p
  • Supports only single-shooting for the discretization method, meaning that the optimization is less efficient on high-order or unstable systems.

Thanks a lot for the summary! Blazingly fast and open source sounds very good, so I will try using ModelPredictiveControl.jl. Does ModelPredictiveControl work with ModelingToolKit models?

1 Like

No, it would require a number of manual steps to make work.

2 Likes

Could you give me some hints as to what I have to do to make an MTK model work with ModelPredictiveControl.jl?

  • Build a dynamics function that includes inputs, docs here. Write a wrapper that changes the order of the input arguments to match the order assumed by ModelPredictiveControl.jl
  • Possibly build an output function, docs on the same page
  • Manually keep track of the order of state variables in the generated function
1 Like

Created an issue: Better integration with ModellingToolkit · Issue #106 · JuliaControl/ModelPredictiveControl.jl · GitHub