It can be used to solve a variety of problems that can roughly be formulated as:
Reliable means that all sources of uncertainty should be taken into account, including:
Ibex does not include low-level interval arithmetic. It can be compiled with different existing implementations such as Gaol, Filib or Profil/Bias. It can also be linked with different linear solvers, Cplex or Soplex.
Ibex allows you to declare symbolically a mathematical function and to perform interval computations with it. For example:
defines the "mathematical" object x → sin(x)+1.
Note: Functions (as well as equalities or inequalities) can either be entered programmatically (using C++ operator overloading) or using a parser of an AMPL-like language called Minibex. Functions accept vector or matrix variables or values; similarities with Matlab are shared on purpose. See the modeling guide.
Now that functions are built, you can use them to perform interval or symbolic operations. Example:
All the classical operations with intervals can be performed with the previously defined functions, including relational (backward) operators, inner arithmetics, automatic differentiation, affine arithmetic, etc.
Ibex gives you the ability to build high-level interval-based algorithms declaratively through the contractor programming paradigm.
A contractor is basically an operator that transforms a box to a smaller (included) box, by safely removing points with respect to some mathematical property.
The first property one usually wants to enforce is a numerical constraint, like an equation or inequality:
Contraction is performed with a call to the function contract(...):
Note: A contractor is the equivalent of a propagator in finite domain solvers except that it is a pure numerical function (no state).
More complex properties are obtained by combining contractors. For instance
Ibex contains a variety of built-in operators (HC4, Shaving, ACID, X-newton, q-intersection, etc.).
Finally, Ibex also comes with a default black-box solver and global optimizer for immediate usage. See the tutorial.