benchmarkfcns.zimmerman

benchmarkfcns.zimmerman(arg0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]', 'flags.c_contiguous']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Computes the value of the Zimmerman benchmark function. SCORES = zimmerman(X) computes the value of the Zimmerman function at point X. zimmerman accepts a matrix of size M-by-2 and returns a vector SCORES of size M-by-1 in which each row contains the function value for the corresponding row of X. Properties:

  • Global minimum: 0

  • Location of global minimum: (7, 2)

  • Number of dimensions: 2

  • Recommended domain: [0, 100]^2

  • Number of local minima: dependent on the penalty factor Z_p, but can have

    several “pseudo-minima” along the constraint boundaries.

  • Number of global minima: 1

  • Convexity: non-convex

  • Separability: non-separable

  • Modality: multimodal

  • Symmetry: non-symmetric

  • Differentiable: Yes (except potentially at the constraint boundaries, where the

    penalty term can introduce non-differentiability, but the function is usually well-behaved in practice)

Mathematical Definition

\[f(x,y) = \max([zh_1(x, y), zp(zh_2(x, y)) \text{sign}(zh_2(x, y)), zp(zh_3(x, y)) \text{sign}(zh_3(x, y)), zp(-x) \cdot \text{sign}(x), zp(-y) \cdot \text{sign}(y) ] )\]

\ zh_1(x, y) = 9 - x - y \ zh_2(x, y) = (x - 3)^2 + (y - 2)^2 - 16 \ zh_3(x, y) = xy - 14 \ zp(t) = 10000 (1 + t)

Visualization