Skip to content
johannahaffnerPublic

About

Functionally pure definitions of optimisation problems extracted from Standard Input Format (SIF).

Resources

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Repository files navigation

sif2jax

Progress

Functionally pure definitions of optimisation problems extracted from Standard Input Format (SIF), written in JAX.

This is for you if you write optimisation software in JAX (or Python) and want to stress-test it on the CUTEst set of benchmark problems. Features include

  • all JAX everything: no Fortran backends
  • full support for autodiff, batching, and JIT compilation
  • more JAX benefits: run on CPU/GPU/TPU
  • clear and human-readable problem definitions, no decoder required
  • lean API - no specific problem interface required

Installation

pip install sif2jax

Requires Python 3.11+ and JAX 0.7.2+.

Getting started

We recommend running the benchmarks with pytest-benchmark - use the familiar testing infrastructure to run your benchmarks:

import sif2jax

benchmark_problems = sif2jax.bounded_minimisation_problems

@pytest.mark.benchmark
@pytest.mark.parametrize("problem", sif2jax.unconstrained_minimisation_problems)
def test_lbfgs(benchmark, problem):
    ...

Alternatively, you can run any arbitrary benchmark problem by passing an index, or directly import a problem by name

import sif2jax

problem = sif2jax.problems[42]
another_problem = sif2jax.cutest.get_problem("ROSENBR")

The problems all have the following methods:

  • objective - a callable with signature f(y, args), where y is the optimisation variable
  • y0 - returns the initial guess provided by the SIF file (as a property)
  • args - returns any arguments (frequently None, this is also a property

bounded problems also have a bounds method, and constrained problems additionally include a constraint method.

About

Functionally pure definitions of optimisation problems extracted from Standard Input Format (SIF).

Resources

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages