Tutorial Learner2DΒΆ

Note

Because this documentation consists of static html, the live_plot and live_info widget is not live. Download the notebook in order to see the real behaviour.

See also

The complete source code of this tutorial can be found in tutorial.Learner2D.ipynb

Besides 1D functions, we can also learn 2D functions: \(\ f: ℝ^2 β†’ ℝ\).

def ring(xy, wait=True):
    import numpy as np
    from time import sleep
    from random import random
    if wait:
        sleep(random()/10)
    x, y = xy
    a = 0.2
    return x + np.exp(-(x**2 + y**2 - 0.75**2)**2/a**4)

learner = adaptive.Learner2D(ring, bounds=[(-1, 1), (-1, 1)])
runner = adaptive.Runner(learner, goal=lambda l: l.loss() < 0.01)
runner.live_info()
def plot(learner):
    plot = learner.plot(tri_alpha=0.2)
    return (plot.Image + plot.EdgePaths.I + plot).cols(2)

runner.live_plot(plotter=plot, update_interval=0.1)
%%opts EdgePaths (color='w')

import itertools

# Create a learner and add data on homogeneous grid, so that we can plot it
learner2 = adaptive.Learner2D(ring, bounds=learner.bounds)
n = int(learner.npoints**0.5)
xs, ys = [np.linspace(*bounds, n) for bounds in learner.bounds]
xys = list(itertools.product(xs, ys))
learner2.tell_many(xys, map(partial(ring, wait=False), xys))

(learner2.plot(n).relabel('Homogeneous grid') + learner.plot().relabel('With adaptive') +
 learner2.plot(n, tri_alpha=0.4) + learner.plot(tri_alpha=0.4)).cols(2)