Dynamic Optimization Solvers
Currently 4 backends are exposed for solving dynamic optimization problems using collocation: JuMP, InfiniteOpt, CasADi, and Pyomo.
Please note that there are differences in how to construct the collocation solver for the different cases. For example, the Python based ones, CasADi and Pyomo, expect the solver to be passed in as a string (CasADi and Pyomo come pre-loaded with Ipopt, but other solvers may need to be manually installed using pip or conda), while JuMP/InfiniteOpt expect the optimizer object to be passed in directly:
JuMPCollocation(Ipopt.Optimizer, constructRK4())
CasADiCollocation("ipopt", constructRK4())JuMP and CasADi collocation require an ODE tableau to be passed in. These can be constructed by calling the constructX() functions from DiffEqDevTools. The list of tableaus can be found here. If none is passed in, both solvers will default to using Radau second-order with five collocation points.
Pyomo and InfiniteOpt each have their own built-in collocation methods.
- InfiniteOpt: The list of InfiniteOpt collocation methods can be found in the table on this page. If none is passed in, the solver defaults to
FiniteDifference(Backward()), which is effectively implicit Euler. - Pyomo: The list of Pyomo collocation methods can be found at the bottom of this page. If none is passed in, the solver defaults to a
LagrangeRadau(3).
Some examples of the latter two collocations:
PyomoCollocation("ipopt", LagrangeRadau(2))
InfiniteOptCollocation(Ipopt.Optimizer, OrthogonalCollocation(3))Missing docstring for InfiniteOptCollocation. Check Documenter's build log for details.
Missing docstring for CasADiCollocation. Check Documenter's build log for details.
Missing docstring for CommonSolve.solve(::AbstractDynamicOptProblem). Check Documenter's build log for details.
Problem constructors
Missing docstring for JuMPDynamicOptProblem. Check Documenter's build log for details.
Missing docstring for InfiniteOptDynamicOptProblem. Check Documenter's build log for details.