Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What do you use IntervalArithmetic.jl for? #471

Open
dpsanders opened this issue Jun 2, 2021 · 15 comments
Open

What do you use IntervalArithmetic.jl for? #471

dpsanders opened this issue Jun 2, 2021 · 15 comments

Comments

@dpsanders
Copy link
Member

We need information about where IntervalArithmetic.jl is used. We would like to add a page linking to companies, research papers, other packages, etc., where IntervalArithmetic has been or is being used. We ask you to please reply here or send a message with this information. Thanks!

@lbenet
Copy link
Member

lbenet commented Jun 2, 2021

This is obviously needed to secure funding...

@mforets
Copy link
Contributor

mforets commented Jun 2, 2021

I think it's fair to say IntervalArithmetic.jl is used in most if not all the publications listed here.

@lucaferranti lucaferranti pinned this issue Jun 7, 2021
@lucaferranti
Copy link
Member

(I pinned this to the top of the issues page so that it doesn't get buried. It may increase the visibility if users check the gh repository every now and then)

@samuela
Copy link

samuela commented Jun 10, 2021

I'm currently trying to use IntervalArithmetic.jl for a motion planning research project!

@lbenet
Copy link
Member

lbenet commented Jun 10, 2021

These are some papers I know that cite the use IntervalArithmetic:

  • M.F. Herbst, A. Levitt and E. Cancès, A posteriori error estimation for the non-selft-consistent Kohn-Sham equations, Faraday Discussions 224 (2020), 227-246. Paper.
  • T. Besard, Abstractions for Programming Graphics Processors in High-Level Programming Languages, PhD Thesis, Univ. Gent (2018). Link.
  • T Koolen and R Deits, Julia for robotics: simulation and real-time control in a high-level programming language, in Proceeding of the International Conference on Robotics and Automation (ICRA), Montreal, QC, Canada,
    2019, pp. 604-611. paper.
  • RLH Deits, Learning contact-aware robot controllers from mixed integer optimization, PhD Thesis, MIT,
    Dept of Electrical Engineering and Computer Science, (2019). Link.
  • K Audenaert, EP Hanson and N Datta, A continuity bound for the expected number of connected components of a random graph: a model for epidemics. arXiv.
  • L Meninia, C Possieri, and A Tornambè, A dynamical interval Newton method, European Journal of Control 59 (2021) 290–300. Paper.
  • L Meninia, C Possieri, and A Tornambè, Design of high-gain observers based on sampled measurements via the interval arithmetic, Automatica, 131 (2021), 109741. Paper.
    EDIT:
  • Kevin E. M. Church, Olivier Hénot, Phillipo Lappicy, Jean-Philippe Lessard, Hauke Sprink, Periodic orbits in Hořava-Lifshitz cosmologies, arXiv.

@kalmarek
Copy link
Contributor

kalmarek commented Aug 4, 2021

I'll add three of mine:)

  • Certifying numerical estimates of spectral gaps. Kaluba, Marek, Nowak, Piotr W.. (2018) Groups Complexity Cryptology, 10(1): 33–41. doi: 10.1515/gcc-2018-0004. arXiv: 1703.09680
  • Aut(F₅) has property (T). Marek Kaluba, Piotr W. Nowak, Narutaka Ozawa (2019) Mathematische Annalen, 375: 1169–1191. doi: 10.1007/s00208-019-01874-9. arXiv:1712.07167.
  • On Property (T) for Aut(Fₙ) and SLₙ(ℤ). Marek Kaluba, Dawid Kielak, and Piotr W. Nowak. Annals of Mathematics 193, no. 2 (2021). doi: 10.4007/annals.2021.193.2.3. arXiv:1812.03456.

Or a one-sentence explanation: obtaining certified lower bounds for sum of squares optimization in group rings.
(hopefully it's not too late)

@lbenet
Copy link
Member

lbenet commented Aug 4, 2021

@kalmarek, do these works cite IntervalArithmetic.jl orr ValidatedNumerics.jl?

@kalmarek
Copy link
Contributor

kalmarek commented Aug 4, 2021

@lbenet I'm afraid not ;/ I thought I've asked a question how to cite IA and never got an answer... but your reply in #184 (comment) proves me wrong; I'm very sorry, I must have forgotten ;/

In any case Manifests for the last two contains IntervalArithmetic:

(if that's any good).

I also give credit to IntervalArithmetic.jl explicitly in the reproducing notebook for the last paper.

@lbenet
Copy link
Member

lbenet commented Aug 5, 2021

Never mind @kalmarek, and sorry if my comment sounded harsh. Citing software is already complicated for the administration to consider, so imagine how would they take "indirect citations" (having it in the Manifest.toml)?

@kalmarek
Copy link
Contributor

@lbenet I didn't received your comment as harsh, no worries ;) What I do is to cite what I like and only enter those discussions if the administration people complain ;) This usually saves lots of trouble for me, since my impression is that they hardly ever complain (in the context of grant applications/reports). But of course proceed at your own discretion.

I think that interval arithmetic is such an important software/topic, but the effort put in it is so undervalued. I wish you luck with the funding!

@Datseris
Copy link

Datseris commented Feb 3, 2022

It is used in DynamicalSystems.jl to provide a rather convenient function that returns fixed points and their stability for a given dynamical system: https://juliadynamics.github.io/DynamicalSystems.jl/dev/chaos/periodicity/#Fixed-points

@dmetivie
Copy link

dmetivie commented Jun 7, 2023

It is used in the test function of the QuasiMonteCarlo.jl package, (see here).
It provides a convenient way to build the “elementary intervals” used in the definition of some low discrepancy sequence for Quasi Monte Carlo estimation.

In the packages, these intervals are used to check if the provided sequences (Sobol, Faure, ...) satisfy the math definition.
Thanks to multiple dispatch, your package provides for free rational interval. Hence, one can exactly check if a point (represented by a Rational) belongs to elementary interval.

So yes some people are using Rational interval to answer Issue #495

@ParadaCarleton and myself worked on the function.

For example

using QuasiMonteCarlo, Primes # master version for now
# Faure sequence are exactly (t=0, s)-sequence in base b=nextprime(s)
m = 4
pad = m
λ = 1
t = 0
s = 3

net = Rational{BigInt}.(QuasiMonteCarlo.sample(nextprime(s)^m, s, FaureSample())) # Convert the sequence in Rational{BigInt} (needed to scramble)
# `net` could directly be a Rational{BigInt} without conversion, but this is not yet operational
istmsnet(net; λ, t, m, s, base = nextprime(s)) # true

with

using Combinatorics, IntervalArithmetic
"""
    istmsnet(net::AbstractMatrix{T}; λ::I, t::I, m::I, d::I, base::I) where {I <: Integer, T <: Real}
Test if a point set `net` (`dim×n`) is a `(λ,t,m,s)`-net in base `b`. 

`(λ,t,m,s)`-nets have strict equidistribution properties making them good QMC sequences.
Their definition and properties can be found in the book [Monte Carlo theory, methods, and examples](https://artowen.su.domains/mc/qmcstuff.pdf) by Art B. Owen. 
See Definition 15.7 and for properties see Chapter 15 to 17. 

The test is exact if the element of `net` are of type `Rational`. Indeed, in that case, one can exactly deal with points at the edge of intervals of the form [a,b)ᵈ.
The conversion `Float` to `Rational` is usually possible with usual nets, e.g., Sobol, Faure (may require `Rational{BigInt}.(net)`).
"""
function istmsnet(net::AbstractMatrix{T}; λ::I, t::I, m::I, s::I,
                  base::I) where {I <: Integer, T <: Real}
    pass = true

    @assert size(net, 2)==λ * (base^m) "Number of points must be as size(net, 2) = $(size(net, 2)) == λ * (base^m) = $(λ * (base^m))"
    @assert size(net, 1)==s "Dimension must be as size(net, 2) = $(size(net, 2)) == s = $s"
    @assert all(0 .≤ net .< 1) "All points must be in [0,1)"

    perms = multiexponents(s, m - t)
    for stepsize in perms
        intervals = mince(IntervalBox([interval(zero(T), one(T)) for i in 1:s]),
                          NTuple{s, Int}(base .^ stepsize))
        pass &= all(intervals) do intvl
            λ * base^t == count(point -> inCloseOpen(point, intvl), collect(eachcol((net))))
        end
        if !pass
            println("Errors in direction k = $stepsize")
            return pass
        end
    end
    return pass
end

"""
    in_halfopen(x, a)
Checks if the number `x` is a member of the interval `a` (close on the left and open on the right), treated as a set.
"""
function inCloseOpen(x::T, a::Interval) where {T <: Real}
    isinf(x) && return false
    a.lo <= x < a.hi
end
inCloseOpen(X::AbstractVector, Y::IntervalBox{N, T}) where {N, T} = all(inCloseOpen.(X, Y))

@ParadaCarleton
Copy link

It provides a convenient way to build the “elementary intervals” used in the definition of some low discrepancy sequence for Quasi Monte Carlo estimation.

TBF using the entirety of IntervalArithmetic.jl is definitely overkill for this 😅

Mostly it's in there because it's a test dependency, so load time doesn't really matter (since users don't usually run tests). I'd definitely prefer if this was moved into a smaller package for working with intervals themselves, like Intervals.jl or IntervalSets.jl (or if there was a clear+consistent standard on this...)

@OlivierHnt OlivierHnt unpinned this issue Oct 24, 2023
@OlivierHnt OlivierHnt pinned this issue Oct 24, 2023
@AlCap23
Copy link

AlCap23 commented Feb 6, 2024

Validity checking of random symbolic expressions ( and for generating those ). ;)

@orkolorko
Copy link

We are using it for RigorousInvariantMeasures.jl.

The most recent publication using it is A general framework for the rigorous computation of invariant densities and the coarse-fine strategy.

One comment: the CITATION.bib file in the package is empty; I apologize, in this paper I thought I had cited the package, I will be more careful in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests