|
1 |
| -# IntervalOptimisation.jl |
| 1 | +# `IntervalOptimisation.jl` |
2 | 2 |
|
3 |
| -```@index |
| 3 | +## Rigorous global optimisation using Julia |
| 4 | + |
| 5 | +This package provides rigorous global optimisation routines written in pure Julia, using interval arithmetic provided by the author's [IntervalArithmetic.jl](https://github.com/JuliaIntervals/IntervalArithmetic.jl) package. |
| 6 | + |
| 7 | +Currently, the package uses an implementation of the Moore-Skelboe algorithm. |
| 8 | + |
| 9 | +## Usage |
| 10 | + |
| 11 | +Functions `minimise` and `maximise` are provided to find the **global** minimum or maximum, respectively, of a standard Julia function `f` of one or several variables. |
| 12 | + |
| 13 | +They return an `Interval` that is guaranteed to contain the global minimum (maximum), and a `Vector` of `Interval`s or `IntervalBox`es whose union contains all the minimisers. |
| 14 | + |
| 15 | +### Examples |
| 16 | + |
| 17 | + |
| 18 | +#### 1D |
| 19 | +``` |
| 20 | +using IntervalArithmetic, IntervalOptimisation |
| 21 | +
|
| 22 | +julia> @time global_min, minimisers = minimise(x -> (x^2 - 2)^2, -10..11); |
| 23 | + 0.046620 seconds (36.07 k allocations: 1.586 MiB) |
| 24 | +
|
| 25 | +julia> global_min |
| 26 | +[0, 1.50881e-09] |
| 27 | +
|
| 28 | +julia> minimisers |
| 29 | +2-element Array{IntervalArithmetic.Interval{Float64},1}: |
| 30 | + [1.41387, 1.41453] |
| 31 | + [-1.41428, -1.41363] |
| 32 | +``` |
| 33 | + |
| 34 | +#### 2D |
| 35 | + |
| 36 | +``` |
| 37 | +julia> @time global_min, minimisers = minimise( X -> ( (x,y) = X; x^2 + y^2 ), |
| 38 | + (-10000..10001) × (-10000..10001) ); |
| 39 | + 0.051122 seconds (46.80 k allocations: 2.027 MiB) |
| 40 | +
|
| 41 | +julia> global_min |
| 42 | +[0, 2.33167e-08] |
| 43 | +
|
| 44 | +julia> minimisers |
| 45 | +3-element Array{IntervalArithmetic.IntervalBox{2,Float64},1}: |
| 46 | + [-0.000107974, 0.000488103] × [-0.000107974, 0.000488103] |
| 47 | + [-0.000107974, 0.000488103] × [-0.000704051, -0.000107973] |
| 48 | + [-0.000704051, -0.000107973] × [-0.000107974, 0.000488103] |
4 | 49 | ```
|
| 50 | +Note that the last two `IntervalBox`es do not actually contain the global minimum; |
| 51 | +decreasing the tolerance (maximum allowed box diameter) removes them: |
5 | 52 |
|
6 |
| -```@autodocs |
7 |
| -Modules = [IntervalOptimisation] |
8 | 53 | ```
|
| 54 | +julia> @time global_min, minimisers = minimise( X -> ( (x,y) = X; x^2 + y^2 ), |
| 55 | + (-10000..10001) × (-10000..10001), 1e-5 ); |
| 56 | + 0.047196 seconds (50.72 k allocations: 2.180 MiB) |
| 57 | +
|
| 58 | +julia> minimisers |
| 59 | +1-element Array{IntervalArithmetic.IntervalBox{2,Float64},1}: |
| 60 | + [-5.52321e-06, 3.79049e-06] × [-5.52321e-06, 3.79049e-06] |
| 61 | + ``` |
| 62 | + |
| 63 | +## Author |
| 64 | + |
| 65 | +- [David P. Sanders](http://sistemas.fciencias.unam.mx/~dsanders), |
| 66 | +Departamento de Física, Facultad de Ciencias, Universidad Nacional Autónoma de México (UNAM) |
| 67 | + |
| 68 | + |
| 69 | +## References: |
| 70 | + |
| 71 | +- *Validated Numerics: A Short Introduction to Rigorous Computations*, W. Tucker, Princeton University Press (2010) |
| 72 | + |
| 73 | +- *Applied Interval Analysis*, Luc Jaulin, Michel Kieffer, Olivier Didrit, Eric Walter (2001) |
| 74 | + |
| 75 | +- van Emden M.H., Moa B. (2004). Termination Criteria in the Moore-Skelboe Algorithm for Global Optimization by Interval Arithmetic. In: Floudas C.A., Pardalos P. (eds), *Frontiers in Global Optimization. Nonconvex Optimization and Its Applications*, vol. 74. Springer, Boston, MA. [Preprint](http://webhome.cs.uvic.ca/~vanemden/Publications/mooreSkelb.pdf) |
| 76 | + |
| 77 | +- H. Ratschek and J. Rokne, [*New Computer Methods for Global Optimization*](http://pages.cpsc.ucalgary.ca/~rokne/global_book.pdf) |
| 78 | + |
| 79 | +## Acknowledements |
| 80 | +Financial support is acknowledged from DGAPA-UNAM PAPIIT grant IN-117117. |
0 commit comments