示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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])
示例#5
0
 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")