def significantly_mutate(self, v: float, arity: int): """Randomly drawn a normal value, and redraw until it's different after discretization by the quantiles 1/arity, 2/arity, ..., (arity-1)/arity. """ w = v while discretization.threshold_discretization( [w], arity) == discretization.threshold_discretization([v], arity): w = self.random_state.normal(0.0, 1.0) return w
def coordinatewise_mutation( self, parent: tp.ArrayLike, velocity: tp.ArrayLike, boolean_vector: tp.ArrayLike, arity: int ) -> tp.ArrayLike: """This is the anisotropic counterpart of the classical 1+1 mutations in discrete domains with tunable intensity: it is useful for anisotropic adaptivity.""" dimension = len(parent) boolean_vector = np.zeros(dimension, dtype=bool) while not any(boolean_vector): boolean_vector = self.random_state.rand(dimension) < (1.0 / dimension) discrete_data = discretization.threshold_discretization(parent, arity=arity) discrete_data = np.where( boolean_vector, discrete_data + self.random_state.choice([-1.0, 1.0], size=dimension) * velocity, discrete_data, ) return discretization.inverse_threshold_discretization(discrete_data)
def hardleadingones5(y: np.ndarray) -> float: """Leadingones, with a discretization by 5 with 4 thresholds (quantiles of Gaussian).""" return _leadingones(discretization.threshold_discretization(y, 5))
def hardjump5(y: np.ndarray) -> float: """Jump, with a discretization by 5 with 4 thresholds (quantiles of Gaussian).""" return _jump(discretization.threshold_discretization(y, 5))
def hardonemax5(y: np.ndarray) -> float: """Hardonemax, with a discretization by 5 with 4 thresholds (quantiles of Gaussian).""" return _onemax(discretization.threshold_discretization(y, 5))
def hardleadingones(y: np.ndarray) -> float: """Leading ones, with a discretization in 2 by threshold 0 (>0 or <0).""" return _leadingones(discretization.threshold_discretization(y))
def hardjump(y: np.ndarray) -> float: """Hardjump, with a discretization in 2 by threshold 0 (>0 or <0).""" return _jump(discretization.threshold_discretization(y))
def hardonemax(y: np.ndarray) -> float: """Onemax, with a discretization in 2 by threshold 0 (>0 or <0).""" return _onemax(discretization.threshold_discretization(y))