Software‎ > ‎

BLOM - Berkeley Library for Optimization Modeling

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.

Current status

  • 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

  1. Create a model using Simulink and BLOM library.
  2. Execute and validate the model against reference data.
  3. Translate to optimization problem.
  4. Export the problem to a solver: e.g. CreateIpoptCPP

Simple system model example

BLOM 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.