thursday/thursday/candidates/random.py

36 lines
1.0 KiB
Python

from ..utilities import phi
import numpy as np
def another_random_cube(objective, size, budget, seed=None):
prng = np.random.default_rng(seed)
fopt = None
xopt = None
for i in range(budget):
x = prng.uniform(size=size)
fx = objective(x)
if fopt is None or xopt is None or fx < fopt:
fopt = fx
xopt = x
return fopt, xopt, budget
def quasirandom_cube(objective, size, budget):
# http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/
magic = phi(size)
alpha = np.zeros(size)
for i in range(size):
alpha[i] = pow(1 / magic, i + 1) % 1
xs = np.zeros((size, budget))
xs[0, :] = 0.5 # first point is always dead center
for i in range(1, budget):
xs[i] = (xs[i - 1] + alpha) % 1
best_so_far = None
for i, x in zip(range(budget), xs):
fx = objective(x)
if best_so_far is None or fx < best_so_far[0]:
best_so_far = (fx, x)
fopt, xopt = best_so_far
return fopt, xopt, budget