Rigorous global optimisation: First release of `IntervalOptimisation.jl`

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

11 Likes

I find it super strange to write ā€œOptimisationā€ with a ā€œsā€ instead of a ā€œzā€. Why did you choose the British spelling?

Thanks for the package!

Maybe because he is British?

1 Like

Since it is causing problems for tab-completion, I will probably end up removing the Americani(s/z)ed aliases.

@mzaffalon I am Brazilian, but my packages are given names in American English. I donā€™t see a very good reason. Anyways, this discussion is getting off-topic.

Thank you @dpsanders again for the contribution.

Cheers,

2 Likes

I learned some time ago that ā€˜-iseā€™ isnā€™t really any more British than ā€˜-izeā€™, and that ā€˜-iseā€™ is more of a neologism that is supplanting the more traditional ā€˜-izeā€™ in the UK and Australia.

The OED, for example, prefers ā€˜-izeā€™: Oxford Languages | The Home of Language Data

Now, I use the ā€˜-izeā€™ ending, particularly in my code, for historical reasons, but, more importantly, to promote consistency of spelling.

A more opinionated piece: It's time to recognize and internalize the US suffix 'ize'

2 Likes