I am excited to announce the first release of the [IntervalOptimisation.jl
] (https://github.com/JuliaIntervals/IntervalOptimisation.jl) package, which performs (box-constrained) global optimisation for functions, including non-smooth functions, of one or several variables in a rigorous (guaranteed) way. Lower and upper bounds are given for the global minimum, as well as the location(s) of the minimizer(s).
This is done using interval methods, based on the IntervalArithmetic.jl
package, also part of the JuliaIntervals
organisation. (That package recently received a speed boost [on master branch] of around 3x, thanks to Jeffrey Sarnoff’s FastRounding.jl package.)
In particular, the package contains a reasonably efficient implementation of the Moore-Skelboe “branch and bound” algorithm, which seems to be quite fast for low-dimensional functions. Julia allows, as usual, a very clean, readable implementation, and allows us to easily experiment with different versions and algorithms.
In the near future, methods to find all maxima / minima of a function will be added.
Constrained global optimisation would also be possible, by combining this with IntervalConstraintProgramming.jl; I will discuss both packages in my JuliaCon talk on Wednesday.
I am, of course, very interested in trying out hard test problems and in any other collaborations.
Note on spelling: The package name uses the British English spelling “optimiSation”, with s
. The functions minimise
and maximise
provided by the package have American English aliases minimize
and maximize
, with z
.
Note for Windows users: Currently, all of the JuliaIntervals
packages should work on Windows, but will be slow when using elementary functions (sin
, exp
etc.), since they fall back to using BigFloat
s (i.e. the MPFR package).
This would be fixed by providing a compiled version of the CRlibm
library and interfacing it from the CRlibm.jl
package. Any help with this (e.g. during JuliaCon) will be appreciated.