Skip to content

JuliaReach/RangeEnclosures.jl

Repository files navigation

RangeEnclosures.jl

Introduction & Documentation Status Community Version-specific Citation License
paper docs-dev CI codecov aqua zulip zenodo license

A Julia package to bound the range of real-valued functions. The following article showcases the basic functionality, highlighting some of the key design choices:

Luca Ferranti, Marcelo Forets, and Christian Schilling. RangeEnclosures.jl: A framework to bound function ranges Proceedings of the JuliaCon Conferences (2024).

See below for how to cite it.

Installing

From the Julia REPL type

julia> using Pkg; Pkg.add("RangeEnclosures")

Quickstart

An enclosure of the range of a function $f : D \subset \mathbb{R}^n \to \mathbb{R}$ is an interval that contains the global minimum and maximum of $f$ over its domain $D$. RangeEnclosures offers an API to easily bound the range of $f$ with different algorithms. Here is a quick example:

julia> f(x) = -x^3/6 + 5x

julia> dom = 1 .. 4
[1, 4]

julia> enclose(f, dom, BranchAndBoundEnclosure())
[4.83333, 10.5709]

Example

We plan to add more examples to the docs. In the meantime, check the test folder for further examples.

Contributing

If you encounter bugs, want to suggest new features or have questions, feel free to open an issue. You can also chat with the package developers at the #juliareach stream on Zulip. Pull requests implementing new features or fixing bugs are also welcome. Make sure to check out the contribution guidelines.

Authors

How to cite

If you use this package in your work, please cite it using the metadata here or below:

@article{Ferranti2024,
  author       = {Luca Ferranti and
                  Marcelo Forets and
                  Christian Schilling},
  title        = {{RangeEnclosures}.jl: A framework to bound function ranges},
  journal      = {Proceedings of the JuliaCon Conferences},
  volume       = {1},
  number       = {1},
  pages        = {3},
  year         = {2024},
  publisher    = {The Open Journal},
  url          = {https://doi.org/10.21105/jcon.00122},
  doi          = {10.21105/jcon.00122}
}

Acknowledgments

Huge thanks to all the contributors. In addition, we are grateful to Luis Benet, Benoît Legat and David P. Sanders for enlightening discussions during the preparation of this package.

During Summer 2022, this project was financially supported by Google through the Google Summer of Code program. During Summer 2019, this project was financially supported by Julia through the Julia Season of Contributions program.

If you use RangeEnclosures.jl, consider acknowledging or citing the Julia package that implements the specific solver that you are using.