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.
For JuliaSimControl you need to be a registered user of JuliaHub (if I am not mistaken), ModePredictiveControl.jl is freely available.
And the functionality is similar?
JuliaSimControl might be better integrated with ModelingToolkit.
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
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?
No, it would require a number of manual steps to make work.
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