BLOM is a language of modeling dynamical nonlinear systems for optimization problems, especially MPC.
- Support for the following design phases:
- Developing the model with an intuitive block diagram.
- Forward simulation and validation of the model.
- Automatic export of the optimization problem to a solver.
- Developed to handle large scale, non trivial problems
- C++ or Matlab code generation.
- Explicit closed-form evaluation of Jacobian and Hessian.
- Proven with problems of tens of thousands variables.
- Eliminates manual problem coding, eases maintenance and assures that the same model used for optimization and for simulation.
- Supports discrete and continuous models.
- For continuous model, supports Euler, trapezoidal and RK4 discretization (easily expandable).
- Full vector support.
- Model developing features:
- Color coded constraint violations.
- Polyblocks display the user defined function.
- User defined port labeling.
- Export to IPOPT and fmincon solvers (more to come).
- Used in nonlinear MPC project with ~450 states and 30 time steps (about 30000 variables and similar number of constraints). Solution time of about 1 minute with IPOPT.
Typical workflow with BLOM
- Create a model using Simulink and BLOM library.
- Execute and validate the model against reference data.
- Translate to optimization problem.
- Export the problem to a solver: e.g. CreateIpoptCPP
Simple system model example
The Functional block holds expression of the form f(x)/g(x)
The Constraint block marks variable as > 0 or < 0.
The continuous or discrete State block.
The Cost block, accumulates cost variables (future features: terminal cost, continuous time, norms over time, norms over vector elements).
The Input/External variable modifiers mark the control and external (time-varying predictions or parameters) variables.
To obtain the library and for further information, see the BLOM wiki.