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
maximise provided by the package have American English aliases
Note for Windows users: Currently, all of the
JuliaIntervals packages should work on Windows, but will be slow when using elementary functions (
exp etc.), since they fall back to using
BigFloats (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.