Source code for botorch.test_functions.michalewicz
#!/usr/bin/env python3
import math
import torch
from torch import Tensor
GLOBAL_MAXIMUM = 9.6601517
GLOBAL_MAXIMIZER = [
2.202906,
1.570796,
1.284992,
1.923058,
1.720470,
1.570796,
1.454414,
1.756087,
1.655717,
1.570796,
]
[docs]def neg_michalewicz(X: Tensor) -> Tensor:
r"""Negative 10-dim Michalewicz test function.
10-dim function (usually evaluated on hypercube [0, pi]^10):
`M(x) = sum_{i=1}^10 sin(x_i) (sin(i x_i^2 / pi)^20)`
Args:
X: A Tensor of size `10` or `k x 10` (`k` batch evaluations).
Returns:
`-M(X)`, the negative value of the Michalewicz function.
"""
batch = X.ndimension() > 1
X = X if batch else X.unsqueeze(0)
a = 1 + torch.arange(10, device=X.device, dtype=X.dtype)
result = torch.sum(torch.sin(X) * torch.sin(a * X ** 2 / math.pi) ** 20, dim=-1)
return result if batch else result.squeeze(0)