def test_generate(): sobol = Sobol(min_skip=1, max_skip=1) x = sobol.generate([ (0., 1.), ] * 3, 3) x = np.array(x) assert_array_equal(x[0, :], [0.5, 0.5, 0.5]) assert_array_equal(x[1, :], [0.75, 0.25, 0.75]) assert_array_equal(x[2, :], [0.25, 0.75, 0.25]) sobol.set_params(max_skip=2) assert sobol.max_skip == 2 assert isinstance(sobol, InitialPointGenerator)
def test_generate(): sobol = Sobol(randomize=False) x = sobol.generate([ (0., 1.), ] * 3, 4) x = np.array(x) assert_array_equal(x[0, :], [0., 0., 0.]) assert_array_equal(x[1, :], [0.5, 0.5, 0.5]) assert_array_equal(x[2, :], [0.75, 0.25, 0.75]) assert_array_equal(x[3, :], [0.25, 0.75, 0.25]) sobol.set_params(skip=2) assert sobol.skip == 2 assert isinstance(sobol, InitialPointGenerator)
def cook_initial_point_generator(generator, **kwargs): """Cook a default initial point generator. For the special generator called "random" the return value is None. Parameters ---------- generator : "lhs", "sobol", "halton", "hammersly", "grid", "random" \ or InitialPointGenerator instance" Should inherit from `skopt.sampler.InitialPointGenerator`. kwargs : dict Extra parameters provided to the generator at init time. """ if generator is None: generator = "random" elif isinstance(generator, str): generator = generator.lower() if generator not in [ "sobol", "halton", "hammersly", "lhs", "random", "grid", "maxpro", "maxpro-gd" ]: raise ValueError("Valid strings for the generator parameter " " are: 'sobol', 'lhs', 'halton', 'hammersly'," "'random', 'maxpro','maxpro-gd', or 'grid' not " "%s." % generator) elif not isinstance(generator, InitialPointGenerator): raise ValueError("generator has to be an InitialPointGenerator." "Got %s" % (str(type(generator)))) if isinstance(generator, str): if generator == "sobol": generator = Sobol() elif generator == "halton": generator = Halton() elif generator == "hammersly": generator = Hammersly() elif generator == "lhs": generator = Lhs() elif generator == "grid": generator = Grid() elif generator == "random": return None elif generator == "maxpro": generator = MaxPro(use_gradient=False) elif generator == "maxpro-gd": generator = MaxPro(use_gradient=True) generator.set_params(**kwargs) return generator
def test_sobol(): sobol = Sobol() x, seed = sobol._sobol(3, 0) assert_array_equal(x, [0., 0., 0.]) x, seed = sobol._sobol(3, 1) assert_array_equal(x, [0.5, 0.5, 0.5]) x, seed = sobol._sobol(3, 2) assert_array_equal(x, [0.75, 0.25, 0.75]) x, seed = sobol._sobol(3, 3) assert_array_equal(x, [0.25, 0.75, 0.25]) x, seed = sobol._sobol(3, 4) assert_array_equal(x, [0.375, 0.375, 0.625]) x, seed = sobol._sobol(3, 5) assert_array_equal(x, [0.875, 0.875, 0.125]) x, seed = sobol._sobol(3, 6) assert_array_equal(x, [0.625, 0.125, 0.375])
def _generate(self): skip = self.rng.randint(int(1e6)) try: from torch.quasirandom import SobolEngine sobol = SobolEngine(dimension=len(self.search_dims), scramble=True, seed=skip) X = sobol.draw(n=self.size).numpy() except ImportError: sobol = Sobol(min_skip=skip, max_skip=skip) X = sobol.generate(self.search_dims, self.size) return X
############################################################################# # Random sampling # --------------- x = space.rvs(n_samples) plot_searchspace(x, "Random samples") pdist_data = [] x_label = [] pdist_data.append(pdist(x).flatten()) x_label.append("random") ############################################################################# # Sobol' # ------ sobol = Sobol() x = sobol.generate(space.dimensions, n_samples) plot_searchspace(x, "Sobol'") pdist_data.append(pdist(x).flatten()) x_label.append("sobol'") ############################################################################# # Classic Latin hypercube sampling # -------------------------------- lhs = Lhs(lhs_type="classic", criterion=None) x = lhs.generate(space.dimensions, n_samples) plot_searchspace(x, 'classic LHS') pdist_data.append(pdist(x).flatten()) x_label.append("lhs")