Source code for niapy.util.random
import math
import numpy as np
__all__ = ['levy_flight']
[docs]def levy_flight(rng, alpha=0.01, beta=1.5, size=None):
"""Compute levy flight.
Args:
alpha (float): Scaling factor.
beta (float): Stability parameter in range (0, 2).
size (Optional[Union[int, Iterable[int]]]: Output size.
rng (numpy.random.Generator): Random number generator.
Returns:
Union[float, numpy.ndarray]: Sample(s) from a truncated levy distribution.
"""
sigma = (math.gamma(1 + beta) * np.sin(np.pi * beta / 2) / (math.gamma((1 + beta) / 2) * beta * 2 ** ((beta - 1) / 2))) ** (1 / beta)
u = rng.normal(0, sigma, size)
v = rng.normal(0, 1, size)
sample = alpha * u / (np.abs(v) ** (1 / beta))
return sample