Source code for moptipy.examples.bitstrings.onemax

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

1. Heinz Mühlenbein. How Genetic Algorithms Really Work: Mutation and
   Hillclimbing. In Reinhard Männer and Bernard Manderick, editors,
   *Proceedings of Parallel Problem Solving from Nature 2 (PPSN-II),*
   September 28-30, 1992, Brussels, Belgium, pages 15-26. Elsevier.
   https://www.researchgate.net/publication/220702092
2. Stefan Droste, Thomas Jansen, and Ingo Wegener. Upper and Lower Bounds for
   Randomized Search Heuristics in Black-Box Optimization. *Theory of
   Computing Systems.* 39(4):525-544. July 2006.
   doi: https://doi.org/10.1007/s00224-004-1177-z
"""

import numba  # type: ignore
import numpy as np

from moptipy.examples.bitstrings.bitstring_problem import BitStringProblem


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