def benchmark_ask_tell_100k(benchmark, fake_archive_fixture):
    archive, x0 = fake_archive_fixture
    batch_size = 32
    emitter = IsoLineEmitter(archive, x0, batch_size=batch_size)
    n = 100_000

    np.random.seed(0)

    objective_values = np.random.rand(batch_size)
    behavior_values = np.random.rand(batch_size, 2)

    # Let numba compile.
    temp_sol = emitter.ask()
    emitter.tell(temp_sol, objective_values, behavior_values)

    obj_vals = np.random.rand(n, batch_size)
    behavior_vals = np.random.rand(n, batch_size, 2)

    def ask_and_tell():
        for i in range(n):
            solutions = emitter.ask()
            objective_values = obj_vals[i]
            behavior_values = behavior_vals[i]
            emitter.tell(solutions, objective_values, behavior_values)

    benchmark(ask_and_tell)
Esempio n. 2
0
def test_degenerate_gauss_emits_parent(archive_fixture):
    archive, x0 = archive_fixture
    emitter = IsoLineEmitter(archive, x0, iso_sigma=0, batch_size=2)
    archive.add(x0, 1, np.array([0, 0]))

    solutions = emitter.ask()

    assert (solutions == np.expand_dims(x0, axis=0)).all()
Esempio n. 3
0
def test_lower_bounds_enforced(archive_fixture):
    archive, _ = archive_fixture
    emitter = IsoLineEmitter(archive, [-2, -2],
                             iso_sigma=0,
                             line_sigma=0,
                             bounds=[(-1, 1)] * 2)
    sols = emitter.ask()
    assert np.all(sols >= -1)
Esempio n. 4
0
def test_degenerate_gauss_emits_along_line(archive_fixture):
    archive, x0 = archive_fixture
    emitter = IsoLineEmitter(archive, x0, iso_sigma=0, batch_size=100)
    archive.add(np.array([0, 0, 0, 0]), 1, np.array([0, 0]))
    archive.add(np.array([10, 0, 0, 0]), 1, np.array([1, 1]))

    solutions = emitter.ask()

    # All solutions should either come from a degenerate distribution around
    # [0,0,0,0], a degenerate distribution around [10,0,0,0], or the "iso line
    # distribution" between [0,0,0,0] and [10,0,0,0] (i.e. a line between those
    # two points). By having a large batch size, we should be able to cover all
    # cases. In any case, this assertion should hold for all solutions
    # generated.
    assert (solutions[:, 1:] == 0).all()
Esempio n. 5
0
def test_degenerate_gauss_emits_x0(archive_fixture):
    archive, x0 = archive_fixture
    emitter = IsoLineEmitter(archive, x0, iso_sigma=0, batch_size=2)
    solutions = emitter.ask()
    assert (solutions == np.expand_dims(x0, axis=0)).all()