Source code for botorch.test_functions.eggholder
#!/usr/bin/env python3
import torch
from torch import Tensor
GLOBAL_MAXIMUM = 959.6407
GLOBAL_MAXIMIZER = [512, 404.2319]
[docs]def neg_eggholder(X: Tensor) -> Tensor:
r"""Negative Eggholder test function.
Two-dimensional function (usually evaluated on `[-512, 512]^2`):
`E(x) = (x_2 + 47) sin(R1(x)) - x_1 * sin(R2(x))`
`R1(x) = sqrt(|x_2 + x_1 / 2 + 47|)`
`R2(x) = sqrt(|x_1 - (x_2 + 47)|)`
Args:
X: A Tensor of size `2` or `k x 2` (`k` batch evaluations).
Returns:
`-E(X)`, the negative value of the Eggholder function.
"""
batch = X.ndimension() > 1
X = X if batch else X.unsqueeze(0)
a = (X[:, 1] + X[:, 0] / 2 + 47).abs().sqrt()
b = (X[:, 0] - (X[:, 1] + 47)).abs().sqrt()
result = (X[:, 1] + 47) * torch.sin(a) + X[:, 0] * torch.sin(b)
return result if batch else result.squeeze(0)