34 lines
850 B
Python
34 lines
850 B
Python
"""Benchmark functions used in lab 5."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import numpy as np
|
|
from numpy.typing import NDArray
|
|
|
|
|
|
Array = NDArray[np.float64]
|
|
|
|
|
|
def axis_parallel_hyperellipsoid(x: Array) -> float:
|
|
"""Axis-parallel hyper-ellipsoid benchmark function.
|
|
|
|
Parameters
|
|
----------
|
|
x:
|
|
Point in :math:`\mathbb{R}^n`.
|
|
|
|
Returns
|
|
-------
|
|
float
|
|
The value of the hyper-ellipsoid function.
|
|
"""
|
|
indices = np.arange(1, x.shape[0] + 1, dtype=np.float64)
|
|
return float(np.sum(indices * np.square(x)))
|
|
|
|
|
|
def default_bounds(dimension: int, lower: float = -5.12, upper: float = 5.12) -> tuple[Array, Array]:
|
|
"""Construct symmetric bounds for each dimension."""
|
|
x_min = np.full(dimension, lower, dtype=np.float64)
|
|
x_max = np.full(dimension, upper, dtype=np.float64)
|
|
return x_min, x_max
|