IntervalArithmetic.jl icon indicating copy to clipboard operation
IntervalArithmetic.jl copied to clipboard

What do you use IntervalArithmetic.jl for?

Open dpsanders opened this issue 4 years ago • 15 comments

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!

dpsanders avatar Jun 02 '21 16:06 dpsanders

This is obviously needed to secure funding...

lbenet avatar Jun 02 '21 16:06 lbenet

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

mforets avatar Jun 02 '21 16:06 mforets

(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)

lucaferranti avatar Jun 07 '21 11:06 lucaferranti

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

samuela avatar Jun 10 '21 06:06 samuela

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.

lbenet avatar Jun 10 '21 13:06 lbenet

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)

kalmarek avatar Aug 04 '21 19:08 kalmarek

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

lbenet avatar Aug 04 '21 19:08 lbenet

@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 https://github.com/JuliaIntervals/IntervalArithmetic.jl/issues/184#issuecomment-480106748 proves me wrong; I'm very sorry, I must have forgotten ;/

In any case Manifests for the last two contains IntervalArithmetic:

  • (https://git.wmi.amu.edu.pl/kalmar/1712.07167/src/branch/master/Manifest.toml#L173)
  • (https://github.com/kalmarek/1812.03456/blob/cf6dee785bf9cca535787d0e3a618f95cc4bb144/Manifest.toml#L249)

(if that's any good).

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

kalmarek avatar Aug 04 '21 20:08 kalmarek

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)?

lbenet avatar Aug 05 '21 16:08 lbenet

@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!

kalmarek avatar Aug 11 '21 21:08 kalmarek

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

Datseris avatar Feb 03 '22 14:02 Datseris

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

dmetivie avatar Jun 07 '23 14:06 dmetivie

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 :sweat_smile:

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

ParadaCarleton avatar Jun 22 '23 03:06 ParadaCarleton

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

AlCap23 avatar Feb 06 '24 08:02 AlCap23

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.

orkolorko avatar Apr 06 '24 18:04 orkolorko