bbob-noisy
bbobax.bbob_noisy
The bbob-noisy suite, f101-f130.
Thirty problems built from eight of the noiseless functions under the three
official noise models, at the paper's two severities. Transcribed from the
vendored bbobbenchmarks.py, whose _evalfull makes the composition explicit:
fadd = f_opt + boundaryhandling(x)
ftrue = raw(x - x_opt) # the core, without the function's own penalty
fval = noise(ftrue) + fadd
Two things in that are easy to get wrong, and neither is "the noiseless function plus noise":
- Boundary handling is uniform here. Every noisy problem uses
defaultboundaryhandling(x, 100), replacing whatever factor its noiseless counterpart used -- including the several that have no penalty at all. Noise makes the outside of the box exploitable in a way it is not without it. - Three of the bases are reparameterized. f116-f118 use an ellipsoid of
conditioning 1e4, not the noiseless f10's 1e6; f125-f127 scale
Griewank-Rosenbrock by 1 rather than 10. (The Gallagher variants look
reparameterized too --
highpeakcond = 1000 ** .5where f22 has1000-- but that is f21's own value in the reference's parameterization, which is the square root of the paper's. They are f21 unchanged.)
The suite is a table because it is a table: a base function, a noise model,
and a severity. Noisy composes those three, so nothing here restates a
function that already exists.
Noisy
Bases: BBOBProblem
A noiseless BBOB function under one of the three noise models.
A base class rather than a protocol, and a wrapper rather than 30 subclasses: the suite varies only in which function, which model and which severity, so those are constructor arguments and the composition is written once.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
problem
|
BBOBProblem
|
The noiseless function underneath, already at its dimension. |
required |
noise_model
|
NoiseModel
|
The model, at a pinned severity -- |
required |
**kwargs
|
Any
|
Passed to |
{}
|
Source code in src/bbobax/bbob_noisy.py
__init__(problem, noise_model, **kwargs)
Initialize the noisy problem.
bbob_noisy_suite(names=None, num_dims=10, **kwargs)
Build the bbob-noisy suite, f101-f130.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
names
|
list[str] | None
|
Which problems to include, as |
None
|
num_dims
|
int
|
The dimension every problem is built at. |
10
|
**kwargs
|
Any
|
Passed to every problem. |
{}
|
Returns:
| Type | Description |
|---|---|
dict[str, Noisy]
|
A mapping from |
Raises:
| Type | Description |
|---|---|
KeyError
|
If |