This repository contains source code and updates from the codes originally shared at https://www.mcs.anl.gov/~more/dfo/. Ways to contribute; extensions to other problems and languages; and additional resources will be updated here.
The codes in this repository are based on the supplemental information for the paper:
- [1] Benchmarking Derivative-Free Optimization Algorithms by J.J. Moré and S.M. Wild. SIAM J. Optimization, Vol. 20 (1), pp. 172-191, 2009. doi:10.1137/080724083
The following source files were used to define the benchmark problems in [1]. Fortran files are found in fortran/, Octave/Matlab files are found in m/, and Python files are found in py/.
calfun[Fortran] [Matlab/Octave] [Python]: Code for evaluating the 22 CUTEr problems considered (needs dfovec).dfovec[Fortran] [Matlab/Octave] [Python]: Code producing component vectors for the 22 CUTEr problems considered.dfoxs[Fortran] [Matlab/Octave] [Python]: Code specifying the standard starting points.dfo.datData file: Data file specifying the benchmark problem setPthrough the integer parameters(nprob, n, m, ns).
There are 10 different forms of objective functions included, all using the same underlying equations.
The smooth problem type is deterministic and of the form
f(x) = \sum_{i=1}^m F_i(x)^2
The nondiff problem type is deterministic and of the form
f(x) = \sum_{i=1}^m | F_i(x) |
There are three deterministic noise problems based on the smooth function f:
- the
abswildproblem type is of the formf(x) + phi(x), wherephi(x)is a deterministic oscillatory function - the
wild3problem type is of the formf(x) * (1 + 1e-3 * phi(x)), wherephi(x)is a deterministic oscillatory function - the
relwildproblem type is of the formf(x) * (1 + sigma * phi(x)), wherephi(x)is a deterministic oscillatory function, andsigmacontrols the noise level
Absolute stochastic noise versions are of the form
f(x) = \sum_{i=1}^m (F_i(x) + z)^2
and include stochastic additive noise controlled by sigma:
- the
absnormalproblem type has components ofzthat are independent, mean zero, variancesigma^2Gaussian random variables - the
absuniformproblem type has components ofzthat are independent uniform random variables, with mean zero and variancesigma^2
Relative stochastic noise versions are of the form
f(x) = \sum_{i=1}^m (F_i(x) * (1 + z))^2
and include stochastic multiplicative noise controlled by sigma (except in the noisy3 case):
- the
relnormalproblem type has components ofzthat are independent, mean zero, variancesigma^2Gaussian random variables - the
reluniformproblem type has components ofzthat are independent uniform random variables, with mean zero and variancesigma^2 - the
noisy3problem type has components ofzthat are independent, mean zero, variance (1e-3)^2 Gaussian random variables
For benchmarking purposes, derivative information is provided for the component functions F_i(x) defining each of the above problem types.
Jis the n-by-m Jacobian, withJ(j,i)denoting the derivative of theith equation with respect to thejth variableGis (or resembles, see below) a gradient of the objectivef
These are primarily determined from the jacobian routine available in [Matlab/Octave] and [Python].
Note:
- For the
smoothproblem type,G = 2 * J * fvecis the gradient - For
abswild,wild3, andrelwildproblem types,Gignores the oscillatory function - For the
nondiffproblem type,G = J * sign(fvec)is a subgradient - For
absnormalandabsuniformproblem types,Gis the gradient of the expected value off - For
relnormal,reluniform, andnoisy3problem types,Gis the gradient of the expected value off
We provide the following Octave/Matlab files for producing basic data and performance profiles from data:
data_profile[Matlab/Octave]: Code for plotting a basic data profile.perf_profile[Matlab/Octave]: Code for plotting a basic performance profile.
Updates and other languages will be reflected here. Please also see:
- Julia package for data and performance profiles
- Basic implementation of the benchmark in scipy
- Notably, the BenDFO version includes additional functional forms (via
probtypearguments) and provides derivative outputs
- Notably, the BenDFO version includes additional functional forms (via
Autodiff versions (using adimat) of the problem derivatives are also included.
A sample calling script for testing and to see these derivative capabilities is provided by testing/compare_matlab_and_python.m [Matlab/Octave].
Many of the original solvers considered in [1] have seen significant refinements. Links to the original solvers considered are at https://www.mcs.anl.gov/~more/dfo/shootout.html
Contributions are welcome in a variety of forms; please see CONTRIBUTING.
All code included in BenDFO is open source, with the particular form of license contained in the top-level subdirectories. If such a subdirectory does not contain a LICENSE file, then it is automatically licensed as described in the otherwise encompassing BenDFO LICENSE.
To seek support or report issues, e-mail:
poptus@mcs.anl.gov