Source code for moptipy.examples.bitstrings.zeromax

"""
An objective function counting the number of zeros in a bit string.

This problem exists mainly for testing purposes as counterpart of
:class:`~moptipy.examples.bitstrings.onemax.OneMax`.
"""

import numba  # type: ignore
import numpy as np

from moptipy.examples.bitstrings.bitstring_problem import BitStringProblem


[docs] @numba.njit(nogil=True, cache=True) def zeromax(x: np.ndarray) -> int: """ Get the length of a string minus the number of zeros in it. :param x: the np array :return: the length of the string minus the number of zeros, i.e., the number of ones >>> print(zeromax(np.array([True, True, False, False, False]))) 2 >>> print(zeromax(np.array([True, False, True, False, False]))) 2 >>> print(zeromax(np.array([False, True, True, False, False]))) 2 >>> print(zeromax(np.array([True, True, True, True, True]))) 5 >>> print(zeromax(np.array([False, True, True, True, True]))) 4 >>> print(zeromax(np.array([False, False, False, False, False]))) 0 """ return int(x.sum())
[docs] class ZeroMax(BitStringProblem): """Maximize the number of zeros in a bit string.""" def __init__(self, n: int) -> None: """ Initialize the zeromax objective function. :param n: the dimension of the problem >>> print(ZeroMax(2).n) 2 >>> print(ZeroMax(4).evaluate(np.array([True, True, False, True]))) 3 """ super().__init__(n) self.evaluate = zeromax # type: ignore def __str__(self) -> str: """ Get the name of the zeromax objective function. :return: `zeromax_` + length of string >>> print(ZeroMax(13)) zeromax_13 """ return f"zeromax_{self.n}"